Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: chrome/common/extensions/command.cc

Issue 23445013: Parse media keys for named command in the manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove useless codes and add a test case for commands like "Ctrl+MediaNextTrack." Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/command.h ('k') | chrome/common/extensions/command_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+ }
+
std::vector<std::string> tokens;
base::SplitString(accelerator, '+', &tokens);
if (tokens.size() < 2 || tokens.size() > 3) {
@@ -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,
« no previous file with comments | « chrome/common/extensions/command.h ('k') | chrome/common/extensions/command_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698