Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / extension_context_menu_model.h
index 4685b6c..50e9837 100644 (file)
@@ -15,8 +15,14 @@ class Browser;
 class ExtensionAction;
 class Profile;
 
+namespace content {
+class WebContents;
+}
+
 namespace extensions {
 class Extension;
+class ContextMenuMatcher;
+class ExtensionContextMenuModelTest;
 }
 
 // The context menu model for extension icons.
@@ -32,15 +38,20 @@ class ExtensionContextMenuModel
     HIDE,
     UNINSTALL,
     MANAGE,
-    INSPECT_POPUP
+    INSPECT_POPUP,
+    ALWAYS_RUN
   };
 
+  // Type of action the extension icon represents.
+  enum ActionType { NO_ACTION = 0, BROWSER_ACTION, PAGE_ACTION };
+
   // Delegate to handle showing an ExtensionAction popup.
   class PopupDelegate {
    public:
     // Called when the user selects the menu item which requests that the
     // popup be shown and inspected.
-    virtual void InspectPopup(ExtensionAction* action) = 0;
+    // The delegate should know which popup to display.
+    virtual void InspectPopup() = 0;
 
    protected:
     virtual ~PopupDelegate() {}
@@ -73,6 +84,8 @@ class ExtensionContextMenuModel
 
  private:
   friend class base::RefCounted<ExtensionContextMenuModel>;
+  friend class extensions::ExtensionContextMenuModelTest;
+
   virtual ~ExtensionContextMenuModel();
 
   void InitMenu(const extensions::Extension* extension);
@@ -81,6 +94,12 @@ class ExtensionContextMenuModel
   // extension has been uninstalled and no longer exists.
   const extensions::Extension* GetExtension() const;
 
+  // Returns the active web contents.
+  content::WebContents* GetActiveWebContents() const;
+
+  // Appends the extension's context menu items.
+  void AppendExtensionItems();
+
   // A copy of the extension's id.
   std::string extension_id_;
 
@@ -95,9 +114,18 @@ class ExtensionContextMenuModel
   // The delegate which handles the 'inspect popup' menu command (or NULL).
   PopupDelegate* delegate_;
 
+  // The type of extension action to which this context menu is attached.
+  ActionType action_type_;
+
   // Keeps track of the extension uninstall dialog.
   scoped_ptr<extensions::ExtensionUninstallDialog> extension_uninstall_dialog_;
 
+  // Menu matcher for context menu items specified by the extension.
+  scoped_ptr<extensions::ContextMenuMatcher> extension_items_;
+
+  // Number of extension items in this menu. Used for testing.
+  int extension_items_count_;
+
   DISALLOW_COPY_AND_ASSIGN(ExtensionContextMenuModel);
 };