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

Unified Diff: chrome/browser/extensions/api/commands/command_service_new.cc

Issue 23445013: Parse media keys for named command in the manifest. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit fix. Created 7 years, 4 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/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

Powered by Google App Engine
This is Rietveld 408576698