Index: chrome/browser/extensions/api/commands/command_service_new.cc |
diff --git a/chrome/browser/extensions/api/commands/command_service_new.cc b/chrome/browser/extensions/api/commands/command_service_new.cc |
deleted file mode 100644 |
index 296180fb4fe288b536475181a010f055532c4061..0000000000000000000000000000000000000000 |
--- a/chrome/browser/extensions/api/commands/command_service_new.cc |
+++ /dev/null |
@@ -1,363 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/extensions/api/commands/command_service.h" |
- |
-#include "base/lazy_instance.h" |
-#include "base/strings/string_util.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/extensions/api/commands/commands.h" |
-#include "chrome/browser/extensions/extension_function_registry.h" |
-#include "chrome/browser/extensions/extension_keybinding_registry.h" |
-#include "chrome/browser/extensions/extension_service.h" |
-#include "chrome/browser/extensions/extension_system.h" |
-#include "chrome/browser/prefs/scoped_user_pref_update.h" |
-#include "chrome/browser/profiles/profile.h" |
-#include "chrome/common/pref_names.h" |
-#include "components/user_prefs/pref_registry_syncable.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_service.h" |
- |
-using extensions::Extension; |
- |
-namespace { |
- |
-const char kExtension[] = "extension"; |
-const char kCommandName[] = "command_name"; |
- |
-std::string GetPlatformKeybindingKeyForAccelerator( |
- const ui::Accelerator& accelerator) { |
- return extensions::Command::CommandPlatform() + ":" + |
- UTF16ToUTF8(accelerator.GetShortcutText()); |
-} |
- |
-} // namespace |
- |
-namespace extensions { |
- |
-// static |
-void CommandService::RegisterProfilePrefs( |
- user_prefs::PrefRegistrySyncable* registry) { |
- registry->RegisterDictionaryPref( |
- prefs::kExtensionCommands, |
- user_prefs::PrefRegistrySyncable::SYNCABLE_PREF); |
-} |
- |
-CommandService::CommandService(Profile* profile) |
- : profile_(profile) { |
- ExtensionFunctionRegistry::GetInstance()-> |
- RegisterFunction<GetAllCommandsFunction>(); |
- |
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_INSTALLED, |
- content::Source<Profile>(profile)); |
- registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNINSTALLED, |
- content::Source<Profile>(profile)); |
-} |
- |
-CommandService::~CommandService() { |
-} |
- |
-static base::LazyInstance<ProfileKeyedAPIFactory<CommandService> > |
-g_factory = LAZY_INSTANCE_INITIALIZER; |
- |
-// static |
-ProfileKeyedAPIFactory<CommandService>* CommandService::GetFactoryInstance() { |
- return &g_factory.Get(); |
-} |
- |
-// static |
-CommandService* CommandService::Get(Profile* profile) { |
- return ProfileKeyedAPIFactory<CommandService>::GetForProfile(profile); |
-} |
- |
-bool CommandService::GetBrowserActionCommand( |
- const std::string& extension_id, |
- QueryType type, |
- extensions::Command* command, |
- bool* active) { |
- return GetExtensionActionCommand( |
- extension_id, type, command, active, BROWSER_ACTION); |
-} |
- |
-bool CommandService::GetPageActionCommand( |
- const std::string& extension_id, |
- QueryType type, |
- extensions::Command* command, |
- bool* active) { |
- return GetExtensionActionCommand( |
- extension_id, type, command, active, PAGE_ACTION); |
-} |
- |
-bool CommandService::GetScriptBadgeCommand( |
- const std::string& extension_id, |
- QueryType type, |
- extensions::Command* command, |
- bool* active) { |
- return GetExtensionActionCommand( |
- extension_id, type, command, active, SCRIPT_BADGE); |
-} |
- |
-bool CommandService::GetNamedCommands(const std::string& extension_id, |
- QueryType type, |
- extensions::CommandMap* command_map) { |
- const ExtensionSet* extensions = |
- ExtensionSystem::Get(profile_)->extension_service()->extensions(); |
- const Extension* extension = extensions->GetByID(extension_id); |
- CHECK(extension); |
- |
- command_map->clear(); |
- const extensions::CommandMap* commands = |
- CommandsInfo::GetNamedCommands(extension); |
- if (!commands) |
- return false; |
- |
- extensions::CommandMap::const_iterator iter = commands->begin(); |
- for (; iter != commands->end(); ++iter) { |
- ui::Accelerator shortcut_assigned = |
- FindShortcutForCommand(extension_id, iter->second.command_name()); |
- |
- if (type == ACTIVE_ONLY && shortcut_assigned.key_code() == ui::VKEY_UNKNOWN) |
- continue; |
- |
- extensions::Command command = iter->second; |
- if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) |
- command.set_accelerator(shortcut_assigned); |
- |
- (*command_map)[iter->second.command_name()] = command; |
- } |
- |
- return true; |
-} |
- |
-bool CommandService::AddKeybindingPref( |
- const ui::Accelerator& accelerator, |
- std::string extension_id, |
- std::string command_name, |
- bool allow_overrides) { |
- if (accelerator.key_code() == ui::VKEY_UNKNOWN) |
- return false; |
- |
- DictionaryPrefUpdate updater(profile_->GetPrefs(), |
- prefs::kExtensionCommands); |
- base::DictionaryValue* bindings = updater.Get(); |
- |
- std::string key = GetPlatformKeybindingKeyForAccelerator(accelerator); |
- |
- if (!allow_overrides && bindings->HasKey(key)) |
- return false; // Already taken. |
- |
- base::DictionaryValue* keybinding = new base::DictionaryValue(); |
- keybinding->SetString(kExtension, extension_id); |
- keybinding->SetString(kCommandName, command_name); |
- |
- bindings->Set(key, keybinding); |
- |
- std::pair<const std::string, const std::string> details = |
- std::make_pair(extension_id, command_name); |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_EXTENSION_COMMAND_ADDED, |
- content::Source<Profile>(profile_), |
- content::Details< |
- std::pair<const std::string, const std::string> >(&details)); |
- |
- return true; |
-} |
- |
-void CommandService::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- switch (type) { |
- case chrome::NOTIFICATION_EXTENSION_INSTALLED: |
- AssignInitialKeybindings( |
- content::Details<const InstalledExtensionInfo>(details)->extension); |
- break; |
- case chrome::NOTIFICATION_EXTENSION_UNINSTALLED: |
- RemoveKeybindingPrefs( |
- content::Details<const Extension>(details)->id(), |
- std::string()); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
-} |
- |
-void CommandService::UpdateKeybindingPrefs(const std::string& extension_id, |
- const std::string& command_name, |
- const std::string& keystroke) { |
- // The extension command might be assigned another shortcut. Remove that |
- // shortcut before proceeding. |
- RemoveKeybindingPrefs(extension_id, command_name); |
- |
- ui::Accelerator accelerator = Command::StringToAccelerator(keystroke); |
- AddKeybindingPref(accelerator, extension_id, command_name, true); |
-} |
- |
-ui::Accelerator CommandService::FindShortcutForCommand( |
- const std::string& extension_id, const std::string& command) { |
- const base::DictionaryValue* bindings = |
- profile_->GetPrefs()->GetDictionary(prefs::kExtensionCommands); |
- for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); |
- it.Advance()) { |
- const base::DictionaryValue* item = NULL; |
- it.value().GetAsDictionary(&item); |
- |
- std::string extension; |
- item->GetString(kExtension, &extension); |
- if (extension != extension_id) |
- continue; |
- std::string command_name; |
- item->GetString(kCommandName, &command_name); |
- if (command != command_name) |
- continue; |
- |
- std::string shortcut = it.key(); |
- if (StartsWithASCII(shortcut, Command::CommandPlatform() + ":", true)) |
- shortcut = shortcut.substr(Command::CommandPlatform().length() + 1); |
- |
- return Command::StringToAccelerator(shortcut); |
- } |
- |
- return ui::Accelerator(); |
-} |
- |
-void CommandService::AssignInitialKeybindings(const Extension* extension) { |
- const extensions::CommandMap* commands = |
- CommandsInfo::GetNamedCommands(extension); |
- if (!commands) |
- return; |
- |
- extensions::CommandMap::const_iterator iter = commands->begin(); |
- for (; iter != commands->end(); ++iter) { |
- AddKeybindingPref(iter->second.accelerator(), |
- extension->id(), |
- iter->second.command_name(), |
- false); // Overwriting not allowed. |
- } |
- |
- const extensions::Command* browser_action_command = |
- CommandsInfo::GetBrowserActionCommand(extension); |
- if (browser_action_command) { |
- AddKeybindingPref(browser_action_command->accelerator(), |
- extension->id(), |
- browser_action_command->command_name(), |
- false); // Overwriting not allowed. |
- } |
- |
- const extensions::Command* page_action_command = |
- CommandsInfo::GetPageActionCommand(extension); |
- if (page_action_command) { |
- AddKeybindingPref(page_action_command->accelerator(), |
- extension->id(), |
- page_action_command->command_name(), |
- false); // Overwriting not allowed. |
- } |
- |
- const extensions::Command* script_badge_command = |
- CommandsInfo::GetScriptBadgeCommand(extension); |
- if (script_badge_command) { |
- AddKeybindingPref(script_badge_command->accelerator(), |
- extension->id(), |
- script_badge_command->command_name(), |
- false); // Overwriting not allowed. |
- } |
-} |
- |
-void CommandService::RemoveKeybindingPrefs(const std::string& extension_id, |
- const std::string& command_name) { |
- DictionaryPrefUpdate updater(profile_->GetPrefs(), |
- prefs::kExtensionCommands); |
- base::DictionaryValue* bindings = updater.Get(); |
- |
- typedef std::vector<std::string> KeysToRemove; |
- KeysToRemove keys_to_remove; |
- for (base::DictionaryValue::Iterator it(*bindings); !it.IsAtEnd(); |
- it.Advance()) { |
- const base::DictionaryValue* item = NULL; |
- it.value().GetAsDictionary(&item); |
- |
- std::string extension; |
- item->GetString(kExtension, &extension); |
- |
- if (extension == extension_id) { |
- // If |command_name| is specified, delete only that command. Otherwise, |
- // delete all commands. |
- if (!command_name.empty()) { |
- std::string command; |
- item->GetString(kCommandName, &command); |
- if (command_name != command) |
- continue; |
- } |
- |
- keys_to_remove.push_back(it.key()); |
- } |
- } |
- |
- for (KeysToRemove::const_iterator it = keys_to_remove.begin(); |
- it != keys_to_remove.end(); ++it) { |
- std::string key = *it; |
- bindings->Remove(key, NULL); |
- |
- std::pair<const std::string, const std::string> details = |
- std::make_pair(extension_id, command_name); |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_EXTENSION_COMMAND_REMOVED, |
- content::Source<Profile>(profile_), |
- content::Details< |
- std::pair<const std::string, const std::string> >(&details)); |
- } |
-} |
- |
-bool CommandService::GetExtensionActionCommand( |
- const std::string& extension_id, |
- QueryType query_type, |
- extensions::Command* command, |
- bool* active, |
- ExtensionActionType action_type) { |
- ExtensionService* service = |
- ExtensionSystem::Get(profile_)->extension_service(); |
- if (!service) |
- return false; // Can happen in tests. |
- const ExtensionSet* extensions = service->extensions(); |
- const Extension* extension = extensions->GetByID(extension_id); |
- CHECK(extension); |
- |
- if (active) |
- *active = false; |
- |
- const extensions::Command* requested_command = NULL; |
- switch (action_type) { |
- case BROWSER_ACTION: |
- requested_command = CommandsInfo::GetBrowserActionCommand(extension); |
- break; |
- case PAGE_ACTION: |
- requested_command = CommandsInfo::GetPageActionCommand(extension); |
- break; |
- case SCRIPT_BADGE: |
- requested_command = CommandsInfo::GetScriptBadgeCommand(extension); |
- break; |
- } |
- if (!requested_command) |
- return false; |
- |
- ui::Accelerator shortcut_assigned = |
- FindShortcutForCommand(extension_id, requested_command->command_name()); |
- |
- if (active) |
- *active = (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN); |
- |
- if (query_type == ACTIVE_ONLY && |
- shortcut_assigned.key_code() == ui::VKEY_UNKNOWN) |
- return false; |
- |
- *command = *requested_command; |
- if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN) |
- command->set_accelerator(shortcut_assigned); |
- |
- return true; |
-} |
- |
-} // namespace extensions |