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

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

Issue 23812010: Implement first part of supporting global extension commands. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: gclient sync Created 7 years, 2 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.cc
diff --git a/chrome/browser/extensions/api/commands/command_service.cc b/chrome/browser/extensions/api/commands/command_service.cc
index 5d38936f1aba3355f5fa43942d57741e4bc2eae1..4b3ef78758a16f929281d44a8d82875b3456ff4b 100644
--- a/chrome/browser/extensions/api/commands/command_service.cc
+++ b/chrome/browser/extensions/api/commands/command_service.cc
@@ -9,6 +9,7 @@
#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_commands_global_registry.h"
#include "chrome/browser/extensions/extension_function_registry.h"
#include "chrome/browser/extensions/extension_keybinding_registry.h"
#include "chrome/browser/extensions/extension_service.h"
@@ -57,6 +58,17 @@ bool InitialBindingsHaveBeenAssigned(
return assigned;
}
+bool IsWhitelistedGlobalShortcut(const extensions::Command& command) {
+ if (!command.global())
+ return true;
+ if (!command.accelerator().IsCtrlDown())
+ return false;
+ if (!command.accelerator().IsShiftDown())
+ return false;
+ return (command.accelerator().key_code() >= ui::VKEY_0 &&
+ command.accelerator().key_code() <= ui::VKEY_9);
+}
+
} // namespace
namespace extensions {
@@ -125,9 +137,13 @@ bool CommandService::GetScriptBadgeCommand(
bool CommandService::GetNamedCommands(const std::string& extension_id,
QueryType type,
+ CommandScope scope,
extensions::CommandMap* command_map) {
- const ExtensionSet* extensions =
- ExtensionSystem::Get(profile_)->extension_service()->extensions();
+ ExtensionService* extension_service =
+ ExtensionSystem::Get(profile_)->extension_service();
+ if (!extension_service)
+ return false; // Can occur during testing.
+ const ExtensionSet* extensions = extension_service->extensions();
const Extension* extension = extensions->GetByID(extension_id);
CHECK(extension);
@@ -146,6 +162,9 @@ bool CommandService::GetNamedCommands(const std::string& extension_id,
continue;
extensions::Command command = iter->second;
+ if (scope != ANY_SCOPE && ((scope == GLOBAL) != command.global()))
+ continue;
+
if (shortcut_assigned.key_code() != ui::VKEY_UNKNOWN)
command.set_accelerator(shortcut_assigned);
@@ -265,7 +284,8 @@ void CommandService::AssignInitialKeybindings(const Extension* extension) {
extensions::CommandMap::const_iterator iter = commands->begin();
for (; iter != commands->end(); ++iter) {
if (!chrome::IsChromeAccelerator(
- iter->second.accelerator(), profile_)) {
+ iter->second.accelerator(), profile_) &&
+ IsWhitelistedGlobalShortcut(iter->second)) {
AddKeybindingPref(iter->second.accelerator(),
extension->id(),
iter->second.command_name(),
@@ -404,4 +424,9 @@ bool CommandService::GetExtensionActionCommand(
return true;
}
+template <>
+void ProfileKeyedAPIFactory<CommandService>::DeclareFactoryDependencies() {
+ DependsOn(ExtensionCommandsGlobalRegistry::GetFactoryInstance());
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/commands/command_service.h ('k') | chrome/browser/extensions/api/commands/commands.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698