Bug 1350151 Part 2: Use requireUserInput for permissions.request()
MozReview-Commit-ID: ALRlk7ZZ7LR
deleted file mode 100644
--- a/toolkit/components/extensions/ext-c-permissions.js
+++ /dev/null
@@ -1,22 +0,0 @@
-"use strict";
-
-var {
- ExtensionError,
-} = ExtensionUtils;
-
-this.permissions = class extends ExtensionAPI {
- getAPI(context) {
- return {
- permissions: {
- async request(perms) {
- let winUtils = context.contentWindow.getInterface(Ci.nsIDOMWindowUtils);
- if (!winUtils.isHandlingUserInput) {
- throw new ExtensionError("May only request permissions from a user input handler");
- }
-
- return context.childManager.callParentAsyncFunction("permissions.request_parent", [perms]);
- },
- },
- };
- }
-};
--- a/toolkit/components/extensions/ext-c-toolkit.js
+++ b/toolkit/components/extensions/ext-c-toolkit.js
@@ -57,23 +57,16 @@ extensions.registerModules({
},
i18n: {
url: "chrome://extensions/content/ext-i18n.js",
scopes: ["addon_child", "content_child", "devtools_child", "proxy_script"],
paths: [
["i18n"],
],
},
- permissions: {
- url: "chrome://extensions/content/ext-c-permissions.js",
- scopes: ["addon_child", "content_child", "devtools_child", "proxy_script"],
- paths: [
- ["permissions"],
- ],
- },
runtime: {
url: "chrome://extensions/content/ext-c-runtime.js",
scopes: ["addon_child", "content_child", "devtools_child", "proxy_script"],
paths: [
["runtime"],
],
},
storage: {
--- a/toolkit/components/extensions/ext-permissions.js
+++ b/toolkit/components/extensions/ext-permissions.js
@@ -13,17 +13,17 @@ var {
XPCOMUtils.defineLazyPreferenceGetter(this, "promptsEnabled",
"extensions.webextOptionalPermissionPrompts");
this.permissions = class extends ExtensionAPI {
getAPI(context) {
return {
permissions: {
- async request_parent(perms) {
+ async request(perms) {
let {permissions, origins} = perms;
let manifestPermissions = context.extension.manifest.optional_permissions;
for (let perm of permissions) {
if (!manifestPermissions.includes(perm)) {
throw new ExtensionError(`Cannot request permission ${perm} since it was not declared in optional_permissions`);
}
}
--- a/toolkit/components/extensions/jar.mn
+++ b/toolkit/components/extensions/jar.mn
@@ -32,13 +32,12 @@ toolkit.jar:
# Below is a separate group using the naming convention ext-c-*.js that run
# in the child process.
content/extensions/ext-c-backgroundPage.js
content/extensions/ext-c-downloads.js
content/extensions/ext-c-extension.js
#ifndef ANDROID
content/extensions/ext-c-identity.js
#endif
- content/extensions/ext-c-permissions.js
content/extensions/ext-c-runtime.js
content/extensions/ext-c-storage.js
content/extensions/ext-c-test.js
content/extensions/ext-c-toolkit.js
--- a/toolkit/components/extensions/schemas/permissions.json
+++ b/toolkit/components/extensions/schemas/permissions.json
@@ -81,16 +81,17 @@
}
]
},
{
"name": "request",
"type": "function",
"allowedContexts": ["content"],
"async": "callback",
+ "requireUserInput": true,
"description": "Request the given permissions.",
"parameters": [
{
"name": "permissions",
"$ref": "Permissions"
},
{
"name": "callback",
--- a/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js
@@ -125,17 +125,17 @@ add_task(async function test_permissions
result = await call("contains", {
permissions: [...REQUIRED_PERMISSIONS, ...OPTIONAL_PERMISSIONS],
});
equal(result, false, "contains() returns false for a mix of available and unavailable permissions");
let perm = OPTIONAL_PERMISSIONS[0];
result = await call("request", {permissions: [perm]});
equal(result.status, "error", "request() fails if not called from an event handler");
- ok(/May only request permissions from a user input handler/.test(result.message),
+ ok(/request may only be called from a user input handler/.test(result.message),
"error message for calling request() outside an event handler is reasonable");
result = await call("contains", {permissions: [perm]});
equal(result, false, "Permission requested outside an event handler was not granted");
let userInputHandle = winUtils.setHandlingUserInput(true);
result = await call("request", {permissions: ["notifications"]});
equal(result.status, "error", "request() for permission not in optional_permissions should fail");