Bug 1457224 Clean up extension testing helpers draft
authorAndrew Swan <aswan@mozilla.com>
Mon, 30 Apr 2018 13:01:10 -0700
changeset 792650 a81a09a6ab25eac5ae00b5d80b91509448c95748
parent 792086 2d95d70298e248161b629ef1d0d57049c0b62d71
child 792651 1a3182b395416c30ff27873e6539501c80d9a43b
push id109171
push useraswan@mozilla.com
push dateTue, 08 May 2018 19:22:36 +0000
bugs1457224
milestone62.0a1
Bug 1457224 Clean up extension testing helpers - Remove outdated appChanged logic from test helper function to start the AddonManager - Avoid calling to the AddonManager in webextension tests that don't otherwise require the AddonManager MozReview-Commit-ID: Fx4o1TzXTCd
toolkit/components/extensions/Extension.jsm
toolkit/components/extensions/ExtensionTestCommon.jsm
toolkit/components/extensions/test/xpcshell/test_ext_persistent_events.js
toolkit/components/extensions/test/xpcshell/test_ext_proxy_startup.js
toolkit/components/extensions/test/xpcshell/test_ext_webRequest_startup.js
toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
toolkit/mozapps/extensions/internal/AddonTestUtils.jsm
toolkit/mozapps/extensions/test/xpcshell/head_addons.js
toolkit/mozapps/extensions/test/xpcshell/test_bad_json.js
toolkit/mozapps/extensions/test/xpcshell/test_badschema.js
toolkit/mozapps/extensions/test/xpcshell/test_blocklistchange.js
toolkit/mozapps/extensions/test/xpcshell/test_bootstrap.js
toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js
toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
toolkit/mozapps/extensions/test/xpcshell/test_distribution.js
toolkit/mozapps/extensions/test/xpcshell/test_general.js
toolkit/mozapps/extensions/test/xpcshell/test_moved_extension_metadata.js
toolkit/mozapps/extensions/test/xpcshell/test_overrideblocklist.js
toolkit/mozapps/extensions/test/xpcshell/test_signed_updatepref.js
toolkit/mozapps/extensions/test/xpcshell/test_startup.js
toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js
toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
toolkit/mozapps/extensions/test/xpcshell/test_upgrade_incompatible.js
toolkit/mozapps/extensions/test/xpcshell/test_webextension_langpack.js
--- a/toolkit/components/extensions/Extension.jsm
+++ b/toolkit/components/extensions/Extension.jsm
@@ -1217,16 +1217,20 @@ class Extension extends ExtensionData {
     Services.ppmm.addMessageListener(this.MESSAGE_EMIT_EVENT, this);
 
     if (addonData.cleanupFile) {
       Services.obs.addObserver(this, "xpcom-shutdown");
       this.cleanupFile = addonData.cleanupFile || null;
       delete addonData.cleanupFile;
     }
 
+    if (addonData.TEST_NO_ADDON_MANAGER) {
+      this.dontSaveStartupData = true;
+    }
+
     this.addonData = addonData;
     this.startupData = addonData.startupData || {};
     this.startupReason = startupReason;
 
     if (["ADDON_UPGRADE", "ADDON_DOWNGRADE"].includes(startupReason)) {
       StartupCache.clearAddonData(addonData.id);
     }
 
@@ -1415,16 +1419,19 @@ class Extension extends ExtensionData {
   }
 
   get experimentsAllowed() {
     return (AddonSettings.ALLOW_LEGACY_EXTENSIONS ||
             this.isPrivileged);
   }
 
   saveStartupData() {
+    if (this.dontSaveStartupData) {
+      return;
+    }
     AddonManagerPrivate.setStartupData(this.id, this.startupData);
   }
 
   async _parseManifest() {
     let manifest = await super.parseManifest();
     if (manifest && manifest.permissions.has("mozillaAddons") &&
         !this.isPrivileged) {
       Cu.reportError(`Stripping mozillaAddons permission from ${this.id}`);
--- a/toolkit/components/extensions/ExtensionTestCommon.jsm
+++ b/toolkit/components/extensions/ExtensionTestCommon.jsm
@@ -382,11 +382,12 @@ var ExtensionTestCommon = class Extensio
     }
 
     return new Extension({
       id,
       resourceURI: jarURI,
       cleanupFile: file,
       signedState,
       temporarilyInstalled: !!data.temporarilyInstalled,
+      TEST_NO_ADDON_MANAGER: true,
     });
   }
 };
--- a/toolkit/components/extensions/test/xpcshell/test_ext_persistent_events.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_persistent_events.js
@@ -233,17 +233,17 @@ add_task(async function() {
     new Promise(resolve => extension.extension.once("shutdown", resolve)),
     AddonTestUtils.promiseShutdownManager(),
   ]);
   check(info, "unregister");
 
   // Check that listeners are primed at the next browser startup.
   [info] = await Promise.all([
     promiseObservable("prime-event-listener", 3),
-    AddonTestUtils.promiseStartupManager(false),
+    AddonTestUtils.promiseStartupManager(),
   ]);
   check(info, "prime");
 
   // Check that primed listeners are converted to regular listeners
   // when the background page is started after browser startup.
   let p = promiseObservable("convert-event-listener", 3);
   Services.obs.notifyObservers(null, "sessionstore-windows-restored");
   info = await p;
@@ -269,17 +269,17 @@ add_task(async function() {
     promiseObservable("unregister-primed-listener", 3),
     AddonTestUtils.promiseShutdownManager(),
   ]);
   check(info, "unregister");
 
   // Start up again, listener should be primed
   [info] = await Promise.all([
     promiseObservable("prime-event-listener", 3),
-    AddonTestUtils.promiseStartupManager(false),
+    AddonTestUtils.promiseStartupManager(),
   ]);
   check(info, "prime");
 
   // Check that triggering the event before the listener has been converted
   // causes the background page to be loaded and the listener to be converted,
   // and the listener is invoked.
   p = promiseObservable("convert-event-listener", 3);
   eventDetails.test = "startup event";
@@ -304,17 +304,17 @@ add_task(async function() {
   // one listener has been removed.
   info = await promiseObservable("unregister-primed-listener", 2,
                                  () => AddonTestUtils.promiseShutdownManager());
   check(info, "unregister", {listener3: false});
 
   // Check that after restart, only listeners that were present at
   // the end of the last session are primed.
   info = await promiseObservable("prime-event-listener", 2,
-                                 () => AddonTestUtils.promiseStartupManager(false));
+                                 () => AddonTestUtils.promiseStartupManager());
   check(info, "prime", {listener3: false});
 
   // Check that if the background script does not re-register listeners,
   // the primed listeners are unregistered after the background page
   // starts up.
   p = promiseObservable("unregister-primed-listener", 1,
                         () => extension.awaitMessage("ready"));
   Services.obs.notifyObservers(null, "sessionstore-windows-restored");
@@ -332,17 +332,17 @@ add_task(async function() {
   await extension.awaitMessage("unregistered");
 
   // Shut down, start up
   info = await promiseObservable("unregister-primed-listener", 1,
                                  () => AddonTestUtils.promiseShutdownManager());
   check(info, "unregister", {listener2: false, listener3: false});
 
   info = await promiseObservable("prime-event-listener", 1,
-                                 () => AddonTestUtils.promiseStartupManager(false));
+                                 () => AddonTestUtils.promiseStartupManager());
   check(info, "register", {listener2: false, listener3: false});
 
   // Check that firing event1 causes the listener fire callback to
   // reject.
   p = promiseObservable("listener-callback-exception", 1);
   Services.obs.notifyObservers(eventSubject, "fire-onEvent1");
   await p;
   ok(true, "Primed listener that was not re-registered received an error when event was triggered during startup");
--- a/toolkit/components/extensions/test/xpcshell/test_ext_proxy_startup.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_proxy_startup.js
@@ -82,17 +82,17 @@ add_task(async function test_proxy_start
   ]);
   equal(1, proxiedRequests, "proxied request ok");
   equal(0, nonProxiedRequests, "non proxied request ok");
 
   await ExtensionTestUtils.fetch("http://example.com/?a=0");
   equal(1, proxiedRequests, "proxied request ok");
   equal(1, nonProxiedRequests, "non proxied request ok");
 
-  await promiseRestartManager(false);
+  await promiseRestartManager();
   await extension.awaitStartup();
 
   let events = trackEvents(extension);
 
   // Initiate a non-proxied request to make sure the startup listeners are using
   // the extensions filters/etc.
   await ExtensionTestUtils.fetch("http://example.com/?a=1");
   equal(1, proxiedRequests, "proxied request ok");
--- a/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_startup.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_webRequest_startup.js
@@ -42,17 +42,17 @@ add_task(async function() {
       browser.webRequest.onBeforeRequest.addListener(details => {
         browser.test.sendMessage("saw-request");
       }, {urls: ["http://example.com/data/file_sample.html"]});
     },
   });
 
   await extension.startup();
 
-  await promiseRestartManager(false);
+  await promiseRestartManager();
   await extension.awaitStartup();
 
   let events = trackEvents(extension);
 
   await ExtensionTestUtils.fetch("http://example.com/",
                                  "http://example.com/data/file_sample.html");
 
   equal(events.get("background-page-event"), true,
@@ -94,17 +94,17 @@ add_task(async function() {
 
       browser.test.sendMessage("ready");
     },
   });
 
   await extension.startup();
   await extension.awaitMessage("ready");
 
-  await promiseRestartManager(false);
+  await promiseRestartManager();
   await extension.awaitStartup();
 
   let events = trackEvents(extension);
 
   await ExtensionTestUtils.fetch("http://example.com/",
                                  "http://example.com/data/file_sample.html");
 
   equal(events.get("background-page-event"), false,
@@ -153,17 +153,17 @@ add_task(async function() {
       permissions: ["webRequest", "webRequestBlocking", "http://example.com/"],
     },
 
     background: `(${background})(${uneval(DATA)})`,
   });
 
   await extension.startup();
 
-  await promiseRestartManager(false);
+  await promiseRestartManager();
   await extension.awaitStartup();
 
   let dataPromise = ExtensionTestUtils.fetch("http://example.com/",
                                              "http://example.com/data/file_sample.html");
 
   Services.obs.notifyObservers(null, "browser-delayed-startup-finished");
   let data = await dataPromise;
 
--- a/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
+++ b/toolkit/components/telemetry/tests/unit/test_TelemetryEnvironment.js
@@ -890,16 +890,17 @@ add_task(async function setup() {
 
   // The test runs in a fresh profile so starting the AddonManager causes
   // the addons database to be created (as does setting new theme).
   // For test_addonsStartup below, we want to test a "warm" startup where
   // there is already a database on disk.  Simulate that here by just
   // restarting the AddonManager.
   await AddonTestUtils.promiseShutdownManager();
   await AddonTestUtils.overrideBuiltIns({"system": []});
+  AddonTestUtils.addonStartup.remove(true);
   await AddonTestUtils.promiseStartupManager();
 
   // Register a fake plugin host for consistent flash version data.
   registerFakePluginHost();
 
   // Setup a webserver to serve Addons, Plugins, etc.
   gHttpServer = new HttpServer();
   gHttpServer.start(-1);
--- a/toolkit/mozapps/extensions/internal/AddonTestUtils.jsm
+++ b/toolkit/mozapps/extensions/internal/AddonTestUtils.jsm
@@ -724,29 +724,21 @@ var AddonTestUtils = {
   overrideBlocklist(addons) {
     let mock = new MockBlocklist(addons);
     mock.register();
     return mock;
   },
 
   /**
    * Starts up the add-on manager as if it was started by the application.
-   *
-   * @param {boolean} [appChanged = true]
-   *        An optional boolean parameter to simulate the case where the
-   *        application has changed version since the last run. If not passed it
-   *        defaults to true
    */
-  async promiseStartupManager(appChanged = true) {
+  async promiseStartupManager() {
     if (this.addonIntegrationService)
       throw new Error("Attempting to startup manager that was already started.");
 
-    if (appChanged && this.addonStartup.exists())
-      this.addonStartup.remove(true);
-
     this.addonIntegrationService = Cc["@mozilla.org/addons/integration;1"]
           .getService(Ci.nsIObserver);
 
     this.addonIntegrationService.observe(null, "addons-startup", null);
 
     this.emit("addon-manager-started");
 
     // Load the add-ons list as it was after extension registration
@@ -794,16 +786,28 @@ var AddonTestUtils = {
 
         if (shutdownError)
           throw shutdownError;
 
         return true;
       });
   },
 
+  /**
+   * Asynchronously restart the AddonManager.  If newVersion is provided,
+   * simulate an application upgrade (or downgrade) where the version
+   * is changed to newVersion when re-started.
+   *
+   * @param {string} [newVersion]
+   *        If provided, the application version is changed to this string
+   *        after the AddonManager is shut down, before it is re-started.
+   *
+   * @returns {Promise}
+   *          Resolves when the AddonManager has been re-started.
+   */
   promiseRestartManager(newVersion) {
     return this.promiseShutdownManager()
       .then(() => {
         if (newVersion)
           this.appInfo.version = newVersion;
 
         return this.promiseStartupManager(!!newVersion);
       });
--- a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
@@ -666,18 +666,23 @@ function do_check_compatibilityoverride(
 }
 
 function do_check_icons(aActual, aExpected) {
   for (var size in aExpected) {
     Assert.equal(aActual[size], aExpected[size]);
   }
 }
 
-function startupManager(aAppChanged) {
-  promiseStartupManager(aAppChanged);
+function startupManager() {
+  // promiseStartupManager() does not actually do any asynchronous
+  // work so we don't need to wait for it here.  Unfortunately, wrapping
+  // this wait awaitPromise() creates other unrelated failures, rather
+  // than going through those we should just get rid of this wrapper,
+  // see bug 1459998.
+  promiseStartupManager();
 }
 
 /**
  * Restarts the add-on manager as if the host application was restarted.
  *
  * @param  aNewVersion
  *         An optional new version to use for the application. Passing this
  *         will change nsIXULAppInfo.version and make the startup appear as if
@@ -1500,31 +1505,31 @@ async function getSystemAddonDirectories
  */
 async function setupSystemAddonConditions(setup, distroDir) {
   info("Clearing existing database.");
   Services.prefs.clearUserPref(PREF_SYSTEM_ADDON_SET);
   distroDir.leafName = "empty";
 
   let updateList = [];
   awaitPromise(overrideBuiltIns({ "system": updateList }));
-  startupManager(false);
+  startupManager();
   await promiseShutdownManager();
 
   info("Setting up conditions.");
   await setup.setup();
 
   if (distroDir) {
     if (distroDir.path.endsWith("hidden")) {
       updateList = ["system1@tests.mozilla.org", "system2@tests.mozilla.org"];
     } else if (distroDir.path.endsWith("prefilled")) {
       updateList = ["system2@tests.mozilla.org", "system3@tests.mozilla.org"];
     }
   }
   awaitPromise(overrideBuiltIns({ "system": updateList }));
-  startupManager(false);
+  startupManager();
 
   // Make sure the initial state is correct
   info("Checking initial state.");
   await checkInstalledSystemAddons(setup.initialState, distroDir);
 }
 
 /**
  * Verify state of system add-ons after installation.
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bad_json.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bad_json.js
@@ -28,17 +28,17 @@ add_task(async function() {
 
   await promiseStartupManager();
   await promiseShutdownManager();
 
   // First startup/shutdown finished
   // Replace the JSON store with something bogus
   await saveJSON({not: "what we expect to find"}, gExtensionsJSON.path);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
   // Retrieve an addon to force the database to rebuild
   let a1 = await AddonManager.getAddonByID(addon1.id);
 
   Assert.equal(a1.id, addon1.id);
 
   await promiseShutdownManager();
 
   // Make sure our JSON database has schemaVersion and our installed extension
--- a/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_badschema.js
@@ -279,30 +279,30 @@ add_task(async function test_after_resta
   await promiseShutdownManager();
 });
 
 add_task(async function test_after_schema_version_change() {
   // After restarting the database won't be open so we can alter
   // the schema
   await changeXPIDBVersion(100);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   info("Test add-on state after schema version change");
   let addons = await getAddons(IDS);
   for (let [id, addon] of Object.entries(ADDONS)) {
     checkAddon(id, addons.get(id),
                Object.assign({}, addon.desiredValues, addon.afterCorruption));
   }
 
   await promiseShutdownManager();
 });
 
 add_task(async function test_after_second_restart() {
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   info("Test add-on state after second restart");
   let addons = await getAddons(IDS);
   for (let [id, addon] of Object.entries(ADDONS)) {
     checkAddon(id, addons.get(id),
                Object.assign({}, addon.desiredValues, addon.afterSecondRestart));
   }
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_blocklistchange.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_blocklistchange.js
@@ -798,17 +798,17 @@ add_task(async function run_app_update_s
   check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
 });
 
 add_task(async function update_schema_2() {
   await promiseShutdownManager();
 
   await changeXPIDBVersion(100);
   gAppInfo.version = "2";
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -822,50 +822,50 @@ add_task(async function update_schema_2(
 });
 
 add_task(async function update_schema_3() {
   await promiseRestartManager();
 
   await promiseShutdownManager();
   await changeXPIDBVersion(100);
   gAppInfo.version = "2.5";
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
 });
 
 add_task(async function update_schema_4() {
   await promiseShutdownManager();
 
   await changeXPIDBVersion(100);
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
 });
 
 add_task(async function update_schema_5() {
   await promiseShutdownManager();
 
   await changeXPIDBVersion(100);
   gAppInfo.version = "1";
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
@@ -965,17 +965,17 @@ add_task(async function run_addon_change
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_2.id), Date.now() + 10000);
   writeInstallRDFForExtension(softblock4_2, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_2.id), Date.now() + 10000);
   writeInstallRDFForExtension(hardblock_2, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_2.id), Date.now() + 10000);
   writeInstallRDFForExtension(regexpblock_2, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_2.id), Date.now() + 10000);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s4, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1001,17 +1001,17 @@ add_task(async function run_addon_change
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_3.id), Date.now() + 20000);
   writeInstallRDFForExtension(softblock4_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_3.id), Date.now() + 20000);
   writeInstallRDFForExtension(hardblock_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_3.id), Date.now() + 20000);
   writeInstallRDFForExtension(regexpblock_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_3.id), Date.now() + 20000);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s4, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1029,17 +1029,17 @@ add_task(async function run_addon_change
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_1.id), Date.now() + 30000);
   writeInstallRDFForExtension(softblock4_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_1.id), Date.now() + 30000);
   writeInstallRDFForExtension(hardblock_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_1.id), Date.now() + 30000);
   writeInstallRDFForExtension(regexpblock_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_1.id), Date.now() + 30000);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
@@ -1056,27 +1056,27 @@ add_task(async function run_addon_change
 
   getFileForAddon(profileDir, softblock1_1.id).remove(true);
   getFileForAddon(profileDir, softblock2_1.id).remove(true);
   getFileForAddon(profileDir, softblock3_1.id).remove(true);
   getFileForAddon(profileDir, softblock4_1.id).remove(true);
   getFileForAddon(profileDir, hardblock_1.id).remove(true);
   getFileForAddon(profileDir, regexpblock_1.id).remove(true);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
   await promiseShutdownManager();
 
   writeInstallRDFForExtension(softblock1_2, profileDir);
   writeInstallRDFForExtension(softblock2_2, profileDir);
   writeInstallRDFForExtension(softblock3_2, profileDir);
   writeInstallRDFForExtension(softblock4_2, profileDir);
   writeInstallRDFForExtension(hardblock_2, profileDir);
   writeInstallRDFForExtension(regexpblock_2, profileDir);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, /* s4 */, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1101,17 +1101,17 @@ add_task(async function addon_change_2_t
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_3.id), Date.now() + 10000);
   writeInstallRDFForExtension(softblock4_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_3.id), Date.now() + 10000);
   writeInstallRDFForExtension(hardblock_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_3.id), Date.now() + 10000);
   writeInstallRDFForExtension(regexpblock_3, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_3.id), Date.now() + 10000);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, /* s4 */, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1128,17 +1128,17 @@ add_task(async function addon_change_2_t
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_1.id), Date.now() + 20000);
   writeInstallRDFForExtension(softblock4_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_1.id), Date.now() + 20000);
   writeInstallRDFForExtension(hardblock_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_1.id), Date.now() + 20000);
   writeInstallRDFForExtension(regexpblock_1, profileDir);
   setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_1.id), Date.now() + 20000);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
   check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
@@ -1182,27 +1182,27 @@ add_task(async function run_background_u
 
   getFileForAddon(profileDir, softblock1_1.id).remove(true);
   getFileForAddon(profileDir, softblock2_1.id).remove(true);
   getFileForAddon(profileDir, softblock3_1.id).remove(true);
   getFileForAddon(profileDir, softblock4_1.id).remove(true);
   getFileForAddon(profileDir, hardblock_1.id).remove(true);
   getFileForAddon(profileDir, regexpblock_1.id).remove(true);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
   await promiseShutdownManager();
 
   writeInstallRDFForExtension(softblock1_3, profileDir);
   writeInstallRDFForExtension(softblock2_3, profileDir);
   writeInstallRDFForExtension(softblock3_3, profileDir);
   writeInstallRDFForExtension(softblock4_3, profileDir);
   writeInstallRDFForExtension(hardblock_3, profileDir);
   writeInstallRDFForExtension(regexpblock_3, profileDir);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1288,27 +1288,27 @@ add_task(async function run_manual_updat
 
   getFileForAddon(profileDir, softblock1_1.id).remove(true);
   getFileForAddon(profileDir, softblock2_1.id).remove(true);
   getFileForAddon(profileDir, softblock3_1.id).remove(true);
   getFileForAddon(profileDir, softblock4_1.id).remove(true);
   getFileForAddon(profileDir, hardblock_1.id).remove(true);
   getFileForAddon(profileDir, regexpblock_1.id).remove(true);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
   await promiseShutdownManager();
 
   writeInstallRDFForExtension(softblock1_1, profileDir);
   writeInstallRDFForExtension(softblock2_1, profileDir);
   writeInstallRDFForExtension(softblock3_1, profileDir);
   writeInstallRDFForExtension(softblock4_1, profileDir);
   writeInstallRDFForExtension(hardblock_1, profileDir);
   writeInstallRDFForExtension(regexpblock_1, profileDir);
 
-  startupManager(false);
+  startupManager();
 
   let [s1, s2, s3, s4, h, r] = await promiseAddonsByIDs(ADDON_IDS);
 
   check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
   check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
   check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
@@ -1356,17 +1356,17 @@ add_task(async function run_local_instal
 
   getFileForAddon(profileDir, softblock1_1.id).remove(true);
   getFileForAddon(profileDir, softblock2_1.id).remove(true);
   getFileForAddon(profileDir, softblock3_1.id).remove(true);
   getFileForAddon(profileDir, softblock4_1.id).remove(true);
   getFileForAddon(profileDir, hardblock_1.id).remove(true);
   getFileForAddon(profileDir, regexpblock_1.id).remove(true);
 
-  startupManager(false);
+  startupManager();
 
   await promiseInstallAllFiles([
     XPIS.blocklist_soft1_1,
     XPIS.blocklist_soft2_1,
     XPIS.blocklist_soft3_1,
     XPIS.blocklist_soft4_1,
     XPIS.blocklist_hard1_1,
     XPIS.blocklist_regexp1_1,
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bootstrap.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_bootstrap.js
@@ -319,17 +319,17 @@ add_task(async function test_2() {
 add_task(async function test_3() {
   await promiseShutdownManager();
 
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonNotStarted(ID1);
   equal(getShutdownReason(), ADDON_DISABLE);
   equal(getShutdownNewVersion(), undefined);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonNotStarted(ID1);
   equal(getShutdownReason(), ADDON_DISABLE);
   equal(getShutdownNewVersion(), undefined);
   do_check_not_in_crash_annotation(ID1, "1.0");
 
   ok(gAddonStartup.exists());
@@ -387,17 +387,17 @@ add_task(async function test_5() {
   // By the time we've shut down, the database must have been written
   ok(gExtensionsJSON.exists());
 
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonNotStarted(ID1);
   equal(getShutdownReason(), APP_SHUTDOWN);
   equal(getShutdownNewVersion(), undefined);
   do_check_not_in_crash_annotation(ID1, "1.0");
-  await promiseStartupManager(false);
+  await promiseStartupManager();
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonStarted(ID1, "1.0");
   equal(getStartupReason(), APP_STARTUP);
   equal(getStartupOldVersion(), undefined);
   do_check_in_crash_annotation(ID1, "1.0");
 
   let b1 = await AddonManager.getAddonByID(ID1);
   notEqual(b1, null);
@@ -500,17 +500,17 @@ add_task(async function test_7() {
 // Test that a bootstrapped extension dropped into the profile loads properly
 // on startup and doesn't cause an EM restart
 add_task(async function test_8() {
   await promiseShutdownManager();
 
   manuallyInstall(XPIS.test_bootstrap1_1, profileDir,
                   ID1);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let b1 = await AddonManager.getAddonByID(ID1);
   notEqual(b1, null);
   equal(b1.version, "1.0");
   ok(!b1.appDisabled);
   ok(!b1.userDisabled);
   ok(b1.isActive);
   ok(!b1.isSystem);
@@ -525,17 +525,17 @@ add_task(async function test_8() {
 
 // Test that items detected as removed during startup get removed properly
 add_task(async function test_9() {
   await promiseShutdownManager();
 
   manuallyUninstall(profileDir, ID1);
   BootstrapMonitor.clear(ID1);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let b1 = await AddonManager.getAddonByID(ID1);
   equal(b1, null);
   do_check_not_in_crash_annotation(ID1, "1.0");
 
   await checkBootstrappedPref();
 });
 
@@ -675,17 +675,17 @@ add_task(async function test_11() {
 // Tests that bootstrapped extensions are correctly loaded even if the app is
 // upgraded at the same time
 add_task(async function test_12() {
   await promiseShutdownManager();
 
   manuallyInstall(XPIS.test_bootstrap1_1, profileDir,
                   ID1);
 
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   let b1 = await AddonManager.getAddonByID(ID1);
   notEqual(b1, null);
   equal(b1.version, "1.0");
   ok(!b1.appDisabled);
   ok(!b1.userDisabled);
   ok(b1.isActive);
   ok(!b1.isSystem);
@@ -769,17 +769,17 @@ add_task(async function test_13() {
 add_task(async function test_14() {
   await promiseRestartManager();
 
   await promiseShutdownManager();
 
   manuallyInstall(XPIS.test_bootstrap1_3, profileDir,
                   ID1);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let b1 = await AddonManager.getAddonByID(ID1);
   notEqual(b1, null);
   equal(b1.version, "3.0");
   ok(b1.appDisabled);
   ok(!b1.userDisabled);
   ok(!b1.isActive);
   BootstrapMonitor.checkAddonInstalled(ID1, "3.0"); // We call install even for disabled add-ons
@@ -879,30 +879,30 @@ add_task(async function test_16() {
 
   await promiseShutdownManager();
 
   // Should have stopped
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonNotStarted(ID1);
 
   gAppInfo.inSafeMode = true;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let b1_2 = await AddonManager.getAddonByID(ID1);
   // Should still be stopped
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonNotStarted(ID1);
   ok(!b1_2.isActive);
   equal(b1_2.iconURL, null);
   equal(b1_2.aboutURL, null);
   equal(b1_2.optionsURL, null);
 
   await promiseShutdownManager();
   gAppInfo.inSafeMode = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   // Should have started
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonStarted(ID1, "1.0");
 
   let b1_3 = await AddonManager.getAddonByID(ID1);
   b1_3.uninstall();
 });
@@ -1060,17 +1060,17 @@ add_task(async function test_21() {
   equal(getStartupOldVersion(), undefined);
 
   await checkBootstrappedPref();
   await promiseShutdownManager();
 
   manuallyUninstall(userExtDir, ID1);
   BootstrapMonitor.clear(ID1);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 });
 
 // Check that an upgrade from the filesystem is detected and applied correctly
 add_task(async function test_22() {
   await promiseShutdownManager();
 
   let file = manuallyInstall(XPIS.test_bootstrap1_1, profileDir,
                              ID1);
@@ -1239,15 +1239,15 @@ add_task(async function test_24() {
   // Break the JSON.
   let data = aomStartup.readStartupData();
   data["app-profile"].addons[ID1].path += "foo";
 
   await OS.File.writeAtomic(gAddonStartup.path,
                             new TextEncoder().encode(JSON.stringify(data)),
                             {compression: "lz4"});
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   BootstrapMonitor.checkAddonInstalled(ID1, "1.0");
   BootstrapMonitor.checkAddonStarted(ID1, "1.0");
   BootstrapMonitor.checkAddonInstalled(ID2, "1.0");
   BootstrapMonitor.checkAddonStarted(ID2, "1.0");
 });
--- a/toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_corrupt.js
@@ -248,17 +248,17 @@ add_task(async function test_after_resta
 
 add_task(async function test_after_corruption() {
   // Shutdown and replace the database with a corrupt file (a directory
   // serves this purpose). On startup the add-ons manager won't rebuild
   // because there is a file there still.
   gExtensionsJSON.remove(true);
   gExtensionsJSON.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   await new Promise(resolve => {
     Services.obs.addObserver(function listener() {
       Services.obs.removeObserver(listener, "xpi-database-loaded");
       resolve();
     }, "xpi-database-loaded");
     Services.obs.notifyObservers(null, "sessionstore-windows-restored");
   });
@@ -270,17 +270,17 @@ add_task(async function test_after_corru
     checkAddon(id, addons.get(id),
                Object.assign({}, addon.desiredState, addon.afterCorruption));
   }
 
   await Assert.rejects(promiseShutdownManager());
 });
 
 add_task(async function test_after_second_restart() {
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   info("Test add-on state after second restart");
   let addons = await getAddons(IDS);
   for (let [id, addon] of Object.entries(ADDONS)) {
     checkAddon(id, addons.get(id),
                Object.assign({}, addon.desiredState, addon.afterSecondRestart));
   }
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_dictionary.js
@@ -217,17 +217,17 @@ add_task(async function test_2() {
   ok(addon.userDisabled);
   ok(!addon.isActive);
 });
 
 // Test that restarting doesn't accidentally re-enable
 add_task(async function test_3() {
   await promiseShutdownManager();
   ok(!HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   ok(!HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
   do_check_not_in_crash_annotation(ID_DICT, "1.0");
 
   let addon = await AddonManager.getAddonByID(ID_DICT);
   notEqual(addon, null);
   equal(addon.version, "1.0");
   ok(!addon.appDisabled);
@@ -268,17 +268,17 @@ add_task(async function test_4() {
 
 // Tests that a restart shuts down and restarts the add-on
 add_task(async function test_5() {
   await promiseShutdownManager();
 
   ok(!HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
   do_check_not_in_crash_annotation(ID_DICT, "1.0");
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   ok(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
   do_check_in_crash_annotation(ID_DICT, "1.0");
 
   let addon = await AddonManager.getAddonByID(ID_DICT);
   notEqual(addon, null);
   equal(addon.version, "1.0");
   ok(!addon.appDisabled);
@@ -315,46 +315,46 @@ add_task(async function test_7() {
   equal(addon, null);
 });
 
 // Test that a bootstrapped extension dropped into the profile loads properly
 // on startup and doesn't cause an EM restart
 add_task(async function test_8() {
   await promiseShutdownManager();
   await AddonTestUtils.manuallyInstall(XPI_DICT);
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let addon = await AddonManager.getAddonByID(ID_DICT);
   notEqual(addon, null);
   equal(addon.version, "1.0");
   ok(!addon.appDisabled);
   ok(!addon.userDisabled);
   ok(addon.isActive);
   ok(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
   do_check_in_crash_annotation(ID_DICT, "1.0");
 });
 
 // Test that items detected as removed during startup get removed properly
 add_task(async function test_9() {
   await promiseShutdownManager();
   await AddonTestUtils.manuallyUninstall(profileDir, ID_DICT);
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let addon = await AddonManager.getAddonByID(ID_DICT);
   equal(addon, null);
   do_check_not_in_crash_annotation(ID_DICT, "1.0");
 });
 
 
 // Tests that bootstrapped extensions are correctly loaded even if the app is
 // upgraded at the same time
 add_task(async function test_12() {
   await promiseShutdownManager();
   await AddonTestUtils.manuallyInstall(XPI_DICT);
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   let addon = await AddonManager.getAddonByID(ID_DICT);
   notEqual(addon, null);
   equal(addon.version, "1.0");
   ok(!addon.appDisabled);
   ok(!addon.userDisabled);
   ok(addon.isActive);
   ok(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
@@ -374,26 +374,26 @@ add_task(async function test_16() {
   ok(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
 
   await promiseShutdownManager();
 
   // Should have stopped
   ok(!HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
 
   gAppInfo.inSafeMode = true;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   addon = await AddonManager.getAddonByID(ID_DICT);
   // Should still be stopped
   ok(!HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
   ok(!addon.isActive);
 
   await promiseShutdownManager();
   gAppInfo.inSafeMode = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   // Should have started
   ok(HunspellEngine.isDictionaryEnabled("ab-CD.dic"));
 
   addon = await AddonManager.getAddonByID(ID_DICT);
   addon.uninstall();
 });
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_distribution.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_distribution.js
@@ -64,17 +64,17 @@ function getInstalledVersion() {
 function setOldModificationTime() {
   // Make sure the installed extension has an old modification time so any
   // changes will be detected
   shutdownManager();
   let extension = gProfD.clone();
   extension.append("extensions");
   extension.append("addon1@tests.mozilla.org.xpi");
   setExtensionModifiedTime(extension, Date.now() - MAKE_FILE_OLD_DIFFERENCE);
-  startupManager(false);
+  startupManager();
 }
 
 function run_test() {
   do_test_pending();
 
   run_test_1();
 }
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_general.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_general.js
@@ -30,17 +30,17 @@ async function run_test_1() {
   Assert.equal(0, pendingAddons.length);
 
   executeSoon(run_test_2);
 }
 
 async function run_test_2() {
   shutdownManager();
 
-  startupManager(false);
+  startupManager();
 
   let addons = await AddonManager.getAddonsByTypes(null);
   Assert.equal(gCount, addons.length);
 
   executeSoon(run_test_3);
 }
 
 async function run_test_3() {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_moved_extension_metadata.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_moved_extension_metadata.js
@@ -112,17 +112,17 @@ add_task(async function test_1() {
   Assert.equal(Services.prefs.getIntPref("bootstraptest.active_version"), 0);
 
   userDir.parent.moveTo(gProfD, "extensions3");
   userDir = gProfD.clone();
   userDir.append("extensions3");
   userDir.append(gAppInfo.ID);
   Assert.ok(userDir.exists());
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let [a1_3, a2_3] = await AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                                                         "addon2@tests.mozilla.org"]);
   Assert.notEqual(a1_3, null);
   Assert.ok(!a1_3.appDisabled);
   Assert.ok(a1_3.isActive);
   Assert.ok(isExtensionInBootstrappedList(userDir, a1_3.id));
 
@@ -148,17 +148,17 @@ add_task(async function test_2() {
  await promiseShutdownManager();
 
  userDir.parent.moveTo(gProfD, "extensions4");
  userDir = gProfD.clone();
  userDir.append("extensions4");
  userDir.append(gAppInfo.ID);
  Assert.ok(userDir.exists());
 
- await promiseStartupManager(false);
+ await promiseStartupManager();
 
  let [a1_2, a2_2] = await AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                               "addon2@tests.mozilla.org"]);
  Assert.notEqual(a1_2, null);
  Assert.ok(!a1_2.appDisabled);
  Assert.ok(a1_2.isActive);
  Assert.ok(isExtensionInBootstrappedList(userDir, a1_2.id));
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_overrideblocklist.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_overrideblocklist.js
@@ -178,17 +178,17 @@ add_test(async function test_missing() {
   copyToProfile(NEW, NEW_TSTAMP);
 
   incrementAppVersion();
   startupManager();
   shutdownManager();
 
   let blocklist = FileUtils.getFile(KEY_PROFILEDIR, [FILE_BLOCKLIST]);
   blocklist.remove(true);
-  startupManager(false);
+  startupManager();
 
   reloadBlocklist();
 
   Assert.ok(!(await isBlocklisted(invalidAddon)));
   Assert.ok(!(await isBlocklisted(ancientAddon)));
   Assert.ok(await isBlocklisted(oldAddon));
   Assert.ok(!(await isBlocklisted(newAddon)));
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_signed_updatepref.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_signed_updatepref.js
@@ -117,17 +117,17 @@ add_task(async function() {
   Assert.ok(!addon.appDisabled);
   Assert.ok(addon.isActive);
   Assert.equal(addon.signedState, AddonManager.SIGNEDSTATE_MISSING);
 
   await promiseShutdownManager();
 
   Services.prefs.setBoolPref(PREF_XPI_SIGNATURES_REQUIRED, true);
   gAppInfo.version = 5.0;
-  startupManager(true);
+  startupManager();
 
   addon = await promiseAddonByID(ID);
   Assert.notEqual(addon, null);
   Assert.ok(addon.appDisabled);
   Assert.ok(!addon.isActive);
   Assert.equal(addon.signedState, AddonManager.SIGNEDSTATE_MISSING);
 
   addon.uninstall();
--- a/toolkit/mozapps/extensions/test/xpcshell/test_startup.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_startup.js
@@ -290,17 +290,17 @@ async function run_test_2() {
   writeInstallRDFForExtension(addon2, globalDir);
   addon2.version = "2.3";
   writeInstallRDFForExtension(addon2, userDir);
   var dest = profileDir.clone();
   dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   dest.remove(true);
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon3@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
 
@@ -355,17 +355,17 @@ async function run_test_3() {
   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   dest.remove(true);
   dest = profileDir.clone();
   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest.remove(true);
   writeInstallRDFForExtension(addon3, profileDir, "addon4@tests.mozilla.org");
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
                                     "addon2@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
@@ -532,17 +532,17 @@ async function run_test_7() {
 
   addon1.version = "1.2";
   writeInstallRDFForExtension(addon1, profileDir);
   var dest = userDir.clone();
   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest.remove(true);
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
                                     "addon2@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
@@ -630,17 +630,17 @@ async function run_test_9() {
   dest.remove(true);
   dest = globalDir.clone();
   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest.remove(true);
   addon2.version = "2.4";
   writeInstallRDFForExtension(addon2, profileDir);
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon2@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
 
@@ -687,17 +687,17 @@ async function run_test_10() {
 
   var dest = profileDir.clone();
   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   dest.remove(true);
   addon1.version = "1.3";
   writeInstallRDFForExtension(addon1, userDir);
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
 
@@ -744,17 +744,17 @@ async function run_test_11() {
   var dest = userDir.clone();
   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   dest.remove(true);
   dest = profileDir.clone();
   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest.remove(true);
 
   gCachePurged = false;
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org",
                                         "addon2@tests.mozilla.org"]);
   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   Assert.ok(gCachePurged);
@@ -795,17 +795,17 @@ async function run_test_12() {
   Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER);
 
   shutdownManager();
 
   writeInstallRDFForExtension(addon1, profileDir);
   writeInstallRDFForExtension(addon2, userDir);
   writeInstallRDFForExtension(addon3, globalDir);
 
-  startupManager(false);
+  startupManager();
 
   let [a1, a2, a3] = await AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                                                         "addon2@tests.mozilla.org",
                                                         "addon3@tests.mozilla.org"]);
   Assert.notEqual(a1, null);
   Assert.ok(!a1.userDisabled);
   Assert.ok(a1.seen);
   Assert.ok(a1.isActive);
@@ -827,26 +827,26 @@ async function run_test_12() {
   dest.remove(true);
   dest = userDir.clone();
   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest.remove(true);
   dest = globalDir.clone();
   dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   dest.remove(true);
 
-  startupManager(false);
+  startupManager();
   shutdownManager();
 
   Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_SYSTEM);
 
   writeInstallRDFForExtension(addon1, profileDir);
   writeInstallRDFForExtension(addon2, userDir);
   writeInstallRDFForExtension(addon3, globalDir);
 
-  startupManager(false);
+  startupManager();
 
   let [a1_2, a2_2, a3_2] = await AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                                                               "addon2@tests.mozilla.org",
                                                               "addon3@tests.mozilla.org"]);
   Assert.notEqual(a1_2, null);
   Assert.ok(!a1_2.userDisabled);
   Assert.ok(a1_2.seen);
   Assert.ok(a1_2.isActive);
@@ -868,26 +868,26 @@ async function run_test_12() {
   dest2.remove(true);
   dest2 = userDir.clone();
   dest2.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   dest2.remove(true);
   dest2 = globalDir.clone();
   dest2.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   dest2.remove(true);
 
-  startupManager(false);
+  startupManager();
   shutdownManager();
 
   Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER + AddonManager.SCOPE_SYSTEM);
 
   writeInstallRDFForExtension(addon1, profileDir);
   writeInstallRDFForExtension(addon2, userDir);
   writeInstallRDFForExtension(addon3, globalDir);
 
-  startupManager(false);
+  startupManager();
 
   let [a1_3, a2_3, a3_3] = await AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
                                                               "addon2@tests.mozilla.org",
                                                               "addon3@tests.mozilla.org"]);
   Assert.notEqual(a1_3, null);
   Assert.ok(!a1_3.userDisabled);
   Assert.ok(a1_3.seen);
   Assert.ok(a1_3.isActive);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_system_reset.js
@@ -195,17 +195,17 @@ add_task(async function test_updated() {
       "system3@tests.mozilla.org": {
         version: "2.0"
       },
     }
   };
   Services.prefs.setCharPref(PREF_SYSTEM_ADDON_SET, JSON.stringify(addonSet));
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: true, version: "2.0" },
       { isUpgrade: true, version: "2.0" },
   ];
 
   await check_installed(conditions);
@@ -213,34 +213,34 @@ add_task(async function test_updated() {
   await promiseShutdownManager();
 });
 
 // Entering safe mode should disable the updated system add-ons and use the
 // default system add-ons
 add_task(async function safe_mode_disabled() {
   gAppInfo.inSafeMode = true;
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: null },
   ];
 
   await check_installed(conditions);
 
   await promiseShutdownManager();
 });
 
 // Leaving safe mode should re-enable the updated system add-ons
 add_task(async function normal_mode_enabled() {
   gAppInfo.inSafeMode = false;
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: true, version: "2.0" },
       { isUpgrade: true, version: "2.0" },
   ];
 
   await check_installed(conditions);
@@ -250,17 +250,17 @@ add_task(async function normal_mode_enab
 
 // An additional add-on in the directory should be ignored
 add_task(async function test_skips_additional() {
   // Copy in the system add-ons
   let file = do_get_file("data/system_addons/system4_1.xpi");
   file.copyTo(updatesDir, "system4@tests.mozilla.org.xpi");
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: true, version: "2.0" },
       { isUpgrade: true, version: "2.0" },
   ];
 
   await check_installed(conditions);
@@ -271,17 +271,17 @@ add_task(async function test_skips_addit
 // Missing add-on should revert to the default set
 add_task(async function test_revert() {
   manuallyUninstall(updatesDir, "system2@tests.mozilla.org");
 
   // With the add-on physically gone from disk we won't see uninstall events
   BootstrapMonitor.clear("system2@tests.mozilla.org");
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   // With system add-on 2 gone the updated set is now invalid so it reverts to
   // the default set which is system add-ons 1 and 2.
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: null },
   ];
@@ -292,17 +292,17 @@ add_task(async function test_revert() {
 });
 
 // Putting it back will make the set work again
 add_task(async function test_reuse() {
   let file = do_get_file("data/system_addons/system2_2.xpi");
   file.copyTo(updatesDir, "system2@tests.mozilla.org.xpi");
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: true, version: "2.0" },
       { isUpgrade: true, version: "2.0" },
   ];
 
   await check_installed(conditions);
@@ -310,17 +310,17 @@ add_task(async function test_reuse() {
   await promiseShutdownManager();
 });
 
 // Making the pref corrupt should revert to the default set
 add_task(async function test_corrupt_pref() {
   Services.prefs.setCharPref(PREF_SYSTEM_ADDON_SET, "foo");
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: null },
   ];
 
   await check_installed(conditions);
@@ -347,17 +347,17 @@ add_task(async function test_bad_profile
       "system3@tests.mozilla.org": {
         version: "1.0"
       },
     }
   };
   Services.prefs.setCharPref(PREF_SYSTEM_ADDON_SET, JSON.stringify(addonSet));
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: "1.0" },
       { isUpgrade: false, version: null },
   ];
 
   await check_installed(conditions);
@@ -416,17 +416,17 @@ add_task(async function test_updated_bad
       "system_failed_update@tests.mozilla.org": {
         version: "1.0"
       },
     }
   };
   Services.prefs.setCharPref(PREF_SYSTEM_ADDON_SET, JSON.stringify(addonSet));
 
   await overrideBuiltIns({ "system": ["system1@tests.mozilla.org", "system2@tests.mozilla.org", "system3@tests.mozilla.org", "system5@tests.mozilla.org"] });
-  startupManager(false);
+  startupManager();
 
   let conditions = [
       { isUpgrade: false, version: "1.0" },
   ];
 
   await check_installed(conditions);
 
   await promiseShutdownManager();
--- a/toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
@@ -174,17 +174,17 @@ add_task(async function cancelUninstallO
   Assert.ok(a1.isActive);
   Assert.ok(!a1.userDisabled);
 
   shutdownManager();
 
   Assert.equal(getShutdownReason(ID), APP_SHUTDOWN);
   Assert.equal(getShutdownNewVersion(ID), undefined);
 
-  startupManager(false);
+  startupManager();
 
   a1 = await promiseAddonByID("undouninstall1@tests.mozilla.org");
 
   Assert.notEqual(a1, null);
   BootstrapMonitor.checkAddonStarted(ID, "1.0");
   Assert.equal(getStartupReason(ID), APP_STARTUP);
   Assert.equal(a1.pendingOperations, AddonManager.PENDING_NONE);
   Assert.ok(a1.isActive);
@@ -252,17 +252,17 @@ add_task(async function reinstallAddonAw
   Assert.equal(a1.pendingOperations, AddonManager.PENDING_NONE);
   Assert.ok(a1.isActive);
   Assert.ok(!a1.userDisabled);
 
   shutdownManager();
 
   Assert.equal(getShutdownReason(ID), APP_SHUTDOWN);
 
-  startupManager(false);
+  startupManager();
 
   a1 = await promiseAddonByID("undouninstall1@tests.mozilla.org");
 
   Assert.notEqual(a1, null);
   BootstrapMonitor.checkAddonStarted(ID, "1.0");
   Assert.equal(getStartupReason(ID), APP_STARTUP);
   Assert.equal(a1.pendingOperations, AddonManager.PENDING_NONE);
   Assert.ok(a1.isActive);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_upgrade_incompatible.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_upgrade_incompatible.js
@@ -3,17 +3,17 @@
 // unparseable after an application update, the extension becomes
 // disabled.  (See bug 1439600 for a concrete example of a situation where
 // this happened).
 add_task(async function test_upgrade_incompatible() {
   const ID = "incompatible-upgrade@tests.mozilla.org";
 
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
 
-  await promiseStartupManager(false);
+  await promiseStartupManager();
 
   let file = createTempWebExtensionFile({
     manifest: {
       applications: {gecko: {id: ID}},
     },
   });
 
   await Promise.all([promiseInstallFile(file), promiseWebExtensionStartup()]);
@@ -39,17 +39,17 @@ add_task(async function test_upgrade_inc
 
   await OS.File.move(newfile.path, path);
   await promiseSetExtensionModifiedTime(path, timestamp);
   Services.obs.notifyObservers(new FileUtils.File(path), "flush-cache-entry");
 
   // Restart.  With the change to the DB schema we recompute compatibility.
   // With an unparseable manifest the addon should become disabled.
   Services.prefs.setIntPref("extensions.databaseSchema", 0);
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   addon = await promiseAddonByID(ID);
   notEqual(addon, null);
   equal(addon.appDisabled, true);
 
   await promiseShutdownManager();
 
   file = createTempWebExtensionFile({
@@ -60,17 +60,17 @@ add_task(async function test_upgrade_inc
 
   // swap the old extension back in and check that we don't persist the disabled state forever.
   await OS.File.move(file.path, path);
   await promiseSetExtensionModifiedTime(path, timestamp);
   Services.obs.notifyObservers(new FileUtils.File(path), "flush-cache-entry");
 
   // Restart.  With the change to the DB schema we recompute compatibility.
   Services.prefs.setIntPref("extensions.databaseSchema", 0);
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   addon = await promiseAddonByID(ID);
   notEqual(addon, null);
   equal(addon.appDisabled, false);
 
   await promiseShutdownManager();
 });
 
--- a/toolkit/mozapps/extensions/test/xpcshell/test_webextension_langpack.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_webextension_langpack.js
@@ -120,16 +120,16 @@ add_task(async function() {
   ]);
   Assert.ok(addon.isActive);
 
   await promiseShutdownManager();
 
   gAppInfo.version = "59";
   gAppInfo.platformVersion = "59";
 
-  await promiseStartupManager(true);
+  await promiseStartupManager();
 
   addon = await promiseAddonByID(ID);
   Assert.ok(!addon.isActive);
   Assert.ok(addon.appDisabled);
 
   addon.uninstall();
 });