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/prefs/scoped_user_pref_update.h" | 8 #include "base/prefs/scoped_user_pref_update.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 const ExtensionSet* extensions = extension_service->extensions(); | 148 const ExtensionSet* extensions = extension_service->extensions(); |
149 const Extension* extension = extensions->GetByID(extension_id); | 149 const Extension* extension = extensions->GetByID(extension_id); |
150 CHECK(extension); | 150 CHECK(extension); |
151 | 151 |
152 command_map->clear(); | 152 command_map->clear(); |
153 const extensions::CommandMap* commands = | 153 const extensions::CommandMap* commands = |
154 CommandsInfo::GetNamedCommands(extension); | 154 CommandsInfo::GetNamedCommands(extension); |
155 if (!commands) | 155 if (!commands) |
156 return false; | 156 return false; |
157 | 157 |
| 158 VLOG(0) << "Commands size: " << commands->size(); |
158 extensions::CommandMap::const_iterator iter = commands->begin(); | 159 extensions::CommandMap::const_iterator iter = commands->begin(); |
159 for (; iter != commands->end(); ++iter) { | 160 for (; iter != commands->end(); ++iter) { |
160 // Look up to see if the user has overridden how the command should work. | 161 // Look up to see if the user has overridden how the command should work. |
161 extensions::Command saved_command = | 162 extensions::Command saved_command = |
162 FindCommandByName(extension_id, iter->second.command_name()); | 163 FindCommandByName(extension_id, iter->second.command_name()); |
163 ui::Accelerator shortcut_assigned = saved_command.accelerator(); | 164 ui::Accelerator shortcut_assigned = saved_command.accelerator(); |
164 | 165 |
165 if (type == ACTIVE_ONLY && shortcut_assigned.key_code() == ui::VKEY_UNKNOWN) | 166 VLOG(0) << "Processing command: " << iter->second.command_name() |
| 167 << ", shortcut assigned: " << shortcut_assigned.key_code() |
| 168 << ", saved command global: " << saved_command.global(); |
| 169 |
| 170 if (type == ACTIVE_ONLY && shortcut_assigned.key_code() == |
| 171 ui::VKEY_UNKNOWN) { |
| 172 VLOG(0) << "Discarded due to missing key code"; |
166 continue; | 173 continue; |
| 174 } |
167 | 175 |
168 extensions::Command command = iter->second; | 176 extensions::Command command = iter->second; |
169 if (scope != ANY_SCOPE && ((scope == GLOBAL) != saved_command.global())) | 177 if (scope != ANY_SCOPE && |
| 178 ((scope == GLOBAL) != saved_command.global())) { |
| 179 VLOG(0) << "Discarded due to scope mismatch"; |
170 continue; | 180 continue; |
| 181 } |
| 182 VLOG(0) << "HERE"; |
171 | 183 |
172 if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) | 184 if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) |
173 command.set_accelerator(shortcut_assigned); | 185 command.set_accelerator(shortcut_assigned); |
174 command.set_global(saved_command.global()); | 186 command.set_global(saved_command.global()); |
175 | 187 |
| 188 VLOG(0) << "Adding command " << iter->second.command_name() |
| 189 << " to command map, scope is " << scope; |
| 190 |
| 191 VLOG(0) << "Size before: " << (*command_map).size(); |
176 (*command_map)[iter->second.command_name()] = command; | 192 (*command_map)[iter->second.command_name()] = command; |
| 193 VLOG(0) << "Size after: " << (*command_map).size(); |
177 } | 194 } |
178 | 195 |
179 return true; | 196 return true; |
180 } | 197 } |
181 | 198 |
182 bool CommandService::AddKeybindingPref( | 199 bool CommandService::AddKeybindingPref( |
183 const ui::Accelerator& accelerator, | 200 const ui::Accelerator& accelerator, |
184 std::string extension_id, | 201 std::string extension_id, |
185 std::string command_name, | 202 std::string command_name, |
186 bool allow_overrides, | 203 bool allow_overrides, |
187 bool global) { | 204 bool global) { |
188 if (accelerator.key_code() == ui::VKEY_UNKNOWN) | 205 if (accelerator.key_code() == ui::VKEY_UNKNOWN) |
189 return false; | 206 return false; |
190 | 207 |
| 208 VLOG(0) << "AddKeybindingPref, " |
| 209 << "Global: " << global |
| 210 << "Command name: " << command_name; |
191 DictionaryPrefUpdate updater(profile_->GetPrefs(), | 211 DictionaryPrefUpdate updater(profile_->GetPrefs(), |
192 prefs::kExtensionCommands); | 212 prefs::kExtensionCommands); |
193 base::DictionaryValue* bindings = updater.Get(); | 213 base::DictionaryValue* bindings = updater.Get(); |
194 | 214 |
195 std::string key = GetPlatformKeybindingKeyForAccelerator(accelerator); | 215 std::string key = GetPlatformKeybindingKeyForAccelerator(accelerator); |
196 | 216 |
197 if (!allow_overrides && bindings->HasKey(key)) | 217 if (!allow_overrides && bindings->HasKey(key)) |
198 return false; // Already taken. | 218 return false; // Already taken. |
199 | 219 |
200 base::DictionaryValue* keybinding = new base::DictionaryValue(); | 220 base::DictionaryValue* keybinding = new base::DictionaryValue(); |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 // Pre-existing shortcuts must be removed before proceeding because the | 280 // Pre-existing shortcuts must be removed before proceeding because the |
261 // handlers for global and non-global extensions are not one and the same. | 281 // handlers for global and non-global extensions are not one and the same. |
262 RemoveKeybindingPrefs(extension_id, command_name); | 282 RemoveKeybindingPrefs(extension_id, command_name); |
263 AddKeybindingPref(command.accelerator(), extension_id, | 283 AddKeybindingPref(command.accelerator(), extension_id, |
264 command_name, true, global); | 284 command_name, true, global); |
265 return true; | 285 return true; |
266 } | 286 } |
267 | 287 |
268 Command CommandService::FindCommandByName( | 288 Command CommandService::FindCommandByName( |
269 const std::string& extension_id, const std::string& command) { | 289 const std::string& extension_id, const std::string& command) { |
| 290 VLOG(0) << "FindCommandByName called."; |
270 const base::DictionaryValue* bindings = | 291 const base::DictionaryValue* bindings = |
271 profile_->GetPrefs()->GetDictionary(prefs::kExtensionCommands); | 292 profile_->GetPrefs()->GetDictionary(prefs::kExtensionCommands); |
272 for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); | 293 for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); |
273 it.Advance()) { | 294 it.Advance()) { |
274 const base::DictionaryValue* item = NULL; | 295 const base::DictionaryValue* item = NULL; |
275 it.value().GetAsDictionary(&item); | 296 it.value().GetAsDictionary(&item); |
276 | 297 |
277 std::string extension; | 298 std::string extension; |
278 item->GetString(kExtension, &extension); | 299 item->GetString(kExtension, &extension); |
| 300 VLOG(0) << "Extension: " << extension; |
279 if (extension != extension_id) | 301 if (extension != extension_id) |
280 continue; | 302 continue; |
281 std::string command_name; | 303 std::string command_name; |
282 item->GetString(kCommandName, &command_name); | 304 item->GetString(kCommandName, &command_name); |
| 305 VLOG(0) << "Command name: " << command_name; |
283 if (command != command_name) | 306 if (command != command_name) |
284 continue; | 307 continue; |
285 bool global = false; | 308 bool global = false; |
286 if (FeatureSwitch::global_commands()->IsEnabled()) | 309 VLOG(0) << "--global-commands: " |
| 310 << FeatureSwitch::global_commands()->IsEnabled(); |
| 311 if (FeatureSwitch::global_commands()->IsEnabled()) { |
287 item->GetBoolean(kGlobal, &global); | 312 item->GetBoolean(kGlobal, &global); |
| 313 VLOG(0) << "Global: " << global; |
| 314 } |
288 | 315 |
289 std::string shortcut = it.key(); | 316 std::string shortcut = it.key(); |
290 if (StartsWithASCII(shortcut, Command::CommandPlatform() + ":", true)) | 317 if (StartsWithASCII(shortcut, Command::CommandPlatform() + ":", true)) |
291 shortcut = shortcut.substr(Command::CommandPlatform().length() + 1); | 318 shortcut = shortcut.substr(Command::CommandPlatform().length() + 1); |
292 | 319 |
293 return Command(command_name, string16(), shortcut, global); | 320 return Command(command_name, string16(), shortcut, global); |
294 } | 321 } |
295 | 322 |
296 return Command(); | 323 return Command(); |
297 } | 324 } |
(...skipping 14 matching lines...) Expand all Loading... |
312 extensions::CommandMap::const_iterator iter = commands->begin(); | 339 extensions::CommandMap::const_iterator iter = commands->begin(); |
313 for (; iter != commands->end(); ++iter) { | 340 for (; iter != commands->end(); ++iter) { |
314 if (!chrome::IsChromeAccelerator( | 341 if (!chrome::IsChromeAccelerator( |
315 iter->second.accelerator(), profile_) && | 342 iter->second.accelerator(), profile_) && |
316 IsWhitelistedGlobalShortcut(iter->second)) { | 343 IsWhitelistedGlobalShortcut(iter->second)) { |
317 AddKeybindingPref(iter->second.accelerator(), | 344 AddKeybindingPref(iter->second.accelerator(), |
318 extension->id(), | 345 extension->id(), |
319 iter->second.command_name(), | 346 iter->second.command_name(), |
320 false, // Overwriting not allowed. | 347 false, // Overwriting not allowed. |
321 iter->second.global()); | 348 iter->second.global()); |
| 349 LOG(ERROR) << "CommandService::AssignInitialKeybindings. " |
| 350 << "global: " << iter->second.global(); |
322 } | 351 } |
323 } | 352 } |
324 | 353 |
325 const extensions::Command* browser_action_command = | 354 const extensions::Command* browser_action_command = |
326 CommandsInfo::GetBrowserActionCommand(extension); | 355 CommandsInfo::GetBrowserActionCommand(extension); |
327 if (browser_action_command) { | 356 if (browser_action_command) { |
328 if (!chrome::IsChromeAccelerator( | 357 if (!chrome::IsChromeAccelerator( |
329 browser_action_command->accelerator(), profile_)) { | 358 browser_action_command->accelerator(), profile_)) { |
330 AddKeybindingPref(browser_action_command->accelerator(), | 359 AddKeybindingPref(browser_action_command->accelerator(), |
331 extension->id(), | 360 extension->id(), |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 | 486 |
458 return true; | 487 return true; |
459 } | 488 } |
460 | 489 |
461 template <> | 490 template <> |
462 void ProfileKeyedAPIFactory<CommandService>::DeclareFactoryDependencies() { | 491 void ProfileKeyedAPIFactory<CommandService>::DeclareFactoryDependencies() { |
463 DependsOn(ExtensionCommandsGlobalRegistry::GetFactoryInstance()); | 492 DependsOn(ExtensionCommandsGlobalRegistry::GetFactoryInstance()); |
464 } | 493 } |
465 | 494 |
466 } // namespace extensions | 495 } // namespace extensions |
OLD | NEW |