Bug 1359558 Part 3 Add a test for extension newtab overrides with temporary addon installation draft
authorAndrew Swan <aswan@mozilla.com>
Fri, 28 Jul 2017 14:15:09 -0700
changeset 644583 c986ab1ebb631d710900f0ce36bff41124b9d12d
parent 644582 966d78c37205f131b57eed461df75002873cdf86
child 725642 f5190276d350ed577bc6e1203979ae8e84ab1e0b
push id73474
push useraswan@mozilla.com
push dateFri, 11 Aug 2017 04:22:18 +0000
bugs1359558
milestone56.0a1
Bug 1359558 Part 3 Add a test for extension newtab overrides with temporary addon installation MozReview-Commit-ID: JPEPMa80SI2
browser/components/extensions/test/xpcshell/test_ext_url_overrides_newtab.js
--- a/browser/components/extensions/test/xpcshell/test_ext_url_overrides_newtab.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_url_overrides_newtab.js
@@ -15,21 +15,23 @@ XPCOMUtils.defineLazyModuleGetter(this, 
 XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
                                    "@mozilla.org/browser/aboutnewtab-service;1",
                                    "nsIAboutNewTabService");
 
 Cu.import("resource://testing-common/AddonTestUtils.jsm");
 
 const {
   createAppInfo,
+  promiseRestartManager,
   promiseShutdownManager,
   promiseStartupManager,
 } = AddonTestUtils;
 
 AddonTestUtils.init(this);
+AddonTestUtils.overrideCertDB();
 
 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
 
 function awaitEvent(eventName) {
   return new Promise(resolve => {
     Management.once(eventName, (e, ...args) => resolve(...args));
   });
 }
@@ -116,8 +118,66 @@ add_task(async function test_multiple_ex
      "Newtab url reverts to being overriden by the second extension.");
 
   await ext2.unload();
   equal(aboutNewTabService.newTabURL, "about:newtab",
      "Newtab url is reset to about:newtab");
 
   await promiseShutdownManager();
 });
+
+// Tests that we handle the upgrade/downgrade process correctly
+// when an extension is installed temporarily on top of a permanently
+// installed one.
+add_task(async function test_temporary_installation() {
+  const ID = "newtab@tests.mozilla.org";
+  const PAGE1 = "page1.html";
+  const PAGE2 = "page2.html";
+
+  equal(aboutNewTabService.newTabURL, "about:newtab",
+        "Default newtab url is about:newtab");
+
+  await promiseStartupManager();
+
+  let permanent = ExtensionTestUtils.loadExtension({
+    manifest: {
+      applications: {
+        gecko: {id: ID},
+      },
+      chrome_url_overrides: {
+        newtab: PAGE1,
+      },
+    },
+    useAddonManager: "permanent",
+  });
+
+  await permanent.startup();
+  ok(aboutNewTabService.newTabURL.endsWith(PAGE1),
+     "newtab url is overridden by permanent extension");
+
+  let temporary = ExtensionTestUtils.loadExtension({
+    manifest: {
+      applications: {
+        gecko: {id: ID},
+      },
+      chrome_url_overrides: {
+        newtab: PAGE2,
+      },
+    },
+    useAddonManager: "temporary",
+  });
+
+  await temporary.startup();
+  ok(aboutNewTabService.newTabURL.endsWith(PAGE2),
+     "newtab url is overridden by temporary extension");
+
+  await promiseRestartManager();
+  await permanent.awaitStartup();
+
+  ok(aboutNewTabService.newTabURL.endsWith(PAGE1),
+     "newtab url is back to the value set by permanent extension");
+
+  await permanent.unload();
+
+  equal(aboutNewTabService.newTabURL, "about:newtab",
+        "newtab url is back to default about:newtab");
+  await promiseShutdownManager();
+});