| Index: chrome/browser/resources/extensions/extension_command_list.js
|
| diff --git a/chrome/browser/resources/extensions/extension_command_list.js b/chrome/browser/resources/extensions/extension_command_list.js
|
| index d730c9d841ec054f19677f88cb94b7f68d70397b..3f1b05ff25d47f1d5b9511af87c14f6c224d171a 100644
|
| --- a/chrome/browser/resources/extensions/extension_command_list.js
|
| +++ b/chrome/browser/resources/extensions/extension_command_list.js
|
| @@ -20,6 +20,10 @@ cr.define('options', function() {
|
| /** @const */ var keyHome = 36;
|
| /** @const */ var keyIns = 45;
|
| /** @const */ var keyLeft = 37;
|
| + /** @const */ var keyMediaNextTrack = 176;
|
| + /** @const */ var keyMediaPlayPause = 179;
|
| + /** @const */ var keyMediaPrevTrack = 177;
|
| + /** @const */ var keyMediaStop = 178;
|
| /** @const */ var keyPageDown = 34;
|
| /** @const */ var keyPageUp = 33;
|
| /** @const */ var keyPeriod = 190;
|
| @@ -28,6 +32,15 @@ cr.define('options', function() {
|
| /** @const */ var keyUp = 38;
|
|
|
| /**
|
| + * Enum for whether we require modifiers of a keycode.
|
| + * @enum {number}
|
| + */
|
| + var Modifiers = {
|
| + ARE_NOT_ALLOWED: 0,
|
| + ARE_REQUIRED: 1
|
| + };
|
| +
|
| + /**
|
| * Returns whether the passed in |keyCode| is a valid extension command
|
| * char or not. This is restricted to A-Z and 0-9 (ignoring modifiers) at
|
| * the moment.
|
| @@ -42,6 +55,10 @@ cr.define('options', function() {
|
| keyCode == keyHome ||
|
| keyCode == keyIns ||
|
| keyCode == keyLeft ||
|
| + keyCode == keyMediaNextTrack ||
|
| + keyCode == keyMediaPlayPause ||
|
| + keyCode == keyMediaPrevTrack ||
|
| + keyCode == keyMediaStop ||
|
| keyCode == keyPageDown ||
|
| keyCode == keyPageUp ||
|
| keyCode == keyPeriod ||
|
| @@ -90,6 +107,14 @@ cr.define('options', function() {
|
| output += 'Insert'; break;
|
| case keyLeft:
|
| output += 'Left'; break;
|
| + case keyMediaNextTrack:
|
| + output += 'MediaNextTrack'; break;
|
| + case keyMediaPlayPause:
|
| + output += 'MediaPlayPause'; break;
|
| + case keyMediaPrevTrack:
|
| + output += 'MediaPrevTrack'; break;
|
| + case keyMediaStop:
|
| + output += 'MediaStop'; break;
|
| case keyPageDown:
|
| output += 'PageDown'; break;
|
| case keyPageUp:
|
| @@ -109,6 +134,38 @@ cr.define('options', function() {
|
| return output;
|
| }
|
|
|
| + /**
|
| + * Returns whether the passed in |keyCode| require modifiers. Currently only
|
| + * "MediaNextTrack", "MediaPrevTrack", "MediaStop", "MediaPlayPause" are
|
| + * required to be used without any modifier.
|
| + * @param {int} keyCode The keycode to consider.
|
| + * @return {Modifiers} Returns whether the keycode require modifiers.
|
| + */
|
| + function modifiers(keyCode) {
|
| + switch (keyCode) {
|
| + case keyMediaNextTrack:
|
| + case keyMediaPlayPause:
|
| + case keyMediaPrevTrack:
|
| + case keyMediaStop:
|
| + return Modifiers.ARE_NOT_ALLOWED;
|
| + default:
|
| + return Modifiers.ARE_REQUIRED;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Return true if the specified keyboard event has any one of following
|
| + * modifiers: "Ctrl", "Alt", "Cmd" on Mac, and "Shift" when the
|
| + * countShiftAsModifier is true.
|
| + * @param {Event} event The keyboard event to consider.
|
| + * @param {boolean} countShiftAsModifier Whether the 'ShiftKey' should be
|
| + * counted as modifier.
|
| + */
|
| + function hasModifier(event, countShiftAsModifier) {
|
| + return event.ctrlKey || event.altKey || (cr.isMac && event.metaKey) ||
|
| + (countShiftAsModifier && event.shiftKey);
|
| + }
|
| +
|
| ExtensionCommandList.prototype = {
|
| __proto__: HTMLDivElement.prototype,
|
|
|
| @@ -323,8 +380,16 @@ cr.define('options', function() {
|
| event.preventDefault();
|
| event.stopPropagation();
|
|
|
| - if (!event.ctrlKey && !event.altKey && (!cr.isMac || !event.metaKey))
|
| - return; // Ctrl or Alt is a must (or Cmd on Mac).
|
| + if (modifiers(event.keyCode) == Modifiers.ARE_REQUIRED &&
|
| + !hasModifier(event, false)) {
|
| + // Ctrl or Alt (or Cmd on Mac) is a must for most shortcuts.
|
| + return;
|
| + }
|
| +
|
| + if (modifiers(event.keyCode) == Modifiers.ARE_NOT_ALLOWED &&
|
| + hasModifier(event, true)) {
|
| + return;
|
| + }
|
|
|
| var shortcutNode = this.capturingElement_;
|
| var keystroke = keystrokeToString(event);
|
|
|