Bug 1391720 remove _blank support for background pages, r?kmag draft
authorShane Caraveo <scaraveo@mozilla.com>
Fri, 18 Aug 2017 11:30:01 -0700
changeset 649254 d9de08c77e93aa10e4c435389e1483f42fd49367
parent 648573 a6a1f5c1d971dbee67ba6eec7ead7902351ddca2
child 727053 ab9933ba8422b932f5d8b81c886f7d6db777b057
push id75005
push usermixedpuppy@gmail.com
push dateFri, 18 Aug 2017 23:25:58 +0000
reviewerskmag
bugs1391720
milestone57.0a1
Bug 1391720 remove _blank support for background pages, r?kmag MozReview-Commit-ID: aRpNSrE483
browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
caps/tests/mochitest/test_extensionURL.html
netwerk/protocol/res/ExtensionProtocolHandler.cpp
toolkit/components/extensions/ext-backgroundPage.js
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
@@ -27,16 +27,22 @@ async function testHasPermission(params)
   }
 
   let extension = ExtensionTestUtils.loadExtension({
     manifest: params.manifest,
 
     background: `(${background})(${contentSetup})`,
 
     files: {
+      "panel.html": `<!DOCTYPE html>
+        <html>
+          <head><meta charset="utf-8"></head>
+          <body>
+          </body>
+        </html>`,
       "script.js": function() {
         browser.runtime.sendMessage("script ran");
       },
     },
   });
 
   await extension.startup();
   await extension.awaitMessage("ready");
@@ -180,30 +186,30 @@ add_task(async function testGoodPermissi
     setup: clickPageAction,
     tearDown: closePageAction,
   });
 
   info("Test activeTab permission with a browser action w/popup click");
   await testHasPermission({
     manifest: {
       "permissions": ["activeTab"],
-      "browser_action": {"default_popup": "_blank.html"},
+      "browser_action": {"default_popup": "panel.html"},
     },
     setup: async extension => {
       await clickBrowserAction(extension);
-      return awaitExtensionPanel(extension, window, "_blank.html");
+      return awaitExtensionPanel(extension, window, "panel.html");
     },
     tearDown: closeBrowserAction,
   });
 
   info("Test activeTab permission with a page action w/popup click");
   await testHasPermission({
     manifest: {
       "permissions": ["activeTab"],
-      "page_action": {"default_popup": "_blank.html"},
+      "page_action": {"default_popup": "panel.html"},
     },
     contentSetup: async () => {
       let [tab] = await browser.tabs.query({active: true, currentWindow: true});
       await browser.pageAction.show(tab.id);
     },
     setup: clickPageAction,
     tearDown: closePageAction,
   });
--- a/caps/tests/mochitest/test_extensionURL.html
+++ b/caps/tests/mochitest/test_extensionURL.html
@@ -220,23 +220,18 @@ https://bugzilla.mozilla.org/show_bug.cg
         ifr.onload = function() {
           ok(true, "Loaded " + url);
           var prin = SpecialPowers.wrap(ifr.contentWindow).document.nodePrincipal;
           function stripTrailingSlash(s) { return s.replace(/\/$/, ""); }
           is(stripTrailingSlash(prin.URI.spec), url, "Principal uri is correct: " + url);
           function stripPath(s) { return s.replace(/(.*\/\/.+)\/.*/, "$1"); }
           is(prin.originNoSuffix, stripPath(url), "Principal origin is correct: " + prin.originNoSuffix);
           is(prin.addonId, "imaginaryaddon-" + url[url.indexOf("/") + 2], "addonId is correct");
-          if (/_blank/.test(url)) {
-            is(SpecialPowers.wrap(ifr.contentWindow).document.documentElement.innerHTML,
-               "<head></head><body></body>", "blank document looks right");
-          } else {
-            is(SpecialPowers.wrap(ifr.contentWindow).document.title, "resource test file",
-               "document looks right");
-          }
+          is(SpecialPowers.wrap(ifr.contentWindow).document.title, "resource test file",
+             "document looks right");
           ifr.remove();
           resolve();
         };
         document.body.appendChild(ifr);
 
         var threw = false;
         try {
           navigate(ifr, url);
@@ -275,17 +270,16 @@ https://bugzilla.mozilla.org/show_bug.cg
     .then(testXHR.bind(null, cheriseURIStr))
     .then(globalSetSubstitution(script, "liebchen", "moz-extension://cherise"))
     .then(testLoad.bind(null, liebchenURIStr, navigateWithLocation, /* shouldThrow = */ true))
     .then(testXHR.bind(null, liebchenURIStr, /* shouldError = */ true))
     .then(setWhitelistCallback.bind(null, ["cherise", "liebchen"]))
     .then(testLoad.bind(null, liebchenURIStr, navigateWithLocation))
     .then(testLoad.bind(null, liebchenURIStr, navigateWithSrc))
     .then(testLoad.bind(null, cheriseURIStr, navigateWithSrc))
-    .then(testLoad.bind(null, "moz-extension://cherise/_blank.html", navigateWithSrc))
     .then(SimpleTest.finish.bind(SimpleTest),
           function(e) { ok(false, "rejected promise: " + e); SimpleTest.finish() }
     );
   });
 
   </script>
 </head>
 <body>
--- a/netwerk/protocol/res/ExtensionProtocolHandler.cpp
+++ b/netwerk/protocol/res/ExtensionProtocolHandler.cpp
@@ -405,21 +405,16 @@ ExtensionProtocolHandler::ResolveSpecial
 {
   // Create special moz-extension:-pages such as moz-extension://foo/_blank.html
   // for all registered extensions. We can't just do this as a substitution
   // because substitutions can only match on host.
   if (!SubstitutingProtocolHandler::HasSubstitution(aHost)) {
     return false;
   }
 
-  if (aPathname.EqualsLiteral("/_blank.html")) {
-    aResult.AssignLiteral("about:blank");
-    return true;
-  }
-
   if (aPathname.EqualsLiteral("/_generated_background_page.html")) {
     Unused << EPS().GetGeneratedBackgroundPageUrl(aHost, aResult);
     return !aResult.IsEmpty();
   }
 
   return false;
 }
 
--- a/toolkit/components/extensions/ext-backgroundPage.js
+++ b/toolkit/components/extensions/ext-backgroundPage.js
@@ -17,21 +17,16 @@ class BackgroundPage extends HiddenExten
     this.page = options.page || null;
     this.isGenerated = !!options.scripts;
 
     if (this.page) {
       this.url = this.extension.baseURI.resolve(this.page);
     } else if (this.isGenerated) {
       this.url = this.extension.baseURI.resolve("_generated_background_page.html");
     }
-
-    if (!this.extension.isExtensionURL(this.url)) {
-      this.extension.manifestError("Background page must be a file within the extension");
-      this.url = this.extension.baseURI.resolve("_blank.html");
-    }
   }
 
   async build() {
     TelemetryStopwatch.start("WEBEXT_BACKGROUND_PAGE_LOAD_MS", this);
     await this.createBrowserElement();
     this.extension._backgroundPageFrameLoader = this.browser.frameLoader;
 
     extensions.emit("extension-browser-inserted", this.browser);