Home | History | Annotate | Download | only in extensions
      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:
     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