author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Wed, 20 Jul 2016 11:35:06 +0200 | |
changeset 305849 | 6d9c0e3bde9e39749ff7dff998f8c9d7c0edd425 |
parent 305848 | 61336ab346f1c80a5cbe4173a1b1836e474315cb (current diff) |
parent 305812 | ed8e23b5e0c7b739e61173bb180cf3410a306679 (diff) |
child 305850 | 03269dd72a7259f582977714559f0f4ef19988aa |
child 306033 | 7cf94b234e6a250ab02b25809a5f313bae6e2bab |
push id | 79681 |
push user | cbook@mozilla.com |
push date | Wed, 20 Jul 2016 14:56:17 +0000 |
treeherder | mozilla-inbound@f90a9f8af37c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 50.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/components/extensions/ext-commands.js +++ b/browser/components/extensions/ext-commands.js @@ -72,22 +72,20 @@ CommandList.prototype = { loadCommandsFromManifest(manifest) { let commands = new Map(); // For Windows, chrome.runtime expects 'win' while chrome.commands // expects 'windows'. We can special case this for now. let os = PlatformInfo.os == "win" ? "windows" : PlatformInfo.os; for (let name of Object.keys(manifest.commands)) { let command = manifest.commands[name]; let shortcut = command.suggested_key[os] || command.suggested_key.default; - if (shortcut) { - commands.set(name, { - description: command.description, - shortcut: shortcut.replace(/\s+/g, ""), - }); - } + commands.set(name, { + description: command.description, + shortcut: shortcut.replace(/\s+/g, ""), + }); } return commands; }, /** * Registers the commands to a document. * @param {ChromeWindow} window The XUL window to insert the Keyset. */ @@ -121,17 +119,17 @@ CommandList.prototype = { // and it is currently ignored when set to the empty string. keyElement.setAttribute("oncommand", "//"); /* 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; + let win = event.target.ownerGlobal; pageActionFor(this.extension).triggerAction(win); } else { this.emit("command", name); } }); /* eslint-enable mozilla/balanced-listeners */ return keyElement;
--- a/browser/components/extensions/test/browser/browser_ext_commands_onCommand.js +++ b/browser/components/extensions/test/browser/browser_ext_commands_onCommand.js @@ -1,254 +1,98 @@ /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set sts=2 sw=2 et tw=80: */ "use strict"; -Cu.import("resource://gre/modules/AppConstants.jsm"); - add_task(function* test_user_defined_commands() { - const testCommands = [ - // Ctrl Shortcuts - { - name: "toggle-ctrl-a", - shortcut: "Ctrl+A", - key: "A", - modifiers: { - accelKey: true, - }, - }, - { - name: "toggle-ctrl-up", - shortcut: "Ctrl+Up", - key: "VK_UP", - modifiers: { - accelKey: true, - }, - }, - // Alt Shortcuts - { - name: "toggle-alt-1", - shortcut: "Alt+1", - key: "1", - modifiers: { - altKey: true, - }, - }, - { - name: "toggle-alt-a", - shortcut: "Alt+A", - key: "A", - modifiers: { - altKey: true, - }, - }, - { - name: "toggle-alt-down", - shortcut: "Alt+Down", - key: "VK_DOWN", - modifiers: { - altKey: true, - }, - }, - // Mac Shortcuts - { - name: "toggle-command-shift-page-up", - shortcutMac: "Command+Shift+PageUp", - key: "VK_PAGE_UP", - modifiers: { - accelKey: true, - shiftKey: true, - }, - }, - { - name: "toggle-mac-control-b", - shortcut: "Ctrl+B", - shortcutMac: "MacCtrl+B", - key: "B", - modifiers: { - ctrlKey: true, - }, - }, - // Ctrl+Shift Shortcuts - { - name: "toggle-ctrl-shift-1", - shortcut: "Ctrl+Shift+1", - key: "1", - modifiers: { - accelKey: true, - shiftKey: true, - }, - }, - { - name: "toggle-ctrl-shift-i", - shortcut: "Ctrl+Shift+I", - key: "I", - modifiers: { - accelKey: true, - shiftKey: true, - }, - }, - { - name: "toggle-ctrl-shift-left", - shortcut: "Ctrl+Shift+Left", - key: "VK_LEFT", - modifiers: { - accelKey: true, - shiftKey: true, - }, - }, - // Alt+Shift Shortcuts - { - name: "toggle-alt-shift-1", - shortcut: "Alt+Shift+1", - key: "1", - modifiers: { - altKey: true, - shiftKey: true, - }, - }, - { - name: "toggle-alt-shift-a", - shortcut: "Alt+Shift+A", - key: "A", - modifiers: { - altKey: true, - shiftKey: true, - }, - }, - { - name: "toggle-alt-shift-right", - shortcut: "Alt+Shift+Right", - key: "VK_RIGHT", - modifiers: { - altKey: true, - shiftKey: true, - }, - }, - // Misc Shortcuts - { - name: "unrecognized-property-name", - shortcut: "Alt+Shift+3", - key: "3", - modifiers: { - altKey: true, - shiftKey: true, - }, - unrecognized_property: "with-a-random-value", - }, - { - name: "spaces-in-shortcut-name", - shortcut: " Alt + Shift + 2 ", - key: "2", - modifiers: { - altKey: true, - shiftKey: true, - }, - }, - ]; - // Create a window before the extension is loaded. let win1 = yield BrowserTestUtils.openNewBrowserWindow(); yield BrowserTestUtils.loadURI(win1.gBrowser.selectedBrowser, "about:robots"); yield BrowserTestUtils.browserLoaded(win1.gBrowser.selectedBrowser); - let commands = {}; - let isMac = AppConstants.platform == "macosx"; - let totalMacOnlyCommands = 0; - - for (let testCommand of testCommands) { - let command = { - suggested_key: {}, - }; - - if (testCommand.shortcut) { - command.suggested_key.default = testCommand.shortcut; - } - - if (testCommand.shortcutMac) { - command.suggested_key.mac = testCommand.shortcutMac; - } - - if (testCommand.shortcutMac && !testCommand.shortcut) { - totalMacOnlyCommands++; - } - - if (testCommand.unrecognized_property) { - command.unrecognized_property = testCommand.unrecognized_property; - } - - commands[testCommand.name] = command; - } - let extension = ExtensionTestUtils.loadExtension({ manifest: { - "commands": commands, + "commands": { + "toggle-feature-using-alt-shift-3": { + "suggested_key": { + "default": "Alt+Shift+3", + }, + }, + "toggle-feature-using-alt-shift-comma": { + "suggested_key": { + "default": "Alt+Shift+Comma", + }, + "unrecognized_property": "with-a-random-value", + }, + "toggle-feature-with-whitespace-in-suggested-key": { + "suggested_key": { + "default": " Alt + Shift + 2 ", + }, + }, + }, }, background: function() { browser.commands.onCommand.addListener(commandName => { browser.test.sendMessage("oncommand", commandName); }); browser.test.sendMessage("ready"); }, }); + SimpleTest.waitForExplicitFinish(); let waitForConsole = new Promise(resolve => { SimpleTest.monitorConsole(resolve, [{ message: /Reading manifest: Error processing commands.*.unrecognized_property: An unexpected property was found/, }]); }); yield extension.startup(); yield extension.awaitMessage("ready"); - function* runTest() { - for (let testCommand of testCommands) { - if (testCommand.shortcutMac && !isMac) { - continue; - } - EventUtils.synthesizeKey(testCommand.key, testCommand.modifiers); - let message = yield extension.awaitMessage("oncommand"); - is(message, testCommand.name, "Expected onCommand listener to fire with the correct command name"); - } - } - // Create another window after the extension is loaded. let win2 = yield BrowserTestUtils.openNewBrowserWindow(); yield BrowserTestUtils.loadURI(win2.gBrowser.selectedBrowser, "about:config"); yield BrowserTestUtils.browserLoaded(win2.gBrowser.selectedBrowser); - let totalTestCommands = Object.keys(testCommands).length; - let expectedCommandsRegistered = isMac ? totalTestCommands : totalTestCommands - totalMacOnlyCommands; - // Confirm the keysets have been added to both windows. let keysetID = `ext-keyset-id-${makeWidgetId(extension.id)}`; let keyset = win1.document.getElementById(keysetID); ok(keyset != null, "Expected keyset to exist"); - is(keyset.childNodes.length, expectedCommandsRegistered, "Expected keyset to have the correct number of children"); + is(keyset.childNodes.length, 3, "Expected keyset to have 3 children"); keyset = win2.document.getElementById(keysetID); ok(keyset != null, "Expected keyset to exist"); - is(keyset.childNodes.length, expectedCommandsRegistered, "Expected keyset to have the correct number of children"); + is(keyset.childNodes.length, 3, "Expected keyset to have 3 children"); // Confirm that the commands are registered to both windows. yield focusWindow(win1); - yield runTest(); + EventUtils.synthesizeKey("3", {altKey: true, shiftKey: true}); + let message = yield extension.awaitMessage("oncommand"); + is(message, "toggle-feature-using-alt-shift-3", "Expected onCommand listener to fire with correct message"); yield focusWindow(win2); - yield runTest(); + EventUtils.synthesizeKey("VK_COMMA", {altKey: true, shiftKey: true}); + message = yield extension.awaitMessage("oncommand"); + is(message, "toggle-feature-using-alt-shift-comma", "Expected onCommand listener to fire with correct message"); + + EventUtils.synthesizeKey("2", {altKey: true, shiftKey: true}); + message = yield extension.awaitMessage("oncommand"); + is(message, "toggle-feature-with-whitespace-in-suggested-key", "Expected onCommand listener to fire with correct message"); yield extension.unload(); // Confirm that the keysets have been removed from both windows after the extension is unloaded. keyset = win1.document.getElementById(keysetID); is(keyset, null, "Expected keyset to be removed from the window"); keyset = win2.document.getElementById(keysetID); is(keyset, null, "Expected keyset to be removed from the window"); yield BrowserTestUtils.closeWindow(win1); yield BrowserTestUtils.closeWindow(win2); SimpleTest.endMonitorConsole(); yield waitForConsole; }); + +