Chromium Code Reviews| Index: chrome/common/extensions/command.cc |
| diff --git a/chrome/common/extensions/command.cc b/chrome/common/extensions/command.cc |
| index fffc55ef29dcd8a33363a4d73bbf5c81206a9616..1bbe360f4d30fbadfa2cc16504c2fa5a96e65350 100644 |
| --- a/chrome/common/extensions/command.cc |
| +++ b/chrome/common/extensions/command.cc |
| @@ -29,9 +29,16 @@ static const char kMissing[] = "Missing"; |
| static const char kCommandKeyNotSupported[] = |
| "Command key is not supported. Note: Ctrl means Command on Mac"; |
| +bool IsNamedCommand(const std::string& command_name) { |
| + return command_name != values::kPageActionCommandEvent && |
| + command_name != values::kBrowserActionCommandEvent && |
| + command_name != values::kScriptBadgeCommandEvent; |
| +} |
| + |
| ui::Accelerator ParseImpl(const std::string& accelerator, |
| const std::string& platform_key, |
| int index, |
| + bool should_parse_media_keys, |
| string16* error) { |
| if (platform_key != values::kKeybindingPlatformWin && |
| platform_key != values::kKeybindingPlatformMac && |
| @@ -45,6 +52,17 @@ ui::Accelerator ParseImpl(const std::string& accelerator, |
| return ui::Accelerator(); |
| } |
| + if (should_parse_media_keys) { |
| + if (accelerator == values::kKeyMediaNextTrack) |
| + return ui::Accelerator(ui::VKEY_MEDIA_NEXT_TRACK, ui::EF_NONE); |
| + if (accelerator == values::kKeyMediaPlayPause) |
| + return ui::Accelerator(ui::VKEY_MEDIA_PLAY_PAUSE, ui::EF_NONE); |
| + if (accelerator == values::kKeyMediaPrevTrack) |
| + return ui::Accelerator(ui::VKEY_MEDIA_PREV_TRACK, ui::EF_NONE); |
| + if (accelerator == values::kKeyMediaStop) |
| + return ui::Accelerator(ui::VKEY_MEDIA_STOP, ui::EF_NONE); |
|
Finnur
2013/08/28 14:15:16
This seems a bit ad-hoc. Also, I think we need to
|
| + } |
| + |
| std::vector<std::string> tokens; |
| base::SplitString(accelerator, '+', &tokens); |
| if (tokens.size() < 2 || tokens.size() > 3) { |
|
zhchbin
2013/08/29 06:20:14
Note: if the size of tokens is 1, it will fail and
Finnur
2013/08/29 11:20:52
Yes, change this if statement to become:
if (toke
zhchbin
2013/08/29 14:27:11
Done.
|
| @@ -214,7 +232,8 @@ Command::Command(const std::string& command_name, |
| : command_name_(command_name), |
| description_(description) { |
| string16 error; |
| - accelerator_ = ParseImpl(accelerator, CommandPlatform(), 0, &error); |
| + accelerator_ = ParseImpl(accelerator, CommandPlatform(), 0, |
| + IsNamedCommand(command_name), &error); |
| } |
| Command::~Command() {} |
| @@ -235,11 +254,12 @@ std::string Command::CommandPlatform() { |
| } |
| // static |
| -ui::Accelerator Command::StringToAccelerator(const std::string& accelerator) { |
| +ui::Accelerator Command::StringToAccelerator(const std::string& accelerator, |
| + const std::string& command_name) { |
| string16 error; |
| - Command command; |
| ui::Accelerator parsed = |
| - ParseImpl(accelerator, Command::CommandPlatform(), 0, &error); |
| + ParseImpl(accelerator, Command::CommandPlatform(), 0, |
| + IsNamedCommand(command_name), &error); |
| return parsed; |
| } |
| @@ -312,6 +332,18 @@ std::string Command::AcceleratorToString(const ui::Accelerator& accelerator) { |
| case ui::VKEY_TAB: |
| shortcut += values::kKeyTab; |
| break; |
| + case ui::VKEY_MEDIA_NEXT_TRACK: |
| + shortcut += values::kKeyMediaNextTrack; |
| + break; |
| + case ui::VKEY_MEDIA_PLAY_PAUSE: |
| + shortcut += values::kKeyMediaPlayPause; |
| + break; |
| + case ui::VKEY_MEDIA_PREV_TRACK: |
| + shortcut += values::kKeyMediaPrevTrack; |
| + break; |
| + case ui::VKEY_MEDIA_STOP: |
| + shortcut += values::kKeyMediaStop; |
| + break; |
| default: |
| return ""; |
| } |
| @@ -326,9 +358,7 @@ bool Command::Parse(const base::DictionaryValue* command, |
| DCHECK(!command_name.empty()); |
| string16 description; |
| - if (command_name != values::kPageActionCommandEvent && |
| - command_name != values::kBrowserActionCommandEvent && |
| - command_name != values::kScriptBadgeCommandEvent) { |
| + if (IsNamedCommand(command_name)) { |
| if (!command->GetString(keys::kDescription, &description) || |
| description.empty()) { |
| *error = ErrorUtils::FormatErrorMessageUTF16( |
| @@ -419,7 +449,8 @@ bool Command::Parse(const base::DictionaryValue* command, |
| if (!iter->second.empty()) { |
| // Note that we pass iter->first to pretend we are on a platform we're not |
| // on. |
| - accelerator = ParseImpl(iter->second, iter->first, index, error); |
| + accelerator = ParseImpl(iter->second, iter->first, index, |
| + IsNamedCommand(command_name), error); |
| if (accelerator.key_code() == ui::VKEY_UNKNOWN) { |
| *error = ErrorUtils::FormatErrorMessageUTF16( |
| errors::kInvalidKeyBinding, |