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