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

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

Issue 9812008: Polish the keybinding implementation a bit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 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
Index: chrome/common/extensions/extension.cc
===================================================================
--- chrome/common/extensions/extension.cc (revision 127690)
+++ chrome/common/extensions/extension.cc (working copy)
@@ -246,23 +246,50 @@
int index,
string16* error) {
DCHECK(!command_name.empty());
- std::string key_binding;
- if (!command->GetString(keys::kKey, &key_binding) ||
- key_binding.empty()) {
+ std::string key_binding_win;
+ std::string key_binding_mac;
+ std::string key_binding_other;
+ if (!command->GetString(keys::kSuggestedKeyWin, &key_binding_win) ||
Aaron Boodman 2012/03/21 21:05:04 How about setting this up like: suggested_key: {
Finnur 2012/03/21 22:42:12 If only 'default' is provided, do we map Ctrl to C
+ key_binding_win.empty()) {
*error = ExtensionErrorUtils::FormatErrorMessageUTF16(
errors::kInvalidKeyBinding,
base::IntToString(index),
+ keys::kSuggestedKeyWin,
"Missing");
return false;
}
+ if (!command->GetString(keys::kSuggestedKeyMac, &key_binding_mac) ||
+ key_binding_mac.empty()) {
+ *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
+ errors::kInvalidKeyBinding,
+ base::IntToString(index),
+ keys::kSuggestedKeyMac,
+ "Missing");
+ return false;
+ }
+ if (!command->GetString(keys::kSuggestedKeyOther, &key_binding_other) ||
+ key_binding_other.empty()) {
+ *error = ExtensionErrorUtils::FormatErrorMessageUTF16(
+ errors::kInvalidKeyBinding,
+ base::IntToString(index),
+ keys::kSuggestedKeyOther,
+ "Missing");
+ return false;
+ }
- std::string original_keybinding = key_binding;
- // Normalize '-' to '+'.
- ReplaceSubstringsAfterOffset(&key_binding, 0, "-", "+");
- // Remove all spaces.
- ReplaceSubstringsAfterOffset(&key_binding, 0, " ", "");
- // And finally, lower-case it.
- key_binding = StringToLowerASCII(key_binding);
+#if defined(OS_WIN)
Aaron Boodman 2012/03/21 21:05:04 Could you do this work before parsing the JSON abo
Finnur 2012/03/21 22:42:12 I'm thinking I should probably refactor this to re
+ std::string original_keybinding = key_binding_win;
+ std::string key_binding = StringToLowerASCII(key_binding_win);
+ std::string platformKey = keys::kSuggestedKeyWin;
Aaron Boodman 2012/03/21 21:05:04 platform_key
+#elif defined(OS_MACOSX)
+ std::string original_keybinding = key_binding_mac;
+ std::string key_binding = StringToLowerASCII(key_binding_mac);
+ std::string platformKey = keys::kSuggestedKeyMac;
+#else
+ std::string original_keybinding = key_binding_other;
+ std::string key_binding = StringToLowerASCII(key_binding_other);
+ std::string platformKey = keys::kSuggestedKeyOther;
+#endif
std::vector<std::string> tokens;
base::SplitString(key_binding, '+', &tokens);
@@ -270,6 +297,7 @@
*error = ExtensionErrorUtils::FormatErrorMessageUTF16(
errors::kInvalidKeyBinding,
base::IntToString(index),
+ platformKey,
original_keybinding);
return false;
}
@@ -299,6 +327,7 @@
*error = ExtensionErrorUtils::FormatErrorMessageUTF16(
errors::kInvalidKeyBinding,
base::IntToString(index),
+ platformKey,
original_keybinding);
return false;
}
@@ -311,6 +340,7 @@
*error = ExtensionErrorUtils::FormatErrorMessageUTF16(
errors::kInvalidKeyBinding,
base::IntToString(index),
+ platformKey,
original_keybinding);
return false;
}
@@ -3463,6 +3493,40 @@
return is_app() && id() != extension_misc::kCloudPrintAppId;
}
+void Extension::GetCommandByType(
+ Extension::ExtensionKeybinding::Type type,
+ std::vector<Extension::ExtensionKeybinding>* keybindings) const {
+ keybindings->clear();
+ if (!commands_.empty()) {
+ for (size_t i = 0; i < commands_.size(); ++i) {
+ switch (type) {
+ case Extension::ExtensionKeybinding::BROWSER_ACTION:
+ if (commands_[i].command_name() ==
+ extension_manifest_values::kBrowserActionKeybindingEvent) {
+ keybindings->push_back(commands_[i]);
+ return;
+ }
+ break;
+ case Extension::ExtensionKeybinding::PAGE_ACTION:
+ if (commands_[i].command_name() ==
+ extension_manifest_values::kPageActionKeybindingEvent) {
+ keybindings->push_back(commands_[i]);
+ return;
+ }
+ break;
+ case Extension::ExtensionKeybinding::COMMANDS:
+ if (commands_[i].command_name() !=
+ extension_manifest_values::kBrowserActionKeybindingEvent &&
+ commands_[i].command_name() !=
+ extension_manifest_values::kPageActionKeybindingEvent) {
+ keybindings->push_back(commands_[i]);
+ }
+ break;
+ }
+ }
+ }
+}
+
ExtensionInfo::ExtensionInfo(const DictionaryValue* manifest,
const std::string& id,
const FilePath& path,

Powered by Google App Engine
This is Rietveld 408576698