Bug 1328758 - Better error messages for tabs.executeScript
MozReview-Commit-ID: PQhltZVepj
--- 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) {