Bug 1447903: Part 4 - Remove xpcshell tests which only apply to restart-required extensions. r?aswan draft
authorKris Maglione <maglione.k@gmail.com>
Wed, 21 Mar 2018 16:51:41 -0700
changeset 772367 fbcb27c1307ec88d9a2e0bda3cd63f51e2f73f3c
parent 772366 13a78a15948bb6d32f89226005449fb60c296d9e
child 772368 428fa58b10fa72bf33463acaa5cff86899ada3ec
push id103897
push usermaglione.k@gmail.com
push dateMon, 26 Mar 2018 01:31:53 +0000
reviewersaswan
bugs1447903
milestone61.0a1
Bug 1447903: Part 4 - Remove xpcshell tests which only apply to restart-required extensions. r?aswan MozReview-Commit-ID: 7Ldg41HrXum
toolkit/mozapps/extensions/test/addons/test_bug324121_1/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_2/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_3/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_4/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_5/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_6/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_7/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_8/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug324121_9/install.rdf
toolkit/mozapps/extensions/test/addons/test_bug595573/install.rdf
toolkit/mozapps/extensions/test/xpcshell/data/test_bug324121.rdf
toolkit/mozapps/extensions/test/xpcshell/head_addons.js
toolkit/mozapps/extensions/test/xpcshell/test_XPIStates.js
toolkit/mozapps/extensions/test/xpcshell/test_bug324121.js
toolkit/mozapps/extensions/test/xpcshell/test_bug394300.js
toolkit/mozapps/extensions/test/xpcshell/test_bug564030.js
toolkit/mozapps/extensions/test/xpcshell/test_bug576735.js
toolkit/mozapps/extensions/test/xpcshell/test_bug595573.js
toolkit/mozapps/extensions/test/xpcshell/test_bug659772.js
toolkit/mozapps/extensions/test/xpcshell/test_disable.js
toolkit/mozapps/extensions/test/xpcshell/test_install.js
toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
toolkit/mozapps/extensions/test/xpcshell/test_migrate_state_prefs.js
toolkit/mozapps/extensions/test/xpcshell/test_temporary.js
toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
toolkit/mozapps/extensions/test/xpcshell/test_uninstall.js
toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_1/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_1@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 1</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121_1.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_2/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_2@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 2</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_3/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_3@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 5</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_4/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_4@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 4</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121_4.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_5/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_5@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>3</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 5</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121_5.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_6/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_6@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>toolkit@mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 6</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_7/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_7@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>toolkit@mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 7</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_8/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_8@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>toolkit@mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>2</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 8</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121_8.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug324121_9/install.rdf
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Compatible to install -->
-
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>bug324121_9@tests.mozilla.org</em:id>
-    <em:version>1</em:version>
-    
-    <em:targetApplication>
-      <Description>
-        <em:id>toolkit@mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>3</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-    
-    <em:name>Bug 324121 Test 9</em:name>
-    <em:updateURL>http://example.com/data/test_bug324121_9.rdf</em:updateURL>
-    
-  </Description>      
-</RDF>
-
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/addons/test_bug595573/install.rdf
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- An extension that is compatible with the XPCShell test suite -->
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-     xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <Description about="urn:mozilla:install-manifest">
-    <em:id>{2f69dacd-03df-4150-a9f1-e8a7b2748829}</em:id>
-    <em:version>1.0</em:version>
-
-    <!-- Front End MetaData -->
-    <em:name>Test 1</em:name>
-    <em:description>Test Description</em:description>
-
-    <em:targetApplication>
-      <Description>
-        <em:id>xpcshell@tests.mozilla.org</em:id>
-        <em:minVersion>1</em:minVersion>
-        <em:maxVersion>1</em:maxVersion>
-      </Description>
-    </em:targetApplication>
-
-  </Description>
-</RDF>
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/data/test_bug324121.rdf
+++ /dev/null
@@ -1,91 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
-  <RDF:Description about="urn:mozilla:extension:bug324121_2@tests.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-        <!-- app id compatible update available -->
-        <RDF:li>
-          <RDF:Description>
-            <em:version>2</em:version>
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>xpcshell@tests.mozilla.org</em:id>
-                <em:minVersion>3</em:minVersion>
-                <em:maxVersion>3</em:maxVersion>
-                <em:updateLink>http://example.com/broken.xpi</em:updateLink>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-      </RDF:Seq>
-    </em:updates>
-  </RDF:Description>
-
-  <RDF:Description about="urn:mozilla:extension:bug324121_3@tests.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-        <!-- app id incompatible update available -->
-        <RDF:li>
-          <RDF:Description>
-            <em:version>2</em:version>
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>xpcshell@tests.mozilla.org</em:id>
-                <em:minVersion>2</em:minVersion>
-                <em:maxVersion>2</em:maxVersion>
-                <em:updateLink>http://example.com/broken.xpi</em:updateLink>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-      </RDF:Seq>
-    </em:updates>
-  </RDF:Description>
-
-  <RDF:Description about="urn:mozilla:extension:bug324121_6@tests.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-        <!-- toolkit id compatible update available -->
-	<RDF:li>
-          <RDF:Description>
-            <em:version>2</em:version>
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>toolkit@mozilla.org</em:id>
-                <em:minVersion>3</em:minVersion>
-                <em:maxVersion>3</em:maxVersion>
-                <em:updateLink>http://example.com/broken.xpi</em:updateLink>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-      </RDF:Seq>
-    </em:updates>
-  </RDF:Description>
-
-  <RDF:Description about="urn:mozilla:extension:bug324121_7@tests.mozilla.org">
-    <em:updates>
-      <RDF:Seq>
-        <!-- toolkit id incompatible update available -->
-        <RDF:li>
-          <RDF:Description>
-            <em:version>2</em:version>
-            <em:targetApplication>
-              <RDF:Description>
-                <em:id>toolkit@mozilla.org</em:id>
-                <em:minVersion>2</em:minVersion>
-                <em:maxVersion>2</em:maxVersion>
-                <em:updateLink>http://example.com/broken.xpi</em:updateLink>
-              </RDF:Description>
-            </em:targetApplication>
-          </RDF:Description>
-        </RDF:li>
-      </RDF:Seq>
-    </em:updates>
-  </RDF:Description>
-
-</RDF:RDF>
-
--- a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js
@@ -67,73 +67,59 @@ ChromeUtils.defineModuleGetter(this, "Mo
 XPCOMUtils.defineLazyServiceGetter(this, "aomStartup",
                                    "@mozilla.org/addons/addon-manager-startup;1",
                                    "amIAddonManagerStartup");
 
 // Whitelist existing tests that still use non-restartless extensions.
 const LEGACY_NON_RESTARTLESS_TESTS = new Set([
   "test_AddonRepository.js",
   "test_AddonRepository_cache.js",
-  "test_XPIStates.js",
   "test_backgroundupdate.js",
   "test_bad_json.js",
   "test_blocklist_metadata_filters.js",
   "test_blocklist_prefs.js",
   "test_blocklist_regexp.js",
   "test_blocklistchange.js",
-  "test_bug324121.js",
   "test_bug335238.js",
   "test_bug384052.js",
   "test_bug393285.js",
-  "test_bug394300.js",
   "test_bug397778.js",
   "test_bug406118.js",
   "test_bug425657.js",
   "test_bug449027.js",
   "test_bug455906.js",
   "test_bug470377_1.js",
   "test_bug470377_2.js",
   "test_bug470377_3.js",
   "test_bug470377_4.js",
-  "test_bug564030.js",
   "test_bug566626.js",
   "test_bug569138.js",
-  "test_bug576735.js",
-  "test_bug595573.js",
   "test_bug655254.js",
-  "test_bug659772.js",
   "test_bug753900.js",
   "test_cacheflush.js",
   "test_checkcompatibility.js",
   "test_compatoverrides.js",
   "test_dataDirectory.js",
-  "test_disable.js",
   "test_distribution.js",
   "test_error.js",
   "test_filepointer.js",
-  "test_install.js",
   "test_invalid_install_rdf.js",
-  "test_isDebuggable.js",
   "test_locale.js",
   "test_manifest.js",
-  "test_migrate_state_prefs.js",
   "test_onPropertyChanged_appDisabled.js",
   "test_proxies.js",
   "test_safemode.js",
   "test_sideloads.js",
   "test_signed_verify.js",
   "test_softblocked.js",
   "test_sourceURI.js",
   "test_startup.js",
   "test_strictcompatibility.js",
   "test_syncGUID.js",
   "test_targetPlatforms.js",
-  "test_temporary.js",
-  "test_undouninstall.js",
-  "test_uninstall.js",
   "test_updateCancel.js",
   "test_update_compatmode.js",
   "test_upgrade.js",
 ]);
 
 if (LEGACY_NON_RESTARTLESS_TESTS.has(_TEST_FILE[0].replace(/.*\//, ""))) {
   Services.prefs.setBoolPref("extensions.legacy.non-restartless.enabled", true);
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_XPIStates.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_XPIStates.js
@@ -205,79 +205,8 @@ add_task(async function install_bootstra
 
   let newAddon = installer.addon;
   let xState = XS.getAddon("app-profile", newAddon.id);
   Assert.ok(!!xState);
   Assert.ok(xState.enabled);
   Assert.equal(xState.mtime, newAddon.updateDate.getTime());
   newAddon.uninstall();
 });
-
-/*
- * Installing an add-on that requires restart doesn't add to XPIState
- * until after the restart; disable and enable happen immediately so that
- * the next restart won't / will scan as necessary on the next restart,
- * uninstalling it marks XPIState as disabled immediately
- * and removes XPIState after restart.
- */
-add_task(async function install_restart() {
-  let XS = getXS();
-
-  let installer = await promiseInstallFile(
-    do_get_addon("test_bootstrap1_4"));
-
-  let newAddon = installer.addon;
-  let newID = newAddon.id;
-  let xState = XS.getAddon("app-profile", newID);
-  Assert.ok(!xState);
-
-  // Now we restart the add-on manager, and we need to get the XPIState again
-  // because the add-on manager reloads it.
-  XS = null;
-  newAddon = null;
-  await promiseRestartManager();
-  XS = getXS();
-
-  newAddon = await promiseAddonByID(newID);
-  xState = XS.getAddon("app-profile", newID);
-  Assert.ok(xState);
-  Assert.ok(xState.enabled);
-  Assert.equal(xState.mtime, newAddon.updateDate.getTime());
-
-  // Check that XPIState enabled flag is updated immediately,
-  // and doesn't change over restart.
-  newAddon.userDisabled = true;
-  Assert.ok(!xState.enabled);
-  XS = null;
-  newAddon = null;
-  await promiseRestartManager();
-  XS = getXS();
-  xState = XS.getAddon("app-profile", newID);
-  Assert.ok(xState);
-  Assert.ok(!xState.enabled);
-
-  newAddon = await promiseAddonByID(newID);
-  newAddon.userDisabled = false;
-  Assert.ok(xState.enabled);
-  XS = null;
-  newAddon = null;
-  await promiseRestartManager();
-  XS = getXS();
-  xState = XS.getAddon("app-profile", newID);
-  Assert.ok(xState);
-  Assert.ok(xState.enabled);
-
-  // Uninstalling immediately marks XPIState disabled,
-  // removes state after restart.
-  newAddon = await promiseAddonByID(newID);
-  newAddon.uninstall();
-  xState = XS.getAddon("app-profile", newID);
-  Assert.ok(xState);
-  Assert.ok(!xState.enabled);
-
-  // Restart to finish uninstall.
-  XS = null;
-  newAddon = null;
-  await promiseRestartManager();
-  XS = getXS();
-  xState = XS.getAddon("app-profile", newID);
-  Assert.ok(!xState);
-});
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug324121.js
+++ /dev/null
@@ -1,172 +0,0 @@
-/* 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/.
- */
-
-// Disables security checking our updates which haven't been signed
-Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
-
-var testserver;
-
-var gItemsNotChecked = [];
-
-var ADDONS = [ {id: "bug324121_1@tests.mozilla.org",
-                addon: "test_bug324121_1",
-                shouldCheck: false },
-               {id: "bug324121_2@tests.mozilla.org",
-                addon: "test_bug324121_2",
-                shouldCheck: true },
-               {id: "bug324121_3@tests.mozilla.org",
-                addon: "test_bug324121_3",
-                shouldCheck: true },
-               {id: "bug324121_4@tests.mozilla.org",
-                addon: "test_bug324121_4",
-                shouldCheck: true },
-               {id: "bug324121_5@tests.mozilla.org",
-                addon: "test_bug324121_5",
-                shouldCheck: false },
-               {id: "bug324121_6@tests.mozilla.org",
-                addon: "test_bug324121_6",
-                shouldCheck: true },
-               {id: "bug324121_7@tests.mozilla.org",
-                addon: "test_bug324121_7",
-                shouldCheck: true },
-               {id: "bug324121_8@tests.mozilla.org",
-                addon: "test_bug324121_8",
-                shouldCheck: true },
-               {id: "bug324121_9@tests.mozilla.org",
-                addon: "test_bug324121_9",
-                shouldCheck: false } ];
-
-// nsIAddonUpdateCheckListener
-var updateListener = {
-  pendingCount: 0,
-
-  onUpdateAvailable: function onAddonUpdateEnded(aAddon) {
-    switch (aAddon.id) {
-      // add-on disabled - should not happen
-      case "bug324121_1@tests.mozilla.org":
-      // app id already compatible - should not happen
-      case "bug324121_5@tests.mozilla.org":
-      // toolkit id already compatible - should not happen
-      case "bug324121_9@tests.mozilla.org":
-        do_throw("Should not have seen an update check for " + aAddon.id);
-        break;
-
-      // app id incompatible update available
-      case "bug324121_3@tests.mozilla.org":
-      // update rdf not found
-      case "bug324121_4@tests.mozilla.org":
-      // toolkit id incompatible update available
-      case "bug324121_7@tests.mozilla.org":
-      // update rdf not found
-      case "bug324121_8@tests.mozilla.org":
-        do_throw("Should be no update available for " + aAddon.id);
-        break;
-
-      // Updates available
-      case "bug324121_2@tests.mozilla.org":
-      case "bug324121_6@tests.mozilla.org":
-        break;
-
-      default:
-        do_throw("Update check for unknown " + aAddon.id);
-    }
-
-    // pos should always be >= 0 so just let this throw if this fails
-    var pos = gItemsNotChecked.indexOf(aAddon.id);
-    gItemsNotChecked.splice(pos, 1);
-  },
-
-  onNoUpdateAvailable: function onNoUpdateAvailable(aAddon) {
-    switch (aAddon.id) {
-      // add-on disabled - should not happen
-      case "bug324121_1@tests.mozilla.org":
-      // app id already compatible - should not happen
-      case "bug324121_5@tests.mozilla.org":
-      // toolkit id already compatible - should not happen
-      case "bug324121_9@tests.mozilla.org":
-        do_throw("Should not have seen an update check for " + aAddon.id);
-        break;
-
-      // app id incompatible update available
-      case "bug324121_3@tests.mozilla.org":
-      // update rdf not found
-      case "bug324121_4@tests.mozilla.org":
-      // toolkit id incompatible update available
-      case "bug324121_7@tests.mozilla.org":
-      // update rdf not found
-      case "bug324121_8@tests.mozilla.org":
-        break;
-
-      // Updates available
-      case "bug324121_2@tests.mozilla.org":
-      case "bug324121_6@tests.mozilla.org":
-        do_throw("Should be an update available for " + aAddon.id);
-        break;
-
-      default:
-        do_throw("Update check for unknown " + aAddon.id);
-    }
-
-    // pos should always be >= 0 so just let this throw if this fails
-    var pos = gItemsNotChecked.indexOf(aAddon.id);
-    gItemsNotChecked.splice(pos, 1);
-  },
-
-  onUpdateFinished: function onUpdateFinished(aAddon) {
-    if (--this.pendingCount == 0)
-      test_complete();
-  }
-};
-
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
-
-  const dataDir = do_get_file("data");
-
-  // Create and configure the HTTP server.
-  testserver = AddonTestUtils.createHttpServer({hosts: ["example.com"]});
-  testserver.registerDirectory("/data/", dataDir);
-
-  startupManager();
-
-  installAllFiles(ADDONS.map(a => do_get_addon(a.addon)), function() {
-    restartManager();
-    AddonManager.getAddonByID(ADDONS[0].id, callback_soon(function(firstAddon) {
-      Assert.ok(firstAddon);
-      firstAddon.userDisabled = true;
-      restartManager();
-
-      AddonManager.getAddonsByTypes(["extension"], function(installedItems) {
-        for (let addon of ADDONS) {
-          for (let installedItem of installedItems) {
-            if (addon.id != installedItem.id)
-              continue;
-            if (installedItem.userDisabled)
-              continue;
-
-            if (addon.shouldCheck == installedItem.isCompatibleWith("3", "3")) {
-              do_throw(installedItem.id + " had the wrong compatibility: " +
-                installedItem.isCompatibleWith("3", "3"));
-            }
-
-            if (addon.shouldCheck) {
-              gItemsNotChecked.push(addon.id);
-              updateListener.pendingCount++;
-              installedItem.findUpdates(updateListener,
-                                            AddonManager.UPDATE_WHEN_USER_REQUESTED,
-                                            "3", "3");
-            }
-          }
-        }
-      });
-    }));
-  });
-}
-
-function test_complete() {
-  Assert.equal(gItemsNotChecked.length, 0);
-  do_test_finished();
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug394300.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* 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/.
- */
-
-// Disables security checking our updates which haven't been signed
-Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
-
-var server;
-
-// nsIAddonUpdateCheckListener implementation
-var updateListener = {
-  _count: 0,
-
-  onUpdateAvailable: function onAddonUpdateEnded(aAddon, aInstall) {
-    Assert.equal(aInstall.version, 10);
-  },
-
-  onNoUpdateAvailable: function onNoUpdateAvailable(aAddon) {
-    do_throw("Expected an available update for " + aAddon.id);
-  },
-
-  onUpdateFinished: function onUpdateFinished() {
-    if (++this._count == 2)
-      do_test_finished();
-  },
-};
-
-function run_test() {
-  // Setup for test
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9");
-  startupManager();
-
-
-  server = AddonTestUtils.createHttpServer({hosts: ["example.com"]});
-  server.registerDirectory("/", do_get_file("data"));
-
-  installAllFiles([do_get_addon("test_bug394300_1"),
-                   do_get_addon("test_bug394300_2")], function() {
-
-    restartManager();
-
-    AddonManager.getAddonsByIDs(["bug394300_1@tests.mozilla.org",
-                                 "bug394300_2@tests.mozilla.org"], function(updates) {
-
-      Assert.notEqual(updates[0], null);
-      Assert.notEqual(updates[1], null);
-
-      updates[0].findUpdates(updateListener, AddonManager.UPDATE_WHEN_USER_REQUESTED);
-      updates[1].findUpdates(updateListener, AddonManager.UPDATE_WHEN_USER_REQUESTED);
-    });
-  });
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug564030.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Tests that upgrading an incompatible add-on to a compatible one forces an
-// EM restart
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-async function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "1.9.2");
-
-  var dest = writeInstallRDFForExtension({
-    id: "addon1@tests.mozilla.org",
-    version: "1.0",
-    name: "Test",
-    targetApplications: [{
-      id: "xpcshell@tests.mozilla.org",
-      minVersion: "1",
-      maxVersion: "1"
-    }]
-  }, profileDir);
-  // Attempt to make this look like it was added some time in the past so
-  // the update makes the last modified time change.
-  setExtensionModifiedTime(dest, dest.lastModifiedTime - 5000);
-
-  await promiseStartupManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(async function(a) {
-    Assert.notEqual(a, null);
-    Assert.equal(a.version, "1.0");
-    Assert.ok(!a.userDisabled);
-    Assert.ok(a.appDisabled);
-    Assert.ok(!a.isActive);
-    Assert.ok(!isExtensionInAddonsList(profileDir, a.id));
-
-    writeInstallRDFForExtension({
-      id: "addon1@tests.mozilla.org",
-      version: "2.0",
-      name: "Test",
-      targetApplications: [{
-        id: "xpcshell@tests.mozilla.org",
-        minVersion: "1",
-        maxVersion: "2"
-      }]
-    }, profileDir);
-
-    await promiseRestartManager();
-
-    AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a2) {
-      Assert.notEqual(a2, null);
-      Assert.equal(a2.version, "2.0");
-      Assert.ok(!a2.userDisabled);
-      Assert.ok(!a2.appDisabled);
-      Assert.ok(a2.isActive);
-      Assert.ok(isExtensionInAddonsList(profileDir, a2.id));
-
-      executeSoon(do_test_finished);
-    });
-  }));
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug576735.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Tests that we recover gracefully from an extension directory disappearing
-// when we were expecting to uninstall it.
-
-var addon1 = {
-  id: "addon1@tests.mozilla.org",
-  version: "1.0",
-  name: "Test 1",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-var addon2 = {
-  id: "addon2@tests.mozilla.org",
-  version: "2.0",
-  name: "Test 2",
-  targetApplications: [{
-    id: "toolkit@mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2");
-
-  writeInstallRDFForExtension(addon1, profileDir);
-
-  startupManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
-    a1.uninstall();
-
-    shutdownManager();
-
-    var dest = profileDir.clone();
-    dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
-    dest.remove(true);
-
-    writeInstallRDFForExtension(addon2, profileDir);
-
-    startupManager();
-
-    AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
-                                 "addon2@tests.mozilla.org"],
-                                function([a1_2, a2_2]) {
-      // Addon1 should no longer be installed
-      Assert.equal(a1_2, null);
-
-      // Addon2 should have been detected
-      Assert.notEqual(a2_2, null);
-
-      executeSoon(do_test_finished);
-    });
-  }));
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug595573.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// This tests if addons with UUID based ids install and stay installed
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-  startupManager();
-  run_test_1();
-}
-
-function run_test_1() {
-  installAllFiles([do_get_addon("test_bug595573")], async function() {
-    await promiseRestartManager();
-
-    AddonManager.getAddonByID("{2f69dacd-03df-4150-a9f1-e8a7b2748829}", function(a1) {
-      Assert.notEqual(a1, null);
-      Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-
-      executeSoon(run_test_2);
-    });
-  });
-}
-
-function run_test_2() {
-  restartManager();
-
-  AddonManager.getAddonByID("{2f69dacd-03df-4150-a9f1-e8a7b2748829}", function(a1) {
-    Assert.notEqual(a1, null);
-    Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-
-    executeSoon(do_test_finished);
-  });
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug659772.js
+++ /dev/null
@@ -1,348 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// Tests that a pending upgrade during a schema update doesn't break things
-
-Cu.importGlobalProperties(["File"]);
-
-var addon1 = {
-  id: "addon1@tests.mozilla.org",
-  version: "2.0",
-  name: "Test 1",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-var addon2 = {
-  id: "addon2@tests.mozilla.org",
-  version: "2.0",
-  name: "Test 2",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "2"
-  }]
-};
-
-var addon3 = {
-  id: "addon3@tests.mozilla.org",
-  version: "2.0",
-  name: "Test 3",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-var addon4 = {
-  id: "addon4@tests.mozilla.org",
-  version: "2.0",
-  name: "Test 4",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "2",
-    maxVersion: "2"
-  }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-  run_test_1();
-}
-
-// Tests whether a schema migration without app version change works
-async function run_test_1() {
-  writeInstallRDFForExtension(addon1, profileDir);
-  writeInstallRDFForExtension(addon2, profileDir);
-  writeInstallRDFForExtension(addon3, profileDir);
-  writeInstallRDFForExtension(addon4, profileDir);
-
-  await promiseStartupManager();
-
-  AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
-                               "addon2@tests.mozilla.org",
-                               "addon3@tests.mozilla.org",
-                               "addon4@tests.mozilla.org"],
-                              function([a1, a2, a3, a4]) {
-    Assert.notEqual(a1, null);
-    Assert.equal(a1.version, "2.0");
-    Assert.ok(!a1.appDisabled);
-    Assert.ok(!a1.userDisabled);
-    Assert.ok(a1.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon1.id));
-
-    Assert.notEqual(a2, null);
-    Assert.equal(a2.version, "2.0");
-    Assert.ok(!a2.appDisabled);
-    Assert.ok(!a2.userDisabled);
-    Assert.ok(a2.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon2.id));
-
-    Assert.notEqual(a3, null);
-    Assert.equal(a3.version, "2.0");
-    Assert.ok(!a3.appDisabled);
-    Assert.ok(!a3.userDisabled);
-    Assert.ok(a3.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon3.id));
-
-    Assert.notEqual(a4, null);
-    Assert.equal(a4.version, "2.0");
-    Assert.ok(a4.appDisabled);
-    Assert.ok(!a4.userDisabled);
-    Assert.ok(!a4.isActive);
-    Assert.ok(!isExtensionInAddonsList(profileDir, addon4.id));
-
-    // Prepare the add-on update, and a bootstrapped addon (bug 693714)
-    installAllFiles([
-      do_get_addon("test_bug659772"),
-      do_get_addon("test_bootstrap1_1")
-    ], async function() {
-      shutdownManager();
-
-      // Make it look like the next time the app is started it has a new DB schema
-      changeXPIDBVersion(1);
-      Services.prefs.setIntPref("extensions.databaseSchema", 1);
-
-      let jsonfile = gProfD.clone();
-      jsonfile.append("extensions");
-      jsonfile.append("staged");
-      jsonfile.append("addon3@tests.mozilla.org.json");
-      Assert.ok(jsonfile.exists());
-
-      // Remove an unnecessary property from the cached manifest
-      let file = await File.createFromNsIFile(jsonfile);
-
-      let addonObj = await new Promise(resolve => {
-        let fr = new FileReader();
-        fr.readAsText(file);
-        fr.onloadend = () => {
-          resolve(JSON.parse(fr.result));
-        };
-      });
-
-      delete addonObj.optionsType;
-
-      let stream = AM_Cc["@mozilla.org/network/file-output-stream;1"].
-                   createInstance(AM_Ci.nsIFileOutputStream);
-      let converter = AM_Cc["@mozilla.org/intl/converter-output-stream;1"].
-                      createInstance(AM_Ci.nsIConverterOutputStream);
-      stream.init(jsonfile, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE |
-                            FileUtils.MODE_TRUNCATE, FileUtils.PERMS_FILE,
-                            0);
-      converter.init(stream, "UTF-8");
-      converter.writeString(JSON.stringify(addonObj));
-      converter.close();
-      stream.close();
-
-      Services.prefs.clearUserPref("bootstraptest.install_reason");
-      Services.prefs.clearUserPref("bootstraptest.uninstall_reason");
-
-      await promiseStartupManager(false);
-
-      AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
-                                   "addon2@tests.mozilla.org",
-                                   "addon3@tests.mozilla.org",
-                                   "addon4@tests.mozilla.org"],
-                                  function([a1_2, a2_2, a3_2, a4_2]) {
-        Assert.notEqual(a1_2, null);
-        Assert.equal(a1_2.version, "2.0");
-        Assert.ok(!a1_2.appDisabled);
-        Assert.ok(!a1_2.userDisabled);
-        Assert.ok(a1_2.isActive);
-        Assert.ok(isExtensionInAddonsList(profileDir, addon1.id));
-
-        Assert.notEqual(a2_2, null);
-        Assert.equal(a2_2.version, "2.0");
-        Assert.ok(!a2_2.appDisabled);
-        Assert.ok(!a2_2.userDisabled);
-        Assert.ok(a2_2.isActive);
-        Assert.ok(isExtensionInAddonsList(profileDir, addon2.id));
-
-        // Should stay enabled because we migrate the compat info from
-        // the previous version of the DB
-        Assert.notEqual(a3_2, null);
-        Assert.equal(a3_2.version, "2.0");
-        todo_check_false(a3_2.appDisabled); // XXX unresolved issue
-        Assert.ok(!a3_2.userDisabled);
-        todo_check_true(a3_2.isActive); // XXX same
-        todo_check_true(isExtensionInAddonsList(profileDir, addon3.id)); // XXX same
-
-        Assert.notEqual(a4_2, null);
-        Assert.equal(a4_2.version, "2.0");
-        Assert.ok(a4_2.appDisabled);
-        Assert.ok(!a4_2.userDisabled);
-        Assert.ok(!a4_2.isActive);
-        Assert.ok(!isExtensionInAddonsList(profileDir, addon4.id));
-
-        // Check that install and uninstall haven't been called on the bootstrapped addon
-        Assert.ok(!Services.prefs.prefHasUserValue("bootstraptest.install_reason"));
-        Assert.ok(!Services.prefs.prefHasUserValue("bootstraptest.uninstall_reason"));
-
-        a1_2.uninstall();
-        a2_2.uninstall();
-        a3_2.uninstall();
-        a4_2.uninstall();
-        executeSoon(run_test_2);
-      });
-    });
-  });
-}
-
-// Tests whether a schema migration with app version change works
-async function run_test_2() {
-  restartManager();
-
-  shutdownManager();
-
-  writeInstallRDFForExtension(addon1, profileDir);
-  writeInstallRDFForExtension(addon2, profileDir);
-  writeInstallRDFForExtension(addon3, profileDir);
-  writeInstallRDFForExtension(addon4, profileDir);
-
-  await promiseStartupManager();
-
-  AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
-                               "addon2@tests.mozilla.org",
-                               "addon3@tests.mozilla.org",
-                               "addon4@tests.mozilla.org"],
-                              function([a1, a2, a3, a4]) {
-    Assert.notEqual(a1, null);
-    Assert.equal(a1.version, "2.0");
-    Assert.ok(!a1.appDisabled);
-    Assert.ok(!a1.userDisabled);
-    Assert.ok(a1.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon1.id));
-
-    Assert.notEqual(a2, null);
-    Assert.equal(a2.version, "2.0");
-    Assert.ok(!a2.appDisabled);
-    Assert.ok(!a2.userDisabled);
-    Assert.ok(a2.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon2.id));
-
-    Assert.notEqual(a3, null);
-    Assert.equal(a3.version, "2.0");
-    Assert.ok(!a3.appDisabled);
-    Assert.ok(!a3.userDisabled);
-    Assert.ok(a3.isActive);
-    Assert.ok(isExtensionInAddonsList(profileDir, addon3.id));
-
-    Assert.notEqual(a4, null);
-    Assert.equal(a4.version, "2.0");
-    Assert.ok(a4.appDisabled);
-    Assert.ok(!a4.userDisabled);
-    Assert.ok(!a4.isActive);
-    Assert.ok(!isExtensionInAddonsList(profileDir, addon4.id));
-
-    // Prepare the add-on update, and a bootstrapped addon (bug 693714)
-    installAllFiles([
-      do_get_addon("test_bug659772"),
-      do_get_addon("test_bootstrap1_1")
-    ], function() { executeSoon(prepare_schema_migrate); });
-
-    async function prepare_schema_migrate() {
-      shutdownManager();
-
-      // Make it look like the next time the app is started it has a new DB schema
-      changeXPIDBVersion(1);
-      Services.prefs.setIntPref("extensions.databaseSchema", 1);
-
-      let jsonfile = gProfD.clone();
-      jsonfile.append("extensions");
-      jsonfile.append("staged");
-      jsonfile.append("addon3@tests.mozilla.org.json");
-      Assert.ok(jsonfile.exists());
-
-      // Remove an unnecessary property from the cached manifest
-      let file = await File.createFromNsIFile(jsonfile);
-
-      let addonObj = await new Promise(resolve => {
-        let fr = new FileReader();
-        fr.readAsText(file);
-        fr.onloadend = () => {
-          resolve(JSON.parse(fr.result));
-        };
-      });
-
-      delete addonObj.optionsType;
-
-      let stream = AM_Cc["@mozilla.org/network/file-output-stream;1"].
-                   createInstance(AM_Ci.nsIFileOutputStream);
-      let converter = AM_Cc["@mozilla.org/intl/converter-output-stream;1"].
-                      createInstance(AM_Ci.nsIConverterOutputStream);
-      stream.init(jsonfile, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE |
-                            FileUtils.MODE_TRUNCATE, FileUtils.PERMS_FILE,
-                            0);
-      converter.init(stream, "UTF-8");
-      converter.writeString(JSON.stringify(addonObj));
-      converter.close();
-      stream.close();
-
-      Services.prefs.clearUserPref("bootstraptest.install_reason");
-      Services.prefs.clearUserPref("bootstraptest.uninstall_reason");
-
-      gAppInfo.version = "2";
-      await promiseStartupManager(true);
-
-      AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
-                                   "addon2@tests.mozilla.org",
-                                   "addon3@tests.mozilla.org",
-                                   "addon4@tests.mozilla.org"],
-                                  callback_soon(function([a1_2, a2_2, a3_2, a4_2]) {
-        Assert.notEqual(a1_2, null);
-        Assert.equal(a1_2.version, "2.0");
-        Assert.ok(a1_2.appDisabled);
-        Assert.ok(!a1_2.userDisabled);
-        Assert.ok(!a1_2.isActive);
-        Assert.ok(!isExtensionInAddonsList(profileDir, addon1.id));
-
-        Assert.notEqual(a2_2, null);
-        Assert.equal(a2_2.version, "2.0");
-        Assert.ok(!a2_2.appDisabled);
-        Assert.ok(!a2_2.userDisabled);
-        Assert.ok(a2_2.isActive);
-        Assert.ok(isExtensionInAddonsList(profileDir, addon2.id));
-
-        // Should become appDisabled because we migrate the compat info from
-        // the previous version of the DB
-        Assert.notEqual(a3_2, null);
-        Assert.equal(a3_2.version, "2.0");
-        todo_check_true(a3_2.appDisabled);
-        Assert.ok(!a3_2.userDisabled);
-        todo_check_false(a3_2.isActive);
-        todo_check_false(isExtensionInAddonsList(profileDir, addon3.id));
-
-        Assert.notEqual(a4_2, null);
-        Assert.equal(a4_2.version, "2.0");
-        Assert.ok(!a4_2.appDisabled);
-        Assert.ok(!a4_2.userDisabled);
-        Assert.ok(a4_2.isActive);
-        Assert.ok(isExtensionInAddonsList(profileDir, addon4.id));
-
-        // Check that install and uninstall haven't been called on the bootstrapped addon
-        Assert.ok(!Services.prefs.prefHasUserValue("bootstraptest.install_reason"));
-        Assert.ok(!Services.prefs.prefHasUserValue("bootstraptest.uninstall_reason"));
-
-        a1_2.uninstall();
-        a2_2.uninstall();
-        a3_2.uninstall();
-        a4_2.uninstall();
-        restartManager();
-
-        shutdownManager();
-
-        do_test_finished();
-      }));
-    }
-  });
-}
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_disable.js
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
-
-// This verifies that add-ons can be disabled and enabled.
-
-var addon1 = {
-  id: "addon1@tests.mozilla.org",
-  version: "1.0",
-  name: "Test 1",
-  optionsURL: "chrome://foo/content/options.xul",
-  aboutURL: "chrome://foo/content/about.xul",
-  iconURL: "chrome://foo/content/icon.png",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-var gIconURL = null;
-
-// Sets up the profile by installing an add-on.
-function run_test() {
-  do_test_pending();
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-  startupManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(async function(a1) {
-    Assert.equal(a1, null);
-    do_check_not_in_crash_annotation(addon1.id, addon1.version);
-
-    writeInstallRDFForExtension(addon1, profileDir, addon1.id, "icon.png");
-    gIconURL = do_get_addon_root_uri(profileDir.clone(), addon1.id) + "icon.png";
-
-    await promiseRestartManager();
-
-    AddonManager.getAddonByID("addon1@tests.mozilla.org", function(newa1) {
-      Assert.notEqual(newa1, null);
-      Assert.ok(newa1.isActive);
-      Assert.ok(!newa1.userDisabled);
-      Assert.equal(newa1.aboutURL, "chrome://foo/content/about.xul");
-      Assert.equal(newa1.optionsURL, "chrome://foo/content/options.xul");
-      Assert.equal(newa1.iconURL, "chrome://foo/content/icon.png");
-      Assert.ok(isExtensionInAddonsList(profileDir, newa1.id));
-      Assert.ok(hasFlag(newa1.permissions, AddonManager.PERM_CAN_DISABLE));
-      Assert.ok(!hasFlag(newa1.permissions, AddonManager.PERM_CAN_ENABLE));
-      Assert.equal(newa1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE |
-                                                     AddonManager.OP_NEEDS_RESTART_UNINSTALL);
-      do_check_in_crash_annotation(addon1.id, addon1.version);
-
-      run_test_1();
-    });
-  }));
-}
-
-// Disabling an add-on should work
-function run_test_1() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onDisabling"
-    ]
-  });
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.notEqual(a1.operationsRequiringRestart &
-                    AddonManager.OP_NEEDS_RESTART_DISABLE, 0);
-    a1.userDisabled = true;
-    Assert.equal(a1.aboutURL, "chrome://foo/content/about.xul");
-    Assert.equal(a1.optionsURL, "chrome://foo/content/options.xul");
-    Assert.equal(a1.iconURL, "chrome://foo/content/icon.png");
-    Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE));
-    Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE));
-    Assert.equal(a1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE |
-                                                AddonManager.OP_NEEDS_RESTART_UNINSTALL);
-    do_check_in_crash_annotation(addon1.id, addon1.version);
-
-    ensure_test_completed();
-
-    AddonManager.getAddonsWithOperationsByTypes(null, callback_soon(function(list) {
-      Assert.equal(list.length, 1);
-      Assert.equal(list[0].id, "addon1@tests.mozilla.org");
-
-      restartManager();
-
-      AddonManager.getAddonByID("addon1@tests.mozilla.org", function(newa1) {
-        Assert.notEqual(newa1, null);
-        Assert.ok(!newa1.isActive);
-        Assert.ok(newa1.userDisabled);
-        Assert.equal(newa1.aboutURL, null);
-        Assert.equal(newa1.optionsURL, null);
-        Assert.equal(newa1.iconURL, gIconURL);
-        Assert.ok(!isExtensionInAddonsList(profileDir, newa1.id));
-        Assert.ok(!hasFlag(newa1.permissions, AddonManager.PERM_CAN_DISABLE));
-        Assert.ok(hasFlag(newa1.permissions, AddonManager.PERM_CAN_ENABLE));
-        Assert.equal(newa1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE);
-        do_check_not_in_crash_annotation(addon1.id, addon1.version);
-
-        run_test_2();
-      });
-    }));
-  });
-}
-
-// Enabling an add-on should work.
-function run_test_2() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onEnabling"
-    ]
-  });
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    a1.userDisabled = false;
-    Assert.equal(a1.aboutURL, null);
-    Assert.equal(a1.optionsURL, null);
-    Assert.equal(a1.iconURL, gIconURL);
-    Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE));
-    Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE));
-    Assert.equal(a1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE);
-
-    ensure_test_completed();
-
-    AddonManager.getAddonsWithOperationsByTypes(null, callback_soon(function(list) {
-      Assert.equal(list.length, 1);
-      Assert.equal(list[0].id, "addon1@tests.mozilla.org");
-
-      restartManager();
-
-      AddonManager.getAddonByID("addon1@tests.mozilla.org", function(newa1) {
-        Assert.notEqual(newa1, null);
-        Assert.ok(newa1.isActive);
-        Assert.ok(!newa1.userDisabled);
-        Assert.equal(newa1.aboutURL, "chrome://foo/content/about.xul");
-        Assert.equal(newa1.optionsURL, "chrome://foo/content/options.xul");
-        Assert.equal(newa1.iconURL, "chrome://foo/content/icon.png");
-        Assert.ok(isExtensionInAddonsList(profileDir, newa1.id));
-        Assert.ok(hasFlag(newa1.permissions, AddonManager.PERM_CAN_DISABLE));
-        Assert.ok(!hasFlag(newa1.permissions, AddonManager.PERM_CAN_ENABLE));
-        Assert.equal(newa1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE |
-                                                       AddonManager.OP_NEEDS_RESTART_UNINSTALL);
-        do_check_in_crash_annotation(addon1.id, addon1.version);
-
-        run_test_3();
-      });
-    }));
-  });
-}
-
-// Disabling then enabling without restart should fire onOperationCancelled.
-function run_test_3() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onDisabling"
-    ]
-  });
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
-    a1.userDisabled = true;
-    ensure_test_completed();
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        "onOperationCancelled"
-      ]
-    });
-    a1.userDisabled = false;
-    Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE));
-    Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE));
-
-    ensure_test_completed();
-
-    restartManager();
-
-    AddonManager.getAddonByID("addon1@tests.mozilla.org", function(newa1) {
-      Assert.notEqual(newa1, null);
-      Assert.ok(newa1.isActive);
-      Assert.ok(!newa1.userDisabled);
-      Assert.equal(newa1.aboutURL, "chrome://foo/content/about.xul");
-      Assert.equal(newa1.optionsURL, "chrome://foo/content/options.xul");
-      Assert.equal(newa1.iconURL, "chrome://foo/content/icon.png");
-      Assert.ok(isExtensionInAddonsList(profileDir, newa1.id));
-      Assert.ok(hasFlag(newa1.permissions, AddonManager.PERM_CAN_DISABLE));
-      Assert.ok(!hasFlag(newa1.permissions, AddonManager.PERM_CAN_ENABLE));
-
-      executeSoon(do_test_finished);
-    });
-  }));
-}
--- a/toolkit/mozapps/extensions/test/xpcshell/test_install.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_install.js
@@ -1,1488 +1,1248 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
-// This verifies that add-ons can be installed from XPI files
-// install.rdf size, icon.png, icon64.png size
-const ADDON1_SIZE = 705 + 16 + 16;
-
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/NetUtil.jsm");
 ChromeUtils.import("resource://testing-common/httpd.js");
 
-var testserver;
+var testserver = AddonTestUtils.createHttpServer({hosts: ["example.com"]});
 var gInstallDate;
 
+// This verifies that add-ons can be installed from XPI files
+// install.rdf size, icon.png, icon64.png size
+const ADDON1_SIZE = 612;
+
+const ADDONS = {
+  test_install1: {
+    "install.rdf": {
+      id: "addon1@tests.mozilla.org",
+      version: "1.0",
+      name: "Test 1",
+      description: "Test Description",
+      bootstrap: true,
+
+      targetApplications: [{
+          id: "xpcshell@tests.mozilla.org",
+          minVersion: "1",
+          maxVersion: "1"}],
+    },
+    "icon.png": "Fake icon image",
+    "icon64.png": "Fake icon image",
+  },
+  test_install2_1: {
+    "install.rdf": {
+      id: "addon2@tests.mozilla.org",
+      version: "2.0",
+      name: "Real Test 2",
+      description: "Test Description",
+      bootstrap: true,
+
+      targetApplications: [{
+          id: "xpcshell@tests.mozilla.org",
+          minVersion: "1",
+          maxVersion: "1"}],
+
+    },
+    "icon.png": "Fake icon image",
+  },
+  test_install2_2: {
+    "install.rdf": {
+      id: "addon2@tests.mozilla.org",
+      version: "3.0",
+      name: "Real Test 3",
+      description: "Test Description",
+      bootstrap: true,
+
+      targetApplications: [{
+          id: "xpcshell@tests.mozilla.org",
+          minVersion: "1",
+          maxVersion: "1"}],
+    },
+  },
+  test_install3: {
+    "install.rdf": {
+      id: "addon3@tests.mozilla.org",
+      version: "1.0",
+      name: "Real Test 4",
+      description: "Test Description",
+      bootstrap: true,
+
+      updateURL: "http://example.com/data/test_install.rdf",
+
+      targetApplications: [{
+          id: "xpcshell@tests.mozilla.org",
+          minVersion: "0",
+          maxVersion: "0"}],
+    },
+  },
+  test_install6: {
+    "install.rdf": {
+      id: "addon6@tests.mozilla.org",
+      version: "1.0",
+      name: "Addon Test 6",
+      description: "Test Description",
+      bootstrap: true,
+
+      targetApplications: [{
+          id: "xpcshell@tests.mozilla.org",
+          minVersion: "1",
+          maxVersion: "1"}],
+    },
+  },
+  test_install7: {
+    "install.rdf": {
+      type: "32",
+    },
+  },
+};
+
+const XPIS = {};
+
+for (let [name, files] of Object.entries(ADDONS)) {
+  XPIS[name] = AddonTestUtils.createTempXPIFile(files);
+  testserver.registerFile(`/addons/${name}.xpi`, XPIS[name]);
+}
+
+const ZipReader = Components.Constructor(
+  "@mozilla.org/libjar/zip-reader;1", "nsIZipReader",
+  "open");
+
 // The test extension uses an insecure update url.
 Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
 Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false);
 
 const profileDir = gProfD.clone();
 profileDir.append("extensions");
 
-function run_test() {
+add_task(async function setup() {
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
 
-  startupManager();
+  await promiseStartupManager();
+
   // Make sure we only register once despite multiple calls
   AddonManager.addInstallListener(InstallListener);
   AddonManager.addAddonListener(AddonListener);
   AddonManager.addInstallListener(InstallListener);
   AddonManager.addAddonListener(AddonListener);
 
   // Create and configure the HTTP server.
-  testserver = new HttpServer();
-  testserver.registerDirectory("/addons/", do_get_file("addons"));
   testserver.registerDirectory("/data/", do_get_file("data"));
   testserver.registerPathHandler("/redirect", function(aRequest, aResponse) {
     aResponse.setStatusLine(null, 301, "Moved Permanently");
     let url = aRequest.host + ":" + aRequest.port + aRequest.queryString;
     aResponse.setHeader("Location", "http://" + url);
   });
-  testserver.start(-1);
   gPort = testserver.identity.primaryPort;
-
-  do_test_pending();
-  run_test_1();
-}
-
-function end_test() {
-  testserver.stop(do_test_finished);
-}
+});
 
 // Checks that an install from a local file proceeds as expected
-function run_test_1() {
+add_task(async function test_1() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  AddonManager.getInstallForFile(do_get_addon("test_install1"), function(install) {
-    ensure_test_completed();
+  let install = await AddonManager.getInstallForFile(XPIS.test_install1);
+  ensure_test_completed();
 
-    Assert.notEqual(install, null);
-    Assert.equal(install.type, "extension");
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Test 1");
-    Assert.equal(install.state, AddonManager.STATE_DOWNLOADED);
-    Assert.ok(install.addon.hasResource("install.rdf"));
-    Assert.notEqual(install.addon.syncGUID, null);
-    Assert.equal(install.addon.install, install);
-    Assert.equal(install.addon.size, ADDON1_SIZE);
-    Assert.ok(hasFlag(install.addon.operationsRequiringRestart,
-                      AddonManager.OP_NEEDS_RESTART_INSTALL));
-    let file = do_get_addon("test_install1");
-    let uri = Services.io.newFileURI(file).spec;
-    Assert.equal(install.addon.getResourceURI("install.rdf").spec, "jar:" + uri + "!/install.rdf");
-    Assert.equal(install.addon.iconURL, "jar:" + uri + "!/icon.png");
-    Assert.equal(install.addon.icon64URL, "jar:" + uri + "!/icon64.png");
-    Assert.equal(install.iconURL, null);
+  notEqual(install, null);
+  equal(install.type, "extension");
+  equal(install.version, "1.0");
+  equal(install.name, "Test 1");
+  equal(install.state, AddonManager.STATE_DOWNLOADED);
+  ok(install.addon.hasResource("install.rdf"));
+  notEqual(install.addon.syncGUID, null);
+  equal(install.addon.install, install);
+  equal(install.addon.size, ADDON1_SIZE);
+  let file = XPIS.test_install1;
+  let uri = Services.io.newFileURI(file).spec;
+  equal(install.addon.getResourceURI("install.rdf").spec, "jar:" + uri + "!/install.rdf");
+  equal(install.addon.iconURL, "jar:" + uri + "!/icon.png");
+  equal(install.addon.icon64URL, "jar:" + uri + "!/icon64.png");
+  equal(install.iconURL, null);
 
-    Assert.equal(install.sourceURI.spec, uri);
-    Assert.equal(install.addon.sourceURI.spec, uri);
+  equal(install.sourceURI.spec, uri);
+  equal(install.addon.sourceURI.spec, uri);
 
-    AddonManager.getAllInstalls(function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
+  let activeInstalls = await AddonManager.getAllInstalls();
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
 
-      AddonManager.getInstallsByTypes(["foo"], function(fooInstalls) {
-        Assert.equal(fooInstalls.length, 0);
+  let fooInstalls = await AddonManager.getInstallsByTypes(["foo"]);
+  equal(fooInstalls.length, 0);
 
-        AddonManager.getInstallsByTypes(["extension"], function(extensionInstalls) {
-          Assert.equal(extensionInstalls.length, 1);
-          Assert.equal(extensionInstalls[0], install);
+  let extensionInstalls = await AddonManager.getInstallsByTypes(["extension"]);
+  equal(extensionInstalls.length, 1);
+  equal(extensionInstalls[0], install);
 
-          prepare_test({
-            "addon1@tests.mozilla.org": [
-              "onInstalling"
-            ]
-          }, [
-            "onInstallStarted",
-            "onInstallEnded",
-          ], function() {
-            check_test_1(install.addon.syncGUID);
-          });
-          install.install();
-        });
-      });
+  let installSyncGUID = await new Promise(resolve => {
+    prepare_test({
+      "addon1@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled",
+      ]
+    }, [
+      "onInstallStarted",
+      "onInstallEnded",
+    ], () => {
+      resolve(install.addon.syncGUID);
     });
+    install.install();
   });
-}
+
+  ensure_test_completed();
 
-function check_test_1(installSyncGUID) {
-  ensure_test_completed();
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(olda1) {
-    Assert.equal(olda1, null);
+  let addon = await AddonManager.getAddonByID("addon1@tests.mozilla.org");
+  ok(addon);
+
+  let pendingAddons = await AddonManager.getAddonsWithOperationsByTypes(null);
+  equal(pendingAddons.length, 0);
 
-    AddonManager.getAddonsWithOperationsByTypes(null, callback_soon(async function(pendingAddons) {
-      Assert.equal(pendingAddons.length, 1);
-      Assert.equal(pendingAddons[0].id, "addon1@tests.mozilla.org");
-      let uri = NetUtil.newURI(pendingAddons[0].iconURL);
-      if (uri instanceof AM_Ci.nsIJARURI) {
-        let jarURI = uri.QueryInterface(AM_Ci.nsIJARURI);
-        let archiveURI = jarURI.JARFile;
-        let archiveFile = archiveURI.QueryInterface(AM_Ci.nsIFileURL).file;
-        let zipReader = Cc["@mozilla.org/libjar/zip-reader;1"].
-                        createInstance(Ci.nsIZipReader);
-        try {
-          zipReader.open(archiveFile);
-          Assert.ok(zipReader.hasEntry(jarURI.JAREntry));
-        } finally {
-          zipReader.close();
-        }
-      } else {
-        let iconFile = uri.QueryInterface(AM_Ci.nsIFileURL).file;
-        Assert.ok(iconFile.exists());
-        // Make the iconFile predictably old.
-        iconFile.lastModifiedTime = Date.now() - MAKE_FILE_OLD_DIFFERENCE;
-      }
+  uri = NetUtil.newURI(addon.iconURL);
+  if (uri instanceof Ci.nsIJARURI) {
+    let archiveURI = uri.JARFile;
+    let archiveFile = archiveURI.QueryInterface(Ci.nsIFileURL).file;
+    let zipReader = new ZipReader(archiveFile);
+    try {
+      ok(zipReader.hasEntry(uri.JAREntry));
+    } finally {
+      zipReader.close();
+    }
+  } else {
+    let iconFile = uri.QueryInterface(Ci.nsIFileURL).file;
+    ok(iconFile.exists());
+    // Make the iconFile predictably old.
+    iconFile.lastModifiedTime = Date.now() - MAKE_FILE_OLD_DIFFERENCE;
+  }
 
-      // Make the pending install have a sensible date
-      let updateDate = Date.now();
-      let extURI = pendingAddons[0].getResourceURI("");
-      let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file;
-      setExtensionModifiedTime(ext, updateDate);
+  // Make the pending install have a sensible date
+  let updateDate = Date.now();
+  let extURI = addon.getResourceURI("");
+  let ext = extURI.QueryInterface(Ci.nsIFileURL).file;
+  setExtensionModifiedTime(ext, updateDate);
 
-      // The pending add-on cannot be disabled or enabled.
-      Assert.ok(!hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_ENABLE));
-      Assert.ok(!hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_DISABLE));
+  ok(!hasFlag(addon.permissions, AddonManager.PERM_CAN_ENABLE));
+  ok(hasFlag(addon.permissions, AddonManager.PERM_CAN_DISABLE));
 
-      await promiseRestartManager();
+  await promiseRestartManager();
 
-      AddonManager.getAllInstalls(function(activeInstalls) {
-        Assert.equal(activeInstalls, 0);
+  activeInstalls = await AddonManager.getAllInstalls();
+  equal(activeInstalls, 0);
 
-        AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) {
-          Assert.notEqual(a1, null);
-          Assert.notEqual(a1.syncGUID, null);
-          Assert.ok(a1.syncGUID.length >= 9);
-          Assert.equal(a1.syncGUID, installSyncGUID);
-          Assert.equal(a1.type, "extension");
-          Assert.equal(a1.version, "1.0");
-          Assert.equal(a1.name, "Test 1");
-          Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-          Assert.ok(do_get_addon("test_install1").exists());
-          do_check_in_crash_annotation(a1.id, a1.version);
-          Assert.equal(a1.size, ADDON1_SIZE);
-          Assert.ok(!a1.foreignInstall);
+  let a1 = await AddonManager.getAddonByID("addon1@tests.mozilla.org");
+  notEqual(a1, null);
+  notEqual(a1.syncGUID, null);
+  ok(a1.syncGUID.length >= 9);
+  equal(a1.syncGUID, installSyncGUID);
+  equal(a1.type, "extension");
+  equal(a1.version, "1.0");
+  equal(a1.name, "Test 1");
+  ok(isExtensionInBootstrappedList(profileDir, a1.id));
+  ok(XPIS.test_install1.exists());
+  do_check_in_crash_annotation(a1.id, a1.version);
+  equal(a1.size, ADDON1_SIZE);
+  ok(!a1.foreignInstall);
 
-          Assert.equal(a1.sourceURI.spec,
-                       Services.io.newFileURI(do_get_addon("test_install1")).spec);
-          let difference = a1.installDate.getTime() - updateDate;
-          if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
-            do_throw("Add-on install time was out by " + difference + "ms");
-
-          difference = a1.updateDate.getTime() - updateDate;
-          if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
-            do_throw("Add-on update time was out by " + difference + "ms");
+  equal(a1.sourceURI.spec,
+        Services.io.newFileURI(XPIS.test_install1).spec);
+  let difference = a1.installDate.getTime() - updateDate;
+  if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
+    do_throw("Add-on install time was out by " + difference + "ms");
 
-          Assert.ok(a1.hasResource("install.rdf"));
-          Assert.ok(!a1.hasResource("foo.bar"));
+  difference = a1.updateDate.getTime() - updateDate;
+  if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
+    do_throw("Add-on update time was out by " + difference + "ms");
 
-          let uri2 = do_get_addon_root_uri(profileDir, "addon1@tests.mozilla.org");
-          Assert.equal(a1.getResourceURI("install.rdf").spec, uri2 + "install.rdf");
-          Assert.equal(a1.iconURL, uri2 + "icon.png");
-          Assert.equal(a1.icon64URL, uri2 + "icon64.png");
+  ok(a1.hasResource("install.rdf"));
+  ok(!a1.hasResource("foo.bar"));
+
+  let uri2 = do_get_addon_root_uri(profileDir, "addon1@tests.mozilla.org");
+  equal(a1.getResourceURI("install.rdf").spec, uri2 + "install.rdf");
+  equal(a1.iconURL, uri2 + "icon.png");
+  equal(a1.icon64URL, uri2 + "icon64.png");
 
-          // Ensure that extension bundle (or icon if unpacked) has updated
-          // lastModifiedDate.
-          let testURI = a1.getResourceURI(TEST_UNPACKED ? "icon.png" : "");
-          let testFile = testURI.QueryInterface(Ci.nsIFileURL).file;
-          Assert.ok(testFile.exists());
-          difference = testFile.lastModifiedTime - Date.now();
-          Assert.ok(Math.abs(difference) < MAX_TIME_DIFFERENCE);
+  // Ensure that extension bundle (or icon if unpacked) has updated
+  // lastModifiedDate.
+  let testURI = a1.getResourceURI(TEST_UNPACKED ? "icon.png" : "");
+  let testFile = testURI.QueryInterface(Ci.nsIFileURL).file;
+  ok(testFile.exists());
+  difference = testFile.lastModifiedTime - Date.now();
+  ok(Math.abs(difference) < MAX_TIME_DIFFERENCE);
 
-          a1.uninstall();
-          let { id, version } = a1;
-          restartManager();
-          do_check_not_in_crash_annotation(id, version);
-
-          executeSoon(run_test_2);
-        }));
-      });
-    }));
-  });
-}
+  a1.uninstall();
+  let { id, version } = a1;
+  await promiseRestartManager();
+  do_check_not_in_crash_annotation(id, version);
+});
 
 // Tests that an install from a url downloads.
-function run_test_2() {
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Test 2");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
-    Assert.equal(install.iconURL, null);
-    Assert.equal(install.sourceURI.spec, url);
-
-    AddonManager.getAllInstalls(function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
+add_task(async function test_2() {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", null, "Test 2", null, "1.0");
+  notEqual(install, null);
+  equal(install.version, "1.0");
+  equal(install.name, "Test 2");
+  equal(install.state, AddonManager.STATE_AVAILABLE);
+  equal(install.iconURL, null);
+  equal(install.sourceURI.spec, url);
 
-      prepare_test({}, [
-        "onDownloadStarted",
-        "onDownloadEnded",
-      ], check_test_2);
+  let activeInstalls = await AddonManager.getAllInstalls();
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
 
-      install.addListener({
-        onDownloadProgress() {
-          executeSoon(function() {
-            Cu.forceGC();
-          });
-        }
-      });
-
-      install.install();
+  install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+    ], install1 => {
+      resolve(install1);
+      return false;
     });
-  }, "application/x-xpinstall", null, "Test 2", null, "1.0");
-}
 
-function check_test_2(install) {
-  ensure_test_completed();
-  Assert.equal(install.version, "2.0");
-  Assert.equal(install.name, "Real Test 2");
-  Assert.equal(install.state, AddonManager.STATE_DOWNLOADED);
-  Assert.equal(install.addon.install, install);
-  Assert.ok(hasFlag(install.addon.operationsRequiringRestart,
-                    AddonManager.OP_NEEDS_RESTART_INSTALL));
-  Assert.equal(install.iconURL, null);
+    install.addListener({
+      onDownloadProgress() {
+        executeSoon(function() {
+          Cu.forceGC();
+        });
+      }
+    });
+
+    install.install();
+  });
 
-  // Pause the install here and start it again in run_test_3
-  executeSoon(function() { run_test_3(install); });
-  return false;
-}
+  ensure_test_completed();
+  equal(install.version, "2.0");
+  equal(install.name, "Real Test 2");
+  equal(install.state, AddonManager.STATE_DOWNLOADED);
+  equal(install.addon.install, install);
+  equal(install.iconURL, null);
 
-// Tests that the downloaded XPI installs ok
-function run_test_3(install) {
-  prepare_test({
-    "addon2@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onInstallStarted",
-    "onInstallEnded",
-  ], check_test_3);
-  install.install();
-}
+  install = await new Promise(resolve => {
+    prepare_test({
+      "addon2@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled"
+      ]
+    }, [
+      "onInstallStarted",
+      "onInstallEnded",
+    ], resolve);
+    install.install();
+  });
 
-function check_test_3(aInstall) {
   // Make the pending install have a sensible date
   let updateDate = Date.now();
-  let extURI = aInstall.addon.getResourceURI("");
-  let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file;
+  let extURI = install.addon.getResourceURI("");
+  let ext = extURI.QueryInterface(Ci.nsIFileURL).file;
   setExtensionModifiedTime(ext, updateDate);
 
   ensure_test_completed();
-  AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(async function(olda2) {
-    Assert.equal(olda2, null);
-    await promiseRestartManager();
+  let olda2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(olda2);
 
-    AddonManager.getAllInstalls(function(installs) {
-      Assert.equal(installs, 0);
+  await promiseRestartManager();
+
+  let installs = await AddonManager.getAllInstalls();
+  equal(installs, 0);
 
-      AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-        Assert.notEqual(a2, null);
-        Assert.notEqual(a2.syncGUID, null);
-        Assert.equal(a2.type, "extension");
-        Assert.equal(a2.version, "2.0");
-        Assert.equal(a2.name, "Real Test 2");
-        Assert.ok(isExtensionInAddonsList(profileDir, a2.id));
-        Assert.ok(do_get_addon("test_install2_1").exists());
-        do_check_in_crash_annotation(a2.id, a2.version);
-        Assert.equal(a2.sourceURI.spec,
-                     "http://localhost:" + gPort + "/addons/test_install2_1.xpi");
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  notEqual(a2, null);
+  notEqual(a2.syncGUID, null);
+  equal(a2.type, "extension");
+  equal(a2.version, "2.0");
+  equal(a2.name, "Real Test 2");
+  ok(isExtensionInBootstrappedList(profileDir, a2.id));
+  ok(XPIS.test_install2_1.exists());
+  do_check_in_crash_annotation(a2.id, a2.version);
+  equal(a2.sourceURI.spec,
+               "http://example.com/addons/test_install2_1.xpi");
 
-        let difference = a2.installDate.getTime() - updateDate;
-        if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
-          do_throw("Add-on install time was out by " + difference + "ms");
-
-        difference = a2.updateDate.getTime() - updateDate;
-        if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
-          do_throw("Add-on update time was out by " + difference + "ms");
+  let difference = a2.installDate.getTime() - updateDate;
+  if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
+    do_throw("Add-on install time was out by " + difference + "ms");
 
-        gInstallDate = a2.installDate.getTime();
+  difference = a2.updateDate.getTime() - updateDate;
+  if (Math.abs(difference) > MAX_TIME_DIFFERENCE)
+    do_throw("Add-on update time was out by " + difference + "ms");
 
-        run_test_4();
-      });
-    });
-  }));
-}
+  gInstallDate = a2.installDate.getTime();
+});
 
 // Tests that installing a new version of an existing add-on works
-function run_test_4() {
+add_task(async function test_4() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install2_2.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", null, "Test 3", null, "3.0");
+  ensure_test_completed();
 
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "3.0");
-    Assert.equal(install.name, "Test 3");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
+  notEqual(install, null);
+  equal(install.version, "3.0");
+  equal(install.name, "Test 3");
+  equal(install.state, AddonManager.STATE_AVAILABLE);
 
-    AddonManager.getAllInstalls(function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
-      Assert.equal(install.existingAddon, null);
+  let activeInstalls = await AddonManager.getAllInstalls();
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
+  equal(install.existingAddon, null);
 
-      prepare_test({}, [
-        "onDownloadStarted",
-        "onDownloadEnded",
-      ], check_test_4);
-      install.install();
+  install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+    ], install1 => {
+      resolve(install1);
+      return false;
     });
-  }, "application/x-xpinstall", null, "Test 3", null, "3.0");
-}
+    install.install();
+  });
 
-function check_test_4(install) {
   ensure_test_completed();
 
-  Assert.equal(install.version, "3.0");
-  Assert.equal(install.name, "Real Test 3");
-  Assert.equal(install.state, AddonManager.STATE_DOWNLOADED);
-  Assert.ok(install.existingAddon);
-  Assert.equal(install.existingAddon.id, "addon2@tests.mozilla.org");
-  Assert.equal(install.addon.install, install);
-  Assert.ok(hasFlag(install.addon.operationsRequiringRestart,
-                    AddonManager.OP_NEEDS_RESTART_INSTALL));
-
-  run_test_5();
-  // Installation will continue when there is nothing returned.
-}
+  equal(install.version, "3.0");
+  equal(install.name, "Real Test 3");
+  equal(install.state, AddonManager.STATE_DOWNLOADED);
+  ok(install.existingAddon);
+  equal(install.existingAddon.id, "addon2@tests.mozilla.org");
+  equal(install.addon.install, install);
 
-// Continue installing the new version
-function run_test_5() {
-  prepare_test({
-    "addon2@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onInstallStarted",
-    "onInstallEnded",
-  ], check_test_5);
-}
+  // Installation will continue when there is nothing returned.
+  install = await new Promise(resolve => {
+    prepare_test({
+      "addon2@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled",
+      ]
+    }, [
+      "onInstallStarted",
+      "onInstallEnded",
+    ], resolve);
+    install.install();
+  });
 
-function check_test_5(install) {
   ensure_test_completed();
 
-  Assert.equal(install.existingAddon.pendingUpgrade.install, install);
-
-  AddonManager.getAddonByID("addon2@tests.mozilla.org", function(olda2) {
-    Assert.notEqual(olda2, null);
-    Assert.ok(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE));
+  await promiseRestartManager();
 
-    AddonManager.getInstallsByTypes(null, callback_soon(function(installs) {
-      Assert.equal(installs.length, 1);
-      Assert.equal(installs[0].addon, olda2.pendingUpgrade);
-      restartManager();
-
-      AddonManager.getInstallsByTypes(null, function(installs2) {
-        Assert.equal(installs2.length, 0);
+  let installs2 = await AddonManager.getInstallsByTypes(null);
+  equal(installs2.length, 0);
 
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.notEqual(a2, null);
-          Assert.equal(a2.type, "extension");
-          Assert.equal(a2.version, "3.0");
-          Assert.equal(a2.name, "Real Test 3");
-          Assert.ok(a2.isActive);
-          Assert.ok(isExtensionInAddonsList(profileDir, a2.id));
-          Assert.ok(do_get_addon("test_install2_2").exists());
-          do_check_in_crash_annotation(a2.id, a2.version);
-          Assert.equal(a2.sourceURI.spec,
-                       "http://localhost:" + gPort + "/addons/test_install2_2.xpi");
-          Assert.ok(!a2.foreignInstall);
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  notEqual(a2, null);
+  equal(a2.type, "extension");
+  equal(a2.version, "3.0");
+  equal(a2.name, "Real Test 3");
+  ok(a2.isActive);
+  ok(isExtensionInBootstrappedList(profileDir, a2.id));
+  ok(XPIS.test_install2_2.exists());
+  do_check_in_crash_annotation(a2.id, a2.version);
+  equal(a2.sourceURI.spec,
+               "http://example.com/addons/test_install2_2.xpi");
+  ok(!a2.foreignInstall);
 
-          Assert.equal(a2.installDate.getTime(), gInstallDate);
-          // Update date should be later (or the same if this test is too fast)
-          Assert.ok(a2.installDate <= a2.updateDate);
+  equal(a2.installDate.getTime(), gInstallDate);
+  // Update date should be later (or the same if this test is too fast)
+  ok(a2.installDate <= a2.updateDate);
 
-          a2.uninstall();
-          executeSoon(run_test_6);
-        });
-      });
-    }));
-  });
-}
+  a2.uninstall();
+});
 
 // Tests that an install that requires a compatibility update works
-function run_test_6() {
-  restartManager();
+add_task(async function test_6() {
+  await promiseRestartManager();
 
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install3.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", null, "Real Test 4", null, "1.0");
+  ensure_test_completed();
 
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Real Test 4");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
+  notEqual(install, null);
+  equal(install.version, "1.0");
+  equal(install.name, "Real Test 4");
+  equal(install.state, AddonManager.STATE_AVAILABLE);
 
-    AddonManager.getInstallsByTypes(null, function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
+  let activeInstalls = await AddonManager.getInstallsByTypes(null);
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
 
-      prepare_test({}, [
-        "onDownloadStarted",
-        "onDownloadEnded",
-      ], check_test_6);
-      install.install();
+  install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+    ], install1 => {
+      resolve(install1);
+      return false;
     });
-  }, "application/x-xpinstall", null, "Real Test 4", null, "1.0");
-}
+    install.install();
+  });
 
-function check_test_6(install) {
   ensure_test_completed();
-  Assert.equal(install.version, "1.0");
-  Assert.equal(install.name, "Real Test 4");
-  Assert.equal(install.state, AddonManager.STATE_DOWNLOADED);
-  Assert.equal(install.existingAddon, null);
-  Assert.ok(!install.addon.appDisabled);
-  run_test_7();
-  return true;
-}
+  equal(install.version, "1.0");
+  equal(install.name, "Real Test 4");
+  equal(install.state, AddonManager.STATE_DOWNLOADED);
+  equal(install.existingAddon, null);
+  ok(!install.addon.appDisabled);
 
-// Continue the install
-function run_test_7() {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onInstallStarted",
-    "onInstallEnded",
-  ], check_test_7);
-}
+  // Continue the install
+  await new Promise(resolve => {
+    prepare_test({
+      "addon3@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled",
+      ]
+    }, [
+      "onInstallStarted",
+      "onInstallEnded",
+    ], resolve);
+    install.install();
+  });
 
-function check_test_7() {
   ensure_test_completed();
-  AddonManager.getAddonByID("addon3@tests.mozilla.org", callback_soon(async function(olda3) {
-    Assert.equal(olda3, null);
-    await promiseRestartManager();
+
+  await promiseRestartManager();
 
-    AddonManager.getAllInstalls(function(installs) {
-      Assert.equal(installs, 0);
+  let installs = await AddonManager.getAllInstalls();
+  equal(installs, 0);
 
-      AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) {
-        Assert.notEqual(a3, null);
-        Assert.notEqual(a3.syncGUID, null);
-        Assert.equal(a3.type, "extension");
-        Assert.equal(a3.version, "1.0");
-        Assert.equal(a3.name, "Real Test 4");
-        Assert.ok(a3.isActive);
-        Assert.ok(!a3.appDisabled);
-        Assert.ok(isExtensionInAddonsList(profileDir, a3.id));
-        Assert.ok(do_get_addon("test_install3").exists());
-        a3.uninstall();
-        executeSoon(run_test_8);
-      });
-    });
-  }));
-}
+  let a3 = await AddonManager.getAddonByID("addon3@tests.mozilla.org");
+  notEqual(a3, null);
+  notEqual(a3.syncGUID, null);
+  equal(a3.type, "extension");
+  equal(a3.version, "1.0");
+  equal(a3.name, "Real Test 4");
+  ok(a3.isActive);
+  ok(!a3.appDisabled);
+  ok(isExtensionInBootstrappedList(profileDir, a3.id));
+  ok(XPIS.test_install3.exists());
+  a3.uninstall();
+});
 
-function run_test_8() {
-  restartManager();
+add_task(async function test_8() {
+  await promiseRestartManager();
 
   AddonManager.addInstallListener(InstallListener);
   AddonManager.addAddonListener(AddonListener);
 
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  AddonManager.getInstallForFile(do_get_addon("test_install3"), function(install) {
-    Assert.ok(install.addon.isCompatible);
+  let install = await AddonManager.getInstallForFile(XPIS.test_install3);
+  ok(install.addon.isCompatible);
 
+  await new Promise(resolve => {
     prepare_test({
       "addon3@tests.mozilla.org": [
-        "onInstalling"
+        ["onInstalling", false],
+        "onInstalled",
       ]
     }, [
       "onInstallStarted",
       "onInstallEnded",
-    ], callback_soon(check_test_8));
+    ], resolve);
     install.install();
   });
-}
 
-async function check_test_8() {
   await promiseRestartManager();
 
-  AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) {
-    Assert.notEqual(a3, null);
-    Assert.notEqual(a3.syncGUID, null);
-    Assert.equal(a3.type, "extension");
-    Assert.equal(a3.version, "1.0");
-    Assert.equal(a3.name, "Real Test 4");
-    Assert.ok(a3.isActive);
-    Assert.ok(!a3.appDisabled);
-    Assert.ok(isExtensionInAddonsList(profileDir, a3.id));
-    Assert.ok(do_get_addon("test_install3").exists());
-    a3.uninstall();
-    executeSoon(run_test_9);
-  });
-}
+  let a3 = await AddonManager.getAddonByID("addon3@tests.mozilla.org");
+  notEqual(a3, null);
+  notEqual(a3.syncGUID, null);
+  equal(a3.type, "extension");
+  equal(a3.version, "1.0");
+  equal(a3.name, "Real Test 4");
+  ok(a3.isActive);
+  ok(!a3.appDisabled);
+  ok(isExtensionInBootstrappedList(profileDir, a3.id));
+  ok(XPIS.test_install3.exists());
+  a3.uninstall();
+});
 
 // Test that after cancelling a download it is removed from the active installs
-function run_test_9() {
-  restartManager();
+add_task(async function test_9() {
+  await promiseRestartManager();
 
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
-
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Real Test 4");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
-
-    AddonManager.getInstallsByTypes(null, function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
-
-      prepare_test({}, [
-        "onDownloadStarted",
-        "onDownloadEnded",
-      ], check_test_9);
-      install.install();
-    });
-  }, "application/x-xpinstall", null, "Real Test 4", null, "1.0");
-}
-
-function check_test_9(install) {
-  prepare_test({}, [
-    "onDownloadCancelled"
-  ], function() {
-    let file = install.file;
-
-    // Allow the file removal to complete
-    executeSoon(function() {
-      AddonManager.getAllInstalls(function(activeInstalls) {
-        Assert.equal(activeInstalls.length, 0);
-        Assert.ok(!file.exists());
-
-        run_test_10();
-      });
-    });
-  });
-
-  install.cancel();
-}
-
-// Tests that after cancelling a pending install it is removed from the active
-// installs
-function run_test_10() {
-  prepare_test({ }, [
-    "onNewInstall"
-  ]);
-
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
-
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Real Test 4");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
-
-    AddonManager.getInstallsByTypes(null, function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
-
-      prepare_test({
-        "addon3@tests.mozilla.org": [
-          "onInstalling"
-        ]
-      }, [
-        "onDownloadStarted",
-        "onDownloadEnded",
-        "onInstallStarted",
-        "onInstallEnded"
-      ], check_test_10);
-      install.install();
-    });
-  }, "application/x-xpinstall", null, "Real Test 4", null, "1.0");
-}
-
-function check_test_10(install) {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  }, [
-    "onInstallCancelled"
-  ]);
-
-  install.cancel();
-
+  let url = "http://example.com/addons/test_install3.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", null, "Real Test 4", null, "1.0");
   ensure_test_completed();
 
-  AddonManager.getAllInstalls(callback_soon(function(activeInstalls) {
-    Assert.equal(activeInstalls.length, 0);
-
-    restartManager();
-
-    // Check that the install did not complete
-    AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) {
-      Assert.equal(a3, null);
-
-      executeSoon(run_test_11);
-    });
-  }));
-}
-
-function run_test_11() {
-  // Tests 11 and 12 were removed, to avoid churn of renumbering,
-  // just jump ahead to 13 here
-  run_test_13();
-}
-
+  notEqual(install, null);
+  equal(install.version, "1.0");
+  equal(install.name, "Real Test 4");
+  equal(install.state, AddonManager.STATE_AVAILABLE);
 
-// Tests that cancelling an upgrade leaves the original add-on's pendingOperations
-// correct
-function run_test_13() {
-  restartManager();
-
-  installAllFiles([do_get_addon("test_install2_1")], function() {
-    restartManager();
-
-    prepare_test({ }, [
-      "onNewInstall"
-    ]);
-
-    let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi";
-    AddonManager.getInstallForURL(url, function(install) {
-      ensure_test_completed();
-
-      Assert.notEqual(install, null);
-      Assert.equal(install.version, "3.0");
-      Assert.equal(install.name, "Test 3");
-      Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
-
-      AddonManager.getAllInstalls(function(activeInstalls) {
-        Assert.equal(activeInstalls.length, 1);
-        Assert.equal(activeInstalls[0], install);
-        Assert.equal(install.existingAddon, null);
+  let activeInstalls = await AddonManager.getInstallsByTypes(null);
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
 
-        prepare_test({
-          "addon2@tests.mozilla.org": [
-            "onInstalling"
-          ]
-        }, [
-          "onDownloadStarted",
-          "onDownloadEnded",
-          "onInstallStarted",
-          "onInstallEnded",
-        ], check_test_13);
-        install.install();
-      });
-    }, "application/x-xpinstall", null, "Test 3", null, "3.0");
-  });
-}
-
-function check_test_13(install) {
-  ensure_test_completed();
-
-  Assert.equal(install.version, "3.0");
-  Assert.equal(install.name, "Real Test 3");
-  Assert.equal(install.state, AddonManager.STATE_INSTALLED);
-  Assert.notEqual(install.existingAddon, null);
-  Assert.equal(install.existingAddon.id, "addon2@tests.mozilla.org");
-  Assert.equal(install.addon.install, install);
-
-  AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(olda2) {
-    Assert.notEqual(olda2, null);
-    Assert.ok(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE));
-    Assert.equal(olda2.pendingUpgrade, install.addon);
+  install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+    ], () => {
+      prepare_test({}, [
+        "onDownloadCancelled"
+      ], resolve);
 
-    Assert.ok(hasFlag(install.addon.pendingOperations,
-                      AddonManager.PENDING_INSTALL));
+      install.cancel();
+    });
 
-    prepare_test({
-      "addon2@tests.mozilla.org": [
-        "onOperationCancelled"
-      ]
-    }, [
-      "onInstallCancelled",
-    ]);
-
-    install.cancel();
-
-    Assert.ok(!hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL));
+    install.install();
+  });
 
-    Assert.ok(!hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE));
-    Assert.equal(olda2.pendingUpgrade, null);
-
-    restartManager();
+  let file = install.file;
 
-    // Check that the upgrade did not complete
-    AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-      Assert.equal(a2.version, "2.0");
-
-      a2.uninstall();
-
-      executeSoon(run_test_14);
-    });
-  }));
-}
+  // Allow the file removal to complete
+  activeInstalls = await AddonManager.getAllInstalls();
+  equal(activeInstalls.length, 0);
+  ok(!file.exists());
+});
 
 // Check that cancelling the install from onDownloadStarted actually cancels it
-function run_test_14() {
-  restartManager();
+add_task(async function test_14() {
+  await promiseRestartManager();
 
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  ensure_test_completed();
 
-    Assert.equal(install.file, null);
+  equal(install.file, null);
 
+  install = await new Promise(resolve => {
     prepare_test({ }, [
       "onDownloadStarted"
-    ], check_test_14);
+    ], resolve);
     install.install();
-  }, "application/x-xpinstall");
-}
-
-function check_test_14(install) {
-  prepare_test({ }, [
-    "onDownloadCancelled"
-  ], function() {
-    let file = install.file;
-
-    install.addListener({
-      onDownloadProgress() {
-        do_throw("Download should not have continued");
-      },
-      onDownloadEnded() {
-        do_throw("Download should not have continued");
-      }
-    });
-
-    // Allow the listener to return to see if it continues downloading. The
-    // The listener only really tests if we give it time to see progress, the
-    // file check isn't ideal either
-    executeSoon(function() {
-      Assert.ok(!file.exists());
-
-      run_test_15();
-    });
   });
 
   // Wait for the channel to be ready to cancel
   executeSoon(function() {
     install.cancel();
   });
-}
+
+  await new Promise(resolve => {
+    prepare_test({ }, [
+      "onDownloadCancelled"
+    ], resolve);
+  });
+
+  let file = install.file;
+
+  install.addListener({
+    onDownloadProgress() {
+      do_throw("Download should not have continued");
+    },
+    onDownloadEnded() {
+      do_throw("Download should not have continued");
+    }
+  });
+
+  // Allow the listener to return to see if it continues downloading. The
+  // The listener only really tests if we give it time to see progress, the
+  // file check isn't ideal either
+  ok(!file.exists());
+});
 
 // Checks that cancelling the install from onDownloadEnded actually cancels it
-function run_test_15() {
+add_task(async function test_15() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  ensure_test_completed();
 
-    Assert.equal(install.file, null);
+  equal(install.file, null);
 
+  await new Promise(resolve => {
     prepare_test({ }, [
       "onDownloadStarted",
       "onDownloadEnded"
-    ], check_test_15);
-    install.install();
-  }, "application/x-xpinstall");
-}
+    ], () => {
+      prepare_test({ }, [
+        "onDownloadCancelled"
+      ]);
 
-function check_test_15(install) {
-  prepare_test({ }, [
-    "onDownloadCancelled"
-  ]);
-
-  install.cancel();
+      install.cancel();
+      resolve();
+    });
+    install.install();
+  });
 
   ensure_test_completed();
 
   install.addListener({
     onInstallStarted() {
       do_throw("Install should not have continued");
     }
   });
-
-  // Allow the listener to return to see if it starts installing
-  executeSoon(run_test_16);
-}
+});
 
 // Verify that the userDisabled value carries over to the upgrade by default
-function run_test_16() {
-  restartManager();
+add_task(async function test_16() {
+  await promiseRestartManager();
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  await new Promise(resolve => {
     aInstall.addListener({
       onInstallStarted() {
-        Assert.ok(!aInstall.addon.userDisabled);
+        ok(!aInstall.addon.userDisabled);
         aInstall.addon.userDisabled = true;
       },
 
       onInstallEnded() {
-       executeSoon(function install2_1_ended() {
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.ok(a2.userDisabled);
-          Assert.ok(!a2.isActive);
-
-          let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi";
-          AddonManager.getInstallForURL(url_2, function(aInstall_2) {
-            aInstall_2.addListener({
-              onInstallEnded() {
-               executeSoon(function install2_2_ended() {
-                Assert.ok(aInstall_2.addon.userDisabled);
-
-                restartManager();
-
-                AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) {
-                  Assert.ok(a2_2.userDisabled);
-                  Assert.ok(!a2_2.isActive);
-
-                  a2_2.uninstall();
-                  executeSoon(run_test_17);
-                });
-               });
-              }
-            });
-            aInstall_2.install();
-          }, "application/x-xpinstall");
-        });
-       });
+        resolve();
       }
     });
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+
+  await promiseRestartManager();
+
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(a2.userDisabled);
+  ok(!a2.isActive);
+
+  let url_2 = "http://example.com/addons/test_install2_2.xpi";
+  let aInstall_2 = await AddonManager.getInstallForURL(url_2, null, "application/x-xpinstall");
+  await new Promise(resolve => {
+    aInstall_2.addListener({
+      onInstallEnded() {
+        resolve();
+      }
+    });
+    aInstall_2.install();
+  });
+
+  ok(aInstall_2.addon.userDisabled);
+
+  await promiseRestartManager();
+
+  let a2_2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(a2_2.userDisabled);
+  ok(!a2_2.isActive);
+
+  a2_2.uninstall();
+});
 
 // Verify that changing the userDisabled value before onInstallEnded works
-function run_test_17() {
-  restartManager();
+add_task(async function test_17() {
+  await promiseRestartManager();
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  await new Promise(resolve => {
     aInstall.addListener({
       onInstallEnded() {
-       executeSoon(function install2_1_ended2() {
-        Assert.ok(!aInstall.addon.userDisabled);
-
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.ok(!a2.userDisabled);
-          Assert.ok(a2.isActive);
-
-          let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi";
-          AddonManager.getInstallForURL(url_2, function(aInstall_2) {
-            aInstall_2.addListener({
-              onInstallStarted() {
-                Assert.ok(!aInstall_2.addon.userDisabled);
-                aInstall_2.addon.userDisabled = true;
-              },
-
-              onInstallEnded() {
-               executeSoon(function install2_2_ended2() {
-                restartManager();
-
-                AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) {
-                  Assert.ok(a2_2.userDisabled);
-                  Assert.ok(!a2_2.isActive);
-
-                  a2_2.uninstall();
-                  executeSoon(run_test_18);
-                });
-               });
-              }
-            });
-            aInstall_2.install();
-          }, "application/x-xpinstall");
-        });
-       });
+        resolve();
       }
     });
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+
+  ok(!aInstall.addon.userDisabled);
+
+  await promiseRestartManager();
+
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(!a2.userDisabled);
+  ok(a2.isActive);
+
+  let url_2 = "http://example.com/addons/test_install2_2.xpi";
+  let aInstall_2 = await AddonManager.getInstallForURL(url_2, null, "application/x-xpinstall");
+
+  await new Promise(resolve => {
+    aInstall_2.addListener({
+      onInstallStarted() {
+        ok(!aInstall_2.addon.userDisabled);
+        aInstall_2.addon.userDisabled = true;
+      },
+
+      onInstallEnded() {
+        resolve();
+      }
+    });
+    aInstall_2.install();
+  });
+  await promiseRestartManager();
+
+  let a2_2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(a2_2.userDisabled);
+  ok(!a2_2.isActive);
+
+  a2_2.uninstall();
+});
 
 // Verify that changing the userDisabled value before onInstallEnded works
-function run_test_18() {
-  restartManager();
+add_task(async function test_18() {
+  await promiseRestartManager();
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  await new Promise(resolve => {
     aInstall.addListener({
       onInstallStarted() {
-        Assert.ok(!aInstall.addon.userDisabled);
+        ok(!aInstall.addon.userDisabled);
         aInstall.addon.userDisabled = true;
       },
 
       onInstallEnded() {
-       executeSoon(function install_2_1_ended3() {
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.ok(a2.userDisabled);
-          Assert.ok(!a2.isActive);
-
-          let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi";
-          AddonManager.getInstallForURL(url_2, function(aInstall_2) {
-            aInstall_2.addListener({
-              onInstallStarted() {
-                Assert.ok(aInstall_2.addon.userDisabled);
-                aInstall_2.addon.userDisabled = false;
-              },
-
-              onInstallEnded() {
-               executeSoon(function install_2_2_ended3() {
-                restartManager();
-
-                AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) {
-                  Assert.ok(!a2_2.userDisabled);
-                  Assert.ok(a2_2.isActive);
-
-                  a2_2.uninstall();
-                  executeSoon(run_test_18_1);
-                });
-               });
-              }
-            });
-            aInstall_2.install();
-          }, "application/x-xpinstall");
-        });
-       });
+        resolve();
       }
     });
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+
+  await promiseRestartManager();
+
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(a2.userDisabled);
+  ok(!a2.isActive);
+
+  let url_2 = "http://example.com/addons/test_install2_2.xpi";
+  let aInstall_2 = await AddonManager.getInstallForURL(url_2, null, "application/x-xpinstall");
+  await new Promise(resolve => {
+    aInstall_2.addListener({
+      onInstallStarted() {
+        ok(aInstall_2.addon.userDisabled);
+        aInstall_2.addon.userDisabled = false;
+      },
+
+      onInstallEnded() {
+        resolve();
+      }
+    });
+    aInstall_2.install();
+  });
+
+  await promiseRestartManager();
+
+  let a2_2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  ok(!a2_2.userDisabled);
+  ok(a2_2.isActive);
+
+  a2_2.uninstall();
+});
 
 
 // Checks that metadata is not stored if the pref is set to false
-function run_test_18_1() {
-  restartManager();
+add_task(async function test_18_1() {
+  await promiseRestartManager();
 
   Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true);
   Services.prefs.setCharPref(PREF_GETADDONS_BYIDS,
-                             "http://localhost:" + gPort + "/data/test_install_addons.json");
+                             "http://example.com/data/test_install_addons.json");
   Services.prefs.setCharPref(PREF_COMPAT_OVERRIDES,
-                             "http://localhost:" + gPort + "/data/test_install_compat.json");
+                             "http://example.com/data/test_install_compat.json");
 
   Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", false);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+
+  let addon = await new Promise(resolve => {
     aInstall.addListener({
       onInstallEnded(unused, aAddon) {
-       executeSoon(function test18_1_install_ended() {
-        Assert.notEqual(aAddon.fullDescription, "Repository description");
-
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.notEqual(a2.fullDescription, "Repository description");
-
-          a2.uninstall();
-          executeSoon(run_test_19);
-        });
-       });
+        resolve(aAddon);
       }
     });
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+
+  notEqual(addon.fullDescription, "Repository description");
+
+  await promiseRestartManager();
+
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  notEqual(a2.fullDescription, "Repository description");
+
+  a2.uninstall();
+});
 
 // Checks that metadata is downloaded for new installs and is visible before and
 // after restart
-function run_test_19() {
-  restartManager();
+add_task(async function test_19() {
+  await promiseRestartManager();
   Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", true);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  await new Promise(resolve => {
     aInstall.addListener({
       onInstallEnded(unused, aAddon) {
-       executeSoon(function test19_install_ended() {
-        Assert.equal(aAddon.fullDescription, "Repository description");
-
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.equal(a2.fullDescription, "Repository description");
-
-          a2.uninstall();
-          executeSoon(run_test_20);
-        });
-       });
-      }
-    });
-    aInstall.install();
-  }, "application/x-xpinstall");
-}
-
-// Do the same again to make sure it works when the data is already in the cache
-function run_test_20() {
-  restartManager();
-
-  let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    aInstall.addListener({
-      onInstallEnded(unused, aAddon) {
-       executeSoon(function test20_install_ended() {
-        Assert.equal(aAddon.fullDescription, "Repository description");
-
-        restartManager();
-
-        AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-          Assert.equal(a2.fullDescription, "Repository description");
-
-          a2.uninstall();
-          executeSoon(run_test_21);
-        });
-       });
+        resolve(aAddon);
       }
     });
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
 
-// Verify that installing an add-on that is already pending install cancels the
-// first install
-function run_test_21() {
-  restartManager();
-  Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", false);
+  let a1 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  equal(a1.fullDescription, "Repository description");
 
-  installAllFiles([do_get_addon("test_install2_1")], function() {
-    AddonManager.getAllInstalls(function(aInstalls) {
-      Assert.equal(aInstalls.length, 1);
+  await promiseRestartManager();
 
-      prepare_test({
-        "addon2@tests.mozilla.org": [
-          "onOperationCancelled",
-          "onInstalling"
-        ]
-      }, [
-        "onNewInstall",
-        "onDownloadStarted",
-        "onDownloadEnded",
-        "onInstallStarted",
-        "onInstallCancelled",
-        "onInstallEnded",
-      ], check_test_21);
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  equal(a2.fullDescription, "Repository description");
+
+  a2.uninstall();
+});
+
+// Do the same again to make sure it works when the data is already in the cache
+add_task(async function test_20() {
+  await promiseRestartManager();
 
-      let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi";
-      AddonManager.getInstallForURL(url, function(aInstall) {
-        aInstall.install();
-      }, "application/x-xpinstall");
+  let url = "http://example.com/addons/test_install2_1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  await new Promise(resolve => {
+    aInstall.addListener({
+      onInstallEnded(unused, aAddon) {
+        resolve(aAddon);
+      }
     });
+    aInstall.install();
   });
-}
-
-function check_test_21(aInstall) {
-  AddonManager.getAllInstalls(callback_soon(function(aInstalls) {
-    Assert.equal(aInstalls.length, 1);
-    Assert.equal(aInstalls[0], aInstall);
 
-    prepare_test({
-      "addon2@tests.mozilla.org": [
-        "onOperationCancelled"
-      ]
-    }, [
-      "onInstallCancelled",
-    ]);
+  let a1 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  equal(a1.fullDescription, "Repository description");
 
-    aInstall.cancel();
+  await promiseRestartManager();
 
-    ensure_test_completed();
-
-    restartManager();
+  let a2 = await AddonManager.getAddonByID("addon2@tests.mozilla.org");
+  equal(a2.fullDescription, "Repository description");
 
-    AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) {
-      Assert.equal(a2, null);
-
-      run_test_22();
-    });
-  }));
-}
+  a2.uninstall();
+});
 
 // Tests that an install can be restarted after being cancelled
-function run_test_22() {
+add_task(async function test_22() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install3.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  ensure_test_completed();
+
+  notEqual(aInstall, null);
+  equal(aInstall.state, AddonManager.STATE_AVAILABLE);
+
+  let install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+    ], install1 => {
+      prepare_test({}, [
+        "onDownloadCancelled"
+      ]);
+      aInstall.cancel();
+      resolve(install1);
+    });
+    aInstall.install();
+  });
+
+  ensure_test_completed();
 
-    Assert.notEqual(aInstall, null);
-    Assert.equal(aInstall.state, AddonManager.STATE_AVAILABLE);
+  await new Promise(resolve => {
+    prepare_test({
+      "addon3@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled"
+      ]
+    }, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+      "onInstallStarted",
+      "onInstallEnded"
+    ], resolve);
+
+    install.install();
+  });
+
+  ensure_test_completed();
 
+  AddonManager.removeAddonListener(AddonListener);
+  install.addon.uninstall();
+});
+
+// Tests that an install can be restarted after being cancelled when a hash
+// was provided
+add_task(async function test_23() {
+  prepare_test({ }, [
+    "onNewInstall"
+  ]);
+
+  let url = "http://example.com/addons/test_install3.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", do_get_file_hash(XPIS.test_install3));
+
+  ensure_test_completed();
+
+  notEqual(install, null);
+  equal(install.state, AddonManager.STATE_AVAILABLE);
+
+  await new Promise(resolve => {
     prepare_test({}, [
       "onDownloadStarted",
       "onDownloadEnded",
-    ], check_test_22);
+    ], () => {
+      prepare_test({}, [
+        "onDownloadCancelled"
+      ]);
+
+      install.cancel();
+      resolve();
+    });
+    install.install();
+  });
+
+  ensure_test_completed();
+
+  await new Promise(resolve => {
+    prepare_test({
+      "addon3@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled",
+      ]
+    }, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+      "onInstallStarted",
+      "onInstallEnded"
+    ], resolve);
+
+    install.install();
+  });
+
+  ensure_test_completed();
+
+  AddonManager.removeAddonListener(AddonListener);
+  install.addon.uninstall();
+});
+
+// Tests that an install with a bad hash can be restarted after it fails, though
+// it will only fail again
+add_task(async function test_24() {
+  prepare_test({ }, [
+    "onNewInstall"
+  ]);
+
+  let url = "http://example.com/addons/test_install3.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", "sha1:foo");
+  ensure_test_completed();
+
+  notEqual(aInstall, null);
+  equal(aInstall.state, AddonManager.STATE_AVAILABLE);
+
+  let install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadFailed",
+    ], resolve);
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+
+  await new Promise(resolve => {
+    prepare_test({ }, [
+      "onDownloadStarted",
+      "onDownloadFailed"
+    ], resolve);
+
+    install.install();
+  });
+});
 
-function check_test_22(aInstall) {
-  prepare_test({}, [
+// Tests that installs with a hash for a local file work
+add_task(async function test_25() {
+  prepare_test({ }, [
+    "onNewInstall"
+  ]);
+
+  let url = Services.io.newFileURI(XPIS.test_install3).spec;
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", do_get_file_hash(XPIS.test_install3));
+  ensure_test_completed();
+
+  notEqual(aInstall, null);
+  equal(aInstall.state, AddonManager.STATE_DOWNLOADED);
+  equal(aInstall.error, 0);
+
+  prepare_test({ }, [
     "onDownloadCancelled"
   ]);
 
   aInstall.cancel();
 
   ensure_test_completed();
-
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onDownloadStarted",
-    "onDownloadEnded",
-    "onInstallStarted",
-    "onInstallEnded"
-  ], finish_test_22);
-
-  aInstall.install();
-}
-
-function finish_test_22(aInstall) {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  }, [
-    "onInstallCancelled"
-  ]);
-
-  aInstall.cancel();
-
-  ensure_test_completed();
-
-  run_test_23();
-}
-
-// Tests that an install can be restarted after being cancelled when a hash
-// was provided
-function run_test_23() {
-  prepare_test({ }, [
-    "onNewInstall"
-  ]);
-
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    ensure_test_completed();
-
-    Assert.notEqual(aInstall, null);
-    Assert.equal(aInstall.state, AddonManager.STATE_AVAILABLE);
-
-    prepare_test({}, [
-      "onDownloadStarted",
-      "onDownloadEnded",
-    ], check_test_23);
-    aInstall.install();
-  }, "application/x-xpinstall", do_get_addon_hash("test_install3"));
-}
-
-function check_test_23(aInstall) {
-  prepare_test({}, [
-    "onDownloadCancelled"
-  ]);
-
-  aInstall.cancel();
-
-  ensure_test_completed();
-
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onDownloadStarted",
-    "onDownloadEnded",
-    "onInstallStarted",
-    "onInstallEnded"
-  ], finish_test_23);
+});
 
-  aInstall.install();
-}
-
-function finish_test_23(aInstall) {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  }, [
-    "onInstallCancelled"
-  ]);
-
-  aInstall.cancel();
-
-  ensure_test_completed();
-
-  run_test_24();
-}
-
-// Tests that an install with a bad hash can be restarted after it fails, though
-// it will only fail again
-function run_test_24() {
-  prepare_test({ }, [
-    "onNewInstall"
-  ]);
-
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    ensure_test_completed();
-
-    Assert.notEqual(aInstall, null);
-    Assert.equal(aInstall.state, AddonManager.STATE_AVAILABLE);
-
-    prepare_test({}, [
-      "onDownloadStarted",
-      "onDownloadFailed",
-    ], check_test_24);
-    aInstall.install();
-  }, "application/x-xpinstall", "sha1:foo");
-}
-
-function check_test_24(aInstall) {
-  prepare_test({ }, [
-    "onDownloadStarted",
-    "onDownloadFailed"
-  ], run_test_25);
-
-  aInstall.install();
-}
-
-// Tests that installs with a hash for a local file work
-function run_test_25() {
-  prepare_test({ }, [
-    "onNewInstall"
-  ]);
-
-  let url = Services.io.newFileURI(do_get_addon("test_install3")).spec;
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    ensure_test_completed();
-
-    Assert.notEqual(aInstall, null);
-    Assert.equal(aInstall.state, AddonManager.STATE_DOWNLOADED);
-    Assert.equal(aInstall.error, 0);
-
-    prepare_test({ }, [
-      "onDownloadCancelled"
-    ]);
-
-    aInstall.cancel();
-
-    ensure_test_completed();
-
-    run_test_26();
-  }, "application/x-xpinstall", do_get_addon_hash("test_install3"));
-}
-
-function run_test_26() {
+add_task(async function test_26() {
   prepare_test({ }, [
     "onNewInstall",
     "onDownloadStarted",
     "onDownloadCancelled"
   ]);
 
-  let observerService = AM_Cc["@mozilla.org/network/http-activity-distributor;1"].
-                        getService(AM_Ci.nsIHttpActivityDistributor);
-  observerService.addObserver({
-    observeActivity(aChannel, aType, aSubtype, aTimestamp, aSizeData,
-                              aStringData) {
-      aChannel.QueryInterface(AM_Ci.nsIChannel);
-      // Wait for the final event for the redirected URL
-      if (aChannel.URI.spec != "http://localhost:" + gPort + "/addons/test_install1.xpi" ||
-          aType != AM_Ci.nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION ||
-          aSubtype != AM_Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE)
-        return;
+  let url = "http://example.com/redirect?/addons/test_install1.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
 
-      // Request should have been cancelled
-      Assert.equal(aChannel.status, Cr.NS_BINDING_ABORTED);
-
-      observerService.removeObserver(this);
+  await new Promise(resolve => {
+    let observerService = Cc["@mozilla.org/network/http-activity-distributor;1"].
+                          getService(Ci.nsIHttpActivityDistributor);
+    observerService.addObserver({
+      observeActivity(aChannel, aType, aSubtype, aTimestamp, aSizeData,
+                                aStringData) {
+        aChannel.QueryInterface(Ci.nsIChannel);
+        // Wait for the final event for the redirected URL
+        if (aChannel.URI.spec != "http://example.com/addons/test_install1.xpi" ||
+            aType != Ci.nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION ||
+            aSubtype != Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE)
+          return;
 
-      run_test_27();
-    }
-  });
+        // Request should have been cancelled
+        equal(aChannel.status, Cr.NS_BINDING_ABORTED);
+
+        observerService.removeObserver(this);
 
-  let url = "http://localhost:" + gPort + "/redirect?/addons/test_install1.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
+        resolve();
+      }
+    });
+
     aInstall.addListener({
       onDownloadProgress(aDownloadProgressInstall) {
         aDownloadProgressInstall.cancel();
       }
     });
 
     aInstall.install();
-  }, "application/x-xpinstall");
-}
+  });
+});
 
 
 // Tests that an install can be restarted during onDownloadCancelled after being
 // cancelled in mid-download
-function run_test_27() {
+add_task(async function test_27() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install3.xpi";
-  AddonManager.getInstallForURL(url, function(aInstall) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install3.xpi";
+  let aInstall = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall");
+  ensure_test_completed();
 
-    Assert.notEqual(aInstall, null);
-    Assert.equal(aInstall.state, AddonManager.STATE_AVAILABLE);
+  notEqual(aInstall, null);
+  equal(aInstall.state, AddonManager.STATE_AVAILABLE);
 
-    aInstall.addListener({
-      onDownloadProgress() {
-        aInstall.removeListener(this);
-        aInstall.cancel();
-      }
-    });
+  aInstall.addListener({
+    onDownloadProgress() {
+      aInstall.removeListener(this);
+      aInstall.cancel();
+    }
+  });
 
+  let install = await new Promise(resolve => {
     prepare_test({}, [
       "onDownloadStarted",
       "onDownloadCancelled",
-    ], check_test_27);
+    ], resolve);
     aInstall.install();
-  }, "application/x-xpinstall");
-}
-
-function check_test_27(aInstall) {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onInstalling"
-    ]
-  }, [
-    "onDownloadStarted",
-    "onDownloadEnded",
-    "onInstallStarted",
-    "onInstallEnded"
-  ], finish_test_27);
+  });
 
-  let file = aInstall.file;
-  aInstall.install();
-  Assert.notEqual(file.path, aInstall.file.path);
-  Assert.ok(!file.exists());
-}
+  install = await new Promise(resolve => {
+    prepare_test({
+      "addon3@tests.mozilla.org": [
+        ["onInstalling", false],
+        "onInstalled",
+      ]
+    }, [
+      "onDownloadStarted",
+      "onDownloadEnded",
+      "onInstallStarted",
+      "onInstallEnded"
+    ], resolve);
 
-function finish_test_27(aInstall) {
-  prepare_test({
-    "addon3@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  }, [
-    "onInstallCancelled"
-  ]);
-
-  aInstall.cancel();
+    let file = install.file;
+    install.install();
+    notEqual(file.path, install.file.path);
+    ok(!file.exists());
+  });
 
   ensure_test_completed();
 
-  run_test_29();
-}
+  AddonManager.removeAddonListener(AddonListener);
+  install.addon.uninstall();
+});
 
 // Tests that an install with a matching compatibility override has appDisabled
 // set correctly.
-function run_test_29() {
+add_task(async function test_29() {
   Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true);
 
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  let url = "http://localhost:" + gPort + "/addons/test_install6.xpi";
-  AddonManager.getInstallForURL(url, function(install) {
-    ensure_test_completed();
+  let url = "http://example.com/addons/test_install6.xpi";
+  let install = await AddonManager.getInstallForURL(url, null, "application/x-xpinstall", null, "Addon Test 6", null, "1.0");
+  ensure_test_completed();
 
-    Assert.notEqual(install, null);
-    Assert.equal(install.version, "1.0");
-    Assert.equal(install.name, "Addon Test 6");
-    Assert.equal(install.state, AddonManager.STATE_AVAILABLE);
+  notEqual(install, null);
+  equal(install.version, "1.0");
+  equal(install.name, "Addon Test 6");
+  equal(install.state, AddonManager.STATE_AVAILABLE);
 
-    AddonManager.getInstallsByTypes(null, function(activeInstalls) {
-      Assert.equal(activeInstalls.length, 1);
-      Assert.equal(activeInstalls[0], install);
+  let activeInstalls = await AddonManager.getInstallsByTypes(null);
+  equal(activeInstalls.length, 1);
+  equal(activeInstalls[0], install);
 
-      prepare_test({}, [
-        "onDownloadStarted",
-        "onDownloadEnded"
-      ], check_test_29);
-      install.install();
+  install = await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadStarted",
+      "onDownloadEnded"
+    ], install2 => {
+      resolve(install2);
+      return false;
     });
-  }, "application/x-xpinstall", null, "Addon Test 6", null, "1.0");
-}
+    install.install();
+  });
 
-function check_test_29(install) {
   // ensure_test_completed();
-  Assert.equal(install.state, AddonManager.STATE_DOWNLOADED);
-  Assert.notEqual(install.addon, null);
-  Assert.ok(!install.addon.isCompatible);
-  Assert.ok(install.addon.appDisabled);
+  equal(install.state, AddonManager.STATE_DOWNLOADED);
+  notEqual(install.addon, null);
+  ok(!install.addon.isCompatible);
+  ok(install.addon.appDisabled);
 
-  prepare_test({}, [
-    "onDownloadCancelled"
-  ], run_test_30);
-  install.cancel();
-  return false;
-}
+  await new Promise(resolve => {
+    prepare_test({}, [
+      "onDownloadCancelled"
+    ], resolve);
+    install.cancel();
+  });
+});
 
 // Tests that a multi-package XPI with no add-ons inside shows up as a
 // corrupt file
-function run_test_30() {
+add_task(async function test_30() {
   prepare_test({ }, [
     "onNewInstall"
   ]);
 
-  AddonManager.getInstallForFile(do_get_addon("test_install7"), function(install) {
-    ensure_test_completed();
-
-    Assert.notEqual(install, null);
-    Assert.equal(install.state, AddonManager.STATE_DOWNLOAD_FAILED);
-    Assert.equal(install.error, AddonManager.ERROR_CORRUPT_FILE);
-
-    run_test_31();
-  });
-}
+  let install = await AddonManager.getInstallForFile(XPIS.test_install7);
+  ensure_test_completed();
 
-// Tests that a multi-package XPI with no valid add-ons inside shows up as a
-// corrupt file
-function run_test_31() {
-  prepare_test({ }, [
-    "onNewInstall"
-  ]);
-
-  AddonManager.getInstallForFile(do_get_addon("test_install8"), function(install) {
-    ensure_test_completed();
-
-    Assert.notEqual(install, null);
-    Assert.equal(install.state, AddonManager.STATE_DOWNLOAD_FAILED);
-    Assert.equal(install.error, AddonManager.ERROR_CORRUPT_FILE);
-
-    end_test();
-  });
-}
+  notEqual(install, null);
+  equal(install.state, AddonManager.STATE_DOWNLOAD_FAILED);
+  equal(install.error, AddonManager.ERROR_CORRUPT_FILE);
+});
--- a/toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_isDebuggable.js
@@ -1,36 +1,30 @@
 /* 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/.
  */
 
 var ADDONS = [
   "test_bootstrap2_1", // restartless addon
-  "test_bootstrap1_4", // old-school addon
-  "test_jetpack"       // sdk addon
 ];
 
 var IDS = [
-  "bootstrap1@tests.mozilla.org",
   "bootstrap2@tests.mozilla.org",
-  "jetpack@tests.mozilla.org"
 ];
 
 function run_test() {
   do_test_pending();
 
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
 
   startupManager();
   AddonManager.checkCompatibility = false;
 
   installAllFiles(ADDONS.map(do_get_addon), function() {
     restartManager();
 
-    AddonManager.getAddonsByIDs(IDS, function([a1, a2, a3]) {
-      Assert.equal(a1.isDebuggable, false);
-      Assert.equal(a2.isDebuggable, true);
-      Assert.equal(a3.isDebuggable, true);
+    AddonManager.getAddonsByIDs(IDS, function([a1]) {
+      Assert.equal(a1.isDebuggable, true);
       do_test_finished();
     });
   }, true);
 }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_migrate_state_prefs.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_migrate_state_prefs.js
@@ -19,26 +19,21 @@ function installExtension(id, data) {
 add_task(async function test_migrate_prefs() {
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "54");
 
   ok(!AddonTestUtils.addonStartup.exists(),
      "addonStartup.json.lz4 should not exist");
 
   const ID1 = "bootstrapped-enabled@xpcshell.mozilla.org";
   const ID2 = "bootstrapped-disabled@xpcshell.mozilla.org";
-  const ID3 = "restartful-enabled@xpcshell.mozilla.org";
-  const ID4 = "restartful-disabled@xpcshell.mozilla.org";
 
   let targetApplications = [{ id: "toolkit@mozilla.org", "minVersion": "0", "maxVersion": "*" }];
 
-  let file1 = await installExtension(ID1, { "install.rdf": { id: ID1, name: ID1, bootstrapped: true, version: "0.1", targetApplications } });
-  let file2 = await installExtension(ID2, { "install.rdf": { id: ID2, name: ID2, bootstrapped: true, version: "0.2", targetApplications } });
-
-  let file3 = await installExtension(ID3, { "install.rdf": { id: ID3, name: ID1, bootstrapped: false, version: "0.3", targetApplications } });
-  let file4 = await installExtension(ID4, { "install.rdf": { id: ID4, name: ID2, bootstrapped: false, version: "0.4", targetApplications } });
+  let file1 = await installExtension(ID1, { "install.rdf": { id: ID1, name: ID1, bootstrap: true, version: "0.1", targetApplications } });
+  let file2 = await installExtension(ID2, { "install.rdf": { id: ID2, name: ID2, bootstrap: true, version: "0.2", targetApplications } });
 
   function mt(file) {
     let f = file.clone();
     if (TEST_UNPACKED) {
       f.append("install.rdf");
     }
     return f.lastModifiedTime;
   }
@@ -50,18 +45,16 @@ add_task(async function test_migrate_pre
 
   // Remove the startup state file and add legacy prefs to replace it.
   AddonTestUtils.addonStartup.remove(false);
 
   Preferences.set("extensions.xpiState", JSON.stringify({
     "app-profile": {
       [ID1]: {e: true, d: file1.persistentDescriptor, v: "0.1", mt: mt(file1)},
       [ID2]: {e: false, d: file2.persistentDescriptor, v: "0.2", mt: mt(file2)},
-      [ID3]: {e: true, d: file3.persistentDescriptor, v: "0.3", mt: mt(file3)},
-      [ID4]: {e: false, d: file4.persistentDescriptor, v: "0.4", mt: mt(file4)},
     }
   }));
 
   Preferences.set("extensions.bootstrappedAddons", JSON.stringify({
     [ID1]: {
       version: "0.1",
       type: "extension",
       descriptor: file1.persistentDescriptor,
@@ -83,30 +76,16 @@ add_task(async function test_migrate_pre
 
   let addon2 = states.findAddon(ID2);
   ok(!addon2.enabled, "Addon 2 should not be enabled");
   ok(!addon2.bootstrapped, "Addon 2 should be bootstrapped, because that information is not stored in xpiStates");
   equal(addon2.version, "0.2", "Addon 2 has the correct version");
   equal(addon2.mtime, mt(file2), "Addon 2 has the correct timestamp");
   ok(!addon2.hasEmbeddedWebExtension, "Addon 2 no embedded WebExtension");
 
-  let addon3 = states.findAddon(ID3);
-  ok(addon3.enabled, "Addon 3 should be enabled");
-  ok(!addon3.bootstrapped, "Addon 3 should not be bootstrapped");
-  equal(addon3.version, "0.3", "Addon 3 has the correct version");
-  equal(addon3.mtime, mt(file3), "Addon 3 has the correct timestamp");
-  ok(!addon3.hasEmbeddedWebExtension, "Addon 3 no embedded WebExtension");
-
-  let addon4 = states.findAddon(ID4);
-  ok(!addon4.enabled, "Addon 4 should not be enabled");
-  ok(!addon4.bootstrapped, "Addon 4 should not be bootstrapped");
-  equal(addon4.version, "0.4", "Addon 4 has the correct version");
-  equal(addon4.mtime, mt(file4), "Addon 4 has the correct timestamp");
-  ok(!addon4.hasEmbeddedWebExtension, "Addon 4 no embedded WebExtension");
-
   // Check that legacy prefs and files have been removed.
   ok(!Preferences.has("extensions.xpiState"), "No xpiState pref left behind");
   ok(!Preferences.has("extensions.bootstrappedAddons"), "No bootstrappedAddons pref left behind");
   ok(!Preferences.has("extensions.enabledAddons"), "No enabledAddons pref left behind");
 
   let file = AddonTestUtils.profileDir.clone();
   file.append("extensions.ini");
   ok(!file.exists(), "No extensions.ini file left behind");
--- a/toolkit/mozapps/extensions/test/xpcshell/test_temporary.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_temporary.js
@@ -701,79 +701,16 @@ add_task(async function() {
   addon.uninstall();
 
   BootstrapMonitor.checkAddonNotInstalled(ID);
   BootstrapMonitor.checkAddonNotStarted(ID);
 
   await promiseRestartManager();
 });
 
-// Installing a temporary add-on over a non-restartless add-on should fail.
-add_task(async function() {
-  await promiseInstallAllFiles([do_get_addon("test_install1")], true);
-
-  let non_restartless_ID = "addon1@tests.mozilla.org";
-
-  BootstrapMonitor.checkAddonNotInstalled(non_restartless_ID);
-  BootstrapMonitor.checkAddonNotStarted(non_restartless_ID);
-
-  restartManager();
-
-  BootstrapMonitor.checkAddonNotInstalled(non_restartless_ID);
-  BootstrapMonitor.checkAddonNotStarted(non_restartless_ID);
-
-  let addon = await promiseAddonByID(non_restartless_ID);
-
-  // non-restartless add-on is installed and started
-  Assert.notEqual(addon, null);
-  Assert.equal(addon.id, non_restartless_ID);
-  Assert.equal(addon.version, "1.0");
-  Assert.equal(addon.name, "Test 1");
-  Assert.ok(addon.isCompatible);
-  Assert.ok(!addon.appDisabled);
-  Assert.ok(addon.isActive);
-  Assert.equal(addon.type, "extension");
-  Assert.equal(addon.signedState, mozinfo.addon_signing ? AddonManager.SIGNEDSTATE_PRIVILEGED : AddonManager.SIGNEDSTATE_NOT_REQUIRED);
-
-  let tempdir = gTmpD.clone();
-  writeInstallRDFToDir({
-    id: non_restartless_ID,
-    version: "2.0",
-    bootstrap: true,
-    unpack: true,
-    targetApplications: [{
-          id: "xpcshell@tests.mozilla.org",
-      minVersion: "1",
-      maxVersion: "1"
-        }],
-    name: "Test 1 (temporary)",
-  }, tempdir);
-
-  let unpacked_addon = tempdir.clone();
-  unpacked_addon.append(non_restartless_ID);
-
-  try {
-    await AddonManager.installTemporaryAddon(unpacked_addon);
-    do_throw("Installing over a non-restartless add-on should return"
-             + " a rejected promise");
-  } catch (err) {
-    Assert.equal(err.message,
-        "Non-restartless add-on with ID addon1@tests.mozilla.org is"
-        + " already installed");
-  }
-
-  unpacked_addon.remove(true);
-  addon.uninstall();
-
-  BootstrapMonitor.checkAddonNotInstalled(ID);
-  BootstrapMonitor.checkAddonNotStarted(ID);
-
-  await promiseRestartManager();
-});
-
 // Installing a temporary add-on when there is already a temporary
 // add-on should fail.
 add_task(async function() {
   await AddonManager.installTemporaryAddon(do_get_addon("test_bootstrap1_1"));
 
   let addon = await promiseAddonByID(ID);
 
   BootstrapMonitor.checkAddonInstalled(ID, "1.0");
--- a/toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
+++ b/toolkit/mozapps/extensions/test/xpcshell/test_undouninstall.js
@@ -9,27 +9,16 @@ const APP_SHUTDOWN                    = 
 const ADDON_DISABLE                   = 4;
 const ADDON_INSTALL                   = 5;
 const ADDON_UNINSTALL                 = 6;
 const ADDON_DOWNGRADE                 = 8;
 
 const ID = "undouninstall1@tests.mozilla.org";
 const INCOMPAT_ID = "incompatible@tests.mozilla.org";
 
-var addon1 = {
-  id: "addon1@tests.mozilla.org",
-  version: "1.0",
-  name: "Test 1",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
 
 const profileDir = gProfD.clone();
 profileDir.append("extensions");
 
 BootstrapMonitor.init();
 
 function getStartupReason(id) {
   let info = BootstrapMonitor.started.get(id);
@@ -61,208 +50,16 @@ function run_test() {
   createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
 
   startupManager();
   registerCleanupFunction(promiseShutdownManager);
 
   run_next_test();
 }
 
-add_task(async function installAddon() {
-  let olda1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.equal(olda1, null);
-
-  writeInstallRDFForExtension(addon1, profileDir);
-  await promiseRestartManager();
-
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(a1.isActive);
-  Assert.ok(!a1.userDisabled);
-  Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-  Assert.equal(a1.pendingOperations, 0);
-  do_check_in_crash_annotation(addon1.id, addon1.version);
-});
-
-// Uninstalling an add-on should work.
-add_task(async function uninstallAddon() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.equal(a1.pendingOperations, 0);
-  Assert.notEqual(a1.operationsRequiringRestart &
-                  AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0);
-  a1.uninstall(true);
-  Assert.ok(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
-  do_check_in_crash_annotation(addon1.id, addon1.version);
-
-  ensure_test_completed();
-
-  let list = await promiseAddonsWithOperationsByTypes(null);
-
-  Assert.equal(list.length, 1);
-  Assert.equal(list[0].id, "addon1@tests.mozilla.org");
-
-  await promiseRestartManager();
-
-  a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.equal(a1, null);
-  Assert.ok(!isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
-  do_check_not_in_crash_annotation(addon1.id, addon1.version);
-
-  var dest = profileDir.clone();
-  dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
-  Assert.ok(!dest.exists());
-  writeInstallRDFForExtension(addon1, profileDir);
-  await promiseRestartManager();
-});
-
-// Cancelling the uninstall should send onOperationCancelled
-add_task(async function cancelUninstall() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(a1.isActive);
-  Assert.ok(!a1.userDisabled);
-  Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-  Assert.equal(a1.pendingOperations, 0);
-  a1.uninstall(true);
-  Assert.ok(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
-
-  ensure_test_completed();
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  });
-  a1.cancelUninstall();
-  Assert.equal(a1.pendingOperations, 0);
-
-  ensure_test_completed();
-  await promiseRestartManager();
-
-  a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(a1.isActive);
-  Assert.ok(!a1.userDisabled);
-  Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-});
-
-// Uninstalling an item pending disable should still require a restart
-add_task(async function pendingDisableRequestRestart() {
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onDisabling"
-    ]
-  });
-  a1.userDisabled = true;
-  ensure_test_completed();
-
-  Assert.ok(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
-  Assert.ok(a1.isActive);
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-  a1.uninstall(true);
-
-  ensure_test_completed();
-
-  a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(hasFlag(AddonManager.PENDING_UNINSTALL, a1.pendingOperations));
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  });
-  a1.cancelUninstall();
-  ensure_test_completed();
-  Assert.ok(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
-
-  await promiseRestartManager();
-});
-
-// Test that uninstalling an inactive item should still allow cancelling
-add_task(async function uninstallInactiveIsCancellable() {
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(!a1.isActive);
-  Assert.ok(a1.userDisabled);
-  Assert.ok(!isExtensionInAddonsList(profileDir, a1.id));
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-  a1.uninstall(true);
-  ensure_test_completed();
-
-  a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(hasFlag(AddonManager.PENDING_UNINSTALL, a1.pendingOperations));
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onOperationCancelled"
-    ]
-  });
-  a1.cancelUninstall();
-  ensure_test_completed();
-
-  await promiseRestartManager();
-});
-
-// Test that an inactive item can be uninstalled
-add_task(async function uninstallInactive() {
-  let a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-
-  Assert.notEqual(a1, null);
-  Assert.ok(!a1.isActive);
-  Assert.ok(a1.userDisabled);
-  Assert.ok(!isExtensionInAddonsList(profileDir, a1.id));
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      [ "onUninstalling", false ],
-      "onUninstalled"
-    ]
-  });
-  a1.uninstall();
-  ensure_test_completed();
-
-  a1 = await promiseAddonByID("addon1@tests.mozilla.org");
-  Assert.equal(a1, null);
-});
-
 // Tests that an enabled restartless add-on can be uninstalled and goes away
 // when the uninstall is committed
 add_task(async function uninstallRestartless() {
   prepare_test({
     "undouninstall1@tests.mozilla.org": [
       ["onInstalling", false],
       "onInstalled"
     ]
deleted file mode 100644
--- a/toolkit/mozapps/extensions/test/xpcshell/test_uninstall.js
+++ /dev/null
@@ -1,216 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// This verifies that add-ons can be uninstalled.
-
-var addon1 = {
-  id: "addon1@tests.mozilla.org",
-  version: "1.0",
-  name: "Test 1",
-  targetApplications: [{
-    id: "xpcshell@tests.mozilla.org",
-    minVersion: "1",
-    maxVersion: "1"
-  }]
-};
-
-const profileDir = gProfD.clone();
-profileDir.append("extensions");
-
-// Sets up the profile by installing an add-on.
-function run_test() {
-  createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
-
-  do_test_pending();
-  startupManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(async function(olda1) {
-    Assert.equal(olda1, null);
-
-    writeInstallRDFForExtension(addon1, profileDir);
-
-    await promiseRestartManager();
-
-    AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-      Assert.notEqual(a1, null);
-      Assert.ok(a1.isActive);
-      Assert.ok(!a1.userDisabled);
-      Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-      Assert.equal(a1.pendingOperations, 0);
-      do_check_in_crash_annotation(addon1.id, addon1.version);
-
-      executeSoon(run_test_1);
-    });
-  }));
-}
-
-function end_test() {
-  executeSoon(do_test_finished);
-}
-
-// Uninstalling an add-on should work.
-function run_test_1() {
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.equal(a1.pendingOperations, 0);
-    Assert.notEqual(a1.operationsRequiringRestart &
-                    AddonManager.OP_NEEDS_RESTART_UNINSTALL, 0);
-    a1.uninstall();
-    Assert.ok(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
-    do_check_in_crash_annotation(addon1.id, addon1.version);
-
-    ensure_test_completed();
-
-    AddonManager.getAddonsWithOperationsByTypes(null, function(list) {
-      Assert.equal(list.length, 1);
-      Assert.equal(list[0].id, "addon1@tests.mozilla.org");
-
-      executeSoon(check_test_1);
-    });
-  });
-}
-
-function check_test_1() {
-  restartManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.equal(a1, null);
-    Assert.ok(!isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
-    do_check_not_in_crash_annotation(addon1.id, addon1.version);
-
-    var dest = profileDir.clone();
-    dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
-    Assert.ok(!dest.exists());
-    writeInstallRDFForExtension(addon1, profileDir);
-    executeSoon(run_test_2);
-  });
-}
-
-// Cancelling the uninstall should send onOperationCancelled
-async function run_test_2() {
-  await promiseRestartManager();
-
-  prepare_test({
-    "addon1@tests.mozilla.org": [
-      "onUninstalling"
-    ]
-  });
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.notEqual(a1, null);
-    Assert.ok(a1.isActive);
-    Assert.ok(!a1.userDisabled);
-    Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-    Assert.equal(a1.pendingOperations, 0);
-    a1.uninstall();
-    Assert.ok(hasFlag(a1.pendingOperations, AddonManager.PENDING_UNINSTALL));
-
-    ensure_test_completed();
-
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        "onOperationCancelled"
-      ]
-    });
-    a1.cancelUninstall();
-    Assert.equal(a1.pendingOperations, 0);
-
-    ensure_test_completed();
-
-    executeSoon(check_test_2);
-  });
-}
-
-async function check_test_2() {
-  await promiseRestartManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.notEqual(a1, null);
-    Assert.ok(a1.isActive);
-    Assert.ok(!a1.userDisabled);
-    Assert.ok(isExtensionInAddonsList(profileDir, a1.id));
-
-    run_test_3();
-  });
-}
-
-// Uninstalling an item pending disable should still require a restart
-function run_test_3() {
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        "onDisabling"
-      ]
-    });
-    a1.userDisabled = true;
-    ensure_test_completed();
-
-    Assert.ok(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
-    Assert.ok(a1.isActive);
-
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        "onUninstalling"
-      ]
-    });
-    a1.uninstall();
-
-    check_test_3();
-  });
-}
-
-function check_test_3() {
-  ensure_test_completed();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.notEqual(a1, null);
-    Assert.ok(hasFlag(AddonManager.PENDING_UNINSTALL, a1.pendingOperations));
-
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        "onOperationCancelled"
-      ]
-    });
-    a1.cancelUninstall();
-    ensure_test_completed();
-    Assert.ok(hasFlag(AddonManager.PENDING_DISABLE, a1.pendingOperations));
-
-    executeSoon(run_test_4);
-  });
-}
-
-// Test that uninstalling an inactive item should happen without a restart
-function run_test_4() {
-  restartManager();
-
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.notEqual(a1, null);
-    Assert.ok(!a1.isActive);
-    Assert.ok(a1.userDisabled);
-    Assert.ok(!isExtensionInAddonsList(profileDir, a1.id));
-
-    prepare_test({
-      "addon1@tests.mozilla.org": [
-        ["onUninstalling", false],
-        "onUninstalled"
-      ]
-    });
-    a1.uninstall();
-    ensure_test_completed();
-
-    check_test_4();
-  });
-}
-
-function check_test_4() {
-  AddonManager.getAddonByID("addon1@tests.mozilla.org", function(a1) {
-    Assert.equal(a1, null);
-
-    end_test();
-  });
-}
--- a/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
+++ b/toolkit/mozapps/extensions/test/xpcshell/xpcshell.ini
@@ -88,20 +88,16 @@ tags = blocklist
 skip-if = os == "android"
 tags = blocklist
 [test_blocklist_regexp.js]
 skip-if = os == "android"
 tags = blocklist
 [test_bootstrap.js]
 skip-if = true # Bug 1358846 Bug 1365021 Bug 676992
 [test_bootstrap_const.js]
-[test_bug324121.js]
-# Bug 676992: test consistently hangs on Android
-# Bug 1026805: frequent hangs on OSX 10.8
-skip-if = os == "android" || os == "mac"
 [test_bug335238.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
 [test_bug371495.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 [test_bug384052.js]
@@ -160,52 +156,47 @@ tags = blocklist
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
 [test_bug514327_3.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 tags = blocklist
 [test_bug521905.js]
-[test_bug564030.js]
 [test_bug566626.js]
 [test_bug567184.js]
 [test_bug569138.js]
 [test_bug570173.js]
-[test_bug576735.js]
 [test_bug587088.js]
 skip-if = os == "win" # Bug 1358846
 [test_bug595081.js]
-[test_bug595573.js]
 [test_bug596607.js]
 [test_bug616841.js]
 # Bug 676992: test consistently fails on Android
 fail-if = os == "android"
 [test_bug619730.js]
 tags = blocklist
 [test_bug620837.js]
 tags = blocklist
 [test_bug655254.js]
-[test_bug659772.js]
 [test_bug675371.js]
 [test_bug740612.js]
 [test_bug753900.js]
 [test_bug757663.js]
 [test_bug953156.js]
 [test_checkcompatibility.js]
 [test_childprocess.js]
 [test_compatoverrides.js]
 [test_corrupt.js]
 [test_corruptfile.js]
 [test_dataDirectory.js]
 [test_db_path.js]
 head =
 [test_default_providers_pref.js]
 [test_dictionary.js]
-[test_disable.js]
 [test_distribution.js]
 [test_duplicateplugins.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
 [test_error.js]
 [test_experiment.js]
 # Bug 676992: test consistently hangs on Android
 skip-if = os == "android"
@@ -289,17 +280,16 @@ run-if = addon_signing
 # Bug 676992: test consistently fails on Android
 fail-if = os == "android"
 [test_syncGUID.js]
 [test_strictcompatibility.js]
 [test_targetPlatforms.js]
 [test_types.js]
 [test_undouninstall.js]
 skip-if = os == "win" # Bug 1358846
-[test_uninstall.js]
 [test_update.js]
 # Bug 676992: test consistently hangs on Android; bug 1330227 - linux
 skip-if = os == "android" || os == "linux"
 [test_update_rdf.js]
 [test_update_webextensions.js]
 tags = webextensions
 [test_updateCancel.js]
 [test_update_ignorecompat.js]