Bug 1328758 - Better error messages for tabs.executeScript draft
authorTomislav Jovanovic <tomica@gmail.com>
Sun, 02 Apr 2017 01:05:37 +0200
changeset 554718 933c1970d6e8c676292a7d08fccafbaba7cbec35
parent 551503 6f31760f0ffae62ca715a2b74f017ac059160bda
child 622421 ec7763b892ff80659f9af291042656dbb66834b7
push id52033
push userbmo:tomica@gmail.com
push dateSat, 01 Apr 2017 23:08:27 +0000
bugs1328758
milestone55.0a1
Bug 1328758 - Better error messages for tabs.executeScript MozReview-Commit-ID: PQhltZVepj
browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
mobile/android/components/extensions/test/mochitest/test_ext_tabs_executeScript.html
toolkit/components/extensions/ExtensionContent.jsm
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
@@ -142,34 +142,27 @@ add_task(function* testExecuteScript() {
         }),
 
         browser.tabs.executeScript({
           frameId: Number.MAX_SAFE_INTEGER,
           code: "42",
         }).then(result => {
           browser.test.fail("Expected error when specifying invalid frame ID");
         }, error => {
-          let details = {
-            frame_id: Number.MAX_SAFE_INTEGER,
-            matchesHost: ["http://mochi.test/", "http://example.com/"],
-          };
-          browser.test.assertEq(`No window matching ${JSON.stringify(details)}`,
+          browser.test.assertEq(`Frame not found, or missing host permission`,
                                 error.message, "Got expected error");
         }),
 
         browser.tabs.create({url: "http://example.net/", active: false}).then(async tab => {
           await browser.tabs.executeScript(tab.id, {
             code: "42",
           }).then(result => {
             browser.test.fail("Expected error when trying to execute on invalid domain");
           }, error => {
-            let details = {
-              matchesHost: ["http://mochi.test/", "http://example.com/"],
-            };
-            browser.test.assertEq(`No window matching ${JSON.stringify(details)}`,
+            browser.test.assertEq("Missing host permission for the tab",
                                   error.message, "Got expected error");
           });
 
           await browser.tabs.remove(tab.id);
         }),
 
         browser.tabs.executeScript({
           code: "Promise.resolve(42)",
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
@@ -174,17 +174,17 @@ add_task(function* testMatchDataURI() {
       });
 
       browser.test.onMessage.addListener(async msg => {
         browser.test.assertRejects(
           browser.tabs.executeScript({
             code: "location.href;",
             allFrames: true,
           }),
-          /No window matching/,
+          /Missing host permission/,
           "Should not execute in `data:` frame");
 
         browser.test.sendMessage("done");
       });
     },
   });
 
   yield scripts.startup();
--- a/mobile/android/components/extensions/test/mochitest/test_ext_tabs_executeScript.html
+++ b/mobile/android/components/extensions/test/mochitest/test_ext_tabs_executeScript.html
@@ -125,34 +125,27 @@ add_task(function* testExecuteScript() {
         }),
 
         browser.tabs.executeScript({
           frameId: Number.MAX_SAFE_INTEGER,
           code: "42",
         }).then(result => {
           browser.test.fail("Expected error when specifying invalid frame ID");
         }, error => {
-          let details = {
-            frame_id: Number.MAX_SAFE_INTEGER,
-            matchesHost: ["http://mochi.test/", "http://example.com/"],
-          };
-          browser.test.assertEq(`No window matching ${JSON.stringify(details)}`,
+          browser.test.assertEq(`Frame not found, or missing host permission`,
                                 error.message, "Got expected error");
         }),
 
         browser.tabs.create({url: "http://example.net/", active: false}).then(async tab => {
           await browser.tabs.executeScript(tab.id, {
             code: "42",
           }).then(result => {
             browser.test.fail("Expected error when trying to execute on invalid domain");
           }, error => {
-            let details = {
-              matchesHost: ["http://mochi.test/", "http://example.com/"],
-            };
-            browser.test.assertEq(`No window matching ${JSON.stringify(details)}`,
+            browser.test.assertEq(`Missing host permission for the tab`,
                                   error.message, "Got expected error");
           });
 
           await browser.tabs.remove(tab.id);
         }),
 
         browser.tabs.executeScript({
           code: "Promise.resolve(42)",
--- a/toolkit/components/extensions/ExtensionContent.jsm
+++ b/toolkit/components/extensions/ExtensionContent.jsm
@@ -822,24 +822,22 @@ DocumentManager = {
       }
       return null;
     };
 
     let promises = Array.from(this.enumerateWindows(global.docShell), executeInWin)
                         .filter(promise => promise);
 
     if (!promises.length) {
-      let details = {};
-      for (let key of ["all_frames", "frame_id", "match_about_blank", "matchesHost"]) {
-        if (key in options) {
-          details[key] = options[key];
-        }
+      if (options.frame_id) {
+        return Promise.reject({message: `Frame not found, or missing host permission`});
       }
 
-      return Promise.reject({message: `No window matching ${JSON.stringify(details)}`});
+      let frames = options.all_frames ? ", and any iframes" : "";
+      return Promise.reject({message: `Missing host permission for the tab${frames}`});
     }
     if (!options.all_frames && promises.length > 1) {
       return Promise.reject({message: `Internal error: Script matched multiple windows`});
     }
     return Promise.all(promises);
   },
 
   enumerateWindows: function* (docShell) {