Chromium Code Reviews| Index: chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc |
| diff --git a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc |
| index 477a08eeb4064ccb8a8040dd4fa304900f409b36..8495b908cc144daa156819b9663a6e215d59d631 100644 |
| --- a/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc |
| +++ b/chrome/browser/ui/views/extensions/extension_keybinding_registry_views.cc |
| @@ -4,10 +4,13 @@ |
| #include "chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h" |
| +#include "chrome/app/chrome_command_ids.h" |
| #include "chrome/browser/extensions/api/commands/command_service.h" |
| #include "chrome/browser/extensions/extension_keybinding_registry.h" |
| -#include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/ui/accelerator_utils.h" |
| +#include "chrome/common/extensions/manifest_handlers/ui_overrides_handler.h" |
| +#include "extensions/browser/extension_registry.h" |
| #include "extensions/common/extension.h" |
| #include "ui/views/focus/focus_manager.h" |
| @@ -55,8 +58,18 @@ void ExtensionKeybindingRegistryViews::AddExtensionKeybinding( |
| if (!command_name.empty() && (iter->second.command_name() != command_name)) |
| continue; |
| if (!IsAcceleratorRegistered(iter->second.accelerator())) { |
| + ui::AcceleratorManager::HandlerPriority priority = |
| + ui::AcceleratorManager::kHighPriority; |
| + // Extensions overriding the bookmark shortcut need normal priority to |
| + // preserve the built-in processing order of the key and not override |
| + // WebContents key handling. |
| + if (iter->second.accelerator() == |
| + chrome::GetPrimaryChromeAcceleratorForCommandId(IDC_BOOKMARK_PAGE) && |
| + extensions::UIOverrides::RemovesBookmarkShortcut(extension)) { |
| + priority = ui::AcceleratorManager::kNormalPriority; |
| + } |
|
Finnur
2014/07/02 11:56:16
I'd rather have a utility function on the Command
Mike Wittman
2014/07/02 21:56:19
We can do the utility function, but putting it in
Finnur
2014/07/03 11:09:59
Ah, I see. That's probably fine then.
|
| focus_manager_->RegisterAccelerator(iter->second.accelerator(), |
| - ui::AcceleratorManager::kHighPriority, |
| + priority, |
|
Finnur
2014/07/02 11:56:16
Then this becomes:
Command::GetPriority(iter->se
Mike Wittman
2014/07/02 21:56:19
Done.
|
| this); |
| } |
| @@ -74,6 +87,22 @@ void ExtensionKeybindingRegistryViews::RemoveExtensionKeybindingImpl( |
| bool ExtensionKeybindingRegistryViews::AcceleratorPressed( |
| const ui::Accelerator& accelerator) { |
| + // As a special case, if the extension removes and reassigns the bookmark |
| + // shortcut we don't respond here but instead allow it to be handled by the |
| + // standard browser command processing. This preserves the same shortcut key |
| + // handling of Chrome's built-in bookmarking function, which can be overridden |
| + // by key handling on web pages. |
| + std::string extension_id, command_name; |
| + GetFirstTarget(accelerator, &extension_id, &command_name); |
| + const extensions::Extension* extension = |
| + extensions::ExtensionRegistry::Get(browser_context())-> |
| + enabled_extensions().GetByID(extension_id); |
| + if (accelerator == |
| + chrome::GetPrimaryChromeAcceleratorForCommandId(IDC_BOOKMARK_PAGE) && |
| + extensions::UIOverrides::RemovesBookmarkShortcut(extension)) { |
| + return false; |
| + } |
|
Finnur
2014/07/02 11:56:16
and this becomes:
if (Command::GetPriority(acceler
Mike Wittman
2014/07/02 21:56:19
Done.
|
| + |
| return ExtensionKeybindingRegistry::NotifyEventTargets(accelerator); |
| } |