| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/commands/command_service.h" | 5 #include "chrome/browser/extensions/api/commands/command_service.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/strings/string_util.h" | 8 #include "base/strings/string_util.h" |
| 9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
| 10 #include "chrome/browser/extensions/api/commands/commands.h" | 10 #include "chrome/browser/extensions/api/commands/commands.h" |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 bool CommandService::AddKeybindingPref( | 134 bool CommandService::AddKeybindingPref( |
| 135 const ui::Accelerator& accelerator, | 135 const ui::Accelerator& accelerator, |
| 136 std::string extension_id, | 136 std::string extension_id, |
| 137 std::string command_name, | 137 std::string command_name, |
| 138 bool allow_overrides) { | 138 bool allow_overrides) { |
| 139 if (accelerator.key_code() == ui::VKEY_UNKNOWN) | 139 if (accelerator.key_code() == ui::VKEY_UNKNOWN) |
| 140 return false; | 140 return false; |
| 141 | 141 |
| 142 DictionaryPrefUpdate updater(profile_->GetPrefs(), | 142 DictionaryPrefUpdate updater(profile_->GetPrefs(), |
| 143 prefs::kExtensionCommands); | 143 prefs::kExtensionCommands); |
| 144 DictionaryValue* bindings = updater.Get(); | 144 base::DictionaryValue* bindings = updater.Get(); |
| 145 | 145 |
| 146 std::string key = GetPlatformKeybindingKeyForAccelerator(accelerator); | 146 std::string key = GetPlatformKeybindingKeyForAccelerator(accelerator); |
| 147 | 147 |
| 148 if (!allow_overrides && bindings->HasKey(key)) | 148 if (!allow_overrides && bindings->HasKey(key)) |
| 149 return false; // Already taken. | 149 return false; // Already taken. |
| 150 | 150 |
| 151 DictionaryValue* keybinding = new DictionaryValue(); | 151 base::DictionaryValue* keybinding = new base::DictionaryValue(); |
| 152 keybinding->SetString(kExtension, extension_id); | 152 keybinding->SetString(kExtension, extension_id); |
| 153 keybinding->SetString(kCommandName, command_name); | 153 keybinding->SetString(kCommandName, command_name); |
| 154 | 154 |
| 155 bindings->Set(key, keybinding); | 155 bindings->Set(key, keybinding); |
| 156 | 156 |
| 157 std::pair<const std::string, const std::string> details = | 157 std::pair<const std::string, const std::string> details = |
| 158 std::make_pair(extension_id, command_name); | 158 std::make_pair(extension_id, command_name); |
| 159 content::NotificationService::current()->Notify( | 159 content::NotificationService::current()->Notify( |
| 160 chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED, | 160 chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED, |
| 161 content::Source<Profile>(profile_), | 161 content::Source<Profile>(profile_), |
| (...skipping 29 matching lines...) Expand all Loading... |
| 191 // The extension command might be assigned another shortcut. Remove that | 191 // The extension command might be assigned another shortcut. Remove that |
| 192 // shortcut before proceeding. | 192 // shortcut before proceeding. |
| 193 RemoveKeybindingPrefs(extension_id, command_name); | 193 RemoveKeybindingPrefs(extension_id, command_name); |
| 194 | 194 |
| 195 ui::Accelerator accelerator = Command::StringToAccelerator(keystroke); | 195 ui::Accelerator accelerator = Command::StringToAccelerator(keystroke); |
| 196 AddKeybindingPref(accelerator, extension_id, command_name, true); | 196 AddKeybindingPref(accelerator, extension_id, command_name, true); |
| 197 } | 197 } |
| 198 | 198 |
| 199 ui::Accelerator CommandService::FindShortcutForCommand( | 199 ui::Accelerator CommandService::FindShortcutForCommand( |
| 200 const std::string& extension_id, const std::string& command) { | 200 const std::string& extension_id, const std::string& command) { |
| 201 const DictionaryValue* bindings = | 201 const base::DictionaryValue* bindings = |
| 202 profile_->GetPrefs()->GetDictionary(prefs::kExtensionCommands); | 202 profile_->GetPrefs()->GetDictionary(prefs::kExtensionCommands); |
| 203 for (DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); it.Advance()) { | 203 for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); |
| 204 const DictionaryValue* item = NULL; | 204 it.Advance()) { |
| 205 const base::DictionaryValue* item = NULL; |
| 205 it.value().GetAsDictionary(&item); | 206 it.value().GetAsDictionary(&item); |
| 206 | 207 |
| 207 std::string extension; | 208 std::string extension; |
| 208 item->GetString(kExtension, &extension); | 209 item->GetString(kExtension, &extension); |
| 209 if (extension != extension_id) | 210 if (extension != extension_id) |
| 210 continue; | 211 continue; |
| 211 std::string command_name; | 212 std::string command_name; |
| 212 item->GetString(kCommandName, &command_name); | 213 item->GetString(kCommandName, &command_name); |
| 213 if (command != command_name) | 214 if (command != command_name) |
| 214 continue; | 215 continue; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 extension->id(), | 263 extension->id(), |
| 263 script_badge_command->command_name(), | 264 script_badge_command->command_name(), |
| 264 false); // Overwriting not allowed. | 265 false); // Overwriting not allowed. |
| 265 } | 266 } |
| 266 } | 267 } |
| 267 | 268 |
| 268 void CommandService::RemoveKeybindingPrefs(const std::string& extension_id, | 269 void CommandService::RemoveKeybindingPrefs(const std::string& extension_id, |
| 269 const std::string& command_name) { | 270 const std::string& command_name) { |
| 270 DictionaryPrefUpdate updater(profile_->GetPrefs(), | 271 DictionaryPrefUpdate updater(profile_->GetPrefs(), |
| 271 prefs::kExtensionCommands); | 272 prefs::kExtensionCommands); |
| 272 DictionaryValue* bindings = updater.Get(); | 273 base::DictionaryValue* bindings = updater.Get(); |
| 273 | 274 |
| 274 typedef std::vector<std::string> KeysToRemove; | 275 typedef std::vector<std::string> KeysToRemove; |
| 275 KeysToRemove keys_to_remove; | 276 KeysToRemove keys_to_remove; |
| 276 for (DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); it.Advance()) { | 277 for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); |
| 277 const DictionaryValue* item = NULL; | 278 it.Advance()) { |
| 279 const base::DictionaryValue* item = NULL; |
| 278 it.value().GetAsDictionary(&item); | 280 it.value().GetAsDictionary(&item); |
| 279 | 281 |
| 280 std::string extension; | 282 std::string extension; |
| 281 item->GetString(kExtension, &extension); | 283 item->GetString(kExtension, &extension); |
| 282 | 284 |
| 283 if (extension == extension_id) { | 285 if (extension == extension_id) { |
| 284 // If |command_name| is specified, delete only that command. Otherwise, | 286 // If |command_name| is specified, delete only that command. Otherwise, |
| 285 // delete all commands. | 287 // delete all commands. |
| 286 if (!command_name.empty()) { | 288 if (!command_name.empty()) { |
| 287 std::string command; | 289 std::string command; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 return false; | 354 return false; |
| 353 | 355 |
| 354 *command = *requested_command; | 356 *command = *requested_command; |
| 355 if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) | 357 if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) |
| 356 command->set_accelerator(shortcut_assigned); | 358 command->set_accelerator(shortcut_assigned); |
| 357 | 359 |
| 358 return true; | 360 return true; |
| 359 } | 361 } |
| 360 | 362 |
| 361 } // namespace extensions | 363 } // namespace extensions |
| OLD | NEW |