Bug 1287159 - Grant activeTab permission to the current tab when onCommand fires. r=kmag draft
authorMatthew Wein <mwein@mozilla.com>
Mon, 25 Jul 2016 14:42:23 -0700
changeset 395850 5b59f07acd965fc3b50aca6dbf568c0bc1967fd3
parent 395760 18496dab4741e5ecf1387c762f0f5bf7194903d7
child 527078 f0dedaf4d71b857d43a5f33d72a39b77996a6273
push id24864
push usermwein@mozilla.com
push dateTue, 02 Aug 2016 23:32:26 +0000
reviewerskmag
bugs1287159
milestone51.0a1
Bug 1287159 - Grant activeTab permission to the current tab when onCommand fires. r=kmag MozReview-Commit-ID: ETwqDOBHCRS
browser/components/extensions/ext-commands.js
browser/components/extensions/test/browser/browser_ext_tabs_executeScript_bad.js
browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
--- 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(() => {