Bug 1436450 - Fix <all_urls> as an optional API permission
MozReview-Commit-ID: FXiUuNgPlRo
--- a/toolkit/components/extensions/ext-permissions.js
+++ b/toolkit/components/extensions/ext-permissions.js
@@ -54,16 +54,21 @@ this.permissions = class extends Extensi
};
Services.obs.notifyObservers(subject, "webextension-optional-permission-prompt");
});
if (!allow) {
return false;
}
}
+ // Unfortunatelly, we treat <all_urls> as an API permission as well.
+ if (origins.includes("<all_urls>")) {
+ perms.permissions.push("<all_urls>");
+ }
+
await ExtensionPermissions.add(context.extension, perms);
return true;
},
async getAll() {
let perms = context.extension.activePermissions;
delete perms.apis;
return perms;
--- a/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js
@@ -433,16 +433,48 @@ add_task(function test_permissions_have_
} catch (e) {
ok(GRANTED_WITHOUT_USER_PROMPT.includes(perm),
`Permission '${perm}' intentionally granted without prompting the user`);
}
}
}
});
+// Check <all_urls> used as an optional API permission.
+add_task(async function test_optional_all_urls() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ optional_permissions: ["<all_urls>"],
+ },
+
+ background() {
+ browser.test.onMessage.addListener(async () => {
+ let before = !!browser.tabs.captureVisibleTab;
+ let granted = await browser.permissions.request({origins: ["<all_urls>"]});
+ let after = !!browser.tabs.captureVisibleTab;
+
+ browser.test.sendMessage("results", [before, granted, after]);
+ });
+ },
+ });
+
+ await extension.startup();
+
+ await withHandlingUserInput(extension, async () => {
+ extension.sendMessage("request");
+ let [before, granted, after] = await extension.awaitMessage("results");
+
+ equal(before, false, "captureVisibleTab() unavailable before optional permission request()");
+ equal(granted, true, "request() for optional permissions granted");
+ equal(after, true, "captureVisibleTab() avaiable after optional permission request()");
+ });
+
+ await extension.unload();
+});
+
// Check that optional permissions are not included in update prompts
add_task(async function test_permissions_prompt() {
function background() {
browser.test.onMessage.addListener(async (msg, arg) => {
if (msg == "request") {
let result = await browser.permissions.request(arg);
browser.test.sendMessage("result", result);
}