Bug 1287159 - Grant activeTab permission to the current tab when onCommand fires. r=kmag
MozReview-Commit-ID: ETwqDOBHCRS
--- a/browser/components/extensions/ext-commands.js
+++ b/browser/components/extensions/ext-commands.js
@@ -124,16 +124,18 @@ CommandList.prototype = {
/* eslint-disable mozilla/balanced-listeners */
// We remove all references to the key elements when the extension is shutdown,
// therefore the listeners for these elements will be garbage collected.
keyElement.addEventListener("command", (event) => {
if (name == "_execute_page_action") {
let win = event.target.ownerDocument.defaultView;
pageActionFor(this.extension).triggerAction(win);
} else {
+ TabManager.for(this.extension)
+ .addActiveTabPermission(TabManager.activeTab);
this.emit("command", name);
}
});
/* eslint-enable mozilla/balanced-listeners */
return keyElement;
},
@@ -235,18 +237,18 @@ extensions.registerSchemaAPI("commands",
return ({
name,
description: command.description,
shortcut: command.shortcut,
});
}));
},
onCommand: new EventManager(context, "commands.onCommand", fire => {
- let listener = (event, name) => {
- fire(name);
+ let listener = (eventName, commandName) => {
+ fire(commandName);
};
commandsMap.get(extension).on("command", listener);
return () => {
commandsMap.get(extension).off("command", listener);
};
}).api(),
},
};
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
@@ -73,16 +73,56 @@ add_task(function* testBadPermissions()
manifest: {"permissions": ["http://example.com/"]},
});
info("Test tabs permissions");
yield testHasNoPermission({
manifest: {"permissions": ["http://example.com/", "tabs"]},
});
+ info("Test no special permissions, commands, key press");
+ yield testHasNoPermission({
+ manifest: {
+ "permissions": ["http://example.com/"],
+ "commands": {
+ "test-tabs-executeScript": {
+ "suggested_key": {
+ "default": "Alt+Shift+K",
+ },
+ },
+ },
+ },
+ contentSetup() {
+ browser.commands.onCommand.addListener(function(command) {
+ if (command == "test-tabs-executeScript") {
+ browser.test.sendMessage("tabs-command-key-pressed");
+ }
+ });
+ return Promise.resolve();
+ },
+ setup: function* (extension) {
+ yield EventUtils.synthesizeKey("k", {altKey: true, shiftKey: true});
+ yield extension.awaitMessage("tabs-command-key-pressed");
+ },
+ });
+
+ info("Test active tab, commands, no key press");
+ yield testHasNoPermission({
+ manifest: {
+ "permissions": ["http://example.com/", "activeTab"],
+ "commands": {
+ "test-tabs-executeScript": {
+ "suggested_key": {
+ "default": "Alt+Shift+K",
+ },
+ },
+ },
+ },
+ });
+
info("Test active tab, browser action, no click");
yield testHasNoPermission({
manifest: {
"permissions": ["http://example.com/", "activeTab"],
"browser_action": {},
},
});
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
@@ -69,16 +69,42 @@ add_task(function* testGoodPermissions()
manifest: {"permissions": ["http://*.mochi.test/"]},
});
info("Test explicit <all_urls> permission");
yield testHasPermission({
manifest: {"permissions": ["<all_urls>"]},
});
+ info("Test activeTab permission with a command key press");
+ yield testHasPermission({
+ manifest: {
+ "permissions": ["activeTab"],
+ "commands": {
+ "test-tabs-executeScript": {
+ "suggested_key": {
+ "default": "Alt+Shift+K",
+ },
+ },
+ },
+ },
+ contentSetup() {
+ browser.commands.onCommand.addListener(function(command) {
+ if (command == "test-tabs-executeScript") {
+ browser.test.sendMessage("tabs-command-key-pressed");
+ }
+ });
+ return Promise.resolve();
+ },
+ setup: function* (extension) {
+ yield EventUtils.synthesizeKey("k", {altKey: true, shiftKey: true});
+ yield extension.awaitMessage("tabs-command-key-pressed");
+ },
+ });
+
info("Test activeTab permission with a browser action click");
yield testHasPermission({
manifest: {
"permissions": ["activeTab"],
"browser_action": {},
},
contentSetup() {
browser.browserAction.onClicked.addListener(() => {