extension_keybinding_registry_views.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/ui/views/extensions/extension_keybinding_registry_views.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/commands/command_service.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_keybinding_registry.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/extensions/extension_service.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "extensions/common/extension.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/views/focus/focus_manager.h" 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// static 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void extensions::ExtensionKeybindingRegistry::SetShortcutHandlingSuspended( 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch bool suspended) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::FocusManager::set_shortcut_handling_suspended(suspended); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionKeybindingRegistryViews::ExtensionKeybindingRegistryViews( 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::FocusManager* focus_manager, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionFilter extension_filter, 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Delegate* delegate) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ExtensionKeybindingRegistry(profile, extension_filter, delegate), 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(profile), 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_manager_(focus_manager) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Init(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ExtensionKeybindingRegistryViews::~ExtensionKeybindingRegistryViews() { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_manager_->UnregisterAccelerators(this); 33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionKeybindingRegistryViews::AddExtensionKeybinding( 36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const extensions::Extension* extension, 37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::string& command_name) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This object only handles named commands, not browser/page actions. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ShouldIgnoreCommand(command_name)) 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandService* command_service = 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandService::Get(profile_); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add all the active keybindings (except page actions and browser actions, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which are handled elsewhere). 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandMap commands; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!command_service->GetNamedCommands( 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandService::ACTIVE_ONLY, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandService::REGULAR, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &commands)) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::CommandMap::const_iterator iter = commands.begin(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (; iter != commands.end(); ++iter) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!command_name.empty() && (iter->second.command_name() != command_name)) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsAcceleratorRegistered(iter->second.accelerator())) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_manager_->RegisterAccelerator(iter->second.accelerator(), 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::AcceleratorManager::kHighPriority, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddEventTarget(iter->second.accelerator(), 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension->id(), 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->second.command_name()); 66ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExtensionKeybindingRegistryViews::RemoveExtensionKeybindingImpl( 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& command_name) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) focus_manager_->UnregisterAccelerator(accelerator, this); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionKeybindingRegistryViews::AcceleratorPressed( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::Accelerator& accelerator) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ExtensionKeybindingRegistry::NotifyEventTargets(accelerator); 78ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ExtensionKeybindingRegistryViews::CanHandleAccelerators() const { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)