Index: chrome/browser/extensions/extension_keybinding_registry.cc |
diff --git a/chrome/browser/extensions/extension_keybinding_registry.cc b/chrome/browser/extensions/extension_keybinding_registry.cc |
index 43ad281e21cc895bb49564a39179c0040a214a04..a819ab409c17a2a842b5d4a5249afd2bce7f4be2 100644 |
--- a/chrome/browser/extensions/extension_keybinding_registry.cc |
+++ b/chrome/browser/extensions/extension_keybinding_registry.cc |
@@ -34,6 +34,30 @@ ExtensionKeybindingRegistry::ExtensionKeybindingRegistry( |
ExtensionKeybindingRegistry::~ExtensionKeybindingRegistry() { |
} |
+void ExtensionKeybindingRegistry::RemoveExtensionKeybinding( |
+ const Extension* extension, |
+ const std::string& command_name) { |
+ EventTargets::iterator iter = event_targets_.begin(); |
+ while (iter != event_targets_.end()) { |
+ if (iter->second.first != extension->id() || |
+ (!command_name.empty() && (iter->second.second != command_name))) { |
+ ++iter; |
+ continue; // Not the extension or command we asked for. |
+ } |
+ |
+ // Let each platform-specific implementation get a chance to clean up. |
+ RemoveExtensionKeybindingImpl(iter->first, command_name); |
+ |
+ EventTargets::iterator old = iter++; |
+ event_targets_.erase(old); |
+ |
+ // If a specific command_name was requested, it has now been deleted so |
+ // no further work is required. |
+ if (!command_name.empty()) |
+ break; |
+ } |
+} |
+ |
void ExtensionKeybindingRegistry::Init() { |
ExtensionService* service = |
extensions::ExtensionSystem::Get(profile_)->extension_service(); |
@@ -64,9 +88,11 @@ void ExtensionKeybindingRegistry::CommandExecuted( |
return; |
// Grant before sending the event so that the permission is granted before |
- // the extension acts on the command. |
+ // the extension acts on the command. NOTE: The Global Commands handler does |
+ // not set the delegate as it deals only with named commands (not page/browser |
+ // actions that are associated with the current page directly). |
ActiveTabPermissionGranter* granter = |
- delegate_->GetActiveTabPermissionGranter(); |
+ delegate_ ? delegate_->GetActiveTabPermissionGranter() : NULL; |
if (granter) |
granter->GrantIfRequested(extension); |