Merge mozilla-inbound to mozilla-central r=merge a=merge
authorDorel Luca <dluca@mozilla.com>
Tue, 23 Jan 2018 12:02:17 +0200
changeset 400345 e2bb11b88bd45bdb2e055042e1624b74d414e73c
parent 400298 11e1df0e0a18cf8b5261621feb81f5f137fcdfb9 (current diff)
parent 400344 e331a3b9fae22ef2bfd25e60b265fa2bd63b7bd5 (diff)
child 400351 4eeecbc749f7585e49e261b7a76b9cca2193cb42
child 400395 95b09e6e9613435bd1934a274cbeeefe23e3bab1
push id33301
push userdluca@mozilla.com
push dateTue, 23 Jan 2018 10:02:48 +0000
treeherdermozilla-central@e2bb11b88bd4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge, merge
milestone60.0a1
first release with
nightly linux32
e2bb11b88bd4 / 60.0a1 / 20180123102017 / files
nightly linux64
e2bb11b88bd4 / 60.0a1 / 20180123102017 / files
nightly mac
e2bb11b88bd4 / 60.0a1 / 20180123102017 / files
nightly win32
e2bb11b88bd4 / 60.0a1 / 20180123102017 / files
nightly win64
e2bb11b88bd4 / 60.0a1 / 20180123102017 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-inbound to mozilla-central r=merge a=merge
testing/mozharness/configs/builds/releng_base_mac_64_builds.py
testing/mozharness/configs/builds/releng_base_windows_32_builds.py
testing/mozharness/configs/builds/releng_base_windows_64_builds.py
--- a/browser/components/enterprisepolicies/Policies.jsm
+++ b/browser/components/enterprisepolicies/Policies.jsm
@@ -30,9 +30,51 @@ this.EXPORTED_SYMBOLS = ["Policies"];
 this.Policies = {
   "block_about_config": {
     onBeforeUIStartup(manager, param) {
       if (param == true) {
         manager.disallowFeature("about:config", true);
       }
     }
   },
+
+  "dont_check_default_browser": {
+    onBeforeUIStartup(manager, param) {
+      setAndLockPref("browser.shell.checkDefaultBrowser", false);
+    }
+  }
 };
+
+/*
+ * ====================
+ * = HELPER FUNCTIONS =
+ * ====================
+ *
+ * The functions below are helpers to be used by several policies.
+ */
+
+function setAndLockPref(prefName, prefValue) {
+  if (Services.prefs.prefIsLocked(prefName)) {
+    Services.prefs.unlockPref(prefName);
+  }
+
+  let defaults = Services.prefs.getDefaultBranch("");
+
+  switch (typeof(prefValue)) {
+    case "boolean":
+      defaults.setBoolPref(prefName, prefValue);
+      break;
+
+    case "number":
+      if (!Number.isInteger(prefValue)) {
+        throw new Error(`Non-integer value for ${prefName}`);
+      }
+
+      defaults.setIntPref(prefName, prefValue);
+      break;
+
+    case "string":
+      defaults.setStringPref(prefName, prefValue);
+      break;
+  }
+
+  Services.prefs.lockPref(prefName);
+}
--- a/browser/components/enterprisepolicies/schemas/policies-schema.json
+++ b/browser/components/enterprisepolicies/schemas/policies-schema.json
@@ -3,11 +3,19 @@
   "type": "object",
   "properties": {
      "block_about_config": {
       "description": "Blocks access to the about:config page.",
       "first_available": "60.0",
 
       "type": "boolean",
       "enum": [true]
+    },
+
+    "dont_check_default_browser": {
+      "description": "Don't check for the default browser on startup.",
+      "first_available": "60.0",
+
+      "type": "boolean",
+      "enum": [true]
     }
   }
 }
--- a/browser/components/enterprisepolicies/tests/browser/browser.ini
+++ b/browser/components/enterprisepolicies/tests/browser/browser.ini
@@ -1,11 +1,15 @@
 [DEFAULT]
 prefs =
   browser.policies.enabled=true
 support-files =
   head.js
+  config_dont_check_default_browser.json
+  config_setAndLockPref.json
   config_simple_policies.json
   config_broken_json.json
 
 [browser_policies_broken_json.js]
+[browser_policies_setAndLockPref_API.js]
 [browser_policies_simple_policies.js]
 [browser_policies_validate_and_parse_API.js]
+[browser_policy_default_browser_check.js]
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policies_setAndLockPref_API.js
@@ -0,0 +1,127 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+add_task(async function test_clean_slate() {
+  await startWithCleanSlate();
+});
+
+let { Policies, setAndLockPref } = Cu.import("resource:///modules/policies/Policies.jsm", {});
+
+function checkPref(prefName, expectedValue) {
+  let prefType, prefValue;
+  switch (typeof(expectedValue)) {
+    case "boolean":
+      prefType = Services.prefs.PREF_BOOL;
+      prefValue = Services.prefs.getBoolPref(prefName);
+      break;
+
+    case "number":
+      prefType = Services.prefs.PREF_INT;
+      prefValue = Services.prefs.getIntPref(prefName);
+      break;
+
+    case "string":
+      prefType = Services.prefs.PREF_STRING;
+      prefValue = Services.prefs.getStringPref(prefName);
+      break;
+  }
+
+  ok(Services.prefs.prefIsLocked(prefName), `Pref ${prefName} is correctly locked`);
+  is(Services.prefs.getPrefType(prefName), prefType, `Pref ${prefName} has the correct type`);
+  is(prefValue, expectedValue, `Pref ${prefName} has the correct value`);
+}
+
+add_task(async function test_API_directly() {
+  setAndLockPref("policies.test.boolPref", true);
+  checkPref("policies.test.boolPref", true);
+
+  // Check that a previously-locked pref can be changed
+  // (it will be unlocked first).
+  setAndLockPref("policies.test.boolPref", false);
+  checkPref("policies.test.boolPref", false);
+
+  setAndLockPref("policies.test.intPref", 0);
+  checkPref("policies.test.intPref", 0);
+
+  setAndLockPref("policies.test.stringPref", "policies test");
+  checkPref("policies.test.stringPref", "policies test");
+
+  // Test that user values do not override the prefs, and the get*Pref call
+  // still return the value set through setAndLockPref
+  Services.prefs.setBoolPref("policies.test.boolPref", true);
+  checkPref("policies.test.boolPref", false);
+
+  Services.prefs.setIntPref("policies.test.intPref", 10);
+  checkPref("policies.test.intPref", 0);
+
+  Services.prefs.setStringPref("policies.test.stringPref", "policies test");
+  checkPref("policies.test.stringPref", "policies test");
+
+  try {
+    // Test that a non-integer value is correctly rejected, even though
+    // typeof(val) == "number"
+    setAndLockPref("policies.test.intPref", 1.5);
+    ok(false, "Integer value should be rejected");
+  } catch (ex) {
+    ok(true, "Integer value was rejected");
+  }
+});
+
+add_task(async function test_API_through_policies() {
+  // Ensure that the values received by the policies have the correct
+  // type to make sure things are properly working.
+
+  // Implement functions to handle the three simple policies
+  // that will be added to the schema.
+  Policies.bool_policy = {
+    onBeforeUIStartup(manager, param) {
+      setAndLockPref("policies.test2.boolPref", param);
+    }
+  };
+
+  Policies.int_policy = {
+    onBeforeUIStartup(manager, param) {
+      setAndLockPref("policies.test2.intPref", param);
+    }
+  };
+
+  Policies.string_policy = {
+    onBeforeUIStartup(manager, param) {
+      setAndLockPref("policies.test2.stringPref", param);
+    }
+  };
+
+  await setupPolicyEngineWithJson(
+    "config_setAndLockPref.json",
+    /* custom schema */
+    {
+      properties: {
+        "bool_policy": {
+          "type": "boolean"
+        },
+
+        "int_policy": {
+          "type": "integer"
+        },
+
+        "string_policy": {
+          "type": "string"
+        }
+      }
+    }
+  );
+
+  is(Services.policies.status, Ci.nsIEnterprisePolicies.ACTIVE, "Engine is active");
+
+  // The expected values come from config_setAndLockPref.json
+  checkPref("policies.test2.boolPref", true);
+  checkPref("policies.test2.intPref", 42);
+  checkPref("policies.test2.stringPref", "policies test 2");
+
+  delete Policies.bool_policy;
+  delete Policies.int_policy;
+  delete Policies.string_policy;
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_default_browser_check.js
@@ -0,0 +1,28 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+const { ShellService } = Cu.import("resource:///modules/ShellService.jsm", {});
+
+add_task(async function test_default_browser_check() {
+  ShellService._checkedThisSession = false;
+  // On a normal profile, the default is true. However, this gets set to false on the
+  // testing profile. Let's start with true for a sanity check.
+
+  ShellService.shouldCheckDefaultBrowser = true;
+  is(ShellService.shouldCheckDefaultBrowser, true, "Sanity check");
+
+  await setupPolicyEngineWithJson("config_dont_check_default_browser.json");
+
+  is(ShellService.shouldCheckDefaultBrowser, false, "Policy changed it to not check");
+
+  // Try to change it to true and check that it doesn't take effect
+  ShellService.shouldCheckDefaultBrowser = true;
+
+  is(ShellService.shouldCheckDefaultBrowser, false, "Policy is enforced");
+
+  // Unlock the pref because if it stays locked, and this test runs twice in a row,
+  // the first sanity check will fail.
+  Services.prefs.unlockPref("browser.shell.checkDefaultBrowser");
+});
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/browser/config_dont_check_default_browser.json
@@ -0,0 +1,5 @@
+{
+  "policies": {
+    "dont_check_default_browser": true
+  }
+}
new file mode 100644
--- /dev/null
+++ b/browser/components/enterprisepolicies/tests/browser/config_setAndLockPref.json
@@ -0,0 +1,7 @@
+{
+  "policies": {
+    "bool_policy": true,
+    "int_policy": 42,
+    "string_policy": "policies test 2"
+  }
+}
--- a/browser/components/migration/.eslintrc.js
+++ b/browser/components/migration/.eslintrc.js
@@ -1,14 +1,14 @@
 "use strict";
 
 module.exports = {
   "rules": {
     "block-scoped-var": "error",
-    "comma-dangle": "off",
+    "comma-dangle": ["error", "always-multiline"],
     "complexity": ["error", {"max": 21}],
     "indent-legacy": ["error", 2, {"SwitchCase": 1, "ArrayExpression": "first", "ObjectExpression": "first"}],
     "max-nested-callbacks": ["error", 3],
     "new-parens": "error",
     "no-extend-native": "error",
     "no-fallthrough": ["error", { "commentPattern": ".*[Ii]ntentional(?:ly)?\\s+fall(?:ing)?[\\s-]*through.*" }],
     "no-multi-str": "error",
     "no-return-assign": "error",
--- a/browser/components/migration/360seProfileMigrator.js
+++ b/browser/components/migration/360seProfileMigrator.js
@@ -111,17 +111,17 @@ Bookmarks.prototype = {
   },
 
   migrate(aCallback) {
     return (async () => {
       let folderMap = new Map();
       let toolbarBMs = [];
 
       let connection = await Sqlite.openConnection({
-        path: this._file.path
+        path: this._file.path,
       });
 
       try {
         let rows = await connection.execute(
           `WITH RECURSIVE
            bookmark(id, parent_id, is_folder, title, url, pos) AS (
              VALUES(0, -1, 1, '', '', 0)
              UNION
@@ -140,30 +140,30 @@ Bookmarks.prototype = {
           let url = row.getResultByName("url");
 
           let bmToInsert;
 
           if (is_folder) {
             bmToInsert = {
               children: [],
               title,
-              type: PlacesUtils.bookmarks.TYPE_FOLDER
+              type: PlacesUtils.bookmarks.TYPE_FOLDER,
             };
             folderMap.set(id, bmToInsert);
           } else {
             try {
               new URL(url);
             } catch (ex) {
               Cu.reportError(`Ignoring ${url} when importing from 360se because of exception: ${ex}`);
               continue;
             }
 
             bmToInsert = {
               title,
-              url
+              url,
             };
           }
 
           if (folderMap.has(parent_id)) {
             folderMap.get(parent_id).children.push(bmToInsert);
           } else if (parent_id === 0) {
             toolbarBMs.push(bmToInsert);
           }
@@ -177,31 +177,31 @@ Bookmarks.prototype = {
         if (!MigrationUtils.isStartupMigration) {
           parentGuid =
             await MigrationUtils.createImportedBookmarksFolder("360se", parentGuid);
         }
         await MigrationUtils.insertManyBookmarksWrapper(toolbarBMs, parentGuid);
       }
     })().then(() => aCallback(true),
                         e => { Cu.reportError(e); aCallback(false); });
-  }
+  },
 };
 
 function Qihoo360seProfileMigrator() {
   let paths = [
     // for v6 and above
     {
       users: ["360se6", "apps", "data", "users"],
-      defaultUser: "default"
+      defaultUser: "default",
     },
     // for earlier versions
     {
       users: ["360se"],
-      defaultUser: "data"
-    }
+      defaultUser: "data",
+    },
   ];
   this._usersDir = null;
   this._defaultUserPath = null;
   for (let path of paths) {
     let usersDir = FileUtils.getDir("AppData", path.users, false);
     if (usersDir.exists()) {
       this._usersDir = usersDir;
       this._defaultUserPath = path.defaultUser;
@@ -282,33 +282,33 @@ Object.defineProperty(Qihoo360seProfileM
       });
     }
 
     this.__sourceProfiles = profiles.filter(profile => {
       let resources = this.getResources(profile);
       return resources && resources.length > 0;
     });
     return this.__sourceProfiles;
-  }
+  },
 });
 
 Qihoo360seProfileMigrator.prototype._getIdFromConfig = function(aConfig) {
   return aConfig.UserMd5 || getHash(aConfig.email);
 };
 
 Qihoo360seProfileMigrator.prototype.getResources = function(aProfile) {
   let profileFolder = this._usersDir.clone();
   profileFolder.append(aProfile.id);
 
   if (!profileFolder.exists()) {
     return [];
   }
 
   let resources = [
-    new Bookmarks(profileFolder)
+    new Bookmarks(profileFolder),
   ];
   return resources.filter(r => r.exists);
 };
 
 Qihoo360seProfileMigrator.prototype.getLastUsedDate = function() {
   let bookmarksPaths = this.sourceProfiles.map(({id}) => {
     return OS.Path.join(this._usersDir.path, id, kBookmarksFileName);
   });
--- a/browser/components/migration/ChromeProfileMigrator.js
+++ b/browser/components/migration/ChromeProfileMigrator.js
@@ -11,17 +11,17 @@ const { classes: Cc, interfaces: Ci, res
 const FILE_INPUT_STREAM_CID = "@mozilla.org/network/file-input-stream;1";
 
 const S100NS_FROM1601TO1970 = 0x19DB1DED53E8000;
 const S100NS_PER_MS = 10;
 
 const AUTH_TYPE = {
   SCHEME_HTML: 0,
   SCHEME_BASIC: 1,
-  SCHEME_DIGEST: 2
+  SCHEME_DIGEST: 2,
 };
 
 Cu.import("resource://gre/modules/AppConstants.jsm");
 Cu.import("resource://gre/modules/FileUtils.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
 Cu.import("resource://gre/modules/osfile.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
@@ -173,17 +173,17 @@ Object.defineProperty(ChromeProfileMigra
     }
 
     // Only list profiles from which any data can be imported
     this.__sourceProfiles = profiles.filter(function(profile) {
       let resources = this.getResources(profile);
       return resources && resources.length > 0;
     }, this);
     return this.__sourceProfiles;
-  }
+  },
 });
 
 Object.defineProperty(ChromeProfileMigrator.prototype, "sourceHomePageURL", {
   get: function Chrome_sourceHomePageURL() {
     let prefsFile = this._chromeUserDataFolder.clone();
     prefsFile.append("Preferences");
     if (prefsFile.exists()) {
       // XXX reading and parsing JSON is synchronous.
@@ -195,17 +195,17 @@ Object.defineProperty(ChromeProfileMigra
           NetUtil.readInputStreamToString(fstream, fstream.available(),
                                           { charset: "UTF-8" })
             ).homepage;
       } catch (e) {
         Cu.reportError("Error parsing Chrome's preferences file: " + e);
       }
     }
     return "";
-  }
+  },
 });
 
 Object.defineProperty(ChromeProfileMigrator.prototype, "sourceLocked", {
   get: function Chrome_sourceLocked() {
     // There is an exclusive lock on some SQLite databases. Assume they are locked for now.
     return true;
   },
 });
@@ -252,17 +252,17 @@ function GetBookmarksResource(aProfileFo
           }
           await MigrationUtils.insertManyBookmarksWrapper(bookmarks, parentGuid);
         }
         if (gotErrors) {
           throw new Error("The migration included errors.");
         }
       })().then(() => aCallback(true),
               () => aCallback(false));
-    }
+    },
   };
 }
 
 function GetHistoryResource(aProfileFolder) {
   let historyFile = aProfileFolder.clone();
   historyFile.append("History");
   if (!historyFile.exists())
     return null;
@@ -315,26 +315,26 @@ function GetHistoryResource(aProfileFold
               ignoreErrors: true,
               ignoreResults: true,
               handleCompletion(updatedCount) {
                 if (updatedCount > 0) {
                   resolve();
                 } else {
                   reject(new Error("Couldn't add visits"));
                 }
-              }
+              },
             });
           });
         }
       })().then(() => { aCallback(true); },
               ex => {
                 Cu.reportError(ex);
                 aCallback(false);
               });
-    }
+    },
   };
 }
 
 function GetCookiesResource(aProfileFolder) {
   let cookiesFile = aProfileFolder.clone();
   cookiesFile.append("Cookies");
   if (!cookiesFile.exists())
     return null;
--- a/browser/components/migration/ESEDBReader.jsm
+++ b/browser/components/migration/ESEDBReader.jsm
@@ -28,27 +28,27 @@ let gESEInstanceCounter = 0;
 
 // We limit the length of strings that we read from databases.
 const MAX_STR_LENGTH = 64 * 1024;
 
 // Kernel-related types:
 const KERNEL = {};
 KERNEL.FILETIME = new ctypes.StructType("FILETIME", [
   {dwLowDateTime: ctypes.uint32_t},
-  {dwHighDateTime: ctypes.uint32_t}
+  {dwHighDateTime: ctypes.uint32_t},
 ]);
 KERNEL.SYSTEMTIME = new ctypes.StructType("SYSTEMTIME", [
   {wYear: ctypes.uint16_t},
   {wMonth: ctypes.uint16_t},
   {wDayOfWeek: ctypes.uint16_t},
   {wDay: ctypes.uint16_t},
   {wHour: ctypes.uint16_t},
   {wMinute: ctypes.uint16_t},
   {wSecond: ctypes.uint16_t},
-  {wMilliseconds: ctypes.uint16_t}
+  {wMilliseconds: ctypes.uint16_t},
 ]);
 
 // DB column types, cribbed from the ESE header
 var COLUMN_TYPES = {
   JET_coltypBit:           1, /* True, False, or NULL */
   JET_coltypUnsignedByte:  2, /* 1-byte integer, unsigned */
   JET_coltypShort:         3, /* 2-byte integer, signed */
   JET_coltypLong:          4, /* 4-byte integer, signed */
@@ -92,17 +92,17 @@ ESE.JET_COLUMNDEF = new ctypes.StructTyp
   {"cbStruct": ctypes.unsigned_long },
   {"columnid": ESE.JET_COLUMNID },
   {"coltyp": ESE.JET_COLTYP },
   {"wCountry": ctypes.unsigned_short }, // sepcifies the country/region for the column definition
   {"langid": ctypes.unsigned_short },
   {"cp": ctypes.unsigned_short },
   {"wCollate": ctypes.unsigned_short }, /* Must be 0 */
   {"cbMax": ctypes.unsigned_long },
-  {"grbit": ESE.JET_GRBIT }
+  {"grbit": ESE.JET_GRBIT },
 ]);
 
 // Track open databases
 let gOpenDBs = new Map();
 
 // Track open libraries
 let gLibs = {};
 this.ESE = ESE; // Required for tests.
--- a/browser/components/migration/EdgeProfileMigrator.js
+++ b/browser/components/migration/EdgeProfileMigrator.js
@@ -126,31 +126,31 @@ EdgeTypedURLMigrator.prototype = {
 
       // Note that the time will be in microseconds (PRTime),
       // and Date.now() returns milliseconds. Places expects PRTime,
       // so we multiply the Date.now return value to make up the difference.
       let visitDate = time || (Date.now() * 1000);
       places.push({
         uri,
         visits: [{ transitionType: Ci.nsINavHistoryService.TRANSITION_TYPED,
-                   visitDate}]
+                   visitDate}],
       });
     }
 
     if (places.length == 0) {
       aCallback(typedURLs.size == 0);
       return;
     }
 
     MigrationUtils.insertVisitsWrapper(places, {
       ignoreErrors: true,
       ignoreResults: true,
       handleCompletion(updatedCount) {
         aCallback(updatedCount > 0);
-      }
+      },
     });
   },
 };
 
 function EdgeReadingListMigrator(dbOverride) {
   this.dbOverride = dbOverride;
 }
 
@@ -176,17 +176,17 @@ EdgeReadingListMigrator.prototype = {
   async _migrateReadingList(parentGuid) {
     if (await ESEDBReader.dbLocked(this.db)) {
       throw new Error("Edge seems to be running - its database is locked.");
     }
     let columnFn = db => {
       let columns = [
         {name: "URL", type: "string"},
         {name: "Title", type: "string"},
-        {name: "AddedDate", type: "date"}
+        {name: "AddedDate", type: "date"},
       ];
 
       // Later versions have an IsDeleted column:
       let isDeletedColumn = db.checkForColumn("ReadingList", "IsDeleted");
       if (isDeletedColumn && isDeletedColumn.dbType == ESEDBReader.COLUMN_TYPES.JET_coltypBit) {
         columns.push({name: "IsDeleted", type: "boolean"});
       }
       return columns;
@@ -279,17 +279,17 @@ EdgeBookmarksMigrator.prototype = {
     let folderMap = new Map();
     let columns = [
       {name: "URL", type: "string"},
       {name: "Title", type: "string"},
       {name: "DateUpdated", type: "date"},
       {name: "IsFolder", type: "boolean"},
       {name: "IsDeleted", type: "boolean"},
       {name: "ParentId", type: "guid"},
-      {name: "ItemId", type: "guid"}
+      {name: "ItemId", type: "guid"},
     ];
     let filterFn = row => {
       if (row.IsDeleted) {
         return false;
       }
       if (row.IsFolder) {
         folderMap.set(row.ItemId, row);
       }
--- a/browser/components/migration/FirefoxProfileMigrator.js
+++ b/browser/components/migration/FirefoxProfileMigrator.js
@@ -59,17 +59,17 @@ FirefoxProfileMigrator.prototype._getAll
 
 function sorter(a, b) {
   return a.id.toLocaleLowerCase().localeCompare(b.id.toLocaleLowerCase());
 }
 
 Object.defineProperty(FirefoxProfileMigrator.prototype, "sourceProfiles", {
   get() {
     return [...this._getAllProfiles().keys()].map(x => ({id: x, name: x})).sort(sorter);
-  }
+  },
 });
 
 FirefoxProfileMigrator.prototype._getFileObject = function(dir, fileName) {
   let file = dir.clone();
   file.append(fileName);
 
   // File resources are monolithic.  We don't make partial copies since
   // they are not expected to work alone. Return null to avoid trying to
@@ -117,17 +117,17 @@ FirefoxProfileMigrator.prototype._getRes
     }
     return {
       type: aMigrationType,
       migrate(aCallback) {
         for (let file of files) {
           file.copyTo(currentProfileDir, "");
         }
         aCallback(true);
-      }
+      },
     };
   };
 
   function savePrefs() {
     // If we've used the pref service to write prefs for the new profile, it's too
     // early in startup for the service to have a profile directory, so we have to
     // manually tell it where to save the prefs file.
     let newPrefsFile = currentProfileDir.clone();
@@ -176,17 +176,17 @@ FirefoxProfileMigrator.prototype._getRes
             // session with the "what's new" page:
             Services.prefs.setCharPref("browser.startup.homepage_override.mstone", mstone);
             Services.prefs.setCharPref("browser.startup.homepage_override.buildID", buildID);
             savePrefs();
             aCallback(true);
           }, function() {
             aCallback(false);
           });
-        }
+        },
       };
     }
   }
 
   // Sync/FxA related data
   let sync = {
     name: "sync", // name is used only by tests.
     type: types.OTHERDATA,
@@ -209,17 +209,17 @@ FirefoxProfileMigrator.prototype._getRes
             await OS.File.copy(oldPath, OS.Path.join(currentProfileDir.path, "signedInUser.json"));
           }
         }
       } catch (ex) {
         aCallback(false);
         return;
       }
       aCallback(true);
-    }
+    },
   };
 
   // Telemetry related migrations.
   let times = {
     name: "times", // name is used only by tests.
     type: types.OTHERDATA,
     migrate: aCallback => {
       let file = this._getFileObject(sourceProfileDir, "times.json");
@@ -227,17 +227,17 @@ FirefoxProfileMigrator.prototype._getRes
         file.copyTo(currentProfileDir, "");
       }
       // And record the fact a migration (ie, a reset) happened.
       let timesAccessor = new ProfileAge(currentProfileDir.path);
       timesAccessor.recordProfileReset().then(
         () => aCallback(true),
         () => aCallback(false)
       );
-    }
+    },
   };
   let telemetry = {
     name: "telemetry", // name is used only by tests...
     type: types.OTHERDATA,
     migrate: aCallback => {
       let createSubDir = (name) => {
         let dir = currentProfileDir.clone();
         dir.append(name);
@@ -278,25 +278,25 @@ FirefoxProfileMigrator.prototype._getRes
           if (stateFile) {
             let dest = createSubDir("healthreport");
             stateFile.copyTo(dest, "");
           }
         }
       }
 
       aCallback(true);
-    }
+    },
   };
 
   return [places, cookies, passwords, formData, dictionary, bookmarksBackups,
           session, sync, times, telemetry, favicons].filter(r => r);
 };
 
 Object.defineProperty(FirefoxProfileMigrator.prototype, "startupOnlyMigrator", {
-  get: () => true
+  get: () => true,
 });
 
 
 FirefoxProfileMigrator.prototype.classDescription = "Firefox Profile Migrator";
 FirefoxProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=firefox";
 FirefoxProfileMigrator.prototype.classID = Components.ID("{91185366-ba97-4438-acba-48deaca63386}");
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([FirefoxProfileMigrator]);
--- a/browser/components/migration/IEProfileMigrator.js
+++ b/browser/components/migration/IEProfileMigrator.js
@@ -73,35 +73,35 @@ History.prototype = {
       // and Date.now() returns milliseconds. Places expects PRTime,
       // so we multiply the Date.now return value to make up the difference.
       let lastVisitTime = entry.get("time") || (Date.now() * 1000);
 
       places.push(
         { uri,
           title,
           visits: [{ transitionType,
-                     visitDate: lastVisitTime }]
+                     visitDate: lastVisitTime }],
         }
       );
     }
 
     // Check whether there is any history to import.
     if (places.length == 0) {
       aCallback(true);
       return;
     }
 
     MigrationUtils.insertVisitsWrapper(places, {
       ignoreErrors: true,
       ignoreResults: true,
       handleCompletion(updatedCount) {
         aCallback(updatedCount > 0);
-      }
+      },
     });
-  }
+  },
 };
 
 // IE form password migrator supporting windows from XP until 7 and IE from 7 until 11
 function IE7FormPasswords() {
   // used to distinguish between this migrator and other passwords migrators in tests.
   this.name = "IE7FormPasswords";
 }
 
@@ -267,34 +267,34 @@ IE7FormPasswords.prototype = {
       // Bytes 12-19 are not needed and not documented
       {"unknown2": ctypes.uint32_t},
       {"unknown3": ctypes.uint32_t},
       // Bytes 20-23 are the data count: each username and password is considered as a data
       {"dataMax": ctypes.uint32_t},
       // Bytes 24-35 are not needed and not documented
       {"unknown4": ctypes.uint32_t},
       {"unknown5": ctypes.uint32_t},
-      {"unknown6": ctypes.uint32_t}
+      {"unknown6": ctypes.uint32_t},
     ]);
 
     // the structure of a IE7 decrypted login item
     let loginItem = new ctypes.StructType("loginItem", [
       // Bytes 0-3 are the offset of the username
       {"usernameOffset": ctypes.uint32_t},
       // Bytes 4-11 are the date
       {"loDateTime": ctypes.uint32_t},
       {"hiDateTime": ctypes.uint32_t},
       // Bytes 12-15 are not needed and not documented
       {"foo": ctypes.uint32_t},
       // Bytes 16-19 are the offset of the password
       {"passwordOffset": ctypes.uint32_t},
       // Bytes 20-31 are not needed and not documented
       {"unknown1": ctypes.uint32_t},
       {"unknown2": ctypes.uint32_t},
-      {"unknown3": ctypes.uint32_t}
+      {"unknown3": ctypes.uint32_t},
     ]);
 
     let url = uri.prePath;
     let results = [];
     let arr = this._crypto.stringToArray(data);
     // convert data to ctypes.unsigned_char.array(arr.length)
     let cdata = ctypes.unsigned_char.array(arr.length)(arr);
     // Bytes 0-35 contain the loginData data structure for all the logins sharing the same URL
@@ -397,16 +397,16 @@ Object.defineProperty(IEProfileMigrator.
                                                     kMainKey, "Secondary Start Pages");
     if (secondaryPages) {
       if (homepage)
         secondaryPages.unshift(homepage);
       homepage = secondaryPages.join("|");
     }
 
     return homepage;
-  }
+  },
 });
 
 IEProfileMigrator.prototype.classDescription = "IE Profile Migrator";
 IEProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=ie";
 IEProfileMigrator.prototype.classID = Components.ID("{3d2532e3-4932-4774-b7ba-968f5899d3a4}");
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([IEProfileMigrator]);
--- a/browser/components/migration/MSMigrationUtils.jsm
+++ b/browser/components/migration/MSMigrationUtils.jsm
@@ -60,22 +60,22 @@ function CtypesKernelHelpers() {
   this._structs.SYSTEMTIME = new ctypes.StructType("SYSTEMTIME", [
     {wYear: wintypes.WORD},
     {wMonth: wintypes.WORD},
     {wDayOfWeek: wintypes.WORD},
     {wDay: wintypes.WORD},
     {wHour: wintypes.WORD},
     {wMinute: wintypes.WORD},
     {wSecond: wintypes.WORD},
-    {wMilliseconds: wintypes.WORD}
+    {wMilliseconds: wintypes.WORD},
   ]);
 
   this._structs.FILETIME = new ctypes.StructType("FILETIME", [
     {dwLowDateTime: wintypes.DWORD},
-    {dwHighDateTime: wintypes.DWORD}
+    {dwHighDateTime: wintypes.DWORD},
   ]);
 
   try {
     this._libs.kernel32 = ctypes.open("Kernel32");
 
     this._functions.FileTimeToSystemTime =
       this._libs.kernel32.declare("FileTimeToSystemTime",
                                   ctypes.winapi_abi,
@@ -128,17 +128,17 @@ CtypesKernelHelpers.prototype = {
     // then divide by 1000 to get seconds, and round down:
     return Math.floor(Date.UTC(systemTime.wYear,
                                systemTime.wMonth - 1,
                                systemTime.wDay,
                                systemTime.wHour,
                                systemTime.wMinute,
                                systemTime.wSecond,
                                systemTime.wMilliseconds) / 1000);
-  }
+  },
 };
 
 function CtypesVaultHelpers() {
   this._structs = {};
   this._functions = {};
 
   this._structs.GUID = new ctypes.StructType("GUID", [
     {id: wintypes.DWORD.array(4)},
@@ -251,17 +251,17 @@ CtypesVaultHelpers.prototype = {
    */
   finalize() {
     this._structs = {};
     this._functions = {};
     try {
       this._vaultcliLib.close();
     } catch (ex) {}
     this._vaultcliLib = null;
-  }
+  },
 };
 
 /**
  * Checks whether an host is an IP (v4 or v6) address.
  *
  * @param aHost
  *        The host to check.
  * @return whether aHost is an IP address.
@@ -639,17 +639,17 @@ Cookies.prototype = {
                            name,
                            value,
                            Number(flags) & 0x1, // secure
                            false, // httpOnly
                            false, // session
                            expireTime,
                            {});
     }
-  }
+  },
 };
 
 function getTypedURLs(registryKeyPath) {
   // The list of typed URLs is a sort of annotation stored in the registry.
   // The number of entries stored is not UI-configurable, but has changed
   // between different Windows versions. We just keep reading up to the first
   // non-existing entry to support different limits / states of the registry.
   let typedURLs = new Map();
@@ -866,17 +866,17 @@ WindowsVaultFormPasswords.prototype = {
       ctypesKernelHelpers.finalize();
       ctypesVaultHelpers.finalize();
       aCallback(migrationSucceeded);
     }
     if (aOnlyCheckExists) {
       return false;
     }
     return undefined;
-  }
+  },
 };
 
 var MSMigrationUtils = {
   MIGRATION_TYPE_IE: 1,
   MIGRATION_TYPE_EDGE: 2,
   CtypesKernelHelpers,
   getBookmarksMigrator(migrationType = this.MIGRATION_TYPE_IE) {
     return new Bookmarks(migrationType);
--- a/browser/components/migration/MigrationUtils.jsm
+++ b/browser/components/migration/MigrationUtils.jsm
@@ -45,17 +45,17 @@ var gPreviousDefaultBrowserKey = "";
 
 let gKeepUndoData = false;
 let gUndoData = null;
 
 XPCOMUtils.defineLazyGetter(this, "gAvailableMigratorKeys", function() {
   if (AppConstants.platform == "win") {
     return [
       "firefox", "edge", "ie", "chrome", "chromium", "360se",
-      "canary"
+      "canary",
     ];
   }
   if (AppConstants.platform == "macosx") {
     return ["firefox", "safari", "chrome", "chromium", "canary"];
   }
   if (AppConstants.XP_UNIX) {
     return ["firefox", "chrome", "chromium"];
   }
@@ -440,17 +440,17 @@ this.MigratorPrototype = {
     if (this._resourcesByProfile) {
       if (profileKey in this._resourcesByProfile)
         return this._resourcesByProfile[profileKey];
     } else {
       this._resourcesByProfile = { };
     }
     this._resourcesByProfile[profileKey] = this.getResources(aProfile);
     return this._resourcesByProfile[profileKey];
-  }
+  },
 };
 
 this.MigrationUtils = Object.freeze({
   resourceTypes: {
     SETTINGS:   Ci.nsIBrowserProfileMigrator.SETTINGS,
     COOKIES:    Ci.nsIBrowserProfileMigrator.COOKIES,
     HISTORY:    Ci.nsIBrowserProfileMigrator.HISTORY,
     FORMDATA:   Ci.nsIBrowserProfileMigrator.FORMDATA,
@@ -527,17 +527,17 @@ this.MigrationUtils = Object.freeze({
    *
    * @see nsIStringBundle
    */
   getLocalizedString: function MU_getLocalizedString(aKey, aReplacements) {
     aKey = aKey.replace(/_(canary|chromium)$/, "_chrome");
 
     const OVERRIDES = {
       "4_firefox": "4_firefox_history_and_bookmarks",
-      "64_firefox": "64_firefox_other"
+      "64_firefox": "64_firefox_other",
     };
     aKey = OVERRIDES[aKey] || aKey;
 
     if (aReplacements === undefined)
       return getMigrationBundle().GetStringFromName(aKey);
     return getMigrationBundle().formatStringFromName(
       aKey, aReplacements, aReplacements.length);
   },
@@ -584,17 +584,17 @@ this.MigrationUtils = Object.freeze({
    * @param parentGuid
    *        the GUID of the folder in which the new folder should be created.
    * @return the GUID of the new folder.
    */
   async createImportedBookmarksFolder(sourceNameStr, parentGuid) {
     let source = this.getLocalizedString("sourceName" + sourceNameStr);
     let title = this.getLocalizedString("importedBookmarksFolder", [source]);
     return (await PlacesUtils.bookmarks.insert({
-      type: PlacesUtils.bookmarks.TYPE_FOLDER, parentGuid, title
+      type: PlacesUtils.bookmarks.TYPE_FOLDER, parentGuid, title,
     })).guid;
   },
 
   /**
    * Get all the rows corresponding to a select query from a database, without
    * requiring a lock on the database. If fetching data fails (because someone
    * else tried to write to the DB at the same time, for example), we will
    * retry the fetch after a 100ms timeout, up to 10 times.
@@ -975,17 +975,17 @@ this.MigrationUtils = Object.freeze({
       return insertionPromise;
     }
     // If we keep undo data, add a promise handler that stores the undo data once
     // the bookmark has been inserted in the DB, and then returns the bookmark.
     let {parentGuid} = bookmark;
     return insertionPromise.then(bm => {
       let {guid, lastModified, type} = bm;
       gUndoData.get("bookmarks").push({
-        parentGuid, guid, lastModified, type
+        parentGuid, guid, lastModified, type,
       });
       return bm;
     });
   },
 
   insertManyBookmarksWrapper(bookmarks, parent) {
     let insertionPromise = PlacesUtils.bookmarks.insertTree({guid: parent, children: bookmarks});
     return insertionPromise.then(insertedItems => {
--- a/browser/components/migration/ProfileMigrator.js
+++ b/browser/components/migration/ProfileMigrator.js
@@ -10,12 +10,12 @@ Components.utils.import("resource:///mod
 function ProfileMigrator() {
 }
 
 ProfileMigrator.prototype = {
   migrate: MigrationUtils.startupMigration.bind(MigrationUtils),
   QueryInterface: XPCOMUtils.generateQI([Components.interfaces.nsIProfileMigrator]),
   classDescription: "Profile Migrator",
   contractID: "@mozilla.org/toolkit/profile-migrator;1",
-  classID: Components.ID("6F8BB968-C14F-4D6F-9733-6C6737B35DCE")
+  classID: Components.ID("6F8BB968-C14F-4D6F-9733-6C6737B35DCE"),
 };
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([ProfileMigrator]);
--- a/browser/components/migration/SafariProfileMigrator.js
+++ b/browser/components/migration/SafariProfileMigrator.js
@@ -232,27 +232,27 @@ History.prototype = {
           }
         }
         if (places.length > 0) {
           MigrationUtils.insertVisitsWrapper(places, {
             ignoreErrors: true,
             ignoreResults: true,
             handleCompletion(updatedCount) {
               aCallback(updatedCount > 0);
-            }
+            },
           });
         } else {
           aCallback(false);
         }
       } catch (ex) {
         Cu.reportError(ex);
         aCallback(false);
       }
     });
-  }
+  },
 };
 
 /**
  * Safari's preferences property list is independently used for three purposes:
  * (a) importation of preferences
  * (b) importation of search strings
  * (c) retrieving the home page.
  *
@@ -300,17 +300,17 @@ MainPreferencesPropertyList.prototype = 
     inputStream.init(this._file, -1, -1, 0);
     let binaryStream = Cc["@mozilla.org/binaryinputstream;1"].
                        createInstance(Ci.nsIBinaryInputStream);
     binaryStream.setInputStream(inputStream);
     let bytes = binaryStream.readByteArray(inputStream.available());
     this._dict = PropertyListUtils._readFromArrayBufferSync(
       new Uint8Array(bytes).buffer);
     return this._dict;
-  }
+  },
 };
 
 function SearchStrings(aMainPreferencesPropertyListInstance) {
   this._mainPreferencesPropertyList = aMainPreferencesPropertyListInstance;
 }
 SearchStrings.prototype = {
   type: MigrationUtils.resourceTypes.OTHERDATA,
 
@@ -326,17 +326,17 @@ SearchStrings.prototype = {
             let changes = recentSearchStrings.map((searchString) => (
               {op: "add",
                fieldname: "searchbar-history",
                value: searchString}));
             FormHistory.update(changes);
           }
         }
       }, aCallback));
-  }
+  },
 };
 
 function SafariProfileMigrator() {
 }
 
 SafariProfileMigrator.prototype = Object.create(MigratorPrototype);
 
 SafariProfileMigrator.prototype.getResources = function SM_getResources() {
@@ -394,27 +394,27 @@ Object.defineProperty(SafariProfileMigra
             new MainPreferencesPropertyList(file);
           return this._mainPreferencesPropertyList;
         }
       }
       this._mainPreferencesPropertyList = null;
       return this._mainPreferencesPropertyList;
     }
     return this._mainPreferencesPropertyList;
-  }
+  },
 });
 
 Object.defineProperty(SafariProfileMigrator.prototype, "sourceHomePageURL", {
   get: function get_sourceHomePageURL() {
     if (this.mainPreferencesPropertyList) {
       let dict = this.mainPreferencesPropertyList._readSync();
       if (dict.has("HomePage"))
         return dict.get("HomePage");
     }
     return "";
-  }
+  },
 });
 
 SafariProfileMigrator.prototype.classDescription = "Safari Profile Migrator";
 SafariProfileMigrator.prototype.contractID = "@mozilla.org/profile/migrator;1?app=browser&type=safari";
 SafariProfileMigrator.prototype.classID = Components.ID("{4b609ecf-60b2-4655-9df4-dc149e474da1}");
 
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([SafariProfileMigrator]);
--- a/browser/components/migration/tests/unit/test_360se_bookmarks.js
+++ b/browser/components/migration/tests/unit/test_360se_bookmarks.js
@@ -40,17 +40,17 @@ add_task(async function() {
     onItemRemoved() {},
     onItemChanged() {},
     onItemVisited() {},
     onItemMoved() {},
   };
   PlacesUtils.bookmarks.addObserver(bmObserver);
 
   await promiseMigration(migrator, MigrationUtils.resourceTypes.BOOKMARKS, {
-    id: "default"
+    id: "default",
   });
   PlacesUtils.bookmarks.removeObserver(bmObserver);
 
   // Check the bookmarks have been imported to all the expected parents.
   Assert.ok(!expectedParents.length, "No more expected parents");
   Assert.ok(gotFolder, "Should have seen the folder get imported");
   Assert.equal(itemCount, 10, "Should import all 10 items.");
   // Check that the telemetry matches:
--- a/browser/components/migration/tests/unit/test_IE_cookies.js
+++ b/browser/components/migration/tests/unit/test_IE_cookies.js
@@ -56,17 +56,17 @@ add_task(async function() {
   let date = (new Date()).getDate();
   const COOKIE = {
     get host() {
       return new URL(this.href).host;
     },
     href: `http://mycookietest.${Math.random()}.com`,
     name: "testcookie",
     value: "testvalue",
-    expiry: new Date(new Date().setDate(date + 2))
+    expiry: new Date(new Date().setDate(date + 2)),
   };
   let data = ctypes.char16_t.array()(256);
   let sizeRef = DWORD(256).address();
 
   registerCleanupFunction(() => {
     // Remove the cookie.
     try {
       let expired = new Date(new Date().setDate(date - 2));
--- a/browser/components/migration/tests/unit/test_automigration.js
+++ b/browser/components/migration/tests/unit/test_automigration.js
@@ -264,17 +264,17 @@ add_task(async function checkUndoRemoval
       {
         transitionType: PlacesUtils.history.TRANSITION_LINK,
         visitDate: now_uSec,
       },
       {
         transitionType: PlacesUtils.history.TRANSITION_LINK,
         visitDate: now_uSec - 100 * kUsecPerMin,
       },
-    ]
+    ],
   }]);
   await frecencyUpdatePromise;
 
   // Verify that both visits get reported.
   let opts = PlacesUtils.history.getNewQueryOptions();
   opts.resultType = opts.RESULTS_AS_VISIT;
   let query = PlacesUtils.history.getNewQuery();
   query.uri = visitedURI;
@@ -330,33 +330,33 @@ add_task(async function checkUndoRemoval
 
 add_task(async function checkUndoBookmarksState() {
   MigrationUtils.initializeUndoData();
   const {TYPE_FOLDER, TYPE_BOOKMARK} = PlacesUtils.bookmarks;
   let title = "Some example bookmark";
   let url = "http://www.example.com";
   let parentGuid = PlacesUtils.bookmarks.toolbarGuid;
   let {guid, lastModified} = await MigrationUtils.insertBookmarkWrapper({
-    title, url, parentGuid
+    title, url, parentGuid,
   });
   Assert.deepEqual((await MigrationUtils.stopAndRetrieveUndoData()).get("bookmarks"),
       [{lastModified, parentGuid, guid, type: TYPE_BOOKMARK}]);
 
   MigrationUtils.initializeUndoData();
   ({guid, lastModified} = await MigrationUtils.insertBookmarkWrapper({
-    title, parentGuid, type: TYPE_FOLDER
+    title, parentGuid, type: TYPE_FOLDER,
   }));
   let folder = {guid, lastModified, parentGuid, type: TYPE_FOLDER};
   let folderGuid = folder.guid;
   ({guid, lastModified} = await MigrationUtils.insertBookmarkWrapper({
-    title, url, parentGuid: folderGuid
+    title, url, parentGuid: folderGuid,
   }));
   let kid1 = {guid, lastModified, parentGuid: folderGuid, type: TYPE_BOOKMARK};
   ({guid, lastModified} = await MigrationUtils.insertBookmarkWrapper({
-    title, url, parentGuid: folderGuid
+    title, url, parentGuid: folderGuid,
   }));
   let kid2 = {guid, lastModified, parentGuid: folderGuid, type: TYPE_BOOKMARK};
 
   let bookmarksUndo = (await MigrationUtils.stopAndRetrieveUndoData()).get("bookmarks");
   Assert.equal(bookmarksUndo.length, 3);
   // We expect that the last modified time from first kid #1 and then kid #2
   // has been propagated to the folder:
   folder.lastModified = kid2.lastModified;
@@ -370,38 +370,38 @@ add_task(async function checkUndoBookmar
 
 add_task(async function testBookmarkRemovalByUndo() {
   const {TYPE_FOLDER} = PlacesUtils.bookmarks;
   MigrationUtils.initializeUndoData();
   let title = "Some example bookmark";
   let url = "http://www.mymagicaluniqueurl.com";
   let parentGuid = PlacesUtils.bookmarks.toolbarGuid;
   let {guid} = await MigrationUtils.insertBookmarkWrapper({
-    title: "Some folder", parentGuid, type: TYPE_FOLDER
+    title: "Some folder", parentGuid, type: TYPE_FOLDER,
   });
   let folderGuid = guid;
   let itemsToRemove = [];
   ({guid} = await MigrationUtils.insertBookmarkWrapper({
-    title: "Inner folder", parentGuid: folderGuid, type: TYPE_FOLDER
+    title: "Inner folder", parentGuid: folderGuid, type: TYPE_FOLDER,
   }));
   let innerFolderGuid = guid;
   itemsToRemove.push(innerFolderGuid);
 
   ({guid} = await MigrationUtils.insertBookmarkWrapper({
-    title: "Inner inner folder", parentGuid: innerFolderGuid, type: TYPE_FOLDER
+    title: "Inner inner folder", parentGuid: innerFolderGuid, type: TYPE_FOLDER,
   }));
   itemsToRemove.push(guid);
 
   ({guid} = await MigrationUtils.insertBookmarkWrapper({
-    title: "Inner nested item", url: "http://inner-nested-example.com", parentGuid: guid
+    title: "Inner nested item", url: "http://inner-nested-example.com", parentGuid: guid,
   }));
   itemsToRemove.push(guid);
 
   ({guid} = await MigrationUtils.insertBookmarkWrapper({
-    title, url, parentGuid: folderGuid
+    title, url, parentGuid: folderGuid,
   }));
   itemsToRemove.push(guid);
 
   for (let toBeRemovedGuid of itemsToRemove) {
     let dbResultForGuid = await PlacesUtils.bookmarks.fetch(toBeRemovedGuid);
     Assert.ok(dbResultForGuid, "Should be able to find items that will be removed.");
   }
   let bookmarkUndoState = (await MigrationUtils.stopAndRetrieveUndoData()).get("bookmarks");
@@ -574,17 +574,17 @@ add_task(async function checkUndoVisitsS
 
   // We have to wait until frecency updates have been handled in order
   // to accurately determine whether we're doing the right thing.
   let frecencyUpdatesHandled = new Promise(resolve => {
     PlacesUtils.history.addObserver({
       onManyFrecenciesChanged() {
         PlacesUtils.history.removeObserver(this);
         resolve();
-      }
+      },
     });
   });
   await PlacesUtils.history.insertMany([{
     url: "http://www.example.com/",
     title: "Example",
     visits: [{
       date: new Date("2015-08-16"),
     }],
@@ -603,17 +603,17 @@ add_task(async function checkUndoVisitsS
       date: new Date("2015-09-01"),
     }],
   }]);
   await frecencyUpdatesHandled;
   let undoVisitData = (await MigrationUtils.stopAndRetrieveUndoData()).get("visits");
 
   let frecencyChangesExpected = new Map([
     ["http://www.example.com/", PromiseUtils.defer()],
-    ["http://www.example.org/", PromiseUtils.defer()]
+    ["http://www.example.org/", PromiseUtils.defer()],
   ]);
   let uriDeletedExpected = new Map([
     ["http://www.mozilla.org/", PromiseUtils.defer()],
   ]);
   let wrongMethodDeferred = PromiseUtils.defer();
   let observer = {
     onBeginUpdateBatch() {},
     onEndUpdateBatch() {},
--- a/browser/components/migration/tests/unit/test_fx_telemetry.js
+++ b/browser/components/migration/tests/unit/test_fx_telemetry.js
@@ -214,17 +214,17 @@ add_task(async function test_datareporti
 
   let ok = await promiseTelemetryMigrator(srcDir, targetDir);
   Assert.ok(ok, "callback should have been true");
 
   checkDirectoryContains(targetDir, {
     "datareporting": {
       "state.json": shouldBeCopied,
       "session-state.json": shouldBeCopied,
-    }
+    },
   });
 });
 
 add_task(async function test_no_session_state() {
   let [srcDir, targetDir] = getTestDirs();
 
   // Check that migration still works properly if we only have state.json.
   let subDir = createSubDir(srcDir, "datareporting");
@@ -232,17 +232,17 @@ add_task(async function test_no_session_
   writeToFile(subDir, "state.json", stateContent);
 
   let ok = await promiseTelemetryMigrator(srcDir, targetDir);
   Assert.ok(ok, "callback should have been true");
 
   checkDirectoryContains(targetDir, {
     "datareporting": {
       "state.json": stateContent,
-    }
+    },
   });
 });
 
 add_task(async function test_no_state() {
   let [srcDir, targetDir] = getTestDirs();
 
   // Check that migration still works properly if we only have session-state.json.
   let subDir = createSubDir(srcDir, "datareporting");
@@ -250,17 +250,17 @@ add_task(async function test_no_state() 
   writeToFile(subDir, "session-state.json", sessionStateContent);
 
   let ok = await promiseTelemetryMigrator(srcDir, targetDir);
   Assert.ok(ok, "callback should have been true");
 
   checkDirectoryContains(targetDir, {
     "datareporting": {
       "session-state.json": sessionStateContent,
-    }
+    },
   });
 });
 
 add_task(async function test_times_migration() {
   let [srcDir, targetDir] = getTestDirs();
 
   // create a times.json in the source directory.
   let contents = JSON.stringify({created: 1234});
--- a/browser/extensions/formautofill/locales/en-US/formautofill.properties
+++ b/browser/extensions/formautofill/locales/en-US/formautofill.properties
@@ -118,17 +118,17 @@ givenName = First Name
 additionalName = Middle Name
 familyName = Last Name
 organization2 = Organization
 streetAddress = Street Address
 city = City
 province = Province
 state = State
 postalCode = Postal Code
-zip = Zip Code
+zip = ZIP Code
 country = Country or Region
 tel = Phone
 email = Email
 cancelBtnLabel = Cancel
 saveBtnLabel = Save
 countryWarningMessage2 = Form Autofill is currently available only for certain countries.
 
 # LOCALIZATION NOTE (addNewCreditCardTitle, editCreditCardTitle): The dialog title for creating or editing
--- a/browser/extensions/formautofill/test/browser/browser_editAddressDialog.js
+++ b/browser/extensions/formautofill/test/browser/browser_editAddressDialog.js
@@ -39,18 +39,18 @@ add_task(async function test_defaultCoun
 });
 
 add_task(async function test_saveAddress() {
   await testDialog(EDIT_ADDRESS_DIALOG_URL, win => {
     let doc = win.document;
     // Verify labels
     is(doc.querySelector("#address-level1-container > span").textContent, "State",
                          "US address-level1 label should be 'State'");
-    is(doc.querySelector("#postal-code-container > span").textContent, "Zip Code",
-                         "US postal-code label should be 'Zip Code'");
+    is(doc.querySelector("#postal-code-container > span").textContent, "ZIP Code",
+                         "US postal-code label should be 'ZIP Code'");
     // Input address info and verify move through form with tab keys
     const keyInputs = [
       "VK_TAB",
       TEST_ADDRESS_1["given-name"],
       "VK_TAB",
       TEST_ADDRESS_1["additional-name"],
       "VK_TAB",
       TEST_ADDRESS_1["family-name"],
--- a/browser/tools/mozscreenshots/head.js
+++ b/browser/tools/mozscreenshots/head.js
@@ -12,16 +12,19 @@ const EXTENSION_DIR = "chrome://mochites
 
 let TestRunner;
 
 async function setup() {
   // This timeout doesn't actually end the job even if it is hit - the buildbot timeout will
   // handle things for us if the test actually hangs.
   requestLongerTimeout(100);
 
+  // Generate output so mozprocess knows we're still alive for the long session.
+  SimpleTest.requestCompleteLog();
+
   info("installing extension temporarily");
   let chromeURL = Services.io.newURI(EXTENSION_DIR);
   let dir = chromeRegistry.convertChromeURL(chromeURL).QueryInterface(Ci.nsIFileURL).file;
   await AddonManager.installTemporaryAddon(dir);
 
   info("Checking for mozscreenshots extension");
   return new Promise((resolve) => {
     AddonManager.getAddonByID("mozscreenshots@mozilla.org", (aAddon) => {
--- a/browser/tools/mozscreenshots/primaryUI/browser_primaryUI.js
+++ b/browser/tools/mozscreenshots/primaryUI/browser_primaryUI.js
@@ -6,15 +6,11 @@
 
 "use strict";
 
 add_task(async function capture() {
   if (!shouldCapture()) {
     return;
   }
 
-  if (AppConstants.platform == "macosx") {
-    // Bug 1425394 - Generate output so mozprocess knows we're still alive for the long session.
-    SimpleTest.requestCompleteLog();
-  }
   let sets = ["TabsInTitlebar", "Tabs", "WindowSize", "Toolbars", "LightweightThemes", "UIDensities"];
   await TestRunner.start(sets, "primaryUI");
 });
--- a/build/build-clang/clang-3.9-linux64.json
+++ b/build/build-clang/clang-3.9-linux64.json
@@ -1,19 +1,19 @@
 {
-    "llvm_revision": "290136",
+    "llvm_revision": "289595",
     "stages": "3",
     "build_libcxx": true,
     "build_type": "Release",
     "assertions": false,
-    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_390/final",
-    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_390/final",
-    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_390/final",
-    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_390/final",
-    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_390/final",
+    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_391/final",
+    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_391/final",
+    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_391/final",
+    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_391/final",
+    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_391/final",
     "python_path": "/usr/bin/python2.7",
     "gcc_dir": "/builds/worker/workspace/build/src/gcc",
     "cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "cxx": "/builds/worker/workspace/build/src/gcc/bin/g++",
     "as": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "patches": [
       "llvm-debug-frame.patch",
       "r277806.patch",
--- a/build/build-clang/clang-5-linux64.json
+++ b/build/build-clang/clang-5-linux64.json
@@ -1,19 +1,19 @@
 {
-    "llvm_revision": "312553",
+    "llvm_revision": "320874",
     "stages": "3",
     "build_libcxx": true,
     "build_type": "Release",
     "assertions": false,
-    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_500/final",
-    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_500/final",
-    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_500/final",
-    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_500/final",
-    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_500/final",
+    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_501/final",
+    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_501/final",
+    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_501/final",
+    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_501/final",
+    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_501/final",
     "python_path": "/usr/bin/python2.7",
     "gcc_dir": "/builds/worker/workspace/build/src/gcc",
     "cc": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "cxx": "/builds/worker/workspace/build/src/gcc/bin/g++",
     "as": "/builds/worker/workspace/build/src/gcc/bin/gcc",
     "patches": [
       "llvm-debug-frame-for-5.patch",
       "r313872.patch",
--- a/build/build-clang/clang-macosx64.json
+++ b/build/build-clang/clang-macosx64.json
@@ -1,20 +1,20 @@
 {
-    "llvm_revision": "290136",
+    "llvm_revision": "289595",
     "stages": "1",
     "build_libcxx": true,
     "build_type": "Release",
     "assertions": false,
     "osx_cross_compile": true,
-    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_390/final",
-    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_390/final",
-    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_390/final",
-    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_390/final",
-    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_390/final",
+    "llvm_repo": "https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_391/final",
+    "clang_repo": "https://llvm.org/svn/llvm-project/cfe/tags/RELEASE_391/final",
+    "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_391/final",
+    "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_391/final",
+    "libcxxabi_repo": "https://llvm.org/svn/llvm-project/libcxxabi/tags/RELEASE_391/final",
     "python_path": "/usr/bin/python2.7",
     "gcc_dir": "/builds/worker/workspace/build/src/gcc",
     "cc": "/builds/worker/workspace/build/src/clang/bin/clang",
     "cxx": "/builds/worker/workspace/build/src/clang/bin/clang++",
     "as": "/builds/worker/workspace/build/src/clang/bin/clang",
     "ar": "/builds/worker/workspace/build/src/cctools/bin/x86_64-apple-darwin11-ar",
     "ranlib": "/builds/worker/workspace/build/src/cctools/bin/x86_64-apple-darwin11-ranlib",
     "libtool": "/builds/worker/workspace/build/src/cctools/bin/x86_64-apple-darwin11-libtool",
--- a/devtools/client/debugger/new/panel.js
+++ b/devtools/client/debugger/new/panel.js
@@ -111,16 +111,20 @@ DebuggerPanel.prototype = {
 
     frames.forEach(frame => {
       frame.actor = frame.id;
     });
 
     return { frames, selected };
   },
 
+  isPaused() {
+    return this._selectors.isPaused(this._getState());
+  },
+
   selectSource(url, line) {
     this._actions.selectSourceURL(url, { location: { line } });
   },
 
   getSource(sourceURL) {
     return this._selectors.getSourceByURL(this._getState(), sourceURL);
   },
 
--- a/devtools/client/debugger/panel.js
+++ b/devtools/client/debugger/panel.js
@@ -126,20 +126,26 @@ DebuggerPanel.prototype = {
 
     return this._destroyer = this._controller.shutdownDebugger().then(() => {
       this.emit("destroyed");
     });
   },
 
   // DebuggerPanel API
 
+  isPaused() {
+    let framesController = this.panelWin.DebuggerController.StackFrames;
+    let thread = framesController.activeThread;
+    return thread && thread.paused;
+  },
+
   getFrames() {
     let framesController = this.panelWin.DebuggerController.StackFrames;
     let thread = framesController.activeThread;
-    if (thread && thread.paused) {
+    if (this.isPaused()) {
       return {
         frames: thread.cachedFrames,
         selected: framesController.currentFrameDepth,
       };
     }
 
     return null;
   },
--- a/devtools/client/framework/toolbox-process-window.js
+++ b/devtools/client/framework/toolbox-process-window.js
@@ -159,17 +159,17 @@ function bindToolboxHandlers() {
     // Once the debugger panel opens listen for thread pause / resume.
     gToolbox.getPanelWhenReady("jsdebugger").then(panel => {
       setupThreadListeners(panel);
     });
   }
 }
 
 function setupThreadListeners(panel) {
-  updateBadgeText(panel._selectors.getPause(panel._getState()));
+  updateBadgeText(panel.isPaused());
 
   let onPaused = updateBadgeText.bind(null, true);
   let onResumed = updateBadgeText.bind(null, false);
   gToolbox.target.on("thread-paused", onPaused);
   gToolbox.target.on("thread-resumed", onResumed);
 
   panel.once("destroyed", () => {
     gToolbox.target.off("thread-paused", onPaused);
--- a/dom/canvas/ImageBitmap.cpp
+++ b/dom/canvas/ImageBitmap.cpp
@@ -31,16 +31,129 @@ using namespace workers;
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ImageBitmap, mParent)
 NS_IMPL_CYCLE_COLLECTING_ADDREF(ImageBitmap)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(ImageBitmap)
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ImageBitmap)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
+/* This class observes shutdown notifications and sends that notification
+ * to the worker thread if the image bitmap is on a worker thread.
+ */
+class ImageBitmapShutdownObserver final : public nsIObserver
+{
+public:
+  explicit ImageBitmapShutdownObserver(ImageBitmap* aImageBitmap)
+  : mImageBitmap(nullptr)
+  {
+    if (NS_IsMainThread()) {
+      mImageBitmap = aImageBitmap;
+    } else {
+      WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
+      MOZ_ASSERT(workerPrivate);
+      mMainThreadEventTarget = workerPrivate->MainThreadEventTarget();
+      mSendToWorkerTask = new SendShutdownToWorkerThread(aImageBitmap);
+    }
+  }
+
+  void RegisterObserver() {
+    if (NS_IsMainThread()) {
+      nsContentUtils::RegisterShutdownObserver(this);
+      return;
+    }
+
+    MOZ_ASSERT(mMainThreadEventTarget);
+    RefPtr<ImageBitmapShutdownObserver> self = this;
+    nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
+      "ImageBitmapShutdownObserver::RegisterObserver",
+      [self]() {
+        self->RegisterObserver();
+      });
+
+    mMainThreadEventTarget->Dispatch(r.forget());
+  }
+
+  void UnregisterObserver() {
+    if (NS_IsMainThread()) {
+      nsContentUtils::UnregisterShutdownObserver(this);
+      return;
+    }
+
+    MOZ_ASSERT(mMainThreadEventTarget);
+    RefPtr<ImageBitmapShutdownObserver> self = this;
+    nsCOMPtr<nsIRunnable> r = NS_NewRunnableFunction(
+      "ImageBitmapShutdownObserver::RegisterObserver",
+      [self]() {
+        self->UnregisterObserver();
+      });
+
+    mMainThreadEventTarget->Dispatch(r.forget());
+  }
+
+  void Clear() {
+    mImageBitmap = nullptr;
+    if (mSendToWorkerTask) {
+      mSendToWorkerTask->mImageBitmap = nullptr;
+    }
+  }
+
+  NS_DECL_THREADSAFE_ISUPPORTS
+  NS_DECL_NSIOBSERVER
+private:
+  ~ImageBitmapShutdownObserver() {}
+
+  class SendShutdownToWorkerThread : public MainThreadWorkerControlRunnable
+  {
+  public:
+    explicit SendShutdownToWorkerThread(ImageBitmap* aImageBitmap)
+    : MainThreadWorkerControlRunnable(GetCurrentThreadWorkerPrivate())
+    , mImageBitmap(aImageBitmap)
+    {}
+
+    bool WorkerRun(JSContext* aCx, WorkerPrivate* aWorkerPrivate) override
+    {
+      if (mImageBitmap) {
+        mImageBitmap->OnShutdown();
+        mImageBitmap = nullptr;
+      }
+      return true;
+    }
+
+    ImageBitmap* mImageBitmap;
+  };
+
+  ImageBitmap* mImageBitmap;
+  nsCOMPtr<nsIEventTarget> mMainThreadEventTarget;
+  RefPtr<SendShutdownToWorkerThread> mSendToWorkerTask;
+};
+
+NS_IMPL_ISUPPORTS(ImageBitmapShutdownObserver, nsIObserver)
+
+NS_IMETHODIMP
+ImageBitmapShutdownObserver::Observe(nsISupports* aSubject,
+                                     const char* aTopic,
+                                     const char16_t* aData)
+{
+  if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0) {
+    if (mSendToWorkerTask) {
+      mSendToWorkerTask->Dispatch();
+    } else {
+      if (mImageBitmap) {
+        mImageBitmap->OnShutdown();
+        mImageBitmap = nullptr;
+      }
+    }
+    nsContentUtils::UnregisterShutdownObserver(this);
+  }
+
+  return NS_OK;
+}
+
+
 /*
  * If either aRect.width or aRect.height are negative, then return a new IntRect
  * which represents the same rectangle as the aRect does but with positive width
  * and height.
  */
 static IntRect
 FixUpNegativeDimension(const IntRect& aRect, ErrorResult& aRv)
 {
@@ -407,20 +520,28 @@ ImageBitmap::ImageBitmap(nsIGlobalObject
   , mSurface(nullptr)
   , mDataWrapper(new ImageUtils(mData))
   , mPictureRect(0, 0, aData->GetSize().width, aData->GetSize().height)
   , mAlphaType(aAlphaType)
   , mIsCroppingAreaOutSideOfSourceImage(false)
   , mAllocatedImageData(false)
 {
   MOZ_ASSERT(aData, "aData is null in ImageBitmap constructor.");
+
+  mShutdownObserver = new ImageBitmapShutdownObserver(this);
+  mShutdownObserver->RegisterObserver();
 }
 
 ImageBitmap::~ImageBitmap()
 {
+  if (mShutdownObserver) {
+    mShutdownObserver->Clear();
+    mShutdownObserver->UnregisterObserver();
+    mShutdownObserver = nullptr;
+  }
 }
 
 JSObject*
 ImageBitmap::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
 {
   return ImageBitmapBinding::Wrap(aCx, this, aGivenProto);
 }
 
@@ -428,16 +549,24 @@ void
 ImageBitmap::Close()
 {
   mData = nullptr;
   mSurface = nullptr;
   mPictureRect.SetEmpty();
 }
 
 void
+ImageBitmap::OnShutdown()
+{
+  mShutdownObserver = nullptr;
+
+  Close();
+}
+
+void
 ImageBitmap::SetPictureRect(const IntRect& aRect, ErrorResult& aRv)
 {
   mPictureRect = FixUpNegativeDimension(aRect, aRv);
 }
 
 void
 ImageBitmap::SetIsCroppingAreaOutSideOfSourceImage(const IntSize& aSourceSize,
                                                    const Maybe<IntRect>& aCroppingRect)
--- a/dom/canvas/ImageBitmap.h
+++ b/dom/canvas/ImageBitmap.h
@@ -54,16 +54,17 @@ class HTMLCanvasElement;
 class HTMLImageElement;
 class HTMLVideoElement;
 enum class ImageBitmapFormat : uint8_t;
 class ImageData;
 class ImageUtils;
 template<typename T> class MapDataIntoBufferSource;
 class Promise;
 class PostMessageEvent; // For StructuredClone between windows.
+class ImageBitmapShutdownObserver;
 
 struct ImageBitmapCloneData final
 {
   RefPtr<gfx::DataSourceSurface> mSurface;
   gfx::IntRect mPictureRect;
   gfxAlphaType mAlphaType;
   bool mIsCroppingAreaOutSideOfSourceImage;
 };
@@ -170,16 +171,18 @@ public:
   already_AddRefed<Promise>
   MapDataInto(JSContext* aCx,
               ImageBitmapFormat aFormat,
               const ArrayBufferViewOrArrayBuffer& aBuffer,
               int32_t aOffset, ErrorResult& aRv);
 
   size_t GetAllocatedSize() const;
 
+  void OnShutdown();
+
 protected:
 
   /*
    * The default value of aIsPremultipliedAlpha is TRUE because that the
    * data stored in HTMLImageElement, HTMLVideoElement, HTMLCanvasElement,
    * CanvasRenderingContext2D are alpha-premultiplied in default.
    *
    * Actually, if one HTMLCanvasElement's rendering context is WebGLContext, it
@@ -266,16 +269,18 @@ protected:
    *
    * The mPictureRect will be used at PrepareForDrawTarget() while user is going
    * to draw this ImageBitmap into a HTMLCanvasElement.
    */
   gfx::IntRect mPictureRect;
 
   const gfxAlphaType mAlphaType;
 
+  RefPtr<ImageBitmapShutdownObserver> mShutdownObserver;
+
   /*
    * Set mIsCroppingAreaOutSideOfSourceImage if image bitmap was cropped to the
    * source rectangle so that it contains any transparent black pixels (cropping
    * area is outside of the source image).
    * This is used in mapDataInto() to check if we should reject promise with
    * IndexSizeError.
    */
   bool mIsCroppingAreaOutSideOfSourceImage;
--- a/gfx/layers/wr/WebRenderLayerManager.cpp
+++ b/gfx/layers/wr/WebRenderLayerManager.cpp
@@ -511,16 +511,21 @@ WebRenderLayerManager::DidComposite(uint
 }
 
 void
 WebRenderLayerManager::ClearCachedResources(Layer* aSubtree)
 {
   WrBridge()->BeginClearCachedResources();
   mWebRenderCommandBuilder.ClearCachedResources();
   DiscardImages();
+  // Clear all active compositor animation ids.
+  // When ClearCachedResources is called, all animations are removed
+  // by WebRenderBridgeParent::RecvClearCachedResources().
+  mActiveCompositorAnimationIds.clear();
+  mDiscardedCompositorAnimationsIds.Clear();
   WrBridge()->EndClearCachedResources();
 }
 
 void
 WebRenderLayerManager::WrUpdated()
 {
   mWebRenderCommandBuilder.ClearCachedResources();
   DiscardLocalImages();
--- a/js/src/jsapi-tests/moz.build
+++ b/js/src/jsapi-tests/moz.build
@@ -14,16 +14,17 @@ UNIFIED_SOURCES += [
     'testArrayBufferView.cpp',
     'testAtomicOperations.cpp',
     'testBoundFunction.cpp',
     'testBug604087.cpp',
     'testCallArgs.cpp',
     'testCallNonGenericMethodOnProxy.cpp',
     'testChromeBuffer.cpp',
     'testCloneScript.cpp',
+    'testCompileNonSyntactic.cpp',
     'testDateToLocaleString.cpp',
     'testDebugger.cpp',
     'testDeepFreeze.cpp',
     'testDefineGetterSetterNonEnumerable.cpp',
     'testDefineProperty.cpp',
     'testDefinePropertyIgnoredAttributes.cpp',
     'testDeflateStringToUTF8Buffer.cpp',
     'testDifferentNewTargetInvokeConstructor.cpp',
new file mode 100644
--- /dev/null
+++ b/js/src/jsapi-tests/testCompileNonSyntactic.cpp
@@ -0,0 +1,114 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "gc/GCInternals.h"
+#include "jsapi-tests/tests.h"
+#include "vm/Monitor.h"
+#include "vm/MutexIDs.h"
+
+
+using namespace JS;
+using js::AutoLockMonitor;
+
+struct OffThreadTask {
+    OffThreadTask()
+      : monitor(js::mutexid::ShellOffThreadState),
+        token(nullptr)
+    {}
+
+    void* waitUntilDone(JSContext* cx)
+    {
+        if (OffThreadParsingMustWaitForGC(cx->runtime()))
+            js::gc::FinishGC(cx);
+
+        AutoLockMonitor alm(monitor);
+        while (!token) {
+            alm.wait();
+        }
+        void* result = token;
+        token = nullptr;
+        return result;
+    }
+
+    void markDone(void* tokenArg)
+    {
+        AutoLockMonitor alm(monitor);
+        token = tokenArg;
+        alm.notify();
+    }
+
+    static void
+    OffThreadCallback(void* token, void* context)
+    {
+        auto self = static_cast<OffThreadTask*>(context);
+        self->markDone(token);
+    }
+
+    js::Monitor monitor;
+    void* token;
+};
+
+
+BEGIN_TEST(testCompileScript)
+{
+    CHECK(testCompile(true));
+
+    CHECK(testCompile(false));
+    return true;
+}
+
+bool
+testCompile(bool nonSyntactic)
+{
+    static const char src[] = "42\n";
+    static const char16_t src_16[] = u"42\n";
+
+    constexpr size_t length = sizeof(src) - 1;
+    static_assert(sizeof(src_16) / sizeof(*src_16) - 1 == length,
+                  "Source buffers must be same length");
+
+
+    SourceBufferHolder buf(src_16, length, SourceBufferHolder::NoOwnership);
+
+    JS::CompileOptions options(cx);
+    options.setNonSyntacticScope(nonSyntactic);
+
+    JS::RootedScript script(cx);
+
+
+    // Check explicit non-syntactic compilation first to make sure it doesn't
+    // modify our options object.
+    CHECK(CompileForNonSyntacticScope(cx, options, buf, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), true);
+
+    CHECK(CompileForNonSyntacticScope(cx, options, src, length, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), true);
+
+    CHECK(CompileForNonSyntacticScope(cx, options, src_16, length, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), true);
+
+
+    CHECK(Compile(cx, options, buf, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), nonSyntactic);
+
+    CHECK(Compile(cx, options, src, length, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), nonSyntactic);
+
+    CHECK(Compile(cx, options, src_16, length, &script));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), nonSyntactic);
+
+
+    options.forceAsync = true;
+    OffThreadTask task;
+    void* token;
+
+    CHECK(CompileOffThread(cx, options, src_16, length,
+                           task.OffThreadCallback, &task));
+    CHECK(token = task.waitUntilDone(cx));
+    CHECK(script = FinishOffThreadScript(cx, token));
+    CHECK_EQUAL(script->hasNonSyntacticScope(), nonSyntactic);
+
+    return true;
+}
+END_TEST(testCompileScript);
--- a/js/src/jsapi.cpp
+++ b/js/src/jsapi.cpp
@@ -4007,16 +4007,17 @@ void
 JS::ReadOnlyCompileOptions::copyPODOptions(const ReadOnlyCompileOptions& rhs)
 {
     copyPODTransitiveOptions(rhs);
     lineno = rhs.lineno;
     column = rhs.column;
     scriptSourceOffset = rhs.scriptSourceOffset;
     isRunOnce = rhs.isRunOnce;
     noScriptRval = rhs.noScriptRval;
+    nonSyntacticScope = rhs.nonSyntacticScope;
 }
 
 JS::OwningCompileOptions::OwningCompileOptions(JSContext* cx)
     : ReadOnlyCompileOptions(),
       elementRoot(cx),
       elementAttributeNameRoot(cx),
       introductionScriptRoot(cx)
 {
@@ -4118,143 +4119,154 @@ JS::CompileOptions::CompileOptions(JSCon
     else if (cx->compartment()->debuggerObservesAsmJS())
         asmJSOption = AsmJSOption::DisabledByDebugger;
     else
         asmJSOption = AsmJSOption::Enabled;
     throwOnAsmJSValidationFailureOption = cx->options().throwOnAsmJSValidationFailure();
 }
 
 static bool
-Compile(JSContext* cx, const ReadOnlyCompileOptions& options, ScopeKind scopeKind,
+Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
         SourceBufferHolder& srcBuf, MutableHandleScript script)
 {
-    MOZ_ASSERT(scopeKind == ScopeKind::Global || scopeKind == ScopeKind::NonSyntactic);
+    ScopeKind scopeKind = options.nonSyntacticScope ? ScopeKind::NonSyntactic : ScopeKind::Global;
+
     MOZ_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
     AssertHeapIsIdle();
     CHECK_REQUEST(cx);
 
     script.set(frontend::CompileGlobalScript(cx, cx->tempLifoAlloc(), scopeKind, options, srcBuf));
     return !!script;
 }
 
 static bool
-Compile(JSContext* cx, const ReadOnlyCompileOptions& options, ScopeKind scopeKind,
+Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
         const char16_t* chars, size_t length, MutableHandleScript script)
 {
     SourceBufferHolder srcBuf(chars, length, SourceBufferHolder::NoOwnership);
-    return ::Compile(cx, options, scopeKind, srcBuf, script);
+    return ::Compile(cx, options, srcBuf, script);
 }
 
 static bool
-Compile(JSContext* cx, const ReadOnlyCompileOptions& options, ScopeKind scopeKind,
+Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
         const char* bytes, size_t length, MutableHandleScript script)
 {
     UniqueTwoByteChars chars;
     if (options.utf8)
         chars.reset(UTF8CharsToNewTwoByteCharsZ(cx, UTF8Chars(bytes, length), &length).get());
     else
         chars.reset(InflateString(cx, bytes, length));
     if (!chars)
         return false;
 
-    return ::Compile(cx, options, scopeKind, chars.get(), length, script);
+    return ::Compile(cx, options, chars.get(), length, script);
 }
 
 static bool
-Compile(JSContext* cx, const ReadOnlyCompileOptions& options, ScopeKind scopeKind,
+Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
         FILE* fp, MutableHandleScript script)
 {
     FileContents buffer(cx);
     if (!ReadCompleteFile(cx, fp, buffer))
         return false;
 
-    return ::Compile(cx, options, scopeKind, buffer.begin(), buffer.length(), script);
+    return ::Compile(cx, options, buffer.begin(), buffer.length(), script);
 }
 
 static bool
-Compile(JSContext* cx, const ReadOnlyCompileOptions& optionsArg, ScopeKind scopeKind,
+Compile(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
         const char* filename, MutableHandleScript script)
 {
     AutoFile file;
     if (!file.open(cx, filename))
         return false;
     CompileOptions options(cx, optionsArg);
     options.setFileAndLine(filename, 1);
-    return ::Compile(cx, options, scopeKind, file.fp(), script);
+    return ::Compile(cx, options, file.fp(), script);
 }
 
 bool
 JS::Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
             SourceBufferHolder& srcBuf, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::Global, srcBuf, script);
+    return ::Compile(cx, options, srcBuf, script);
 }
 
 bool
 JS::Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
             const char* bytes, size_t length, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::Global, bytes, length, script);
+    return ::Compile(cx, options, bytes, length, script);
 }
 
 bool
 JS::Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
             const char16_t* chars, size_t length, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::Global, chars, length, script);
+    return ::Compile(cx, options, chars, length, script);
 }
 
 bool
 JS::Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
             FILE* file, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::Global, file, script);
+    return ::Compile(cx, options, file, script);
 }
 
 bool
 JS::Compile(JSContext* cx, const ReadOnlyCompileOptions& options,
             const char* filename, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::Global, filename, script);
+    return ::Compile(cx, options, filename, script);
 }
 
 bool
-JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
+JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
                                 SourceBufferHolder& srcBuf, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::NonSyntactic, srcBuf, script);
+    CompileOptions options(cx, optionsArg);
+    options.setNonSyntacticScope(true);
+    return ::Compile(cx, options, srcBuf, script);
 }
 
 bool
-JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
+JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
                                 const char* bytes, size_t length, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::NonSyntactic, bytes, length, script);
+    CompileOptions options(cx, optionsArg);
+    options.setNonSyntacticScope(true);
+    return ::Compile(cx, options, bytes, length, script);
 }
 
 bool
-JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
+JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
                                 const char16_t* chars, size_t length,
                                 JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::NonSyntactic, chars, length, script);
+    CompileOptions options(cx, optionsArg);
+    options.setNonSyntacticScope(true);
+    return ::Compile(cx, options, chars, length, script);
 }
 
 bool
-JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
+JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
                                 FILE* file, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::NonSyntactic, file, script);
+    CompileOptions options(cx, optionsArg);
+    options.setNonSyntacticScope(true);
+    return ::Compile(cx, options, file, script);
 }
 
 bool
-JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& options,
+JS::CompileForNonSyntacticScope(JSContext* cx, const ReadOnlyCompileOptions& optionsArg,
                                 const char* filename, JS::MutableHandleScript script)
 {
-    return ::Compile(cx, options, ScopeKind::NonSyntactic, filename, script);
+    CompileOptions options(cx, optionsArg);
+    options.setNonSyntacticScope(true);
+    return ::Compile(cx, options, filename, script);
 }
 
 enum class OffThread {
     Compile, Decode,
 };
 
 static bool
 CanDoOffThread(JSContext* cx, const ReadOnlyCompileOptions& options, size_t length, OffThread what)
@@ -4412,24 +4424,24 @@ JS::CancelMultiOffThreadScriptsDecoder(J
     MOZ_ASSERT(CurrentThreadCanAccessRuntime(cx->runtime()));
     HelperThreadState().cancelParseTask(cx->runtime(), ParseTaskKind::MultiScriptsDecode, token);
 }
 
 JS_PUBLIC_API(bool)
 JS_CompileScript(JSContext* cx, const char* ascii, size_t length,
                  const JS::CompileOptions& options, MutableHandleScript script)
 {
-    return Compile(cx, options, ascii, length, script);
+    return ::Compile(cx, options, ascii, length, script);
 }
 
 JS_PUBLIC_API(bool)
 JS_CompileUCScript(JSContext* cx, const char16_t* chars, size_t length,
                    const JS::CompileOptions& options, MutableHandleScript script)
 {
-    return Compile(cx, options, chars, length, script);
+    return ::Compile(cx, options, chars, length, script);
 }
 
 JS_PUBLIC_API(bool)
 JS_BufferIsCompilableUnit(JSContext* cx, HandleObject obj, const char* utf8, size_t length)
 {
     AssertHeapIsIdle();
     CHECK_REQUEST(cx);
     assertSameCompartment(cx, obj);
--- a/js/src/jsapi.h
+++ b/js/src/jsapi.h
@@ -3735,16 +3735,17 @@ class JS_FRIEND_API(ReadOnlyCompileOptio
 
   protected:
     ReadOnlyCompileOptions()
       : TransitiveCompileOptions(),
         lineno(1),
         column(0),
         scriptSourceOffset(0),
         isRunOnce(false),
+        nonSyntacticScope(false),
         noScriptRval(false)
     { }
 
     // Set all POD options (those not requiring reference counts, copies,
     // rooting, or other hand-holding) to their values in |rhs|.
     void copyPODOptions(const ReadOnlyCompileOptions& rhs);
 
   public:
@@ -3770,16 +3771,17 @@ class JS_FRIEND_API(ReadOnlyCompileOptio
     // parse node positions are offsets within the ScriptSource's full text,
     // and LazyScripts indicate their substring of the full source by its
     // starting and ending offsets within the full text. This
     // scriptSourceOffset field lets the frontend convert between these
     // offsets and offsets within the substring presented for compilation.
     unsigned scriptSourceOffset;
     // isRunOnce only applies to non-function scripts.
     bool isRunOnce;
+    bool nonSyntacticScope;
     bool noScriptRval;
 
   private:
     void operator=(const ReadOnlyCompileOptions&) = delete;
 };
 
 /**
  * Compilation options, with dynamic lifetime. An instance of this type
@@ -3839,16 +3841,17 @@ class JS_FRIEND_API(OwningCompileOptions
     OwningCompileOptions& setUTF8(bool u) { utf8 = u; return *this; }
     OwningCompileOptions& setColumn(unsigned c) { column = c; return *this; }
     OwningCompileOptions& setScriptSourceOffset(unsigned o) { scriptSourceOffset = o; return *this; }
     OwningCompileOptions& setIsRunOnce(bool once) { isRunOnce = once; return *this; }
     OwningCompileOptions& setNoScriptRval(bool nsr) { noScriptRval = nsr; return *this; }
     OwningCompileOptions& setSelfHostingMode(bool shm) { selfHostingMode = shm; return *this; }
     OwningCompileOptions& setCanLazilyParse(bool clp) { canLazilyParse = clp; return *this; }
     OwningCompileOptions& setSourceIsLazy(bool l) { sourceIsLazy = l; return *this; }
+    OwningCompileOptions& setNonSyntacticScope(bool n) { nonSyntacticScope = n; return *this; }
     OwningCompileOptions& setIntroductionType(const char* t) { introductionType = t; return *this; }
     bool setIntroductionInfo(JSContext* cx, const char* introducerFn, const char* intro,
                              unsigned line, JSScript* script, uint32_t offset)
     {
         if (!setIntroducerFilename(cx, introducerFn))
             return false;
         introductionType = intro;
         introductionLineno = line;
@@ -3931,16 +3934,17 @@ class MOZ_STACK_CLASS JS_FRIEND_API(Comp
     CompileOptions& setUTF8(bool u) { utf8 = u; return *this; }
     CompileOptions& setColumn(unsigned c) { column = c; return *this; }
     CompileOptions& setScriptSourceOffset(unsigned o) { scriptSourceOffset = o; return *this; }
     CompileOptions& setIsRunOnce(bool once) { isRunOnce = once; return *this; }
     CompileOptions& setNoScriptRval(bool nsr) { noScriptRval = nsr; return *this; }
     CompileOptions& setSelfHostingMode(bool shm) { selfHostingMode = shm; return *this; }
     CompileOptions& setCanLazilyParse(bool clp) { canLazilyParse = clp; return *this; }
     CompileOptions& setSourceIsLazy(bool l) { sourceIsLazy = l; return *this; }
+    CompileOptions& setNonSyntacticScope(bool n) { nonSyntacticScope = n; return *this; }
     CompileOptions& setIntroductionType(const char* t) { introductionType = t; return *this; }
     CompileOptions& setIntroductionInfo(const char* introducerFn, const char* intro,
                                         unsigned line, JSScript* script, uint32_t offset)
     {
         introducerFilename_ = introducerFn;
         introductionType = intro;
         introductionLineno = line;
         introductionScriptRoot = script;
--- a/js/src/vm/HelperThreads.cpp
+++ b/js/src/vm/HelperThreads.cpp
@@ -497,17 +497,19 @@ ScriptParseTask::ScriptParseTask(JSConte
 
 void
 ScriptParseTask::parse(JSContext* cx)
 {
     auto& range = data.as<TwoByteChars>();
     SourceBufferHolder srcBuf(range.begin().get(), range.length(), SourceBufferHolder::NoOwnership);
     Rooted<ScriptSourceObject*> sourceObject(cx);
 
-    JSScript* script = frontend::CompileGlobalScript(cx, alloc, ScopeKind::Global,
+    ScopeKind scopeKind = options.nonSyntacticScope ? ScopeKind::NonSyntactic : ScopeKind::Global;
+
+    JSScript* script = frontend::CompileGlobalScript(cx, alloc, scopeKind,
                                                      options, srcBuf,
                                                      /* sourceObjectOut = */ &sourceObject.get());
     if (script)
         scripts.infallibleAppend(script);
     if (sourceObject)
         sourceObjects.infallibleAppend(sourceObject);
 }
 
--- a/layout/generic/TextDrawTarget.h
+++ b/layout/generic/TextDrawTarget.h
@@ -63,17 +63,17 @@ public:
     LayoutDeviceRect layoutBoundsRect = LayoutDeviceRect::FromAppUnits(
         aBounds, appUnitsPerDevPixel);
     LayoutDeviceRect layoutClipRect = layoutBoundsRect;
     mBoundsRect = aSc.ToRelativeLayoutRect(layoutBoundsRect);
 
     // Add 1 pixel of dirty area around clip rect to allow us to paint
     // antialiased pixels beyond the measured text extents.
     layoutClipRect.Inflate(1);
-    mClipRect = aSc.ToRelativeLayoutRect(layoutClipRect);
+    mClipStack.AppendElement(layoutClipRect);
 
     mBackfaceVisible = !aItem->BackfaceIsHidden();
 
     mBuilder.Save();
   }
 
   // Prevent this from being copied
   TextDrawTarget(const TextDrawTarget& src) = delete;
@@ -166,37 +166,37 @@ public:
                   && sizeof(aBuffer.mGlyphs[0]) == sizeof(glyphs[0])
                   && sizeof(aBuffer.mGlyphs[0].mPosition) == sizeof(glyphs[0].point)
                   , "glyph buf types don't match");
 
     wr::GlyphOptions glyphOptions;
     glyphOptions.render_mode = wr::ToFontRenderMode(aOptions.mAntialiasMode, GetPermitSubpixelAA());
     glyphOptions.flags = mWRGlyphFlags;
 
-    mManager->WrBridge()->PushGlyphs(mBuilder, glyphs, aFont,
-                                     color, mSc, mBoundsRect, mClipRect,
-                                     mBackfaceVisible, &glyphOptions);
+    mManager->WrBridge()->PushGlyphs(mBuilder, glyphs, aFont, color, mSc,
+                                     mBoundsRect, ClipRect(), mBackfaceVisible,
+                                     &glyphOptions);
   }
 
   void
   PushClipRect(const Rect &aRect) override {
-    auto rect = mSc.ToRelativeLayoutRect(LayoutDeviceRect::FromUnknownRect(aRect));
-    auto clipId = mBuilder.DefineClip(Nothing(), Nothing(), rect);
-    mBuilder.PushClip(clipId);
+    LayoutDeviceRect rect = LayoutDeviceRect::FromUnknownRect(aRect);
+    rect = rect.Intersect(mClipStack.LastElement());
+    mClipStack.AppendElement(rect);
   }
 
   void
   PopClip() override {
-    mBuilder.PopClip();
+    mClipStack.RemoveElementAt(mClipStack.Length() - 1);
   }
 
   void
   AppendShadow(const wr::Shadow& aShadow)
   {
-    mBuilder.PushShadow(mBoundsRect, mClipRect, mBackfaceVisible, aShadow);
+    mBuilder.PushShadow(mBoundsRect, ClipRect(), mBackfaceVisible, aShadow);
     mHasShadows = true;
   }
 
   void
   TerminateShadows()
   {
     if (mHasShadows) {
       mBuilder.PopAllShadows();
@@ -204,17 +204,17 @@ public:
     }
   }
 
   void
   AppendSelectionRect(const LayoutDeviceRect& aRect, const Color& aColor)
   {
     auto rect = wr::ToLayoutRect(aRect);
     auto color = wr::ToColorF(aColor);
-    mBuilder.PushRect(rect, mClipRect, mBackfaceVisible, color);
+    mBuilder.PushRect(rect, ClipRect(), mBackfaceVisible, color);
   }
 
 
   // This function is basically designed to slide into the decoration drawing
   // code of nsCSSRendering with minimum disruption, to minimize the
   // chances of implementation drift. As such, it mostly looks like a call
   // to a skia-style StrokeLine method: two end-points, with a thickness
   // and style. Notably the end-points are *centered* in the block direction,
@@ -266,17 +266,17 @@ public:
       // Wavy lines should go through AppendWavyDecoration
       case NS_STYLE_TEXT_DECORATION_STYLE_WAVY:
       // Double lines should be lowered to two solid lines
       case NS_STYLE_TEXT_DECORATION_STYLE_DOUBLE:
       default:
         MOZ_CRASH("TextDrawTarget received unsupported line style");
     }
 
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, decoration);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, decoration);
   }
 
   // Seperated out from AppendDecoration because Wavy Lines are completely
   // different, and trying to merge the concept is more of a mess than it's
   // worth.
   void
   AppendWavyDecoration(const Rect& aBounds,
                        const float aThickness,
@@ -289,20 +289,24 @@ public:
       LayoutDeviceRect::FromUnknownRect(aBounds));
     decoration.wavyLineThickness = aThickness;
     decoration.color = wr::ToColorF(aColor);
     decoration.orientation = aVertical
       ? wr::LineOrientation::Vertical
       : wr::LineOrientation::Horizontal;
     decoration.style = wr::LineStyle::Wavy;
 
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, decoration);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, decoration);
   }
 
 private:
+  wr::LayerRect ClipRect()
+  {
+    return mSc.ToRelativeLayoutRect(mClipStack.LastElement());
+  }
   // Whether anything unsupported was encountered. Currently:
   //
   // * Synthetic bold/italics
   // * SVG fonts
   // * Unserializable fonts
   // * Tofu glyphs
   // * Pratial ligatures
   // * Text writing-mode
@@ -314,17 +318,17 @@ private:
 
   // Things used to push to webrender
   wr::DisplayListBuilder& mBuilder;
   const layers::StackingContextHelper& mSc;
   layers::WebRenderLayerManager* mManager;
 
   // Computed facts
   wr::LayerRect mBoundsRect;
-  wr::LayerRect mClipRect;
+  nsTArray<LayoutDeviceRect> mClipStack;
   bool mBackfaceVisible;
 
   wr::FontInstanceFlags mWRGlyphFlags = {0};
 
   // The rest of this is dummy implementations of DrawTarget's API
 public:
   DrawTargetType GetType() const override {
     return DrawTargetType::SOFTWARE_RASTER;
@@ -398,17 +402,17 @@ public:
 
   void FillRect(const Rect &aRect,
                 const Pattern &aPattern,
                 const DrawOptions &aOptions = DrawOptions()) override {
     MOZ_RELEASE_ASSERT(aPattern.GetType() == PatternType::COLOR);
 
     auto rect = mSc.ToRelativeLayoutRect(LayoutDeviceRect::FromUnknownRect(aRect));
     auto color = wr::ToColorF(static_cast<const ColorPattern&>(aPattern).mColor);
-    mBuilder.PushRect(rect, mClipRect, mBackfaceVisible, color);
+    mBuilder.PushRect(rect, ClipRect(), mBackfaceVisible, color);
   }
 
   void StrokeRect(const Rect &aRect,
                   const Pattern &aPattern,
                   const StrokeOptions &aStrokeOptions,
                   const DrawOptions &aOptions) override {
     MOZ_RELEASE_ASSERT(aPattern.GetType() == PatternType::COLOR &&
                        aStrokeOptions.mDashLength == 0);
@@ -418,34 +422,34 @@ public:
     line.color = wr::ToColorF(static_cast<const ColorPattern&>(aPattern).mColor);
     line.style = wr::LineStyle::Solid;
 
     // Top horizontal line
     LayoutDevicePoint top(aRect.x, aRect.y - aStrokeOptions.mLineWidth / 2);
     LayoutDeviceSize horiSize(aRect.width, aStrokeOptions.mLineWidth);
     line.bounds = mSc.ToRelativeLayoutRect(LayoutDeviceRect(top, horiSize));
     line.orientation = wr::LineOrientation::Horizontal;
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, line);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, line);
 
     // Bottom horizontal line
     LayoutDevicePoint bottom(aRect.x, aRect.YMost() - aStrokeOptions.mLineWidth / 2);
     line.bounds = mSc.ToRelativeLayoutRect(LayoutDeviceRect(bottom, horiSize));
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, line);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, line);
 
     // Left vertical line
     LayoutDevicePoint left(aRect.x + aStrokeOptions.mLineWidth / 2, aRect.y + aStrokeOptions.mLineWidth / 2);
     LayoutDeviceSize vertSize(aStrokeOptions.mLineWidth, aRect.height - aStrokeOptions.mLineWidth);
     line.bounds = mSc.ToRelativeLayoutRect(LayoutDeviceRect(left, vertSize));
     line.orientation = wr::LineOrientation::Vertical;
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, line);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, line);
 
     // Right vertical line
     LayoutDevicePoint right(aRect.XMost() - aStrokeOptions.mLineWidth / 2, aRect.y + aStrokeOptions.mLineWidth / 2);
     line.bounds = mSc.ToRelativeLayoutRect(LayoutDeviceRect(right, vertSize));
-    mBuilder.PushLine(mClipRect, mBackfaceVisible, line);
+    mBuilder.PushLine(ClipRect(), mBackfaceVisible, line);
   }
 
   void StrokeLine(const Point &aStart,
                   const Point &aEnd,
                   const Pattern &aPattern,
                   const StrokeOptions &aStrokeOptions,
                   const DrawOptions &aOptions) override {
     MOZ_CRASH("TextDrawTarget: Method shouldn't be called");
new file mode 100644
--- /dev/null
+++ b/layout/generic/crashtests/1431781-2.html
@@ -0,0 +1,26 @@
+<html>
+<head>
+<style>
+body { column-width: 1px; }
+dd { height: 13px }
+</style>
+<script>
+  function go() {
+    document.body.style.width = "1240px";
+    document.body.offsetHeight;
+  }
+</script>
+</head>
+<body onload="go()">
+<span>
+<span>
+  a
+  <meter></meter>
+  <dl>
+    <dd>
+      b
+      c
+      d
+      <menu></menu>
+      e
+      f
new file mode 100644
--- /dev/null
+++ b/layout/generic/crashtests/1431781.html
@@ -0,0 +1,22 @@
+<style>
+body { column-width: 0px }
+dd { height: 1vmax }
+</style>
+<script>
+function eh1() {
+  a.clientHeight;
+  window.document.linkColor = "1";
+}
+</script>
+<content id="a">
+</div>
+<data>
+a
+<meter></meter>
+<dl>
+<dd>
+<style onload="eh1()"></style>
+<m>a
+a
+a<menu>a
+a
--- a/layout/generic/crashtests/crashtests.list
+++ b/layout/generic/crashtests/crashtests.list
@@ -672,8 +672,10 @@ load 1381134.html
 load 1381134-2.html
 load 1401420-1.html
 load 1401709.html
 load 1401807.html
 load 1405443.html
 load 1415185.html
 load 1416544.html
 load 1427824.html
+load 1431781.html
+load 1431781-2.html
--- a/layout/generic/nsAbsoluteContainingBlock.cpp
+++ b/layout/generic/nsAbsoluteContainingBlock.cpp
@@ -162,18 +162,26 @@ nsAbsoluteContainingBlock::Reflow(nsCont
       }
     }
     if (kidNeedsReflow && !aPresContext->HasPendingInterrupt()) {
       // Reflow the frame
       nsReflowStatus kidStatus;
       ReflowAbsoluteFrame(aDelegatingFrame, aPresContext, aReflowInput, cb,
                           aFlags, kidFrame, kidStatus, aOverflowAreas);
       nsIFrame* nextFrame = kidFrame->GetNextInFlow();
-      if (!kidStatus.IsFullyComplete() &&
+      if ((kidStatus.IsInlineBreakBefore() ||
+           !kidStatus.IsFullyComplete()) &&
           aDelegatingFrame->IsFrameOfType(nsIFrame::eCanContainOverflowContainers)) {
+        // XXX it's unclear how we should handle 'page-break-inside:avoid' on
+        // abs.pos. boxes -- ignore it for now by setting the status to
+        // Incomplete (which will probably fragment it).
+        if (kidStatus.IsInlineBreakBefore()) {
+          kidStatus.Reset();
+          kidStatus.SetIncomplete();
+        }
         // Need a continuation
         if (!nextFrame) {
           nextFrame =
             aPresContext->PresShell()->FrameConstructor()->
               CreateContinuingFrame(aPresContext, kidFrame, aDelegatingFrame);
         }
         // Add it as an overflow container.
         //XXXfr This is a hack to fix some of our printing dataloss.
--- a/layout/generic/nsContainerFrame.cpp
+++ b/layout/generic/nsContainerFrame.cpp
@@ -1155,16 +1155,23 @@ nsContainerFrame::ReflowOverflowContaine
 
   nsOverflowContinuationTracker tracker(this, false, false);
   bool shouldReflowAllKids = aReflowInput.ShouldReflowAllKids();
 
   for (nsIFrame* frame : *overflowContainers) {
     if (frame->GetPrevInFlow()->GetParent() != GetPrevInFlow()) {
       // frame's prevInFlow has moved, skip reflowing this frame;
       // it will get reflowed once it's been placed
+      if (GetNextInFlow()) {
+        // We report OverflowIncomplete status in this case to avoid our parent
+        // deleting our next-in-flows which might destroy non-empty frames.
+        nsReflowStatus status;
+        status.SetOverflowIncomplete();
+        aStatus.MergeCompletionStatusFrom(status);
+      }
       continue;
     }
     // If the available vertical height has changed, we need to reflow
     // even if the frame isn't dirty.
     if (shouldReflowAllKids || NS_SUBTREE_DIRTY(frame)) {
       // Get prev-in-flow
       nsIFrame* prevInFlow = frame->GetPrevInFlow();
       NS_ASSERTION(prevInFlow,
--- a/layout/reftests/selection/reftest.list
+++ b/layout/reftests/selection/reftest.list
@@ -29,17 +29,17 @@ random-if(Android) needs-focus != pseudo
 # These tests uses Highlight and HighlightText color keywords, they are not same as text selection color on Mac.
 random-if(Android) fails-if(cocoaWidget) needs-focus == non-themed-widget.html non-themed-widget-ref.html
 random-if(Android) fails-if(cocoaWidget) needs-focus == themed-widget.html themed-widget-ref.html
 == addrange-1.html addrange-ref.html
 fuzzy-if(skiaContent,1,1200) == addrange-2.html addrange-ref.html
 == splitText-normalize.html splitText-normalize-ref.html
 == modify-range.html modify-range-ref.html
 == dom-mutations.html dom-mutations-ref.html
-fuzzy-if(OSX==1010,9,1) fuzzy-if(OSX&&skiaContent,6,1) fuzzy-if(skiaContent&&!OSX,1,2138) fails-if(webrender) == trailing-space-1.html trailing-space-1-ref.html # Bug 1414125
+fuzzy-if(OSX==1010,9,1) fuzzy-if(OSX&&skiaContent,6,1) fuzzy-if(skiaContent&&!OSX,1,2138) == trailing-space-1.html trailing-space-1-ref.html
 != invalidation-1-ref.html invalidation-2-ref.html
 == invalidation-1a.html invalidation-1-ref.html
 == invalidation-1b.html invalidation-1-ref.html
 == invalidation-1c.html invalidation-1-ref.html
 == invalidation-1d.html invalidation-1-ref.html
 == invalidation-1e.html invalidation-1-ref.html
 == invalidation-1f.html invalidation-1-ref.html
 == invalidation-2a.html invalidation-2-ref.html
--- a/layout/reftests/text-shadow/reftest.list
+++ b/layout/reftests/text-shadow/reftest.list
@@ -8,17 +8,17 @@ random-if(Android) == basic-negcoord.xul
 == blur-opacity.html blur-opacity-ref.html
 
 == basic.html basic-ref.html
 == basic-negcoord.html basic-negcoord-ref.html
 == basic-opacity.html basic-opacity-ref.html
 != blur.html blur-notref.html
 == color-inherit.html color-inherit-ref.html
 == color-parserorder.html color-parserorder-ref.html
-fails-if(webrender) == decorations-multiple-zorder.html decorations-multiple-zorder-ref.html # Bug 1414125
+== decorations-multiple-zorder.html decorations-multiple-zorder-ref.html
 == multiple-noblur.html multiple-noblur-ref.html
 == quirks-decor-noblur.html quirks-decor-noblur-ref.html
 == standards-decor-noblur.html standards-decor-noblur-ref.html
 == padding-decoration.html padding-decoration-ref.html
 == textindent.html textindent-ref.html
 == lineoverflow.html lineoverflow-ref.html
 
 == overflow-not-scrollable-1.html overflow-not-scrollable-1-ref.html
--- a/netwerk/protocol/http/nsHttpConnection.cpp
+++ b/netwerk/protocol/http/nsHttpConnection.cpp
@@ -90,16 +90,17 @@ nsHttpConnection::nsHttpConnection()
     , mEarlyDataNegotiated(false)
     , mDid0RTTSpdy(false)
     , mFastOpen(false)
     , mFastOpenStatus(TFO_NOT_SET)
     , mForceSendDuringFastOpenPending(false)
     , mReceivedSocketWouldBlockDuringFastOpen(false)
     , mCheckNetworkStallsWithTFO(false)
     , mLastRequestBytesSentTime(0)
+    , mBootstrappedTimingsSet(false)
 {
     LOG(("Creating nsHttpConnection @%p\n", this));
 
     // the default timeout is for when this connection has not yet processed a
     // transaction
     static const PRIntervalTime k5Sec = PR_SecondsToInterval(5);
     mIdleTimeout =
         (k5Sec < gHttpHandler->IdleTimeout()) ? k5Sec : gHttpHandler->IdleTimeout();
@@ -626,20 +627,23 @@ nsHttpConnection::Activate(nsAHttpTransa
     MOZ_ASSERT(OnSocketThread(), "not on socket thread");
     LOG(("nsHttpConnection::Activate [this=%p trans=%p caps=%x]\n",
          this, trans, caps));
 
     if (!mExperienced && !trans->IsNullTransaction()) {
         if (!mFastOpen) {
             mExperienced = true;
         }
-        nsHttpTransaction *hTrans = trans->QueryHttpTransaction();
-        if (hTrans) {
-            hTrans->BootstrapTimings(mBootstrappedTimings);
-            SetUrgentStartPreferred(hTrans->ClassOfService() & nsIClassOfService::UrgentStart);
+        if (mBootstrappedTimingsSet) {
+            mBootstrappedTimingsSet = false;
+            nsHttpTransaction *hTrans = trans->QueryHttpTransaction();
+            if (hTrans) {
+                hTrans->BootstrapTimings(mBootstrappedTimings);
+                SetUrgentStartPreferred(hTrans->ClassOfService() & nsIClassOfService::UrgentStart);
+            }
         }
         mBootstrappedTimings = TimingStruct();
     }
 
     mTransactionCaps = caps;
     mPriority = pri;
     if (mTransaction && mUsingSpdyVersion) {
         return AddTransaction(trans, pri);
@@ -2516,28 +2520,29 @@ nsHttpConnection::SetFastOpenStatus(uint
             }
         }
     }
 }
 
 void
 nsHttpConnection::BootstrapTimings(TimingStruct times)
 {
+    mBootstrappedTimingsSet = true;
     mBootstrappedTimings = times;
 }
 
 void
 nsHttpConnection::SetEvent(nsresult aStatus)
 {
   switch (aStatus) {
   case NS_NET_STATUS_RESOLVING_HOST:
     mBootstrappedTimings.domainLookupStart = TimeStamp::Now();
     break;
   case NS_NET_STATUS_RESOLVED_HOST:
-    mBootstrappedTimings.domainLookupStart = TimeStamp::Now();
+    mBootstrappedTimings.domainLookupEnd = TimeStamp::Now();
     break;
   case NS_NET_STATUS_CONNECTING_TO:
     mBootstrappedTimings.connectStart = TimeStamp::Now();
     break;
   case NS_NET_STATUS_CONNECTED_TO:
   {
     TimeStamp tnow = TimeStamp::Now();
     mBootstrappedTimings.tcpConnectEnd = tnow;
--- a/netwerk/protocol/http/nsHttpConnection.h
+++ b/netwerk/protocol/http/nsHttpConnection.h
@@ -414,16 +414,17 @@ private:
     bool                           mReceivedSocketWouldBlockDuringFastOpen;
     bool                           mCheckNetworkStallsWithTFO;
     PRIntervalTime                 mLastRequestBytesSentTime;
 
 public:
     void BootstrapTimings(TimingStruct times);
 private:
     TimingStruct    mBootstrappedTimings;
+    bool            mBootstrappedTimingsSet;
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsHttpConnection, NS_HTTPCONNECTION_IID)
 
 } // namespace net
 } // namespace mozilla
 
 #endif // nsHttpConnection_h__
--- a/taskcluster/ci/artifact-build/kind.yml
+++ b/taskcluster/ci/artifact-build/kind.yml
@@ -29,14 +29,13 @@ jobs:
         worker:
             max-run-time: 36000
         run:
             using: mozharness
             actions: [get-secrets build]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_artifact.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             tooltool-downloads: public
             need-xvfb: true
             keep-artifacts: false
--- a/taskcluster/ci/build/linux.yml
+++ b/taskcluster/ci/build/linux.yml
@@ -10,17 +10,16 @@ linux64/opt:
     worker:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
@@ -70,17 +69,16 @@ linux64/pgo:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         options: [enable-pgo]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
@@ -100,17 +98,16 @@ linux64-fuzzing/debug:
         env:
             PERFHERDER_EXTRA_OPTIONS: fuzzing
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: fuzzing-debug
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
@@ -129,17 +126,16 @@ linux64/debug:
     worker:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
@@ -164,17 +160,16 @@ linux64-devedition-nightly/opt:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
             - disable_signing.py
-            - balrog/production.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         custom-build-variant-cfg: devedition
     run-on-projects: ['mozilla-beta']
     toolchains:
@@ -197,17 +192,16 @@ linux64-base-toolchains/opt:
         env:
             PERFHERDER_EXTRA_OPTIONS: base-toolchains
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-3.9
         - linux64-gcc-4.9
         - linux64-rust-1.22
@@ -227,17 +221,16 @@ linux64-base-toolchains/debug:
         env:
             PERFHERDER_EXTRA_OPTIONS: base-toolchains
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-3.9
         - linux64-gcc-4.9
@@ -249,24 +242,24 @@ linux/opt:
     index:
         product: firefox
         job-name: linux-opt
     treeherder:
         platform: linux32/opt
         symbol: B
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
@@ -277,24 +270,24 @@ linux/debug:
     index:
         product: firefox
         job-name: linux-debug
     treeherder:
         platform: linux32/debug
         symbol: B
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: debug
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
@@ -306,25 +299,25 @@ linux/pgo:
     index:
         product: firefox
         job-name: linux-pgo
     treeherder:
         platform: linux32/pgo
         symbol: B
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         options: [enable-pgo]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
@@ -336,26 +329,26 @@ linux-rusttests/opt:
         product: firefox
         job-name: linux-rusttests-opt
     treeherder:
         platform: linux32/opt
         symbol: BR
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 5400
         env:
             PERFHERDER_EXTRA_OPTIONS: rusttests
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
     toolchains:
@@ -370,26 +363,26 @@ linux-rusttests/debug:
         product: firefox
         job-name: linux-rusttests-debug
     treeherder:
         platform: linux32/debug
         symbol: BR
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 5400
         env:
             PERFHERDER_EXTRA_OPTIONS: rusttests
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
     toolchains:
@@ -408,25 +401,25 @@ linux-devedition-nightly/opt:
         product: devedition
         job-name: linux-opt
         type: nightly
     treeherder:
         platform: linux32-devedition/opt
         symbol: N
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
             - disable_signing.py
-            - balrog/production.py
             - taskcluster_nightly.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
         custom-build-variant-cfg: devedition
     run-on-projects: ['mozilla-beta']
     toolchains:
@@ -445,16 +438,17 @@ linux-nightly/opt:
         product: firefox
         job-name: linux-opt
         type: nightly
     treeherder:
         platform: linux32/opt
         symbol: N
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
+        docker-image: {in-tree: debian7-i386-build}
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_32_builds.py
             - disable_signing.py
@@ -484,17 +478,16 @@ linux64-asan/opt:
             PERFHERDER_EXTRA_OPTIONS: "opt asan"
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-6-pre
         - linux64-gcc
@@ -516,17 +509,16 @@ linux64-asan-fuzzing/opt:
             PERFHERDER_EXTRA_OPTIONS: asan-fuzzing
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: fuzzing-asan-tc
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-6-pre
         - linux64-gcc
@@ -547,17 +539,16 @@ linux64-asan-reporter/opt:
             PERFHERDER_EXTRA_OPTIONS: asan-reporter
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-reporter-tc
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-6-pre
         - linux64-gcc
@@ -578,17 +569,16 @@ linux64-asan/debug:
             PERFHERDER_EXTRA_OPTIONS: "debug asan"
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: asan-tc-and-debug
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-6-pre
         - linux64-gcc
@@ -642,17 +632,16 @@ linux64-noopt/debug:
     worker:
         max-run-time: 3600
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: noopt-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
     toolchains:
@@ -676,17 +665,16 @@ linux64-rusttests/opt:
         env:
             PERFHERDER_EXTRA_OPTIONS: rusttests
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
     toolchains:
@@ -710,17 +698,16 @@ linux64-rusttests/debug:
         env:
             PERFHERDER_EXTRA_OPTIONS: rusttests
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: rusttests-debug
         tooltool-downloads: public
         keep-artifacts: false
         need-xvfb: true
     run-on-projects: ['trunk', 'try']
     toolchains:
@@ -743,17 +730,16 @@ linux64-jsdcov/opt:
     worker:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang
         - linux64-gcc
         - linux64-rust
@@ -773,17 +759,16 @@ linux64-ccov/opt:
     worker:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: code-coverage
         tooltool-downloads: public
         need-xvfb: true
     toolchains:
         - linux64-clang-4
         - linux64-rust
@@ -802,17 +787,16 @@ linux64-add-on-devel/opt:
     worker:
         max-run-time: 36000
     run:
         using: mozharness
         actions: [get-secrets build check-test update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_linux_64_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: add-on-devel
         tooltool-downloads: public
         need-xvfb: true
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
     toolchains:
         - linux64-clang
--- a/taskcluster/ci/build/macosx.yml
+++ b/taskcluster/ci/build/macosx.yml
@@ -154,17 +154,16 @@ macosx64-noopt/debug:
         env:
             TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
     run:
         using: mozharness
         actions: [get-secrets build update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: cross-noopt-debug
         tooltool-downloads: internal
         keep-artifacts: false
     run-on-projects: ['trunk', 'try']
     toolchains:
         - linux64-cctools-port
@@ -190,17 +189,16 @@ macosx64-add-on-devel/opt:
         env:
             TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
     run:
         using: mozharness
         actions: [get-secrets build update]
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_mac_64_cross_builds.py
-            - balrog/production.py
         script: "mozharness/scripts/fx_desktop_build.py"
         secrets: true
         custom-build-variant-cfg: add-on-devel
         tooltool-downloads: internal
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
     toolchains:
         - linux64-cctools-port
         - linux64-clang
--- a/taskcluster/ci/build/windows.yml
+++ b/taskcluster/ci/build/windows.yml
@@ -216,17 +216,17 @@ win32-nightly/opt:
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
     worker:
         max-run-time: 7200
         env:
             TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/releng.manifest"
     run:
         using: mozharness
-        actions: [clone-tools, build, check-test, update]
+        actions: [build, check-test, update]
         options: [append-env-variables-from-configs]
         script: mozharness/scripts/fx_desktop_build.py
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - builds/taskcluster_sub_win32/opt.py
             - disable_signing.py
@@ -252,17 +252,17 @@ win64-nightly/opt:
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-win2012
     worker:
         max-run-time: 7200
         env:
             TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win64/releng.manifest"
     run:
         using: mozharness
-        actions: [clone-tools, build, check-test, update]
+        actions: [build, check-test, update]
         options: [append-env-variables-from-configs]
         script: mozharness/scripts/fx_desktop_build.py
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/opt.py
             - disable_signing.py
@@ -318,17 +318,16 @@ win32-add-on-devel/opt:
         using: mozharness
         options: [append-env-variables-from-configs]
         script: "mozharness/scripts/fx_desktop_build.py"
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win32.py
             - builds/taskcluster_sub_win32/addondevel.py
-            - balrog/production.py
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
     toolchains:
         - win64-clang-cl
         - win64-rust
         - win64-sccache
 
 win64-add-on-devel/opt:
     description: "Windows64 add-on-devel"
@@ -348,17 +347,16 @@ win64-add-on-devel/opt:
         using: mozharness
         options: [append-env-variables-from-configs]
         script: "mozharness/scripts/fx_desktop_build.py"
         config:
             - builds/releng_base_firefox.py
             - builds/taskcluster_base_windows.py
             - builds/taskcluster_base_win64.py
             - builds/taskcluster_sub_win64/addondevel.py
-            - balrog/production.py
     run-on-projects: ['mozilla-beta', 'mozilla-release', 'mozilla-esr45']
     toolchains:
         - win64-clang-cl
         - win64-rust
         - win64-sccache
 
 win64-noopt/debug:
     description: "Win64 No-optimize Debug"
@@ -650,16 +648,17 @@ win32-mingw32/debug:
         platform: windows-mingw32-32/debug
         symbol: B
         tier: 2
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         max-run-time: 7200
     run:
         using: mozharness
+        actions: [build, check-test]
         script: mozharness/scripts/fx_desktop_build.py
         config:
             - builds/releng_base_firefox.py
             - builds/releng_base_windows_32_mingw_builds.py
         need-xvfb: false
     toolchains:
         - linux64-gcc
         - mingw32-rust
--- a/taskcluster/ci/hazard/kind.yml
+++ b/taskcluster/ci/hazard/kind.yml
@@ -15,17 +15,17 @@ transforms:
 
 job-defaults:
     treeherder:
         kind: build
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
         max-run-time: 36000
-        docker-image: {in-tree: desktop-build}
+        docker-image: {in-tree: debian7-amd64-build}
 
 jobs:
     linux64-shell-haz/debug:
         description: "JS Shell Hazard Analysis Linux"
         index:
             product: firefox
             job-name: shell-haz-debug
         treeherder:
--- a/taskcluster/ci/l10n/kind.yml
+++ b/taskcluster/ci/l10n/kind.yml
@@ -75,48 +75,41 @@ job-template:
             linux64-l10n: linux64/opt
             linux-l10n: linux32/opt
             macosx64: osx-cross/opt
             android-api-16-l10n: android-4-0-armv7-api16/opt
    mozharness:
       config:
          by-build-platform:
             linux-l10n:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux32.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux32.py
             linux64-l10n:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux64.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux64.py
             macosx64:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/macosx64.py
+               - single_locale/tc_common.py
                - single_locale/tc_macosx64.py
             android-api-16-l10n:
                - single_locale/{project}_android-api-16.py
+               - single_locale/tc_common.py
                - single_locale/tc_android-api-16.py
       # no default, so we fail on new entries
       options:
-         by-build-platform:
-            linux-l10n:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux32.py
-               - total-chunks=1
-               - this-chunk=1
-            linux64-l10n:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux64.py
-               - total-chunks=1
-               - this-chunk=1
-            macosx64:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/macosx64.py
-               - total-chunks=1
-               - this-chunk=1
-            default:
-               - total-chunks=1
-               - this-chunk=1
+         - total-chunks=1
+         - this-chunk=1
       actions:
          by-build-platform:
             default: [clone-locales list-locales setup repack summary]
             android-api-16-l10n: [get-secrets
                                   clone-locales list-locales setup repack
                                   upload-repacks summary]
       script:
          by-build-platform:
--- a/taskcluster/ci/nightly-l10n/kind.yml
+++ b/taskcluster/ci/nightly-l10n/kind.yml
@@ -144,97 +144,93 @@ job-template:
          android-api-16-nightly:
             EN_US_PACKAGE_NAME: target.apk
             EN_US_BINARY_URL:
                task-reference: https://queue.taskcluster.net/v1/task/<unsigned-build>/artifacts/public/build/en-US
    mozharness:
       config:
          by-build-platform:
             linux-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux32.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux32.py
                - taskcluster_nightly.py
             linux64-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux64.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux64.py
                - taskcluster_nightly.py
             macosx64-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/macosx64.py
+               - single_locale/tc_common.py
                - single_locale/tc_macosx64.py
                - taskcluster_nightly.py
-            win32-nightly: []
-            win64-nightly: []
+            win32-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/win32.py
+               - single_locale/tc_common.py
+               - single_locale/tc_win32.py
+               - taskcluster_nightly.py
+            win64-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/win64.py
+               - single_locale/tc_common.py
+               - single_locale/tc_win64.py
+               - taskcluster_nightly.py
             linux-devedition-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux_devedition.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux32.py
                - taskcluster_nightly.py
             linux64-devedition-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/linux64_devedition.py
+               - single_locale/tc_common.py
                - single_locale/tc_linux64.py
                - taskcluster_nightly.py
             macosx64-devedition-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/macosx64_devedition.py
+               - single_locale/tc_common.py
                - single_locale/tc_macosx64.py
                - taskcluster_nightly.py
-            win32-devedition-nightly: []
-            win64-devedition-nightly: []
+            win32-devedition-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/win32_devedition.py
+               - single_locale/tc_common.py
+               - single_locale/tc_win32.py
+               - taskcluster_nightly.py
+            win64-devedition-nightly:
+               - single_locale/production.py
+               - single_locale/{project}.py
+               - single_locale/win64_devedition.py
+               - single_locale/tc_common.py
+               - single_locale/tc_win64.py
+               - taskcluster_nightly.py
             android-api-16-nightly:
                - taskcluster_nightly.py
                - single_locale/{project}_android-api-16.py
+               - single_locale/tc_common.py
                - single_locale/tc_android-api-16.py
       # no default, so we fail on new entries
       options:
-         by-build-platform:
-            linux-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux32.py
-            linux64-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux64.py
-            macosx64-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/macosx64.py
-            win32-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/win32.py
-               - config=single_locale/tc_win32.py
-               - config=taskcluster_nightly.py
-               - revision=$GECKO_HEAD_REV
-            win64-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/win64.py
-               - config=single_locale/tc_win64.py
-               - config=taskcluster_nightly.py
-               - revision=$GECKO_HEAD_REV
-            linux-devedition-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux_devedition.py
-            linux64-devedition-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/linux64_devedition.py
-            macosx64-devedition-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/macosx64_devedition.py
-            win32-devedition-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/win32_devedition.py
-               - config=single_locale/tc_win32.py
-               - config=taskcluster_nightly.py
-               - revision=$GECKO_HEAD_REV
-            win64-devedition-nightly:
-               - environment-config=single_locale/production.py
-               - branch-config=single_locale/{project}.py
-               - platform-config=single_locale/win64_devedition.py
-               - config=single_locale/tc_win64.py
-               - config=taskcluster_nightly.py
-               - revision=$GECKO_HEAD_REV
-            default: []
+         - revision=$GECKO_HEAD_REV
       actions:
          by-build-platform:
             default: ['clone-locales', 'list-locales', 'setup', 'repack',
                       'submit-to-balrog', 'summary']
             android-api-16-nightly: ['get-secrets',
                                      'clone-locales', 'list-locales', 'setup', 'repack',
                                      'upload-repacks', 'submit-to-balrog', 'summary']
       script:
--- a/taskcluster/ci/searchfox/kind.yml
+++ b/taskcluster/ci/searchfox/kind.yml
@@ -33,17 +33,16 @@ jobs:
         worker:
             max-run-time: 36000
         run:
             using: mozharness
             actions: [clobber build]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_searchfox_and_debug.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             tooltool-downloads: public
             keep-artifacts: false
         toolchains:
             - linux64-clang
             - linux64-rust
 
     macosx64-searchfox/debug:
@@ -58,17 +57,16 @@ jobs:
             env:
                 TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest"
         run:
             using: mozharness
             actions: [clobber get-secrets build update]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_mac_64_cross_builds.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             custom-build-variant-cfg: cross-debug-searchfox
             secrets: true
             tooltool-downloads: internal
             keep-artifacts: false
         toolchains:
             - linux64-cctools-port
             - linux64-clang
--- a/taskcluster/ci/spidermonkey/linux.yml
+++ b/taskcluster/ci/spidermonkey/linux.yml
@@ -1,16 +1,16 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 job-defaults:
     worker:
         max-run-time: 36000
-        docker-image: {in-tree: desktop-build}
+        docker-image: {in-tree: debian7-amd64-build}
         env:
             TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/linux64/jsshell.manifest"
 
 sm-package-linux64/opt:
     description: "Spidermonkey source package and test"
     index:
         job-name: sm-package-linux64-opt
     treeherder:
@@ -35,16 +35,18 @@ sm-mozjs-sys-linux64/debug:
 sm-rust-bindings-linux64/debug:
     description: "Build and test the Rust bindings for SpiderMonkey"
     index:
         job-name: sm-rust-bindings-linux64-debug
     treeherder:
         symbol: SM(rust)
         tier: 2
         platform: linux64/debug
+    worker:
+        docker-image: {in-tree: desktop-build}
     run:
         using: spidermonkey-rust-bindings
         spidermonkey-variant: plain
     run-on-projects: ['integration', 'release', 'try']
 
 sm-plain-linux64/debug:
     description: "Spidermonkey Plain"
     index:
@@ -77,16 +79,18 @@ sm-nojit-linux64/opt:
 
 sm-arm-sim-linux32/debug:
     description: "Spidermonkey ARM sim"
     index:
         job-name: sm-arm-sim-linux32-debug
     treeherder:
         platform: linux32/debug
         symbol: SM(arm)
+    worker:
+        docker-image: {in-tree: debian7-i386-build}
     run:
         spidermonkey-variant: arm-sim
 
 sm-arm64-sim-linux64/debug:
     description: "Spidermonkey ARM64 sim"
     index:
         job-name: sm-arm64-sim-linux64-debug
     treeherder:
--- a/taskcluster/ci/static-analysis/kind.yml
+++ b/taskcluster/ci/static-analysis/kind.yml
@@ -32,17 +32,16 @@ jobs:
         worker:
             max-run-time: 36000
         run:
             using: mozharness
             actions: [build]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_stat_and_debug.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             tooltool-downloads: public
             keep-artifacts: false
         toolchains:
             - linux64-clang
             - linux64-rust
             - linux64-sccache
 
@@ -56,17 +55,16 @@ jobs:
         worker:
             max-run-time: 36000
         run:
             using: mozharness
             actions: [build]
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_sub_linux_configs/64_stat_and_opt.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             tooltool-downloads: public
             keep-artifacts: false
         toolchains:
             - linux64-clang
             - linux64-rust
             - linux64-sccache
 
--- a/taskcluster/ci/toolchain/linux.yml
+++ b/taskcluster/ci/toolchain/linux.yml
@@ -251,17 +251,16 @@ linux64-libdmg:
     description: "libdmg-hfsplus toolchain build"
     treeherder:
         kind: build
         platform: toolchains/opt
         symbol: TL(libdmg-hfs+)
         tier: 1
     worker-type: aws-provisioner-v1/gecko-{level}-b-linux
     worker:
-        docker-image: {in-tree: desktop-build}
         max-run-time: 36000
     run:
         using: toolchain-script
         script: build-libdmg-hfsplus.sh
         toolchain-artifact: public/build/dmg.tar.xz
 
 linux64-proguard-jar-repack:
     description: "proguard.jar repack toolchain build"
--- a/taskcluster/ci/valgrind/kind.yml
+++ b/taskcluster/ci/valgrind/kind.yml
@@ -30,17 +30,16 @@ jobs:
             max-run-time: 72000
         run:
             using: mozharness
             actions: [get-secrets build valgrind-test]
             custom-build-variant-cfg: valgrind
             config:
                 - builds/releng_base_firefox.py
                 - builds/releng_base_linux_64_builds.py
-                - balrog/production.py
             script: "mozharness/scripts/fx_desktop_build.py"
             secrets: true
             tooltool-downloads: public
             need-xvfb: true
         toolchains:
             - linux64-clang
             - linux64-gcc
             - linux64-rust
--- a/taskcluster/scripts/builder/build-l10n.sh
+++ b/taskcluster/scripts/builder/build-l10n.sh
@@ -93,16 +93,15 @@ if [ -n "$MOZHARNESS_OPTIONS" ]; then
         options="$options --$option"
     done
 fi
 
 cd /builds/worker
 
 python2.7 $WORKSPACE/build/src/testing/${MOZHARNESS_SCRIPT} \
   --disable-mock \
-  --revision ${GECKO_HEAD_REV} \
   $actions \
   $options \
   ${config_path_cmds} \
   ${config_cmds} \
   --log-level=debug \
   --scm-level=$MOZ_SCM_LEVEL \
   --work-dir=$WORKSPACE/build \
--- a/taskcluster/scripts/builder/build-linux.sh
+++ b/taskcluster/scripts/builder/build-linux.sh
@@ -117,16 +117,15 @@ fi
 
 cd /builds/worker
 
 python2.7 $WORKSPACE/build/src/testing/${MOZHARNESS_SCRIPT} \
   ${config_path_cmds} \
   ${config_cmds} \
   $debug_flag \
   $custom_build_variant_cfg_flag \
-  --disable-mock \
   $actions \
   $options \
   --log-level=debug \
   --scm-level=$MOZ_SCM_LEVEL \
   --work-dir=$WORKSPACE/build \
   --branch=${MH_BRANCH} \
   --build-pool=${MH_BUILD_POOL}
--- a/taskcluster/taskgraph/transforms/build.py
+++ b/taskcluster/taskgraph/transforms/build.py
@@ -19,17 +19,17 @@ def set_defaults(config, jobs):
     """Set defaults, including those that differ per worker implementation"""
     for job in jobs:
         job['treeherder'].setdefault('kind', 'build')
         job['treeherder'].setdefault('tier', 1)
         _, worker_os = worker_type_implementation(job['worker-type'])
         worker = job.setdefault('worker', {})
         worker.setdefault('env', {})
         if worker_os == "linux":
-            worker.setdefault('docker-image', {'in-tree': 'desktop-build'})
+            worker.setdefault('docker-image', {'in-tree': 'debian7-amd64-build'})
             worker['chain-of-trust'] = True
         elif worker_os == "windows":
             worker['chain-of-trust'] = True
 
         yield job
 
 
 @transforms.add
--- a/taskcluster/taskgraph/transforms/job/mozharness.py
+++ b/taskcluster/taskgraph/transforms/job/mozharness.py
@@ -5,17 +5,16 @@
 
 Support for running jobs via mozharness.  Ideally, most stuff gets run this
 way, and certainly anything using mozharness should use this approach.
 
 """
 
 from __future__ import absolute_import, print_function, unicode_literals
 import json
-import slugid
 
 from textwrap import dedent
 
 from taskgraph.util.schema import Schema
 from voluptuous import Required, Optional, Any
 
 from taskgraph.transforms.job import run_job_using
 from taskgraph.transforms.job.common import (
@@ -129,19 +128,19 @@ def mozharness_on_docker_worker_setup(co
     if not run['use-simple-package']:
         raise NotImplementedError("Simple packaging cannot be disabled via"
                                   "'use-simple-package' on docker-workers")
     if not run['use-magic-mh-args']:
         raise NotImplementedError("Cannot disabled mh magic arg passing via"
                                   "'use-magic-mh-args' on docker-workers")
 
     # Running via mozharness assumes an image that contains build.sh:
-    # by default, desktop-build, but it could be another image (like
-    # android-build) that "inherits" from desktop-build.
-    taskdesc['worker'].setdefault('docker-image', {'in-tree': 'desktop-build'})
+    # by default, debian7-amd64-build, but it could be another image (like
+    # android-build).
+    taskdesc['worker'].setdefault('docker-image', {'in-tree': 'debian7-amd64-build'})
 
     worker['taskcluster-proxy'] = run.get('taskcluster-proxy')
 
     docker_worker_add_public_artifacts(config, job, taskdesc)
     docker_worker_add_workspace_cache(config, job, taskdesc,
                                       extra=run.get('extra-workspace-cache-key'))
     support_vcs_checkout(config, job, taskdesc)
 
@@ -343,38 +342,8 @@ def mozharness_on_generic_worker(config,
             r'icacls z:\build /grant *S-1-1-0:D /L',
             r'cd /d z:\build',
         ])
 
     worker['command'].extend(hg_commands)
     worker['command'].extend([
         ' '.join(mh_command)
     ])
-
-
-@run_job_using('buildbot-bridge', 'mozharness', schema=mozharness_run_schema,
-               defaults=mozharness_defaults)
-def mozharness_on_buildbot_bridge(config, job, taskdesc):
-    run = job['run']
-    worker = taskdesc['worker']
-    branch = config.params['project']
-    product = run.get('index', {}).get('product', 'firefox')
-
-    worker.pop('env', None)
-
-    if 'devedition' in job['attributes']['build_platform']:
-        buildername = 'OS X 10.7 {} devedition build'.format(branch)
-    else:
-        buildername = 'OS X 10.7 {} build'.format(branch)
-
-    worker.update({
-        'buildername': buildername,
-        'sourcestamp': {
-            'branch': branch,
-            'repository': config.params['head_repository'],
-            'revision': config.params['head_rev'],
-        },
-        'properties': {
-            'product': product,
-            'who': config.params['owner'],
-            'upload_to_task_id': slugid.nice(),
-        }
-    })
--- a/taskcluster/taskgraph/transforms/repackage.py
+++ b/taskcluster/taskgraph/transforms/repackage.py
@@ -156,17 +156,17 @@ def make_job_description(config, jobs):
             elif build_platform.startswith('linux'):
                 worker_type = 'aws-provisioner-v1/gecko-%s-b-linux' % level
             else:
                 raise NotImplementedError(
                     'Unsupported build_platform: "{}"'.format(build_platform)
                 )
 
             run['tooltool-downloads'] = 'internal'
-            worker['docker-image'] = {"in-tree": "desktop-build"}
+            worker['docker-image'] = {"in-tree": "debian7-amd64-build"}
 
         description = (
             "Repackaging for locale '{locale}' for build '"
             "{build_platform}/{build_type}'".format(
                 locale=attributes.get('locale', 'en-US'),
                 build_platform=attributes.get('build_platform'),
                 build_type=attributes.get('build_type')
             )
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -860,25 +860,32 @@ def build_docker_worker_payload(config, 
         # name into consideration. This means that different Docker images will
         # never share the same cache. This is a bit unfortunate. But it is the
         # safest thing to do. Fortunately, most images are defined in-tree.
         #
         # For out-of-tree Docker images, we don't strictly need to incorporate
         # the run-task content into the cache name. However, doing so preserves
         # the mechanism whereby changing run-task results in new caches
         # everywhere.
+
+        # As an additional mechanism to force the use of different caches, the
+        # string literal in the variable below can be changed. This is
+        # preferred to changing run-task because it doesn't require images
+        # to be rebuilt.
+        cache_version = 'v1'
+
         if run_task:
-            suffix = '-%s' % _run_task_suffix()
+            suffix = '-%s-%s' % (cache_version, _run_task_suffix())
 
             if out_of_tree_image:
                 name_hash = hashlib.sha256(out_of_tree_image).hexdigest()
                 suffix += name_hash[0:12]
 
         else:
-            suffix = ''
+            suffix = '-%s' % cache_version
 
         skip_untrusted = config.params.is_try() or level == 1
 
         for cache in worker['caches']:
             # Some caches aren't enabled in environments where we can't
             # guarantee certain behavior. Filter those out.
             if cache.get('skip-untrusted') and skip_untrusted:
                 continue
--- a/taskcluster/taskgraph/util/scriptworker.py
+++ b/taskcluster/taskgraph/util/scriptworker.py
@@ -483,17 +483,17 @@ def get_release_config(config):
     release_config['next_version'] = str(config.params['next_version'])
     release_config['build_number'] = config.params['build_number']
     return release_config
 
 
 def get_signing_cert_scope_per_platform(build_platform, is_nightly, config):
     if 'devedition' in build_platform:
         return get_devedition_signing_cert_scope(config)
-    elif is_nightly:
+    elif is_nightly or build_platform in ('linux64-source', 'linux64-fennec-source'):
         return get_signing_cert_scope(config)
     else:
         return add_scope_prefix(config, 'signing:cert:dep-signing')
 
 
 def get_worker_type_for_scope(config, scope):
     """Get the scriptworker type that will accept the given scope.
 
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/.flake8
@@ -0,0 +1,33 @@
+[flake8]
+ignore =
+    # From root
+    E121, E123, E126, E129, E133, E226, E241, E242, E704, W503, E402,
+    # The following errors should be fixed eventually
+    # line too long
+    E501,
+    # at least two spaces before inline comment
+    E261,
+    # continuation line under-indented for visual indent
+    E128,
+    # whitespace before ':'
+    E203,
+    # blank line at end of file
+    W391,
+    # multiple statements on one line
+    E702,
+    # closing bracket does not match visual indentation
+    E124,
+    # missing whitespace after ':'
+    E231,
+    # continuation line over-indented for visual indent
+    E127,
+    # too many leading '#' for block comment
+    E266,
+    # comment should start with '# '
+    E262, E265,
+    # continuation line unaligned for hanging indent
+    E131,
+    # continuation line missing indentation or outdented
+    E122,
+exclude =
+    test/test_malformed.py
--- a/testing/mozharness/configs/android/androidarm_4_3.py
+++ b/testing/mozharness/configs/android/androidarm_4_3.py
@@ -1,15 +1,13 @@
 # mozharness configuration for Android 4.3 unit tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
-import os
-
 config = {
     "deprecated_sdk_path": True,
     "robocop_package_name": "org.mozilla.roboexample.test",
     "marionette_address": "localhost:2828",
     "marionette_test_manifest": "unit-tests.ini",
     "tooltool_manifest_path": "testing/config/tooltool-manifests/androidarm_4_3/releng.manifest",
     "emulator_manifest": """
         [
--- a/testing/mozharness/configs/android/androidx86.py
+++ b/testing/mozharness/configs/android/androidx86.py
@@ -1,15 +1,13 @@
 # mozharness configuration for Android x86 unit tests
 #
 # This configuration should be combined with suite definitions and other
 # mozharness configuration from android_common.py, or similar.
 
-import os
-
 config = {
     "deprecated_sdk_path": True,
     "tooltool_manifest_path": "testing/config/tooltool-manifests/androidx86/releng.manifest",
     "emulator_manifest": """
         [
         {
         "size": 193383673,
         "digest": "6609e8b95db59c6a3ad60fc3dcfc358b2c8ec8b4dda4c2780eb439e1c5dcc5d550f2e47ce56ba14309363070078d09b5287e372f6e95686110ff8a2ef1838221",
--- a/testing/mozharness/configs/awsy/macosx_config.py
+++ b/testing/mozharness/configs/awsy/macosx_config.py
@@ -1,10 +1,9 @@
 import os
-import platform
 
 PYTHON = "/usr/bin/env python"
 VENV_PATH = '%s/build/venv' % os.getcwd()
 TOOLTOOL_MANIFEST_PATH = "config/tooltool-manifests/macosx64/releng.manifest"
 MINIDUMP_STACKWALK_PATH = "macosx64-minidump_stackwalk"
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.dmg")
 
--- a/testing/mozharness/configs/awsy/taskcluster_windows_config.py
+++ b/testing/mozharness/configs/awsy/taskcluster_windows_config.py
@@ -7,20 +7,16 @@ external_tools_path = os.path.join(
     'external_tools',
 )
 
 config = {
     "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), 'python27.dll'),
     "virtualenv_path": 'venv',
     "exes": {
         'python': sys.executable,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
         'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
     "proxxy": {},
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
     ],
--- a/testing/mozharness/configs/builds/branch_specifics.py
+++ b/testing/mozharness/configs/builds/branch_specifics.py
@@ -210,18 +210,16 @@ config = {
     'mozilla-aurora': {
         'repo_path': 'releases/mozilla-aurora',
         'update_channel': 'aurora',
         'branch_uses_per_checkin_strategy': True,
         'stage_server': 'upload.ffxbld.productdelivery.prod.mozaws.net',
     },
     'try': {
         'repo_path': 'try',
-        'clone_by_revision': True,
-        'clone_with_purge': True,
         'tinderbox_build_dir': '%(who)s-%(got_revision)s',
         'to_tinderbox_dated': False,
         'include_post_upload_builddir': True,
         'release_to_try_builds': True,
         'stage_server': 'upload.trybld.productdelivery.prod.mozaws.net',
         'stage_username': 'trybld',
         'stage_ssh_key': 'trybld_dsa',
         'branch_supports_uploadsymbols': False,
--- a/testing/mozharness/configs/builds/build_pool_specifics.py
+++ b/testing/mozharness/configs/builds/build_pool_specifics.py
@@ -8,31 +8,29 @@ config = {
         # see PurgeMixin for clobber() conditions
         'clobberer_url': 'https://api-pub-build.allizom.org/clobberer/lastclobber',
         # staging we should use MozillaTest
         # but in production we let the self.branch decide via
         # self._query_graph_server_branch_name()
         "graph_server_branch_name": "MozillaTest",
         'graph_server': 'graphs.allizom.org',
         'stage_server': 'upload.ffxbld.productdelivery.stage.mozaws.net',
-        "sendchange_masters": ["dev-master1.srv.releng.scl3.mozilla.com:9038"],
         'taskcluster_index': 'index.garbage.staging',
         'post_upload_extra': ['--bucket-prefix', 'net-mozaws-stage-delivery',
                               '--url-prefix', 'http://ftp.stage.mozaws.net/',
                               ],
     },
     "production": {
         # if not clobberer_url, only clobber 'abs_work_dir'
         # if true: possibly clobber, clobberer
         # see PurgeMixin for clobber() conditions
         'clobberer_url': 'https://api.pub.build.mozilla.org/clobberer/lastclobber',
         'graph_server': 'graphs.mozilla.org',
         # bug 1216907, set this at branch level
         # 'stage_server': 'upload.ffxbld.productdelivery.prod.mozaws.net',
-        "sendchange_masters": ["buildbot-master81.build.mozilla.org:9301"],
         'taskcluster_index': 'index',
     },
     "taskcluster": {
         'graph_server': 'graphs.mozilla.org',
         'stage_server': 'ignored',
         # use the relengapi proxy to talk to tooltool
         "tooltool_servers": ['http://relengapi/tooltool/'],
         "tooltool_url": 'http://relengapi/tooltool/',
--- a/testing/mozharness/configs/builds/releng_base_android_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_android_64_builds.py
@@ -2,45 +2,25 @@ import os
 
 config = {
     #########################################################################
     ######## ANDROID GENERIC CONFIG KEYS/VAlUES
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'multi-l10n',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     'max_build_output_timeout': 0,
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': True,
-    # mock shtuff
-    'mock_mozilla_dir':  '/builds/mock_mozilla',
-    'mock_target': 'mozilla-centos6-x86_64-android',
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/tools/tooltool.py', '/builds/tooltool.py'),
-        ('/builds/mozilla-api.key', '/builds/mozilla-api.key'),
-        ('/builds/mozilla-fennec-geoloc-api.key', '/builds/mozilla-fennec-geoloc-api.key'),
-        ('/builds/crash-stats-api.token', '/builds/crash-stats-api.token'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-fennec-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-fennec-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk.token',
@@ -66,21 +46,17 @@ config = {
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/pocket-api-nightly.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/pocket-api-nightly.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
 
     ],
     'vcs_share_base': '/builds/hg-shared',
     'objdir': 'obj-firefox',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': True,
     'multi_locale': True,
     #########################################################################
 
 
     #########################################################################
     'base_name': 'Android 2.3 %(branch)s',
     'platform': 'android',
     'stage_platform': 'android',
@@ -92,42 +68,31 @@ config = {
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'PATH': '/usr/local/bin:/bin:/usr/bin',
         'SHIP_LICENSED_FONTS': '1',
     },
     'upload_env': {
         # stage_server is dictated from build_pool_specifics.py
         'UPLOAD_HOST': '%(stage_server)s',
         'UPLOAD_USER': '%(stage_username)s',
         'UPLOAD_SSH_KEY': '/home/mock_mozilla/.ssh/%(stage_ssh_key)s',
         'UPLOAD_TO_TEMP': '1',
     },
     "check_test_env": {
         'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/linux/minidump_stackwalk',
         'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
     },
-    'mock_packages': ['autoconf213', 'mozilla-python27-mercurial', 'yasm',
-                      'ccache', 'zip', "gcc472_0moz1", "gcc473_0moz1",
-                      'java-1.7.0-openjdk-devel', 'zlib-devel',
-                      'glibc-static', 'openssh-clients', 'mpfr',
-                      'wget', 'glibc.i686', 'libstdc++.i686',
-                      'zlib.i686', 'freetype-2.3.11-6.el6_1.8.x86_64',
-                      'ant', 'ant-apache-regexp'
-                      ],
     'src_mozconfig': 'mobile/android/config/mozconfigs/android/nightly',
     #########################################################################
 
     # It's not obvious, but postflight_build is after packaging, so the Gecko
     # binaries are in the object directory, ready to be packaged into the
     # GeckoView AAR.
     'postflight_build_mach_commands': [
         ['android',
--- a/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_32_builds.py
@@ -6,65 +6,40 @@ config = {
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
     # releng_base_linux_64_builds.py
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': True,
-    # mock shtuff
-    'mock_mozilla_dir':  '/builds/mock_mozilla',
-    'mock_target': 'mozilla-centos6-x86_64',
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/tools/tooltool.py', '/builds/tooltool.py'),
-        ('/builds/mozilla-desktop-geoloc-api.key', '/builds/mozilla-desktop-geoloc-api.key'),
-        ('/builds/crash-stats-api.token', '/builds/crash-stats-api.token'),
-        ('/builds/adjust-sdk.token', '/builds/adjust-sdk.token'),
-        ('/builds/adjust-sdk-beta.token', '/builds/adjust-sdk-beta.token'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-desktop-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-desktop-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk-beta.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk-beta.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
     ],
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': True,
     #########################################################################
 
 
     #########################################################################
     ###### 32 bit specific ######
     'base_name': 'Linux_%(branch)s',
     'platform': 'linux',
     'stage_platform': 'linux',
@@ -73,19 +48,16 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:\
 /bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:\
 /tools/python27/bin:/tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib",
     },
     'upload_env': {
@@ -94,59 +66,12 @@ config = {
         'UPLOAD_USER': '%(stage_username)s',
         'UPLOAD_SSH_KEY': '/home/mock_mozilla/.ssh/%(stage_ssh_key)s',
         'UPLOAD_TO_TEMP': '1',
     },
     "check_test_env": {
         'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/linux/minidump_stackwalk',
         'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind',
-        ######## 32 bit specific ###########
-        'glibc-static.i686', 'libstdc++-static.i686',
-        'gtk2-devel.i686', 'libnotify-devel.i686',
-        'alsa-lib-devel.i686', 'libcurl-devel.i686',
-        'wireless-tools-devel.i686', 'libX11-devel.i686',
-        'libXt-devel.i686', 'mesa-libGL-devel.i686',
-        'gnome-vfs2-devel.i686', 'GConf2-devel.i686',
-        'pulseaudio-libs-devel.i686',
-        'gstreamer-devel.i686', 'gstreamer-plugins-base-devel.i686',
-        # Packages already installed in the mock environment, as x86_64
-        # packages.
-        'glibc-devel.i686', 'libgcc.i686', 'libstdc++-devel.i686',
-        # yum likes to install .x86_64 -devel packages that satisfy .i686
-        # -devel packages dependencies. So manually install the dependencies
-        # of the above packages.
-        'ORBit2-devel.i686', 'atk-devel.i686', 'cairo-devel.i686',
-        'check-devel.i686', 'dbus-devel.i686', 'dbus-glib-devel.i686',
-        'fontconfig-devel.i686', 'glib2-devel.i686',
-        'hal-devel.i686', 'libICE-devel.i686', 'libIDL-devel.i686',
-        'libSM-devel.i686', 'libXau-devel.i686', 'libXcomposite-devel.i686',
-        'libXcursor-devel.i686', 'libXdamage-devel.i686',
-        'libXdmcp-devel.i686', 'libXext-devel.i686', 'libXfixes-devel.i686',
-        'libXft-devel.i686', 'libXi-devel.i686', 'libXinerama-devel.i686',
-        'libXrandr-devel.i686', 'libXrender-devel.i686',
-        'libXxf86vm-devel.i686', 'libdrm-devel.i686', 'libidn-devel.i686',
-        'libpng-devel.i686', 'libxcb-devel.i686', 'libxml2-devel.i686',
-        'pango-devel.i686', 'perl-devel.i686', 'pixman-devel.i686',
-        'zlib-devel.i686',
-        # Freetype packages need to be installed be version, because a newer
-        # version is available, but we don't want it for Firefox builds.
-        'freetype-2.3.11-6.el6_1.8.i686',
-        'freetype-devel-2.3.11-6.el6_1.8.i686',
-        'freetype-2.3.11-6.el6_1.8.x86_64',
-        ######## 32 bit specific ###########
-    ],
     'mozconfig_platform': 'linux32',
     'mozconfig_variant': 'nightly',
     #########################################################################
 }
--- a/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_linux_64_builds.py
@@ -5,65 +5,40 @@ config = {
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 64 bit keys/values please add them
     # below under the '64 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
     # releng_base_linux_64_builds.py
 
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': True,
-    # mock shtuff
-    'mock_mozilla_dir':  '/builds/mock_mozilla',
-    'mock_target': 'mozilla-centos6-x86_64',
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/tools/tooltool.py', '/builds/tooltool.py'),
-        ('/builds/mozilla-desktop-geoloc-api.key', '/builds/mozilla-desktop-geoloc-api.key'),
-        ('/builds/crash-stats-api.token', '/builds/crash-stats-api.token'),
-        ('/builds/adjust-sdk.token', '/builds/adjust-sdk.token'),
-        ('/builds/adjust-sdk-beta.token', '/builds/adjust-sdk-beta.token'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-desktop-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-desktop-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk-beta.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk-beta.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
     ],
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': True,
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s',
     'platform': 'linux64',
     'stage_platform': 'linux64',
@@ -72,19 +47,16 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
@@ -94,38 +66,12 @@ config = {
         'UPLOAD_USER': '%(stage_username)s',
         'UPLOAD_SSH_KEY': '/home/mock_mozilla/.ssh/%(stage_ssh_key)s',
         'UPLOAD_TO_TEMP': '1',
     },
     "check_test_env": {
         'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/linux64/minidump_stackwalk',
         'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     'mozconfig_platform': 'linux64',
     'mozconfig_variant': 'nightly',
     #########################################################################
 }
deleted file mode 100644
--- a/testing/mozharness/configs/builds/releng_base_mac_64_builds.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import os
-import sys
-
-config = {
-    #########################################################################
-    ######## MACOSX GENERIC CONFIG KEYS/VAlUES
-
-    'default_actions': [
-        'clobber',
-        'clone-tools',
-        # 'setup-mock',
-        'checkout-sources',
-        'build',
-        'upload-files',
-        'sendchange',
-        'check-test',
-        'update',  # decided by query_is_nightly()
-    ],
-    "buildbot_json_path": "buildprops.json",
-    'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
-    # decides whether we want to use moz_sign_cmd in env
-    'enable_signing': True,
-    'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
-    'enable_count_ctors': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
-    #########################################################################
-
-
-    #########################################################################
-    ###### 64 bit specific ######
-    'base_name': 'OS X 10.7 %(branch)s',
-    'platform': 'macosx64',
-    'stage_platform': 'macosx64',
-    'publish_nightly_en_US_routes': True,
-    'env': {
-        'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
-        'HG_SHARE_BASE_DIR': '/builds/hg-shared',
-        'MOZ_OBJDIR': '%(abs_obj_dir)s',
-        'CHOWN_ROOT': '~/bin/chown_root',
-        'CHOWN_REVERT': '~/bin/chown_revert',
-        'TINDERBOX_OUTPUT': '1',
-        'TOOLTOOL_CACHE': '/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/builds',
-        'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
-        'LC_ALL': 'C',
-        ## 64 bit specific
-        'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
-                '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
-        ##
-    },
-    'upload_env': {
-        # stage_server is dictated from build_pool_specifics.py
-        'UPLOAD_HOST': '%(stage_server)s',
-        'UPLOAD_USER': '%(stage_username)s',
-        'UPLOAD_SSH_KEY': '/Users/cltbld/.ssh/%(stage_ssh_key)s',
-        'UPLOAD_TO_TEMP': '1',
-    },
-    "check_test_env": {
-        'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/osx64/minidump_stackwalk',
-        'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
-    },
-    'mozconfig_platform': 'macosx64',
-    'mozconfig_variant': 'nightly',
-    'tooltool_manifest_src': 'browser/config/tooltool-manifests/macosx64/releng.manifest',
-    #########################################################################
-}
--- a/testing/mozharness/configs/builds/releng_base_mac_64_cross_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_mac_64_cross_builds.py
@@ -1,20 +1,17 @@
 import os
-import sys
 
 config = {
     #########################################################################
     ######## MACOSX CROSS GENERIC CONFIG KEYS/VAlUES
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
         'build',
         'update',  # decided by query_is_nightly()
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': True,
     'secret_files': [
@@ -22,40 +19,33 @@ config = {
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-desktop-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-desktop-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
     ],
     'enable_check_test': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'OS X 10.7 %(branch)s',
     'platform': 'macosx64',
     'stage_platform': 'macosx64',
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         ##
     },
     'upload_env': {
deleted file mode 100644
--- a/testing/mozharness/configs/builds/releng_base_windows_32_builds.py
+++ /dev/null
@@ -1,84 +0,0 @@
-import os
-import sys
-
-config = {
-    #########################################################################
-    ######## WINDOWS GENERIC CONFIG KEYS/VAlUES
-    # if you are updating this with custom 32 bit keys/values please add them
-    # below under the '32 bit specific' code block otherwise, update in this
-    # code block and also make sure this is synced with
-    # releng_base_windows_32_builds.py
-
-    'default_actions': [
-        'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
-        'build',
-        'upload-files',
-        'sendchange',
-        'check-test',
-        'update',  # decided by query_is_nightly()
-    ],
-    "buildbot_json_path": "buildprops.json",
-    'exes': {
-        "buildbot": [
-            sys.executable,
-            'c:\\mozilla-build\\buildbotve\\scripts\\buildbot'
-        ],
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    },
-    'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
-    # decides whether we want to use moz_sign_cmd in env
-    'enable_signing': True,
-    'vcs_share_base': 'C:/builds/hg-shared',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
-    'tooltool_bootstrap': "setup.sh",
-    'enable_count_ctors': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
-    'max_build_output_timeout': 60 * 80,
-    #########################################################################
-
-
-     #########################################################################
-     ###### 32 bit specific ######
-    'base_name': 'WINNT_5.2_%(branch)s',
-    'platform': 'win32',
-    'stage_platform': 'win32',
-    'publish_nightly_en_US_routes': True,
-    'env': {
-        'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
-        'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
-        'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
-        'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'MOZ_OBJDIR': '%(abs_obj_dir)s',
-        'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
-                'C:/mozilla-build/buildbotve/scripts;'
-                '%s' % (os.environ.get('path')),
-        'PDBSTR_PATH': 'C:/Program Files (x86)/Windows Kits/8.0/Debuggers/x64/srcsrv/pdbstr.exe',
-        'PROPERTIES_FILE': os.path.join(os.getcwd(), 'buildprops.json'),
-        'TINDERBOX_OUTPUT': '1',
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-    },
-    'upload_env': {
-        # stage_server is dictated from build_pool_specifics.py
-        'UPLOAD_HOST': '%(stage_server)s',
-        'UPLOAD_USER': '%(stage_username)s',
-        'UPLOAD_SSH_KEY': '/c/Users/cltbld/.ssh/%(stage_ssh_key)s',
-        'UPLOAD_TO_TEMP': '1',
-    },
-    "check_test_env": {
-        'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/win32/minidump_stackwalk.exe',
-        'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
-    },
-    'mozconfig_platform': 'win32',
-    'mozconfig_variant': 'nightly',
-    'tooltool_manifest_src': "browser/config/tooltool-manifests/win32/releng.manifest",
-    #########################################################################
-}
--- a/testing/mozharness/configs/builds/releng_base_windows_32_mingw_builds.py
+++ b/testing/mozharness/configs/builds/releng_base_windows_32_mingw_builds.py
@@ -3,25 +3,16 @@ import os
 config = {
     #########################################################################
     ######## LINUX GENERIC CONFIG KEYS/VAlUES
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
     # releng_base_linux_64_builds.py
 
-    # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
-    'default_actions': [
-        'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'build',
-        'upload-files',
-        'update',  # decided by query_is_nightly()
-    ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
@@ -31,18 +22,16 @@ config = {
         {'filename': '/builds/adjust-sdk.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk-beta.token',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/adjust-sdk-beta.token',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
     ],
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': False,
     #########################################################################
 
 
     #########################################################################
     ###### 32 bit specific ######
     'base_name': 'WINNT_5.2_MINGW_%(branch)s',
     'platform': 'win32',
deleted file mode 100644
--- a/testing/mozharness/configs/builds/releng_base_windows_64_builds.py
+++ /dev/null
@@ -1,82 +0,0 @@
-import os
-import sys
-
-config = {
-    #########################################################################
-    ######## WINDOWS GENERIC CONFIG KEYS/VAlUES
-    # if you are updating this with custom 32 bit keys/values please add them
-    # below under the '32 bit specific' code block otherwise, update in this
-    # code block and also make sure this is synced with
-    # releng_base_windows_64_builds.py
-
-    'default_actions': [
-        'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
-        'build',
-        'upload-files',
-        'sendchange',
-        'check-test',
-        'update',  # decided by query_is_nightly()
-    ],
-    "buildbot_json_path": "buildprops.json",
-    'exes': {
-        "buildbot": [
-            sys.executable,
-            'c:\\mozilla-build\\buildbotve\\scripts\\buildbot'
-        ],
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    },
-    'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
-    # decides whether we want to use moz_sign_cmd in env
-    'enable_signing': True,
-    'vcs_share_base': 'C:/builds/hg-shared',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
-    'tooltool_bootstrap': "setup.sh",
-    'enable_count_ctors': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
-    'max_build_output_timeout': 60 * 80,
-    #########################################################################
-
-
-     #########################################################################
-     ###### 64 bit specific ######
-    'base_name': 'WINNT_6.1_x86-64_%(branch)s',
-    'platform': 'win64',
-    'stage_platform': 'win64',
-    'publish_nightly_en_US_routes': True,
-    'env': {
-        'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
-        'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'MOZ_OBJDIR': '%(abs_obj_dir)s',
-        'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
-                'C:/mozilla-build/buildbotve/scripts;'
-                '%s' % (os.environ.get('path')),
-        'PDBSTR_PATH': 'C:/Program Files (x86)/Windows Kits/8.0/Debuggers/x64/srcsrv/pdbstr.exe',
-        'PROPERTIES_FILE': os.path.join(os.getcwd(), 'buildprops.json'),
-        'TINDERBOX_OUTPUT': '1',
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-    },
-    'upload_env': {
-        # stage_server is dictated from build_pool_specifics.py
-        'UPLOAD_HOST': '%(stage_server)s',
-        'UPLOAD_USER': '%(stage_username)s',
-        'UPLOAD_SSH_KEY': '/c/Users/cltbld/.ssh/%(stage_ssh_key)s',
-        'UPLOAD_TO_TEMP': '1',
-    },
-    "check_test_env": {
-        'MINIDUMP_STACKWALK': '%(abs_tools_dir)s/breakpad/win64/minidump_stackwalk.exe',
-        'MINIDUMP_SAVE_PATH': '%(base_work_dir)s/minidumps',
-    },
-    'mozconfig_platform': 'win64',
-    'mozconfig_variant': 'nightly',
-    'tooltool_manifest_src': "browser/config/tooltool-manifests/win64/releng.manifest",
-    #########################################################################
-}
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_artifact.py
@@ -6,33 +6,25 @@ config = {
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
     # releng_base_linux_64_builds.py
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
     # allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': True,
-    'enable_talos_sendchange': False,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 32 bit specific ######
     'base_name': 'Linux_%(branch)s_Artifact_build',
     'platform': 'linux',
@@ -42,68 +34,18 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:\
 /bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:\
 /tools/python27/bin:/tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib",
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind',
-        ######## 32 bit specific ###########
-        'glibc-static.i686', 'libstdc++-static.i686',
-        'gtk2-devel.i686', 'libnotify-devel.i686',
-        'alsa-lib-devel.i686', 'libcurl-devel.i686',
-        'wireless-tools-devel.i686', 'libX11-devel.i686',
-        'libXt-devel.i686', 'mesa-libGL-devel.i686',
-        'gnome-vfs2-devel.i686', 'GConf2-devel.i686',
-        'pulseaudio-libs-devel.i686',
-        'gstreamer-devel.i686', 'gstreamer-plugins-base-devel.i686',
-        # Packages already installed in the mock environment, as x86_64
-        # packages.
-        'glibc-devel.i686', 'libgcc.i686', 'libstdc++-devel.i686',
-        # yum likes to install .x86_64 -devel packages that satisfy .i686
-        # -devel packages dependencies. So manually install the dependencies
-        # of the above packages.
-        'ORBit2-devel.i686', 'atk-devel.i686', 'cairo-devel.i686',
-        'check-devel.i686', 'dbus-devel.i686', 'dbus-glib-devel.i686',
-        'fontconfig-devel.i686', 'glib2-devel.i686',
-        'hal-devel.i686', 'libICE-devel.i686', 'libIDL-devel.i686',
-        'libSM-devel.i686', 'libXau-devel.i686', 'libXcomposite-devel.i686',
-        'libXcursor-devel.i686', 'libXdamage-devel.i686',
-        'libXdmcp-devel.i686', 'libXext-devel.i686', 'libXfixes-devel.i686',
-        'libXft-devel.i686', 'libXi-devel.i686', 'libXinerama-devel.i686',
-        'libXrandr-devel.i686', 'libXrender-devel.i686',
-        'libXxf86vm-devel.i686', 'libdrm-devel.i686', 'libidn-devel.i686',
-        'libpng-devel.i686', 'libxcb-devel.i686', 'libxml2-devel.i686',
-        'pango-devel.i686', 'perl-devel.i686', 'pixman-devel.i686',
-        'zlib-devel.i686',
-        # Freetype packages need to be installed be version, because a newer
-        # version is available, but we don't want it for Firefox builds.
-        'freetype-2.3.11-6.el6_1.8.i686',
-        'freetype-devel-2.3.11-6.el6_1.8.i686',
-        'freetype-2.3.11-6.el6_1.8.x86_64',
-        ######## 32 bit specific ###########
-    ],
     'mozconfig_variant': 'artifact',
     #########################################################################
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug.py
@@ -1,36 +1,27 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'debug_build': True,
     'stage_platform': 'linux-debug',
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_debug_artifact.py
@@ -6,35 +6,27 @@ config = {
     # if you are updating this with custom 32 bit keys/values please add them
     # below under the '32 bit specific' code block otherwise, update in this
     # code block and also make sure this is synced with
     # releng_base_linux_64_builds.py
 
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
     # debug specific
     'debug_build': True,
-    'enable_talos_sendchange': False,
     # allows triggering of test jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': True,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 32 bit specific ######
     'base_name': 'Linux_%(branch)s_Artifact_build',
     'platform': 'linux',
@@ -44,70 +36,20 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # debug-specific
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:\
 /bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:\
 /tools/python27/bin:/tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib",
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind',
-        ######## 32 bit specific ###########
-        'glibc-static.i686', 'libstdc++-static.i686',
-        'gtk2-devel.i686', 'libnotify-devel.i686',
-        'alsa-lib-devel.i686', 'libcurl-devel.i686',
-        'wireless-tools-devel.i686', 'libX11-devel.i686',
-        'libXt-devel.i686', 'mesa-libGL-devel.i686',
-        'gnome-vfs2-devel.i686', 'GConf2-devel.i686',
-        'pulseaudio-libs-devel.i686',
-        'gstreamer-devel.i686', 'gstreamer-plugins-base-devel.i686',
-        # Packages already installed in the mock environment, as x86_64
-        # packages.
-        'glibc-devel.i686', 'libgcc.i686', 'libstdc++-devel.i686',
-        # yum likes to install .x86_64 -devel packages that satisfy .i686
-        # -devel packages dependencies. So manually install the dependencies
-        # of the above packages.
-        'ORBit2-devel.i686', 'atk-devel.i686', 'cairo-devel.i686',
-        'check-devel.i686', 'dbus-devel.i686', 'dbus-glib-devel.i686',
-        'fontconfig-devel.i686', 'glib2-devel.i686',
-        'hal-devel.i686', 'libICE-devel.i686', 'libIDL-devel.i686',
-        'libSM-devel.i686', 'libXau-devel.i686', 'libXcomposite-devel.i686',
-        'libXcursor-devel.i686', 'libXdamage-devel.i686',
-        'libXdmcp-devel.i686', 'libXext-devel.i686', 'libXfixes-devel.i686',
-        'libXft-devel.i686', 'libXi-devel.i686', 'libXinerama-devel.i686',
-        'libXrandr-devel.i686', 'libXrender-devel.i686',
-        'libXxf86vm-devel.i686', 'libdrm-devel.i686', 'libidn-devel.i686',
-        'libpng-devel.i686', 'libxcb-devel.i686', 'libxml2-devel.i686',
-        'pango-devel.i686', 'perl-devel.i686', 'pixman-devel.i686',
-        'zlib-devel.i686',
-        # Freetype packages need to be installed be version, because a newer
-        # version is available, but we don't want it for Firefox builds.
-        'freetype-2.3.11-6.el6_1.8.i686',
-        'freetype-devel-2.3.11-6.el6_1.8.i686',
-        'freetype-2.3.11-6.el6_1.8.x86_64',
-        ######## 32 bit specific ###########
-    ],
     'mozconfig_variant': 'debug-artifact',
     #########################################################################
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests.py
@@ -1,34 +1,25 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
     ],
     'stage_platform': 'linux-rusttests',
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/32_rusttests_debug.py
@@ -1,35 +1,26 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
     ],
     'debug_build': True,
     'stage_platform': 'linux-rusttests-debug',
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # 32 bit specific
         'PATH': '/usr/local/bin:/usr/lib/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_add-on-devel.py
@@ -1,40 +1,31 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-#        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-add-on-devel',
     'publish_nightly_en_US_routes': False,
     'build_type': 'add-on-devel',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/builds/worker/workspace/build/src/gcc/bin:/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'add-on-devel',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_artifact.py
@@ -1,39 +1,31 @@
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-desktop-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-desktop-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
     ],
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
     # allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': True,
-    'enable_talos_sendchange': False,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s_Artifact_build',
     'platform': 'linux64',
@@ -43,50 +35,21 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     # This doesn't actually inherit from anything.
     'mozconfig_platform': 'linux64',
     'mozconfig_variant': 'artifact',
     #######################
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan.py
@@ -1,41 +1,32 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-asan',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'nightly-asan',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_and_debug.py
@@ -1,42 +1,33 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-asan-debug',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan-debug',
     'debug_build': True,
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'debug-asan',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_reporter_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_reporter_tc.py
@@ -1,42 +1,33 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-asan-reporter',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_AUTOMATION': '1',
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'ASAN_OPTIONS': 'detect_leaks=0',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'nightly-asan-reporter',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc.py
@@ -1,41 +1,32 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-asan',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'nightly-asan',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_asan_tc_and_debug.py
@@ -1,42 +1,33 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-asan-debug',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan-debug',
     'debug_build': True,
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'debug-asan',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_code_coverage.py
@@ -1,40 +1,31 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-ccov',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     'enable_count_ctors': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'code-coverage',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug.py
@@ -1,36 +1,27 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-debug',
     'debug_build': True,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_debug_artifact.py
@@ -1,33 +1,25 @@
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
     # debug specific
     'debug_build': True,
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     # allows triggering of test jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': True,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s_Artifact_build',
     'platform': 'linux64',
@@ -37,50 +29,21 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # debug-specific
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     'mozconfig_variant': 'debug-artifact',
     #######################
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_asan_tc.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_asan_tc.py
@@ -1,42 +1,33 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-fuzzing-asan',
     'publish_nightly_en_US_routes': False,
     'build_type': 'asan',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_AUTOMATION': '1',
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'ASAN_OPTIONS': 'detect_leaks=0',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'nightly-fuzzing-asan',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_fuzzing_debug.py
@@ -1,38 +1,29 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
     ],
     'stage_platform': 'linux64-fuzzing-debug',
     'publish_nightly_en_US_routes': False,
     'debug_build': True,
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_AUTOMATION': '1',
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_noopt_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_noopt_debug.py
@@ -1,35 +1,26 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'linux64-noopt-debug',
     'debug_build': True,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests.py
@@ -1,38 +1,29 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         # 'update',
     ],
     'stage_platform': 'linux64-rusttests',
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/tools/buildbot/bin:/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'rusttests',
     'artifact_flag_build_variant_in_try': None,
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_rusttests_debug.py
@@ -1,34 +1,25 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
     ],
     'stage_platform': 'linux64-rusttests-debug',
     'debug_build': True,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 64 bit specific
         'PATH': '/tools/buildbot/bin:/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': '/tools/gcc-4.3.3/installed/lib64:%(abs_obj_dir)s/dist/bin',
         'TINDERBOX_OUTPUT': '1',
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_searchfox_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_searchfox_and_debug.py
@@ -1,29 +1,22 @@
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'perfherder_extra_options': ['static-analysis'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s_Searchfox',
     'platform': 'linux64',
@@ -33,54 +26,25 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # Disable sccache because otherwise we won't index the files that
         # sccache optimizes away compilation for
         'SCCACHE_DISABLE': '1',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     # This doesn't actually inherit from anything.
     'mozconfig_platform': 'linux64',
     'mozconfig_variant': 'debug-searchfox-clang',
     #######################
     'artifact_flag_build_variant_in_try': None,
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_debug.py
@@ -1,29 +1,22 @@
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'perfherder_extra_options': ['static-analysis'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s_Static_Analysis',
     'platform': 'linux64',
@@ -33,51 +26,22 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     # This doesn't actually inherit from anything.
     'mozconfig_platform': 'linux64',
     'mozconfig_variant': 'debug-static-analysis-clang',
     #######################
     'artifact_flag_build_variant_in_try': None,
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_opt.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_stat_and_opt.py
@@ -1,29 +1,22 @@
 import os
 
 config = {
     # note: overridden by MOZHARNESS_ACTIONS in TaskCluster tasks
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        'setup-mock',
         'build',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'perfherder_extra_options': ['static-analysis'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'Linux_x86-64_%(branch)s_Static_Analysis',
     'platform': 'linux64',
@@ -33,51 +26,22 @@ config = {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/worker/tooltool-cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
         'LD_LIBRARY_PATH': "/tools/gcc-4.3.3/installed/lib64",
         ##
     },
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
     # This doesn't actually inherit from anything.
     'mozconfig_platform': 'linux64',
     'mozconfig_variant': 'opt-static-analysis-clang',
     #######################
     'artifact_flag_build_variant_in_try': None,
 }
--- a/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
+++ b/testing/mozharness/configs/builds/releng_sub_linux_configs/64_valgrind.py
@@ -1,43 +1,34 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        #'setup-mock',
         'build',
-        #'upload-files',
-        #'sendchange',
         'check-test',
         'valgrind-test',
         #'update',
     ],
     'stage_platform': 'linux64-valgrind',
     'publish_nightly_en_US_routes': False,
     'build_type': 'valgrind',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     'perfherder_extra_options': ['valgrind'],
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'DISPLAY': ':2',
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/usr/local/bin:/usr/lib64/ccache:/bin:\
 /usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/tools/git/bin:/tools/python27/bin:\
 /tools/python27-mercurial/bin:/home/cltbld/bin',
     },
     'mozconfig_variant': 'valgrind',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_add-on-devel.py
@@ -1,40 +1,31 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-#        'setup-mock',
         'build',
-        'upload-files',
-#        'sendchange',
         'check-test',
 #        'update',
     ],
     'stage_platform': 'macosx64-add-on-devel',
     'publish_nightly_en_US_routes': False,
     'build_type': 'add-on-devel',
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
     'mozconfig_variant': 'add-on-devel',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_artifact.py
@@ -1,35 +1,25 @@
 import os
-import sys
 
 config = {
     #########################################################################
     ######## MACOSX GENERIC CONFIG KEYS/VAlUES
 
     'default_actions': [
         'clobber',
-        'clone-tools',
-        # 'setup-mock',
-        'checkout-sources',
         'build',
-        'upload-files',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
-    'tooltool_script': ["/builds/tooltool.py"],
-    'tooltool_bootstrap': "setup.sh",
     'enable_count_ctors': False,
     # allows triggering of dependent jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': False,
-    'enable_talos_sendchange': False,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'OS X 10.7 %(branch)s_Artifact_build',
     'platform': 'macosx64',
@@ -40,19 +30,16 @@ config = {
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'CHOWN_ROOT': '~/bin/chown_root',
         'CHOWN_REVERT': '~/bin/chown_revert',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
     'mozconfig_variant': 'artifact',
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/macosx64/releng.manifest',
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug.py
@@ -1,36 +1,27 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
     'mozconfig_variant': 'debug',
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug_searchfox.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_debug_searchfox.py
@@ -1,40 +1,29 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-searchfox-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'perfherder_extra_options': ['static-analysis'],
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # Disable sccache because otherwise we won't index the files that
         # sccache optimizes away compilation for
         'SCCACHE_DISABLE': '1',
         # 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_noopt_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_cross_noopt_debug.py
@@ -1,36 +1,27 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-noopt-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
     'mozconfig_variant': 'cross-noopt-debug',
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug.py
@@ -1,38 +1,28 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'macosx64-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
     'mozconfig_variant': 'debug',
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_debug_artifact.py
@@ -1,33 +1,26 @@
 import os
-import sys
 
 config = {
     #########################################################################
     ######## MACOSX GENERIC CONFIG KEYS/VAlUES
 
     'default_actions': [
         'clobber',
-        'clone-tools',
-        # 'setup-mock',
-        'checkout-sources',
         'build',
-        'sendchange',
     ],
     "buildbot_json_path": "buildprops.json",
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': False,
     'vcs_share_base': '/builds/hg-shared',
     # debug specific
     'debug_build': True,
-    'enable_talos_sendchange': False,
     # allows triggering of test jobs when --artifact try syntax is detected on buildbot
-    'enable_unittest_sendchange': True,
     'perfherder_extra_options': ['artifact'],
     #########################################################################
 
 
     #########################################################################
     ###### 64 bit specific ######
     'base_name': 'OS X 10.7 %(branch)s_Artifact_build',
     'platform': 'macosx64',
@@ -36,19 +29,16 @@ config = {
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         # debug-specific
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         ## 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
         ##
     },
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_devedition.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_devedition.py
@@ -1,10 +1,7 @@
 config = {
     'mozconfig_variant': 'devedition',
     'force_clobber': True,
     'stage_platform': 'macosx64-devedition',
     'stage_product': 'devedition',
 
-    # Enable sendchanges for bug 1372412
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
 }
--- a/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_mac_configs/64_stat_and_debug.py
@@ -1,43 +1,33 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock',
         'build',
-        'upload-files',
-        'sendchange',
         'update',  # decided by query_is_nightly()
     ],
     'debug_build': True,
     'stage_platform': 'macosx64-st-an-debug',
     'build_type': 'st-an-debug',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/macosx64/\
 clang.manifest",
     'platform_supports_post_upload_to_latest': False,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'perfherder_extra_options': ['static-analysis'],
     #### 64 bit build specific #####
     'env': {
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'HG_SHARE_BASE_DIR': '/builds/hg-shared',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'TINDERBOX_OUTPUT': '1',
         'TOOLTOOL_CACHE': '/builds/tooltool_cache',
         'TOOLTOOL_HOME': '/builds',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
-        'CCACHE_DIR': '/builds/ccache',
-        'CCACHE_COMPRESS': '1',
-        'CCACHE_UMASK': '002',
         'LC_ALL': 'C',
         'XPCOM_DEBUG_BREAK': 'stack-and-abort',
         # 64 bit specific
         'PATH': '/tools/python/bin:/opt/local/bin:/usr/bin:'
                 '/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin',
     },
     'mozconfig_variant': 'debug-static-analysis',
     #######################
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_add-on-devel.py
@@ -1,25 +1,19 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
         'build',
-        'upload-files',
-#        'sendchange',
         'check-test',
 #        'update',
     ],
     'stage_platform': 'win32-add-on-devel',
     'build_type': 'add-on-devel',
-    'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
         'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_artifact.py
@@ -1,7 +1,4 @@
-import os
-import sys
-
 config = {
     'base_name': 'WINNT_5.2_%(branch)s_Artifact_build',
     'mozconfig_variant': 'artifact',
 }
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug.py
@@ -1,25 +1,19 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'win32-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
     #### 32 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
         'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_debug_artifact.py
@@ -1,7 +1,4 @@
-import os
-import sys
-
 config = {
     'base_name': 'WINNT_5.2_%(branch)s_Artifact_build',
     'mozconfig_variant': 'debug-artifact',
 }
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/32_stat_and_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/32_stat_and_debug.py
@@ -1,24 +1,19 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
         'build',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'win32-st-an-debug',
     'debug_build': True,
     'enable_signing': False,
-    'enable_talos_sendchange': False,
-    'enable_unittest_sendchange': False,
     'tooltool_manifest_src': "browser/config/tooltool-manifests/win32/\
 releng.manifest",
     'platform_supports_post_upload_to_latest': False,
     'perfherder_extra_options': ['static-analysis'],
     #### 32 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
         'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_add-on-devel.py
@@ -1,25 +1,19 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
         'build',
-        'upload-files',
-#        'sendchange',
         'check-test',
 #        'update',
     ],
     'stage_platform': 'win64-add-on-devel',
     'build_type': 'add-on-devel',
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
         'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
                 'C:/mozilla-build/buildbotve/scripts;'
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_artifact.py
@@ -1,7 +1,4 @@
-import os
-import sys
-
 config = {
     'base_name': 'WINNT_6.1_x86-64_%(branch)s_Artifact_build',
     'mozconfig_variant': 'artifact',
 }
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug.py
@@ -1,25 +1,19 @@
 import os
 
 config = {
     'default_actions': [
         'clobber',
-        'clone-tools',
-        'checkout-sources',
-        # 'setup-mock', windows do not use mock
         'build',
-        'upload-files',
-        'sendchange',
         'check-test',
         'update',  # decided by query_is_nightly()
     ],
     'stage_platform': 'win64-debug',
     'debug_build': True,
-    'enable_talos_sendchange': False,
     #### 64 bit build specific #####
     'env': {
         'BINSCOPE': 'C:/Program Files (x86)/Microsoft/SDL BinScope/BinScope.exe',
         'HG_SHARE_BASE_DIR': 'C:/builds/hg-shared',
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
         'MOZ_OBJDIR': '%(abs_obj_dir)s',
         'PATH': 'C:/mozilla-build/nsis-3.01;C:/mozilla-build/python27;'
                 'C:/mozilla-build/buildbotve/scripts;'
--- a/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug_artifact.py
+++ b/testing/mozharness/configs/builds/releng_sub_windows_configs/64_debug_artifact.py
@@ -1,7 +1,4 @@
-import os
-import sys
-
 config = {
     'base_name': 'WINNT_6.1_x86-64_%(branch)s_Artifact_build',
     'mozconfig_variant': 'debug-artifact',
 }
--- a/testing/mozharness/configs/builds/taskcluster_base_windows.py
+++ b/testing/mozharness/configs/builds/taskcluster_base_windows.py
@@ -1,26 +1,19 @@
 import os
-import sys
 
 config = {
     'default_actions': [
-        'clone-tools',
         'build',
         'check-test',
     ],
     'app_ini_path': '%(obj_dir)s/dist/bin/application.ini',
     # decides whether we want to use moz_sign_cmd in env
     'enable_signing': True,
     'vcs_share_base': os.path.join('y:', os.sep, 'hg-shared'),
-    'tooltool_script': [
-        sys.executable,
-        os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')
-    ],
-    'tooltool_bootstrap': 'setup.sh',
     'enable_count_ctors': False,
     'max_build_output_timeout': 60 * 80,
 
     'publish_nightly_en_US_routes': True,
     'env': {
         'HG_SHARE_BASE_DIR': os.path.join('y:', os.sep, 'hg-shared'),
         'MOZBUILD_STATE_PATH': os.path.join(os.getcwd(), '.mozbuild'),
         'MOZ_CRASHREPORTER_NO_REPORT': '1',
--- a/testing/mozharness/configs/builds/taskcluster_sub_win32/opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win32/opt.py
@@ -1,10 +1,9 @@
 config = {
     'default_actions': [
-        'clone-tools',
         'build',
         'check-test',
         'update',
     ],
     'stage_platform': 'win32',
     'mozconfig_variant': 'nightly',
 }
--- a/testing/mozharness/configs/builds/taskcluster_sub_win64/opt.py
+++ b/testing/mozharness/configs/builds/taskcluster_sub_win64/opt.py
@@ -1,10 +1,9 @@
 config = {
     'default_actions': [
-        'clone-tools',
         'build',
         'check-test',
         'update',
     ],
     'stage_platform': 'win64',
     'mozconfig_variant': 'nightly',
 }
--- a/testing/mozharness/configs/firefox_ui_tests/taskcluster.py
+++ b/testing/mozharness/configs/firefox_ui_tests/taskcluster.py
@@ -1,16 +1,15 @@
 # Config file for firefox ui tests run via TaskCluster.
 
 
 config = {
     "vcs_share_base": "/builds/hg-shared",
 
     "exes": {
-        'virtualenv': '/tools/virtualenv/bin/virtualenv',
         'tooltool.py': "/tools/tooltool.py",
     },
 
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
 
--- a/testing/mozharness/configs/firefox_ui_tests/taskcluster_windows.py
+++ b/testing/mozharness/configs/firefox_ui_tests/taskcluster_windows.py
@@ -4,20 +4,16 @@ import os
 import sys
 
 
 config = {
     "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), 'python27.dll'),
     "virtualenv_path": 'venv',
     "exes": {
         'python': sys.executable,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
         'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
 
     "proxxy": {},
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
--- a/testing/mozharness/configs/marionette/prod_config.py
+++ b/testing/mozharness/configs/marionette/prod_config.py
@@ -5,17 +5,16 @@ HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     # marionette options
     "marionette_address": "localhost:2828",
     "test_manifest": "unit-tests.ini",
 
     "vcs_share_base": HG_SHARE_BASE_DIR,
     "exes": {
-        'virtualenv': '/tools/virtualenv/bin/virtualenv',
         'tooltool.py': "/tools/tooltool.py",
     },
 
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
--- a/testing/mozharness/configs/marionette/windows_config.py
+++ b/testing/mozharness/configs/marionette/windows_config.py
@@ -6,17 +6,16 @@ config = {
     # marionette options
     "marionette_address": "localhost:2828",
     "test_manifest": "unit-tests.ini",
 
     "virtualenv_python_dll": 'c:/mozilla-build/python27/python27.dll',
     "virtualenv_path": 'venv',
     "exes": {
         'python': 'c:/mozilla-build/python27/python',
-        'virtualenv': ['c:/mozilla-build/python27/python', 'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
         'tooltool.py': [sys.executable, 'C:/mozilla-build/tooltool.py'],
     },
 
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
--- a/testing/mozharness/configs/marionette/windows_taskcluster_config.py
+++ b/testing/mozharness/configs/marionette/windows_taskcluster_config.py
@@ -6,20 +6,16 @@ config = {
     # marionette options
     "marionette_address": "localhost:2828",
     "test_manifest": "unit-tests.ini",
 
     "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), 'python27.dll'),
     "virtualenv_path": 'venv',
     "exes": {
         'python': sys.executable,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
         'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
 
     "proxxy": {},
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
--- a/testing/mozharness/configs/releng_infra_configs/builders.py
+++ b/testing/mozharness/configs/releng_infra_configs/builders.py
@@ -5,34 +5,31 @@ from mozharness.base.script import platf
 # These are values specific to each platform on Release Engineering machines
 PYTHON_WIN32 = 'c:/mozilla-build/python27/python.exe'
 # These are values specific to running machines on Release Engineering machines
 # to run it locally on your machines append --cfg developer_config.py
 PLATFORM_CONFIG = {
     'linux64': {
         'exes': {
             'gittool.py': '/usr/local/bin/gittool.py',
-            'virtualenv': '/tools/virtualenv/bin/virtualenv',
         },
         'env': {
             'DISPLAY': ':2',
         }
     },
     'macosx': {
         'exes': {
             'gittool.py': '/usr/local/bin/gittool.py',
-            'virtualenv': '/tools/virtualenv/bin/virtualenv',
         },
     },
     'win32': {
         "exes": {
             'gittool.py': [PYTHON_WIN32, 'c:/builds/hg-shared/build/tools/buildfarm/utils/gittool.py'],
             # Otherwise, depending on the PATH we can pick python 2.6 up
             'python': PYTHON_WIN32,
-            'virtualenv': [PYTHON_WIN32, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         }
     }
 }
 
 config = PLATFORM_CONFIG[platform_name()]
 # Generic values
 config.update({
     "find_links": [
--- a/testing/mozharness/configs/releng_infra_configs/testers.py
+++ b/testing/mozharness/configs/releng_infra_configs/testers.py
@@ -14,48 +14,44 @@ external_tools_path = os.path.join(
 # These are values specific to each platform on Release Engineering machines
 PYTHON_WIN32 = 'c:/mozilla-build/python27/python.exe'
 # These are values specific to running machines on Release Engineering machines
 # to run it locally on your machines append --cfg developer_config.py
 PLATFORM_CONFIG = {
     'linux': {
         'exes': {
             'gittool.py': os.path.join(external_tools_path, 'gittool.py'),
-            'virtualenv': '/tools/virtualenv/bin/virtualenv',
         },
         'env': {
             'DISPLAY': ':0',
             'PATH': '%(PATH)s:' + external_tools_path,
         }
     },
     'linux64': {
         'exes': {
             'gittool.py': os.path.join(external_tools_path, 'gittool.py'),
-            'virtualenv': '/tools/virtualenv/bin/virtualenv',
         },
         'env': {
             'DISPLAY': ':0',
             'PATH': '%(PATH)s:' + external_tools_path,
         }
     },
     'macosx': {
         'exes': {
             'gittool.py': os.path.join(external_tools_path, 'gittool.py'),
-            'virtualenv': '/tools/virtualenv/bin/virtualenv',
         },
         'env': {
             'PATH': '%(PATH)s:' + external_tools_path,
         }
     },
     'win32': {
         "exes": {
             'gittool.py': [PYTHON_WIN32, os.path.join(external_tools_path, 'gittool.py')],
             # Otherwise, depending on the PATH we can pick python 2.6 up
             'python': PYTHON_WIN32,
-            'virtualenv': [PYTHON_WIN32, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         }
     }
 }
 
 config = PLATFORM_CONFIG[platform_name()]
 # Generic values
 config.update({
     "find_links": [
--- a/testing/mozharness/configs/repackage/linux32_signed.py
+++ b/testing/mozharness/configs/repackage/linux32_signed.py
@@ -17,13 +17,12 @@ config = {
         "mar",
         "-i", "{abs_work_dir}/inputs/target.tar.gz",
         "--mar", "{abs_work_dir}/inputs/mar",
         "-o", "{output_home}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
-    'tooltool_script': ["/builds/tooltool.py"],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/repackage/linux64_signed.py
+++ b/testing/mozharness/configs/repackage/linux64_signed.py
@@ -17,13 +17,12 @@ config = {
         "mar",
         "-i", "{abs_work_dir}/inputs/target.tar.gz",
         "--mar", "{abs_work_dir}/inputs/mar",
         "-o", "{output_home}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
-    'tooltool_script': ["/builds/tooltool.py"],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/repackage/osx_signed.py
+++ b/testing/mozharness/configs/repackage/osx_signed.py
@@ -20,11 +20,10 @@ config = {
         "mar",
         "-i", "{abs_work_dir}/inputs/target.tar.gz",
         "--mar", "{abs_work_dir}/inputs/mar",
         "-o", "{output_home}/target.complete.mar"
     ]],
 
     # ToolTool
     "tooltool_url": 'http://relengapi/tooltool/',
-    'tooltool_script': ["/builds/tooltool.py"],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 }
--- a/testing/mozharness/configs/repackage/win32_signed.py
+++ b/testing/mozharness/configs/repackage/win32_signed.py
@@ -1,10 +1,9 @@
 import os
-import sys
 
 platform = "win32"
 
 download_config = {
         "target.zip": os.environ.get("SIGNED_ZIP"),
         "setup.exe": os.environ.get("SIGNED_SETUP"),
         "mar.exe": os.environ.get("UNSIGNED_MAR"),
         # stub installer is only built on win32
@@ -37,14 +36,12 @@ config = {
 
     "download_config": download_config,
 
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://api.pub.build.mozilla.org/tooltool/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/repackage/win64_signed.py
+++ b/testing/mozharness/configs/repackage/win64_signed.py
@@ -1,10 +1,9 @@
 import os
-import sys
 
 platform = "win64"
 
 download_config = {
         "target.zip": os.environ.get("SIGNED_ZIP"),
         "setup.exe": os.environ.get("SIGNED_SETUP"),
         "mar.exe": os.environ.get("UNSIGNED_MAR"),
     }
@@ -30,14 +29,12 @@ config = {
 
     "download_config": download_config,
 
     "repackage_config": repackage_config,
 
     # ToolTool
     "tooltool_manifest_src": 'browser\\config\\tooltool-manifests\\{}\\releng.manifest'.format(platform),
     'tooltool_url': 'https://api.pub.build.mozilla.org/tooltool/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_cache': os.environ.get('TOOLTOOL_CACHE'),
 
     'run_configure': False,
 }
--- a/testing/mozharness/configs/single_locale/linux.py
+++ b/testing/mozharness/configs/single_locale/linux.py
@@ -1,96 +1,23 @@
-import os
-
 config = {
     "platform": "linux",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/linux32/l10n-mozconfig",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.tar.bz2',
-    },
     "ssh_key_dir": "/home/mock_mozilla/.ssh",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
-    "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "update_mar_dir": "dist/update",  # sure?
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
     "localized_mar": "firefox-%(version)s.%(locale)s.linux-i686.complete.mar",
-
-    # Mock
-    'mock_target': 'mozilla-centos6-x86_64',
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind',
-        ######## 32 bit specific ###########
-        'glibc-static.i686', 'libstdc++-static.i686',
-        'gtk2-devel.i686', 'libnotify-devel.i686',
-        'alsa-lib-devel.i686', 'libcurl-devel.i686',
-        'wireless-tools-devel.i686', 'libX11-devel.i686',
-        'libXt-devel.i686', 'mesa-libGL-devel.i686',
-        'gnome-vfs2-devel.i686', 'GConf2-devel.i686',
-        'pulseaudio-libs-devel.i686',
-        'gstreamer-devel.i686', 'gstreamer-plugins-base-devel.i686',
-        # Packages already installed in the mock environment, as x86_64
-        # packages.
-        'glibc-devel.i686', 'libgcc.i686', 'libstdc++-devel.i686',
-        # yum likes to install .x86_64 -devel packages that satisfy .i686
-        # -devel packages dependencies. So manually install the dependencies
-        # of the above packages.
-        'ORBit2-devel.i686', 'atk-devel.i686', 'cairo-devel.i686',
-        'check-devel.i686', 'dbus-devel.i686', 'dbus-glib-devel.i686',
-        'fontconfig-devel.i686', 'glib2-devel.i686',
-        'hal-devel.i686', 'libICE-devel.i686', 'libIDL-devel.i686',
-        'libSM-devel.i686', 'libXau-devel.i686', 'libXcomposite-devel.i686',
-        'libXcursor-devel.i686', 'libXdamage-devel.i686',
-        'libXdmcp-devel.i686', 'libXext-devel.i686', 'libXfixes-devel.i686',
-        'libXft-devel.i686', 'libXi-devel.i686', 'libXinerama-devel.i686',
-        'libXrandr-devel.i686', 'libXrender-devel.i686',
-        'libXxf86vm-devel.i686', 'libdrm-devel.i686', 'libidn-devel.i686',
-        'libpng-devel.i686', 'libxcb-devel.i686', 'libxml2-devel.i686',
-        'pango-devel.i686', 'perl-devel.i686', 'pixman-devel.i686',
-        'zlib-devel.i686',
-        # Freetype packages need to be installed be version, because a newer
-        # version is available, but we don't want it for Firefox builds.
-        'freetype-2.3.11-6.el6_1.8.i686',
-        'freetype-devel-2.3.11-6.el6_1.8.i686',
-        'freetype-2.3.11-6.el6_1.8.x86_64',
-        ######## 32 bit specific ###########
-    ],
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
 }
--- a/testing/mozharness/configs/single_locale/linux64.py
+++ b/testing/mozharness/configs/single_locale/linux64.py
@@ -1,76 +1,23 @@
-import os
-
 config = {
     "platform": "linux64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/linux64/l10n-mozconfig",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.tar.bz2',
-    },
     "ssh_key_dir": "/home/mock_mozilla/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "update_mar_dir": "dist/update",  # sure?
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
     "localized_mar": "firefox-%(version)s.%(locale)s.linux-x86_64.complete.mar",
-
-    # Mock
-    'mock_target': 'mozilla-centos6-x86_64',
-
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
 }
--- a/testing/mozharness/configs/single_locale/linux64_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux64_devedition.py
@@ -1,78 +1,25 @@
-import os
-
 config = {
     "platform": "linux64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/linux64/l10n-mozconfig-devedition",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.tar.bz2',
-    },
     "ssh_key_dir": "/home/mock_mozilla/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "update_mar_dir": "dist/update",  # sure?
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
     "localized_mar": "firefox-%(version)s.%(locale)s.linux-x86_64.complete.mar",
 
-    # Mock
-    'mock_target': 'mozilla-centos6-x86_64',
-
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind', 'dbus-x11',
-        ######## 64 bit specific ###########
-        'glibc-static', 'libstdc++-static',
-        'gtk2-devel', 'libnotify-devel',
-        'alsa-lib-devel', 'libcurl-devel', 'wireless-tools-devel',
-        'libX11-devel', 'libXt-devel', 'mesa-libGL-devel', 'gnome-vfs2-devel',
-        'GConf2-devel',
-        ### from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'pulseaudio-libs-devel', 'gstreamer-devel',
-        'gstreamer-plugins-base-devel', 'freetype-2.3.11-6.el6_1.8.x86_64',
-        'freetype-devel-2.3.11-6.el6_1.8.x86_64'
-    ],
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
-
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/linux_devedition.py
+++ b/testing/mozharness/configs/single_locale/linux_devedition.py
@@ -1,98 +1,25 @@
-import os
-
 config = {
     "platform": "linux",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/linux32/l10n-mozconfig-devedition",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.tar.bz2',
-    },
     "ssh_key_dir": "/home/mock_mozilla/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
     "update_mar_dir": "dist/update",  # sure?
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist/host/bin",
     "mar": "mar",
     "mbsdiff": "mbsdiff",
     "localized_mar": "firefox-%(version)s.%(locale)s.linux-i686.complete.mar",
 
-    # Mock
-    'mock_target': 'mozilla-centos6-x86_64',
-    'mock_packages': [
-        'autoconf213', 'python', 'mozilla-python27', 'zip', 'mozilla-python27-mercurial',
-        'git', 'ccache', 'perl-Test-Simple', 'perl-Config-General',
-        'yasm', 'wget',
-        'mpfr',  # required for system compiler
-        'xorg-x11-font*',  # fonts required for PGO
-        'imake',  # required for makedepend!?!
-        ### <-- from releng repo
-        'gcc45_0moz3', 'gcc454_0moz1', 'gcc472_0moz1', 'gcc473_0moz1',
-        'yasm', 'ccache',
-        ###
-        'valgrind',
-        ######## 32 bit specific ###########
-        'glibc-static.i686', 'libstdc++-static.i686',
-        'gtk2-devel.i686', 'libnotify-devel.i686',
-        'alsa-lib-devel.i686', 'libcurl-devel.i686',
-        'wireless-tools-devel.i686', 'libX11-devel.i686',
-        'libXt-devel.i686', 'mesa-libGL-devel.i686',
-        'gnome-vfs2-devel.i686', 'GConf2-devel.i686',
-        'pulseaudio-libs-devel.i686',
-        'gstreamer-devel.i686', 'gstreamer-plugins-base-devel.i686',
-        # Packages already installed in the mock environment, as x86_64
-        # packages.
-        'glibc-devel.i686', 'libgcc.i686', 'libstdc++-devel.i686',
-        # yum likes to install .x86_64 -devel packages that satisfy .i686
-        # -devel packages dependencies. So manually install the dependencies
-        # of the above packages.
-        'ORBit2-devel.i686', 'atk-devel.i686', 'cairo-devel.i686',
-        'check-devel.i686', 'dbus-devel.i686', 'dbus-glib-devel.i686',
-        'fontconfig-devel.i686', 'glib2-devel.i686',
-        'hal-devel.i686', 'libICE-devel.i686', 'libIDL-devel.i686',
-        'libSM-devel.i686', 'libXau-devel.i686', 'libXcomposite-devel.i686',
-        'libXcursor-devel.i686', 'libXdamage-devel.i686',
-        'libXdmcp-devel.i686', 'libXext-devel.i686', 'libXfixes-devel.i686',
-        'libXft-devel.i686', 'libXi-devel.i686', 'libXinerama-devel.i686',
-        'libXrandr-devel.i686', 'libXrender-devel.i686',
-        'libXxf86vm-devel.i686', 'libdrm-devel.i686', 'libidn-devel.i686',
-        'libpng-devel.i686', 'libxcb-devel.i686', 'libxml2-devel.i686',
-        'pango-devel.i686', 'perl-devel.i686', 'pixman-devel.i686',
-        'zlib-devel.i686',
-        # Freetype packages need to be installed be version, because a newer
-        # version is available, but we don't want it for Firefox builds.
-        'freetype-2.3.11-6.el6_1.8.i686',
-        'freetype-devel-2.3.11-6.el6_1.8.i686',
-        'freetype-2.3.11-6.el6_1.8.x86_64',
-        ######## 32 bit specific ###########
-    ],
-    'mock_files': [
-        ('/home/cltbld/.ssh', '/home/mock_mozilla/.ssh'),
-        ('/home/cltbld/.hgrc', '/builds/.hgrc'),
-        ('/home/cltbld/.boto', '/builds/.boto'),
-        ('/builds/gapi.data', '/builds/gapi.data'),
-        ('/builds/relengapi.tok', '/builds/relengapi.tok'),
-        ('/usr/local/lib/hgext', '/usr/local/lib/hgext'),
-    ],
-
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/macosx64.py
+++ b/testing/mozharness/configs/single_locale/macosx64.py
@@ -1,39 +1,21 @@
-import os
-
 config = {
     # mozconfig file to use, it depends on branch and platform names
     "platform": "macosx64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/macosx64/l10n-mozconfig",
-    "bootstrap_env": {
-        "SHELL": '/bin/bash',
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "MOZ_PKG_PLATFORM": "mac",
-        # "IS_NIGHTLY": "yes",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.dmg',
-    },
     "ssh_key_dir": "~/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
--- a/testing/mozharness/configs/single_locale/macosx64_devedition.py
+++ b/testing/mozharness/configs/single_locale/macosx64_devedition.py
@@ -1,39 +1,22 @@
-import os
-
 config = {
     # mozconfig file to use, it depends on branch and platform names
     "platform": "macosx64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/macosx64/l10n-mozconfig-devedition",
-    "bootstrap_env": {
-        "SHELL": '/bin/bash',
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "MOZ_PKG_PLATFORM": "mac",
-        # "IS_NIGHTLY": "yes",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        'EN_US_PACKAGE_NAME': 'target.dmg',
-    },
     "ssh_key_dir": "~/.ssh",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "/builds/hg-shared",
 
     "upload_env_extra": {
         "MOZ_PKG_PLATFORM": "mac",
     },
 
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
-
     # l10n
     "ignore_locales": ["en-US", "ja"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
     # MAR
--- a/testing/mozharness/configs/single_locale/tc_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/tc_android-api-16.py
@@ -8,18 +8,16 @@ config = {
         "output_dir": "%(abs_work_dir)s/src",
     },
     "tooltool_servers": ['http://relengapi/tooltool/'],
 
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
     'secret_files': [
         {'filename': '/builds/gapi.data',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/gapi.data',
          'min_scm_level': 1},
         {'filename': '/builds/mozilla-fennec-geoloc-api.key',
          'secret_name': 'project/releng/gecko/build/level-%(scm-level)s/mozilla-fennec-geoloc-api.key',
          'min_scm_level': 2, 'default': 'try-build-has-no-secrets'},
         {'filename': '/builds/adjust-sdk.token',
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/single_locale/tc_common.py
@@ -0,0 +1,8 @@
+config = {
+    "mozilla_dir": "src/",
+    "simple_name_move": True,
+    "update_gecko_source_to_enUS": False,
+
+    # Override the buildbot path to not read it
+    "buildbot_json_path": None,
+}
--- a/testing/mozharness/configs/single_locale/tc_linux32.py
+++ b/testing/mozharness/configs/single_locale/tc_linux32.py
@@ -14,11 +14,9 @@ config = {
         "L10NBASEDIR": "../../l10n",
         "MOZ_MAKE_COMPLETE_MAR": "1",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
 }
--- a/testing/mozharness/configs/single_locale/tc_linux64.py
+++ b/testing/mozharness/configs/single_locale/tc_linux64.py
@@ -14,11 +14,9 @@ config = {
         "L10NBASEDIR": "../../l10n",
         "MOZ_MAKE_COMPLETE_MAR": "1",
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
 }
--- a/testing/mozharness/configs/single_locale/tc_macosx64.py
+++ b/testing/mozharness/configs/single_locale/tc_macosx64.py
@@ -16,12 +16,10 @@ config = {
         'TOOLTOOL_CACHE': os.environ.get('TOOLTOOL_CACHE'),
     },
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': '/builds/worker/artifacts/',
     },
 
     "tooltool_url": 'http://relengapi/tooltool/',
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
 }
 
--- a/testing/mozharness/configs/single_locale/tc_win32.py
+++ b/testing/mozharness/configs/single_locale/tc_win32.py
@@ -24,15 +24,9 @@ config = {
     },
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': os.path.join(os.getcwd(), 'public', 'build'),
     },
 
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/win32/releng.manifest",
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
-    "update_gecko_source_to_enUS": False,
-
-    # Override the buildbot path to not read it
-    "buildbot_json_path": None,
 }
--- a/testing/mozharness/configs/single_locale/tc_win64.py
+++ b/testing/mozharness/configs/single_locale/tc_win64.py
@@ -24,16 +24,10 @@ config = {
     },
     "upload_env": {
         'UPLOAD_HOST': 'localhost',
         'UPLOAD_PATH': os.path.join(os.getcwd(), 'public', 'build'),
     },
 
     "tooltool_url": 'http://relengapi/tooltool/',
     'tooltool_manifest_src': "browser/config/tooltool-manifests/win64/releng.manifest",
-    "mozilla_dir": "src/",
-    "simple_name_move": True,
-    "update_gecko_source_to_enUS": False,
-
-    # Override the buildbot path to not read it
-    "buildbot_json_path": None,
 }
 
--- a/testing/mozharness/configs/single_locale/try_android-api-16.py
+++ b/testing/mozharness/configs/single_locale/try_android-api-16.py
@@ -11,17 +11,16 @@ config = {
     "objdir": "obj-firefox",
     "is_automation": True,
     "buildbot_json_path": "buildprops.json",
     "force_clobber": True,
     "clobberer_url": "https://api.pub.build.mozilla.org/clobberer/lastclobber",
     "locales_file": "%s/mobile/locales/l10n-changesets.json" % MOZILLA_DIR,
     "locales_dir": "mobile/android/locales",
     "ignore_locales": ["en-US"],
-    "nightly_build": False,
     'balrog_credentials_file': 'oauth.txt',
     "tools_repo": "https://hg.mozilla.org/build/tools",
     "tooltool_config": {
         "manifest": "mobile/android/config/tooltool-manifests/android/releng.manifest",
         "output_dir": "%(abs_work_dir)s/" + MOZILLA_DIR,
     },
     "exes": {
         'tooltool.py': '/builds/tooltool.py',
--- a/testing/mozharness/configs/single_locale/win32.py
+++ b/testing/mozharness/configs/single_locale/win32.py
@@ -1,42 +1,20 @@
-import os
-import sys
-
 config = {
     "platform": "win32",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/win32/l10n-mozconfig",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        "PATH": '%(abs_objdir)s\\..\\xz-5.2.3\\bin_x86-64;'
-                'C:\\mozilla-build\\nsis-3.01;'
-                + '%s' % (os.environ.get('path')),
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-        'EN_US_PACKAGE_NAME': 'target.zip',
-        'EN_US_PKG_INST_BASENAME': 'target.installer',
-    },
     "ssh_key_dir": "~/.ssh",
     "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
@@ -45,15 +23,10 @@ config = {
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
     "localized_mar": "firefox-%(version)s.%(locale)s.win32.complete.mar",
 
     # use mozmake?
     "enable_mozmake": True,
-    'exes': {
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    }
+    'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win32_devedition.py
+++ b/testing/mozharness/configs/single_locale/win32_devedition.py
@@ -1,42 +1,19 @@
-import os
-import sys
-
 config = {
     "platform": "win32",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/win32/l10n-mozconfig-devedition",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        "PATH": '%(abs_objdir)s\\..\\xz-5.2.3\\bin_x86-64;'
-                'C:\\mozilla-build\\nsis-3.01;'
-                + '%s' % (os.environ.get('path')),
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-        'EN_US_PACKAGE_NAME': 'target.zip',
-        'EN_US_PKG_INST_BASENAME': 'target.installer',
-    },
     "ssh_key_dir": "~/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win32/l10n.manifest',
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
@@ -45,17 +22,12 @@ config = {
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
     "localized_mar": "firefox-%(version)s.%(locale)s.win32.complete.mar",
 
     # use mozmake?
     "enable_mozmake": True,
-    'exes': {
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    },
+    'exes': {},
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/single_locale/win64.py
+++ b/testing/mozharness/configs/single_locale/win64.py
@@ -1,42 +1,19 @@
-import os
-import sys
-
 config = {
     "platform": "win64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/win64/l10n-mozconfig",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        "PATH": '%(abs_objdir)s\\..\\xz-5.2.3\\bin_x86-64;'
-                'C:\\mozilla-build\\nsis-3.01;'
-                + '%s' % (os.environ.get('path')),
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-        'EN_US_PACKAGE_NAME': 'target.zip',
-        'EN_US_PKG_INST_BASENAME': 'target.installer',
-    },
     "ssh_key_dir": "~/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
@@ -45,15 +22,10 @@ config = {
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
     "localized_mar": "firefox-%(version)s.%(locale)s.win64.complete.mar",
 
     # use mozmake?
     "enable_mozmake": True,
-    'exes': {
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    }
+    'exes': {}
 }
--- a/testing/mozharness/configs/single_locale/win64_devedition.py
+++ b/testing/mozharness/configs/single_locale/win64_devedition.py
@@ -1,42 +1,19 @@
-import os
-import sys
-
 config = {
     "platform": "win64",
     "stage_product": "firefox",
     "mozconfig": "src/browser/config/mozconfigs/win64/l10n-mozconfig-devedition",
-    "bootstrap_env": {
-        "MOZ_OBJDIR": "obj-firefox",
-        "EN_US_BINARY_URL": "%(en_us_binary_url)s",
-        "MOZ_UPDATE_CHANNEL": "%(update_channel)s",
-        "DIST": "%(abs_objdir)s",
-        "L10NBASEDIR": "../../l10n",
-        "MOZ_MAKE_COMPLETE_MAR": "1",
-        "PATH": '%(abs_objdir)s\\..\\xz-5.2.3\\bin_x86-64;'
-                'C:\\mozilla-build\\nsis-3.01;'
-                + '%s' % (os.environ.get('path')),
-        'TOOLTOOL_CACHE': 'c:/builds/tooltool_cache',
-        'TOOLTOOL_HOME': '/c/builds',
-        'EN_US_PACKAGE_NAME': 'target.zip',
-        'EN_US_PKG_INST_BASENAME': 'target.installer',
-    },
     "ssh_key_dir": "~/.ssh",
-    "log_name": "single_locale",
     "objdir": "obj-firefox",
     "vcs_share_base": "c:/builds/hg-shared",
 
     # tooltool
     'tooltool_url': 'https://tooltool.mozilla-releng.net/',
-    'tooltool_script': [sys.executable,
-                        'C:/mozilla-build/tooltool.py'],
     'tooltool_manifest_src': 'browser/config/tooltool-manifests/win64/l10n.manifest',
-    # balrog credential file:
-    'balrog_credentials_file': 'oauth.txt',
 
     # l10n
     "ignore_locales": ["en-US", "ja-JP-mac"],
     "l10n_dir": "l10n",
     "locales_file": "src/browser/locales/all-locales",
     "locales_dir": "browser/locales",
     "hg_l10n_tag": "default",
 
@@ -45,17 +22,12 @@ config = {
     "application_ini": "application.ini",
     "local_mar_tool_dir": "dist\\host\\bin",
     "mar": "mar.exe",
     "mbsdiff": "mbsdiff.exe",
     "localized_mar": "firefox-%(version)s.%(locale)s.win64.complete.mar",
 
     # use mozmake?
     "enable_mozmake": True,
-    'exes': {
-        'virtualenv': [
-            sys.executable,
-            'c:/mozilla-build/buildbotve/virtualenv.py'
-        ],
-    },
+    'exes': {},
 
     "update_channel": "aurora",
 }
--- a/testing/mozharness/configs/talos/linux64_config_taskcluster.py
+++ b/testing/mozharness/configs/talos/linux64_config_taskcluster.py
@@ -10,17 +10,16 @@ if platform.architecture()[0] == '64bit'
     MINIDUMP_STACKWALK_PATH = "linux64-minidump_stackwalk"
 else:
     TOOLTOOL_MANIFEST_PATH = "config/tooltool-manifests/linux32/releng.manifest"
     MINIDUMP_STACKWALK_PATH = "linux32-minidump_stackwalk"
 
 exes = {
     'tooltool.py': ["/builds/tooltool.py"],
     'python': PYTHON,
-    'virtualenv': [PYTHON, '/usr/local/lib/python2.7/dist-packages/virtualenv.py'],
 }
 ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
 INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.tar.bz2")
 
 config = {
     "log_name": "talos",
     "buildbot_json_path": "buildprops.json",
     "download_tooltool": True,
--- a/testing/mozharness/configs/talos/windows_config.py
+++ b/testing/mozharness/configs/talos/windows_config.py
@@ -14,17 +14,16 @@ config = {
     "pip_index": False,
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "virtualenv_modules": ['pywin32', 'talos', 'mozinstall'],
     "exes": {
         'python': PYTHON,
-        'virtualenv': [PYTHON, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         'easy_install': ['%s/scripts/python' % VENV_PATH,
                          '%s/scripts/easy_install-2.7-script.py' % VENV_PATH],
         'mozinstall': ['%s/scripts/python' % VENV_PATH,
                        '%s/scripts/mozinstall-script.py' % VENV_PATH],
         'hg': 'c:/mozilla-build/hg/hg',
         'tooltool.py': [PYTHON, 'C:/mozilla-build/tooltool.py'],
     },
     "title": socket.gethostname().split('.')[0],
--- a/testing/mozharness/configs/talos/windows_taskcluster_config.py
+++ b/testing/mozharness/configs/talos/windows_taskcluster_config.py
@@ -14,20 +14,16 @@ config = {
     "virtualenv_python_dll": PYTHON_DLL,
     "pip_index": False,
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "virtualenv_modules": ['pypiwin32', 'talos', 'mozinstall'],
     "exes": {
         'python': PYTHON,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['%s/scripts/python' % VENV_PATH,
                        '%s/scripts/mozinstall-script.py' % VENV_PATH],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg'),
         'tooltool.py': [PYTHON, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
     },
     "title": socket.gethostname().split('.')[0],
     "default_actions": [
         "populate-webroot",
--- a/testing/mozharness/configs/talos/windows_vm_config.py
+++ b/testing/mozharness/configs/talos/windows_vm_config.py
@@ -15,17 +15,16 @@ config = {
     "pip_index": False,
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "virtualenv_modules": ['pywin32', 'talos', 'mozinstall'],
     "exes": {
         'python': PYTHON,
-        'virtualenv': [PYTHON, os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')],
         'easy_install': ['%s/scripts/python' % VENV_PATH,
                          '%s/scripts/easy_install-2.7-script.py' % VENV_PATH],
         'mozinstall': ['%s/scripts/python' % VENV_PATH,
                        '%s/scripts/mozinstall-script.py' % VENV_PATH],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg'),
         'tooltool.py': [PYTHON, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
     },
     "title": socket.gethostname().split('.')[0],
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -31,17 +31,16 @@ else:
                                       "i386-redhat-linux-gnu.sup")
     NODEJS_PATH = "node-linux-x86/bin/node"
     NODEJS_TOOLTOOL_MANIFEST_PATH = "config/tooltool-manifests/linux32/nodejs.manifest"
 
 #####
 config = {
     "buildbot_json_path": "buildprops.json",
     "exes": {
-        "virtualenv": "/tools/virtualenv/bin/virtualenv",
         "tooltool.py": "/tools/tooltool.py",
     },
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
     ###
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -5,17 +5,16 @@ INSTALLER_PATH = os.path.join(os.getcwd(
 XPCSHELL_NAME = 'xpcshell'
 EXE_SUFFIX = ''
 DISABLE_SCREEN_SAVER = False
 ADJUST_MOUSE_AND_SCREEN = False
 #####
 config = {
     "buildbot_json_path": "buildprops.json",
     "exes": {
-        'virtualenv': '/tools/virtualenv/bin/virtualenv',
         'tooltool.py': "/tools/tooltool.py",
     },
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
     ###
--- a/testing/mozharness/configs/unittests/thunderbird_buildbot.py
+++ b/testing/mozharness/configs/unittests/thunderbird_buildbot.py
@@ -12,11 +12,10 @@ config = {
 
 # Specify virtualenv directory for thunderbird buildbot tests explicitly.
 # The default configuration in `linux_unittest.py` specifies a path that
 # doesn't exist on buildbot. We need to specify the other paths here too, since
 # config entries are overriden wholesale.
 if platform.system() == "Linux":
     config["exes"] = {
         "python": "/tools/buildbot/bin/python",
-        "virtualenv": ["/tools/buildbot/bin/python", "/tools/misc-python/virtualenv.py"],
         "tooltool.py": "/tools/tooltool.py",
     }
--- a/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
+++ b/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
@@ -19,20 +19,16 @@ DESKTOP_VISUALFX_THEME = {
 TASKBAR_AUTOHIDE_REG_PATH = {
     'Windows 7': 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects2',
     'Windows 10': 'HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3'
 }.get('{} {}'.format(platform.system(), platform.release()))
 #####
 config = {
     "exes": {
         'python': sys.executable,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
         'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
     ###
     "installer_path": INSTALLER_PATH,
     "binary_path": BINARY_PATH,
     "xpcshell_name": XPCSHELL_NAME,
--- a/testing/mozharness/configs/unittests/win_unittest.py
+++ b/testing/mozharness/configs/unittests/win_unittest.py
@@ -9,17 +9,16 @@ XPCSHELL_NAME = 'xpcshell.exe'
 EXE_SUFFIX = '.exe'
 DISABLE_SCREEN_SAVER = False
 ADJUST_MOUSE_AND_SCREEN = True
 #####
 config = {
     "buildbot_json_path": "buildprops.json",
     "exes": {
         'python': sys.executable,
-        'virtualenv': [sys.executable, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
         'tooltool.py': [sys.executable, 'C:/mozilla-build/tooltool.py'],
     },
     ###
     "installer_path": INSTALLER_PATH,
     "binary_path": BINARY_PATH,
--- a/testing/mozharness/configs/web_platform_tests/prod_config.py
+++ b/testing/mozharness/configs/web_platform_tests/prod_config.py
@@ -12,17 +12,16 @@ config = {
         "--config=%(test_path)s/wptrunner.ini",
         "--ca-cert-path=%(test_path)s/certs/cacert.pem",
         "--host-key-path=%(test_path)s/certs/web-platform.test.key",
         "--host-cert-path=%(test_path)s/certs/web-platform.test.pem",
         "--certutil-binary=%(test_install_path)s/bin/certutil",
     ],
 
     "exes": {
-        'virtualenv': '/tools/virtualenv/bin/virtualenv',
         'tooltool.py': "/tools/tooltool.py",
     },
 
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
 
--- a/testing/mozharness/configs/web_platform_tests/prod_config_windows.py
+++ b/testing/mozharness/configs/web_platform_tests/prod_config_windows.py
@@ -17,17 +17,16 @@ config = {
         "--ca-cert-path=%(test_path)s/certs/cacert.pem",
         "--host-key-path=%(test_path)s/certs/web-platform.test.key",
         "--host-cert-path=%(test_path)s/certs/web-platform.test.pem",
         "--certutil-binary=%(test_install_path)s/bin/certutil",
     ],
 
     "exes": {
         'python': sys.executable,
-        'virtualenv': [sys.executable, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
         'tooltool.py': [sys.executable, 'C:/mozilla-build/tooltool.py'],
     },
 
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
--- a/testing/mozharness/configs/web_platform_tests/prod_config_windows_taskcluster.py
+++ b/testing/mozharness/configs/web_platform_tests/prod_config_windows_taskcluster.py
@@ -17,20 +17,16 @@ config = {
         "--ca-cert-path=%(test_path)s/certs/cacert.pem",
         "--host-key-path=%(test_path)s/certs/web-platform.test.key",
         "--host-cert-path=%(test_path)s/certs/web-platform.test.pem",
         "--certutil-binary=%(test_install_path)s/bin/certutil",
     ],
 
     "exes": {
         'python': sys.executable,
-        'virtualenv': [
-            sys.executable,
-            os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
-        ],
         'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
         'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
 
     "proxxy": {},
     "find_links": [
         "http://pypi.pub.build.mozilla.org/pub",
--- a/testing/mozharness/configs/web_platform_tests/test_config_windows.py
+++ b/testing/mozharness/configs/web_platform_tests/test_config_windows.py
@@ -15,17 +15,16 @@ config = {
         "--ca-cert-path=%(test_path)s/certs/cacert.pem",
         "--host-key-path=%(test_path)s/certs/web-platform.test.key",
         "--host-cert-path=%(test_path)s/certs/web-platform.test.pem",
         "--certutil-binary=%(test_install_path)s/bin/certutil",
     ],
 
     "exes": {
         'python': sys.executable,
-        'virtualenv': [sys.executable, 'c:/mozilla-source/cedar/python/virtualenv/virtualenv.py'], #'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
     },
 
     "default_actions": [
         'clobber',
         'download-and-extract',
--- a/testing/mozharness/mozharness/base/python.py
+++ b/testing/mozharness/mozharness/base/python.py
@@ -308,19 +308,17 @@ class VirtualenvMixin(object):
                 'error_level': WARNING,
             }
         )
 
     def create_virtualenv(self, modules=(), requirements=()):
         """
         Create a python virtualenv.
 
-        The virtualenv exe can be defined in c['virtualenv'] or
-        c['exes']['virtualenv'], as a string (path) or list (path +
-        arguments).
+        This uses the copy of virtualenv that is vendored in mozharness.
 
         c['virtualenv_python_dll'] is an optional config item that works
         around an old windows virtualenv bug.
 
         virtualenv_modules can be a list of module names to install, e.g.
 
             virtualenv_modules = ['module1', 'module2']
 
--- a/testing/mozharness/mozharness/mozilla/buildbot.py
+++ b/testing/mozharness/mozharness/mozilla/buildbot.py
@@ -140,59 +140,16 @@ class BuildbotMixin(object):
                 self.log("dump_buildbot_properties: Can't dump non-list prop_list %s!" % str(prop_list), level=error_level)
                 return
             self.info("Writing buildbot properties %s to %s" % (str(prop_list), file_name))
         contents = ""
         for prop in prop_list:
             contents += "%s:%s\n" % (prop, self.buildbot_properties.get(prop, "None"))
         return self.write_to_file(file_name, contents)
 
-    def invoke_sendchange(self, downloadables=None, branch=None,
-                   username="sendchange-unittest", sendchange_props=None):
-        """ Generic sendchange, currently b2g- and unittest-specific.
-            """
-        c = self.config
-        buildbot = self.query_exe("buildbot", return_type="list")
-        if branch is None:
-            if c.get("debug_build"):
-                platform = re.sub('[_-]debug', '', self.buildbot_config["properties"]["platform"])
-                branch = '%s-%s-debug-unittest' % (self.buildbot_config["properties"]["branch"], platform)
-            else:
-                branch = '%s-%s-opt-unittest' % (self.buildbot_config["properties"]["branch"], self.buildbot_config["properties"]["platform"])
-        sendchange = [
-            'sendchange',
-            '--master', c.get("sendchange_masters")[0],
-            '--username', username,
-            '--branch', branch,
-        ]
-        if self.buildbot_config['sourcestamp'].get("revision"):
-            sendchange += ['-r', self.buildbot_config['sourcestamp']["revision"]]
-        if len(self.buildbot_config['sourcestamp']['changes']) > 0:
-            if self.buildbot_config['sourcestamp']['changes'][0].get('who'):
-                sendchange += ['--username', self.buildbot_config['sourcestamp']['changes'][0]['who']]
-            if self.buildbot_config['sourcestamp']['changes'][0].get('comments'):
-                sendchange += ['--comments', self.buildbot_config['sourcestamp']['changes'][0]['comments'].encode('ascii', 'ignore')]
-        if sendchange_props:
-            for key, value in sendchange_props.iteritems():
-                sendchange.extend(['--property', '%s:%s' % (key, value)])
-        else:
-            if self.buildbot_config["properties"].get("builduid"):
-                sendchange += ['--property', "builduid:%s" % self.buildbot_config["properties"]["builduid"]]
-            sendchange += [
-                '--property', "buildid:%s" % self.query_buildid(),
-                '--property', 'pgo_build:False',
-            ]
-
-        for d in downloadables:
-            sendchange += [d]
-
-        retcode = self.run_command(buildbot + sendchange)
-        if retcode != 0:
-            self.info("The sendchange failed but we don't want to turn the build orange: %s" % retcode)
-
     def query_build_name(self):
         build_name = self.config.get('platform')
         if not build_name:
             self.fatal('Must specify "platform" in the mozharness config for indexing')
 
         return build_name
 
     def query_build_type(self):
--- a/testing/mozharness/mozharness/mozilla/building/buildbase.py
+++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py
@@ -37,20 +37,18 @@ from mozharness.mozilla.buildbot import 
     TBPL_EXCEPTION,
     TBPL_FAILURE,
     TBPL_RETRY,
     TBPL_WARNING,
     TBPL_SUCCESS,
     TBPL_WORST_LEVEL_TUPLE,
 )
 from mozharness.mozilla.purge import PurgeMixin
-from mozharness.mozilla.mock import MockMixin
 from mozharness.mozilla.secrets import SecretsMixin
 from mozharness.mozilla.signing import SigningMixin
-from mozharness.mozilla.mock import ERROR_MSGS as MOCK_ERROR_MSGS
 from mozharness.mozilla.testing.errors import TinderBoxPrintRe
 from mozharness.mozilla.testing.unittest import tbox_print_summary
 from mozharness.mozilla.updates.balrog import BalrogMixin
 from mozharness.mozilla.taskcluster_helper import Taskcluster
 from mozharness.base.python import (
     PerfherderResourceOptionsMixin,
     VirtualenvMixin,
 )
@@ -65,17 +63,16 @@ ERROR_MSGS = {
     'undetermined_repo_path': 'The repo could not be determined. \
 Please make sure that either "repo" is in your config or, if \
 you are running this in buildbot, "repo_path" is in your buildbot_config.',
     'comments_undetermined': '"comments" could not be determined. This may be \
 because it was a forced build.',
     'tooltool_manifest_undetermined': '"tooltool_manifest_src" not set, \
 Skipping run_tooltool...',
 }
-ERROR_MSGS.update(MOCK_ERROR_MSGS)
 
 
 ### Output Parsers
 
 TBPL_UPLOAD_ERRORS = [
     {
         'regex': re.compile("Connection timed out"),
         'level': TBPL_RETRY,
@@ -656,34 +653,28 @@ BUILD_BASE_CONFIG_OPTIONS = [
         "action": "store_true",
         "dest": "nightly_build",
         "default": False,
         "help": "Sets the build to run in nightly mode"}],
     [['--who'], {
         "dest": "who",
         "default": '',
         "help": "stores who made the created the buildbot change."}],
-    [["--disable-mock"], {
-        "dest": "disable_mock",
-        "action": "store_true",
-        "help": "do not run under mock despite what gecko-config says",
-    }],
-
 ]
 
 
 def generate_build_ID():
     return time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
 
 
 def generate_build_UID():
     return uuid.uuid4().hex
 
 
-class BuildScript(BuildbotMixin, PurgeMixin, MockMixin, BalrogMixin,
+class BuildScript(BuildbotMixin, PurgeMixin, BalrogMixin,
                   SigningMixin, VirtualenvMixin, MercurialScript,
                   SecretsMixin, PerfherderResourceOptionsMixin):
     def __init__(self, **kwargs):
         # objdir is referenced in _query_abs_dirs() so let's make sure we
         # have that attribute before calling BaseScript.__init__
         self.objdir = None
         super(BuildScript, self).__init__(**kwargs)
         # epoch is only here to represent the start of the buildbot build
@@ -829,17 +820,17 @@ or run without that action (ie: --no-{ac
                 sys.executable, os.path.join(dirs['abs_src_dir'], 'mach'), 'python',
                 print_conf_setting_path, app_ini_path,
                 'App', prop
             ]
             env = self.query_build_env()
             # dirs['abs_obj_dir'] can be different from env['MOZ_OBJDIR'] on
             # mac, and that confuses mach.
             del env['MOZ_OBJDIR']
-            return self.get_output_from_command_m(cmd,
+            return self.get_output_from_command(cmd,
                 cwd=dirs['abs_obj_dir'], env=env)
         else:
             return None
 
     def query_builduid(self):
         c = self.config
         if self.builduid:
             return self.builduid
@@ -1168,17 +1159,17 @@ or run without that action (ie: --no-{ac
         if os.path.exists(fn):
             return fn
 
     def _run_tooltool(self):
         env = self.query_build_env()
         env.update(self.query_mach_build_env())
 
         self._assert_cfg_valid_for_action(
-            ['tooltool_script', 'tooltool_url'],
+            ['tooltool_url'],
             'build'
         )
         c = self.config
         dirs = self.query_abs_dirs()
         toolchains = os.environ.get('MOZ_TOOLCHAINS')
         manifest_src = os.environ.get('TOOLTOOL_MANIFEST')
         if not manifest_src:
             manifest_src = c.get('tooltool_manifest_src')
@@ -1205,18 +1196,18 @@ or run without that action (ie: --no-{ac
             if auth_file:
                 cmd.extend(['--authentication-file', auth_file])
         cache = c['env'].get('TOOLTOOL_CACHE')
         if cache:
             cmd.extend(['--cache-dir', cache])
         if toolchains:
             cmd.extend(toolchains.split())
         self.info(str(cmd))
-        self.run_command_m(cmd, cwd=dirs['abs_src_dir'], halt_on_failure=True,
-                           env=env)
+        self.run_command(cmd, cwd=dirs['abs_src_dir'], halt_on_failure=True,
+                         env=env)
 
     def query_revision(self, source_path=None):
         """ returns the revision of the build
 
          first will look for it in buildbot_properties and then in
          buildbot_config. Failing that, it will actually poll the source of
          the repo if it exists yet.
 
@@ -1239,48 +1230,16 @@ or run without that action (ie: --no-{ac
             # Look at what we have checked out
             if os.path.exists(source_path):
                 hg = self.query_exe('hg', return_type='list')
                 revision = self.get_output_from_command(
                     hg + ['parent', '--template', '{node}'], cwd=source_path
                 )
         return revision.encode('ascii', 'replace') if revision else None
 
-    def _checkout_source(self):
-        """use vcs_checkout to grab source needed for build."""
-        # TODO make this method its own action
-        c = self.config
-        dirs = self.query_abs_dirs()
-        repo = self._query_repo()
-        vcs_checkout_kwargs = {
-            'repo': repo,
-            'dest': dirs['abs_src_dir'],
-            'revision': self.query_revision(),
-            'env': self.query_build_env()
-        }
-        if c.get('clone_by_revision'):
-            vcs_checkout_kwargs['clone_by_revision'] = True
-
-        if c.get('clone_with_purge'):
-            vcs_checkout_kwargs['clone_with_purge'] = True
-        vcs_checkout_kwargs['clone_upstream_url'] = c.get('clone_upstream_url')
-        rev = self.vcs_checkout(**vcs_checkout_kwargs)
-        if c.get('is_automation'):
-            changes = self.buildbot_config['sourcestamp']['changes']
-            if changes:
-                comments = changes[0].get('comments', '')
-                self.set_buildbot_property('comments',
-                                           comments,
-                                           write_to_file=True)
-            else:
-                self.warning(ERROR_MSGS['comments_undetermined'])
-            self.set_buildbot_property('got_revision',
-                                       rev,
-                                       write_to_file=True)
-
     def _count_ctors(self):
         """count num of ctors and set testresults."""
         dirs = self.query_abs_dirs()
         python_path = os.path.join(dirs['abs_work_dir'], 'venv', 'bin',
                                    'python')
         abs_count_ctors_path = os.path.join(dirs['abs_src_dir'],
                                             'build',
                                             'util',
@@ -1369,17 +1328,17 @@ or run without that action (ie: --no-{ac
             {'ini_name': 'Version', 'prop_name': 'appVersion'},
             {'ini_name': 'Name', 'prop_name': 'appName'}
         ]
         env = self.query_build_env()
         # dirs['abs_obj_dir'] can be different from env['MOZ_OBJDIR'] on
         # mac, and that confuses mach.
         del env['MOZ_OBJDIR']
         for prop in properties_needed:
-            prop_val = self.get_output_from_command_m(
+            prop_val = self.get_output_from_command(
                 base_cmd + [prop['ini_name']], cwd=dirs['abs_obj_dir'],
                 halt_on_failure=halt_on_failure, env=env
             )
             self.set_buildbot_property(prop['prop_name'],
                                        prop_val,
                                        write_to_file=True)
 
         if self.config.get('is_automation'):
@@ -1625,42 +1584,26 @@ or run without that action (ie: --no-{ac
                                    write_to_file=True)
         self.set_buildbot_property(prop_type + 'Size',
                                    os.path.getsize(file_path),
                                    write_to_file=True)
         self.set_buildbot_property(prop_type + 'Hash',
                                    hash_prop.strip().split(' ', 2)[1],
                                    write_to_file=True)
 
-    def clone_tools(self):
-        """clones the tools repo."""
-        self._assert_cfg_valid_for_action(['tools_repo'], 'clone_tools')
-        c = self.config
-        dirs = self.query_abs_dirs()
-        repo = {
-            'repo': c['tools_repo'],
-            'vcs': 'hg',
-            'dest': dirs['abs_tools_dir'],
-            'output_timeout': 1200,
-        }
-        self.vcs_checkout(**repo)
-
     def _create_mozbuild_dir(self, mozbuild_path=None):
         if not mozbuild_path:
             env = self.query_build_env()
             mozbuild_path = env.get('MOZBUILD_STATE_PATH')
         if mozbuild_path:
             self.mkdir_p(mozbuild_path)
         else:
             self.warning("mozbuild_path could not be determined. skipping "
                          "creating it.")
 
-    def checkout_sources(self):
-        self._checkout_source()
-
     def preflight_build(self):
         """set up machine state for a complete build."""
         if not self.query_is_nightly():
             # the old package should live in source dir so we don't need to do
             # this for nighties since we clobber the whole work_dir in
             # clobber()
             self._rm_old_package()
         self._get_mozconfig()
@@ -1695,17 +1638,17 @@ or run without that action (ie: --no-{ac
             # See bug 1364651 before considering changing.
             mach = [
                 os.path.join(os.environ['MOZILLABUILD'], 'msys', 'bin', 'bash.exe'),
                 os.path.join(dirs['abs_src_dir'], 'mach')
             ]
         else:
             mach = [sys.executable, 'mach']
 
-        return_code = self.run_command_m(
+        return_code = self.run_command(
             command=mach + ['--log-no-times', 'build', '-v'],
             cwd=dirs['abs_src_dir'],
             env=env,
             output_timeout=self.config.get('max_build_output_timeout', 60 * 40)
         )
         if return_code:
             self.return_code = self.worst_level(
                 EXIT_STATUS_DICT[TBPL_FAILURE],  self.return_code,
@@ -1759,53 +1702,53 @@ or run without that action (ie: --no-{ac
             '--config-file',
             'multi_locale/android-mozharness-build.json',
             '--pull-locale-source',
             '--add-locales',
             '--package-multi',
             '--summary',
         ]
 
-        self.run_command_m(cmd, env=self.query_build_env(), cwd=base_work_dir,
-                           halt_on_failure=True)
+        self.run_command(cmd, env=self.query_build_env(), cwd=base_work_dir,
+                         halt_on_failure=True)
 
         package_cmd = [
             'make',
             'echo-variable-PACKAGE',
             'AB_CD=multi',
         ]
-        package_filename = self.get_output_from_command_m(
+        package_filename = self.get_output_from_command(
             package_cmd,
             cwd=objdir,
         )
         if not package_filename:
             self.fatal("Unable to determine the package filename for the multi-l10n build. Was trying to run: %s" % package_cmd)
 
         self.info('Multi-l10n package filename is: %s' % package_filename)
 
         parser = MakeUploadOutputParser(config=self.config,
                                         log_obj=self.log_obj,
                                         use_package_as_marfile=True,
                                         package_filename=package_filename,
                                         )
         upload_cmd = ['make', 'upload', 'AB_CD=multi']
-        self.run_command_m(upload_cmd,
-                           env=self.query_mach_build_env(multiLocale=False),
-                           cwd=objdir, halt_on_failure=True,
-                           output_parser=parser)
+        self.run_command(upload_cmd,
+                         env=self.query_mach_build_env(multiLocale=False),
+                         cwd=objdir, halt_on_failure=True,
+                         output_parser=parser)
         for prop in parser.matches:
             self.set_buildbot_property(prop,
                                        parser.matches[prop],
                                        write_to_file=True)
         upload_files_cmd = [
             'make',
             'echo-variable-UPLOAD_FILES',
             'AB_CD=multi',
         ]
-        output = self.get_output_from_command_m(
+        output = self.get_output_from_command(
             upload_files_cmd,
             cwd=objdir,
         )
         files = shlex.split(output)
         abs_files = [os.path.abspath(os.path.join(objdir, f)) for f in files]
         self._taskcluster_upload(abs_files, self.routes_json['l10n'],
                                  locale='multi')
 
@@ -1818,75 +1761,23 @@ or run without that action (ie: --no-{ac
 
     def _execute_postflight_build_mach_command(self, mach_command_args):
         env = self.query_build_env()
         env.update(self.query_mach_build_env())
 
         command = [sys.executable, 'mach', '--log-no-times']
         command.extend(mach_command_args)
 
-        self.run_command_m(
+        self.run_command(
             command=command,
             cwd=self.query_abs_dirs()['abs_src_dir'],
             env=env, output_timeout=self.config.get('max_build_output_timeout', 60 * 20),
             halt_on_failure=True,
         )
 
-    def preflight_package_source(self):
-        self._get_mozconfig()
-
-    def package_source(self):
-        """generates source archives and uploads them"""
-        env = self.query_build_env()
-        env.update(self.query_mach_build_env())
-        dirs = self.query_abs_dirs()
-
-        self.run_command_m(
-            command=[sys.executable, 'mach', '--log-no-times', 'configure'],
-            cwd=dirs['abs_src_dir'],
-            env=env, output_timeout=60*3, halt_on_failure=True,
-        )
-        self.run_command_m(
-            command=[
-                'make', 'source-package', 'hg-bundle', 'source-upload',
-                'HG_BUNDLE_REVISION=%s' % self.query_revision(),
-                'UPLOAD_HG_BUNDLE=1',
-            ],
-            cwd=dirs['abs_obj_dir'],
-            env=env, output_timeout=60*45, halt_on_failure=True,
-        )
-
-    def generate_source_signing_manifest(self):
-        """Sign source checksum file"""
-        env = self.query_build_env()
-        env.update(self.query_mach_build_env())
-        if env.get("UPLOAD_HOST") != "localhost":
-            self.warning("Skipping signing manifest generation. Set "
-                         "UPLOAD_HOST to `localhost' to enable.")
-            return
-
-        if not env.get("UPLOAD_PATH"):
-            self.warning("Skipping signing manifest generation. Set "
-                         "UPLOAD_PATH to enable.")
-            return
-
-        dirs = self.query_abs_dirs()
-        objdir = dirs['abs_obj_dir']
-
-        output = self.get_output_from_command_m(
-            command=['make', 'echo-variable-SOURCE_CHECKSUM_FILE'],
-            cwd=objdir,
-        )
-        files = shlex.split(output)
-        abs_files = [os.path.abspath(os.path.join(objdir, f)) for f in files]
-        manifest_file = os.path.join(env["UPLOAD_PATH"],
-                                     "signing_manifest.json")
-        self.write_to_file(manifest_file,
-                           self.generate_signing_manifest(abs_files))
-
     def check_test(self):
         if self.config.get('forced_artifact_build'):
             self.info('Skipping due to forced artifact build.')
             return
         c = self.config
         dirs = self.query_abs_dirs()
 
         env = self.query_build_env()
@@ -1898,20 +1789,20 @@ or run without that action (ie: --no-{ac
             'build',
             '-v',
             '--keep-going',
             'check',
         ]
 
         parser = CheckTestCompleteParser(config=c,
                                          log_obj=self.log_obj)
-        return_code = self.run_command_m(command=cmd,
-                                         cwd=dirs['abs_src_dir'],
-                                         env=env,
-                                         output_parser=parser)
+        return_code = self.run_command(command=cmd,
+                                       cwd=dirs['abs_src_dir'],
+                                       env=env,
+                                       output_parser=parser)
         tbpl_status = parser.evaluate_parser(return_code)
         return_code = EXIT_STATUS_DICT[tbpl_status]
 
         if return_code:
             self.return_code = self.worst_level(
                 return_code,  self.return_code,
                 AUTOMATION_EXIT_CODES[::-1]
             )
@@ -2181,112 +2072,16 @@ or run without that action (ie: --no-{ac
 
         if self.query_is_nightly():
             for suite in perfherder_data['suites']:
                 suite.setdefault('extraOptions', []).insert(0, 'nightly')
 
         if perfherder_data["suites"]:
             self.info('PERFHERDER_DATA: %s' % json.dumps(perfherder_data))
 
-    def sendchange(self):
-        if os.environ.get('TASK_ID'):
-            self.info("We are not running this in buildbot; skipping")
-            return
-
-        if self.config.get('enable_talos_sendchange'):
-            self._do_sendchange('talos')
-        else:
-            self.info("'enable_talos_sendchange' is false; skipping")
-
-        if self.config.get('enable_unittest_sendchange'):
-            self._do_sendchange('unittest')
-        else:
-            self.info("'enable_unittest_sendchange' is false; skipping")
-
-    def _do_sendchange(self, test_type):
-        c = self.config
-
-        # grab any props available from this or previous unclobbered runs
-        self.generate_build_props(console_output=False,
-                                  halt_on_failure=False)
-
-        installer_url = self.query_buildbot_property('packageUrl')
-        if not installer_url:
-            # don't burn the job but we should turn orange
-            self.error("could not determine packageUrl property to use "
-                       "against sendchange. Was it set after 'mach build'?")
-            self.return_code = self.worst_level(
-                1,  self.return_code, AUTOMATION_EXIT_CODES[::-1]
-            )
-            self.return_code = 1
-            return
-        tests_url = self.query_buildbot_property('testsUrl')
-        # Contains the url to a manifest describing the test packages required
-        # for each unittest harness.
-        # For the moment this property is only set on desktop builds. Android
-        # builds find the packages manifest based on the upload
-        # directory of the installer.
-        test_packages_url = self.query_buildbot_property('testPackagesUrl')
-        pgo_build = c.get('pgo_build', False) or self._compile_against_pgo()
-
-        # these cmds are sent to mach through env vars. We won't know the
-        # packageUrl or testsUrl until mach runs upload target so we let mach
-        #  fill in the rest of the cmd
-        sendchange_props = {
-            'buildid': self.query_buildid(),
-            'builduid': self.query_builduid(),
-            'pgo_build': pgo_build,
-        }
-        if self.query_is_nightly():
-            sendchange_props['nightly_build'] = True
-        if test_type == 'talos':
-            if pgo_build:
-                build_type = 'pgo-'
-            else:  # we don't do talos sendchange for debug so no need to check
-                build_type = ''  # leave 'opt' out of branch for talos
-            talos_branch = "%s-%s-%s%s" % (self.branch,
-                                           self.stage_platform,
-                                           build_type,
-                                           'talos')
-            self.invoke_sendchange(downloadables=[installer_url],
-                            branch=talos_branch,
-                            username='sendchange',
-                            sendchange_props=sendchange_props)
-        elif test_type == 'unittest':
-            # do unittest sendchange
-            if c.get('debug_build'):
-                build_type = ''  # for debug builds we append nothing
-            elif pgo_build:
-                build_type = '-pgo'
-            else:  # generic opt build
-                build_type = '-opt'
-
-            if c.get('unittest_platform'):
-                platform = c['unittest_platform']
-            else:
-                platform = self.stage_platform
-
-            platform_and_build_type = "%s%s" % (platform, build_type)
-            unittest_branch = "%s-%s-%s" % (self.branch,
-                                            platform_and_build_type,
-                                            'unittest')
-
-            downloadables = [installer_url]
-            if test_packages_url:
-                downloadables.append(test_packages_url)
-            else:
-                downloadables.append(tests_url)
-
-            self.invoke_sendchange(downloadables=downloadables,
-                                   branch=unittest_branch,
-                                   sendchange_props=sendchange_props)
-        else:
-            self.fatal('type: "%s" is unknown for sendchange type. valid '
-                       'strings are "unittest" or "talos"' % test_type)
-
     def update(self):
         """ submit balrog update steps. """
         if self.config.get('forced_artifact_build'):
             self.info('Skipping due to forced artifact build.')
             return
         if not self.query_is_nightly():
             self.info("Not a nightly build, skipping balrog submission.")
             return
@@ -2304,17 +2099,17 @@ or run without that action (ie: --no-{ac
             return
 
 
     def valgrind_test(self):
         '''Execute mach's valgrind-test for memory leaks'''
         env = self.query_build_env()
         env.update(self.query_mach_build_env())
 
-        return_code = self.run_command_m(
+        return_code = self.run_command(
             command=[sys.executable, 'mach', 'valgrind-test'],
             cwd=self.query_abs_dirs()['abs_src_dir'],
             env=env, output_timeout=self.config.get('max_build_output_timeout', 60 * 40)
         )
         if return_code:
             self.return_code = self.worst_level(
                 EXIT_STATUS_DICT[TBPL_FAILURE],  self.return_code,
                 AUTOMATION_EXIT_CODES[::-1]
--- a/testing/mozharness/scripts/fx_desktop_build.py
+++ b/testing/mozharness/scripts/fx_desktop_build.py
@@ -30,26 +30,19 @@ from mozharness.mozilla.testing.try_tool
 
 class FxDesktopBuild(BuildScript, TryToolsMixin, object):
     def __init__(self):
         buildscript_kwargs = {
             'config_options': BUILD_BASE_CONFIG_OPTIONS + copy.deepcopy(try_config_options),
             'all_actions': [
                 'get-secrets',
                 'clobber',
-                'clone-tools',
-                'checkout-sources',
-                'setup-mock',
                 'build',
-                'upload-files',  # upload from BB to TC
-                'sendchange',
                 'check-test',
                 'valgrind-test',
-                'package-source',
-                'generate-source-signing-manifest',
                 'multi-l10n',
                 'update',
             ],
             'require_config_file': True,
             # Default configuration
             'config': {
                 'is_automation': True,
                 "pgo_build": False,
@@ -236,19 +229,16 @@ class FxDesktopBuild(BuildScript, TryToo
         }
         abs_dirs.update(dirs)
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
         # Actions {{{2
         # read_buildbot_config in BuildingMixin
         # clobber in BuildingMixin -> PurgeMixin
-        # if Linux config:
-        # reset_mock in BuildingMixing -> MockMixin
-        # setup_mock in BuildingMixing (overrides MockMixin.mock_setup)
 
     def set_extra_try_arguments(self, action, success=None):
         """ Override unneeded method from TryToolsMixin """
         pass
 
     @script.PreScriptRun
     def suppress_windows_modal_dialogs(self, *args, **kwargs):
         if self._is_windows():
--- a/toolkit/components/contentprefs/ContentPrefService2.js
+++ b/toolkit/components/contentprefs/ContentPrefService2.js
@@ -1136,17 +1136,18 @@ ContentPrefService2.prototype = {
        * applying the schema.  In any case, recover by simply reapplying the schema.
        */
       if (aOldVersion == 0) {
         this._dbCreateSchema(aDBConnection);
       } else {
         for (let i = aOldVersion; i < aNewVersion; i++) {
           let migrationName = "_dbMigrate" + i + "To" + (i + 1);
           if (typeof this[migrationName] != "function") {
-            throw ("no migrator function from version " + aOldVersion + " to version " + aNewVersion);
+            throw new Error("no migrator function from version " + aOldVersion + " to version " +
+                            aNewVersion);
           }
           this[migrationName](aDBConnection);
         }
       }
       aDBConnection.schemaVersion = aNewVersion;
       aDBConnection.commitTransaction();
     } catch (ex) {
       aDBConnection.rollbackTransaction();
@@ -1228,17 +1229,17 @@ HostnameGrouper.prototype = {
     try {
       // Accessing the host property of the URI will throw an exception
       // if the URI is of a type that doesn't have a host property.
       // Otherwise, we manually throw an exception if the host is empty,
       // since the effect is the same (we can't derive a group from it).
 
       group = aURI.host;
       if (!group)
-        throw ("can't derive group from host; no host in URI");
+        throw new Error("can't derive group from host; no host in URI");
     } catch (ex) {
       // If we don't have a host, then use the entire URI (minus the query,
       // reference, and hash, if possible) as the group.  This means that URIs
       // like about:mozilla and about:blank will be considered separate groups,
       // but at least they'll be grouped somehow.
 
       // This also means that each individual file: URL will be considered
       // its own group.  This seems suboptimal, but so does treating the entire
--- a/toolkit/components/telemetry/gen_event_data.py
+++ b/toolkit/components/telemetry/gen_event_data.py
@@ -109,17 +109,17 @@ def write_event_table(events, output, st
                   "index overflow")
 
 
 def main(output, *filenames):
     # Load the event data.
     if len(filenames) > 1:
         raise Exception('We don\'t support loading from more than one file.')
     try:
-        events = parse_events.load_events(filenames[0])
+        events = parse_events.load_events(filenames[0], True)
     except ParserError as ex:
         print("\nError processing events:\n" + str(ex) + "\n")
         sys.exit(1)
 
     # Write the scalar data file.
     print(banner, file=output)
     print(file_header, file=output)
 
--- a/toolkit/components/telemetry/gen_event_enum.py
+++ b/toolkit/components/telemetry/gen_event_enum.py
@@ -32,17 +32,17 @@ file_footer = """\
 
 
 def main(output, *filenames):
     # Load the events first.
     if len(filenames) > 1:
         raise Exception('We don\'t support loading from more than one file.')
 
     try:
-        events = parse_events.load_events(filenames[0])
+        events = parse_events.load_events(filenames[0], True)
     except ParserError as ex:
         print("\nError processing events:\n" + str(ex) + "\n")
         sys.exit(1)
 
     grouped = dict()
     index = 0
     for e in events:
         category = e.category
--- a/toolkit/components/telemetry/parse_events.py
+++ b/toolkit/components/telemetry/parse_events.py
@@ -152,20 +152,21 @@ def string_check(identifier, field, valu
     if regex and not re.match(regex, value):
         raise ParserError('%s: String value "%s" for %s is not matching pattern "%s".' %
                           (identifier, value, field, regex))
 
 
 class EventData:
     """A class representing one event."""
 
-    def __init__(self, category, name, definition):
+    def __init__(self, category, name, definition, strict_type_checks=False):
         self._category = category
         self._name = name
         self._definition = definition
+        self._strict_type_checks = strict_type_checks
 
         type_check_event_fields(self.identifier, name, definition)
 
         # Check method & object string patterns.
         for method in self.methods:
             string_check(self.identifier, field='methods', value=method,
                          min_length=1, max_length=MAX_METHOD_NAME_LENGTH,
                          regex=IDENTIFIER_PATTERN)
@@ -201,17 +202,17 @@ class EventData:
 
         # Check expiry.
         if 'expiry_version' not in definition:
             raise ParserError("%s: event is missing required field expiry_version"
                               % (self.identifier))
 
         # Finish setup.
         expiry_version = definition.get('expiry_version', 'never')
-        if not utils.validate_expiration_version(expiry_version):
+        if not utils.validate_expiration_version(expiry_version) and self._strict_type_checks:
             raise ParserError('{}: invalid expiry_version: {}.'
                               .format(self.identifier, expiry_version))
         definition['expiry_version'] = utils.add_expiration_postfix(expiry_version)
 
     @property
     def category(self):
         return self._category
 
@@ -272,20 +273,21 @@ class EventData:
         else:
             return 'nsITelemetry::DATASET_RELEASE_CHANNEL_OPTIN'
 
     @property
     def extra_keys(self):
         return self._definition.get('extra_keys', {}).keys()
 
 
-def load_events(filename):
+def load_events(filename, strict_type_checks):
     """Parses a YAML file containing the event definitions.
 
     :param filename: the YAML file containing the event definitions.
+    :strict_type_checks A boolean indicating whether to use the stricter type checks.
     :raises ParserError: if the event file cannot be opened or parsed.
     """
 
     # Parse the event definitions from the YAML file.
     events = None
     try:
         with open(filename, 'r') as f:
             events = yaml.safe_load(f)
@@ -312,11 +314,11 @@ def load_events(filename):
         # Make sure that the category has at least one entry in it.
         if not category or len(category) == 0:
             raise ParserError('Category ' + category_name + ' must contain at least one entry.')
 
         for name, entry in category.iteritems():
             string_check(category_name, field='event name', value=name,
                          min_length=1, max_length=MAX_METHOD_NAME_LENGTH,
                          regex=IDENTIFIER_PATTERN)
-            event_list.append(EventData(category_name, name, entry))
+            event_list.append(EventData(category_name, name, entry, strict_type_checks))
 
     return event_list
--- a/tools/lint/flake8.yml
+++ b/tools/lint/flake8.yml
@@ -19,16 +19,17 @@ flake8:
         - taskcluster
         - testing/firefox-ui
         - testing/mach_commands.py
         - testing/marionette/client
         - testing/marionette/harness
         - testing/marionette/puppeteer
         - testing/mochitest
         - testing/mozbase
+        - testing/mozharness/configs
         - testing/mozharness/mozfile
         - testing/mozharness/mozharness/mozilla/mar.py
         - testing/mozharness/mozinfo
         - testing/mozharness/scripts
         - testing/remotecppunittests.py
         - testing/runcppunittests.py
         - testing/talos/
         - testing/xpcshell