• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_EXTENSIONS_EXTENSION_CONTEXT_MENU_MODEL_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_MODEL_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "chrome/browser/extensions/extension_uninstall_dialog.h"
12 #include "ui/base/models/simple_menu_model.h"
13 
14 class Browser;
15 class Extension;
16 class ExtensionAction;
17 class Profile;
18 
19 // The menu model for the context menu for extension action icons (browser and
20 // page actions).
21 class ExtensionContextMenuModel
22     : public base::RefCounted<ExtensionContextMenuModel>,
23       public ui::SimpleMenuModel,
24       public ui::SimpleMenuModel::Delegate,
25       public ExtensionUninstallDialog::Delegate {
26  public:
27   // Delegate to handle showing an ExtensionAction popup.
28   class PopupDelegate {
29    public:
30     // Called when the user selects the menu item which requests that the
31     // popup be shown and inspected.
32     virtual void InspectPopup(ExtensionAction* action) = 0;
33 
34    protected:
~PopupDelegate()35     virtual ~PopupDelegate() {}
36   };
37 
38   // Creates a menu model for the given extension action. If
39   // prefs::kExtensionsUIDeveloperMode is enabled then a menu item
40   // will be shown for "Inspect Popup" which, when selected, will cause
41   // ShowPopupForDevToolsWindow() to be called on |delegate|.
42   ExtensionContextMenuModel(const Extension* extension,
43                             Browser* browser,
44                             PopupDelegate* delegate);
45   virtual ~ExtensionContextMenuModel();
46 
47   // SimpleMenuModel::Delegate overrides.
48   virtual bool IsCommandIdChecked(int command_id) const;
49   virtual bool IsCommandIdEnabled(int command_id) const;
50   virtual bool GetAcceleratorForCommandId(int command_id,
51                                           ui::Accelerator* accelerator);
52   virtual void ExecuteCommand(int command_id);
53 
54   // ExtensionUninstallDialog::Delegate:
55   virtual void ExtensionDialogAccepted();
56   virtual void ExtensionDialogCanceled();
57 
58  private:
59   void InitCommonCommands();
60 
61   // Gets the extension we are displaying the menu for. Returns NULL if the
62   // extension has been uninstalled and no longer exists.
63   const Extension* GetExtension() const;
64 
65   // A copy of the extension's id.
66   std::string extension_id_;
67 
68   // The extension action we are displaying the menu for (or NULL).
69   ExtensionAction* extension_action_;
70 
71   Browser* browser_;
72 
73   Profile* profile_;
74 
75   // The delegate which handles the 'inspect popup' menu command (or NULL).
76   PopupDelegate* delegate_;
77 
78   // Keeps track of the extension uninstall dialog.
79   scoped_ptr<ExtensionUninstallDialog> extension_uninstall_dialog_;
80 
81   DISALLOW_COPY_AND_ASSIGN(ExtensionContextMenuModel);
82 };
83 
84 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_CONTEXT_MENU_MODEL_H_
85