Chromium Code Reviews| 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..0b9b1573e5f99208254943b465f229efcd66f7f9 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_REQUIRED: 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 |
| + * allowed 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_REQUIRED; |
|
Finnur
2013/09/04 13:53:05
This is incorrect. Eventually, we might have keys
zhchbin
2013/09/04 14:24:27
Done. I got your idea now!! Sorry for my mistake.
|
| + default: |
| + return Modifiers.ARE_REQUIRED; |
| + } |
| + } |
| + |
| + /** |
| + * Return true if the specified keyboard event has any one of following |
| + * modifiers: 'Ctrl', 'Alt', 'Cmd' on Mac, 'Shift' when the |
|
Finnur
2013/09/04 13:53:05
Nit: Replace
", 'Shift'"
with
"and 'Shift'"
zhchbin
2013/09/04 14:24:27
Done.
|
| + * countShiftAsModifier is true. |
| + * @param {Event} event The keyboard event to convert. |
|
Finnur
2013/09/04 13:53:05
s/convert/consider/
zhchbin
2013/09/04 14:24:27
Done.
|
| + * @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_REQUIRED && |
|
Finnur
2013/09/04 13:53:05
Same here: ARE_NOT_ALLOWED.
zhchbin
2013/09/04 14:24:27
Done.
|
| + hasModifier(event, true)) { |
| + return; |
| + } |
| var shortcutNode = this.capturingElement_; |
| var keystroke = keystrokeToString(event); |