1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_VIEWS_H_
6#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_VIEWS_H_
7
8#include <string>
9
10#include "base/compiler_specific.h"
11#include "chrome/browser/extensions/extension_keybinding_registry.h"
12#include "ui/base/accelerators/accelerator.h"
13
14class Profile;
15
16namespace extensions {
17class Extension;
18}
19
20namespace views {
21class FocusManager;
22}
23
24// ExtensionKeybindingRegistryViews is a class that handles Views-specific
25// implementation of the Extension Keybinding shortcuts (keyboard accelerators).
26// Note: It handles regular extension commands (not browserAction and pageAction
27// popups, which are handled elsewhere). This class registers the accelerators
28// on behalf of the extensions and routes the commands to them via the
29// BrowserEventRouter.
30class ExtensionKeybindingRegistryViews
31    : public extensions::ExtensionKeybindingRegistry,
32      public ui::AcceleratorTarget {
33 public:
34  ExtensionKeybindingRegistryViews(Profile* profile,
35                                   views::FocusManager* focus_manager,
36                                   ExtensionFilter extension_filter,
37                                   Delegate* delegate);
38  virtual ~ExtensionKeybindingRegistryViews();
39
40  // Overridden from ui::AcceleratorTarget.
41  virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
42  virtual bool CanHandleAccelerators() const OVERRIDE;
43
44 private:
45  // Overridden from ExtensionKeybindingRegistry:
46  virtual void AddExtensionKeybinding(
47      const extensions::Extension* extension,
48      const std::string& command_name) OVERRIDE;
49  virtual void RemoveExtensionKeybindingImpl(
50      const ui::Accelerator& accelerator,
51      const std::string& command_name) OVERRIDE;
52
53  // Weak pointer to the our profile. Not owned by us.
54  Profile* profile_;
55
56  // Weak pointer back to the focus manager to use to register and unregister
57  // accelerators with. Not owned by us.
58  views::FocusManager* focus_manager_;
59
60  // The content notification registrar for listening to extension events.
61  content::NotificationRegistrar registrar_;
62
63  DISALLOW_COPY_AND_ASSIGN(ExtensionKeybindingRegistryViews);
64};
65
66#endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_KEYBINDING_REGISTRY_VIEWS_H_
67