| 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
|
|
|