Home | History | Annotate | Download | only in extensions
      1 // Copyright 2014 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_ACTION_VIEW_DELEGATE_H_
      6 #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_ACTION_VIEW_DELEGATE_H_
      7 
      8 namespace content {
      9 class WebContents;
     10 }
     11 
     12 namespace views {
     13 class FocusManager;
     14 class MenuButton;
     15 class View;
     16 class Widget;
     17 }
     18 
     19 class ExtensionActionViewController;
     20 
     21 // The view that surrounds an ExtensionAction and owns the
     22 // ExtensionActionViewController. Since different actions can subclass
     23 // different views, we don't derive views::View directly here.
     24 class ExtensionActionViewDelegate {
     25  public:
     26   // Returns |this| as a view. We need this because our subclasses implement
     27   // different kinds of views, and inheriting View here is a really bad idea.
     28   virtual views::View* GetAsView() = 0;
     29 
     30   // Returns true if this view is being shown inside a menu.
     31   virtual bool IsShownInMenu() = 0;
     32 
     33   // Returns the FocusManager to use when registering accelerators.
     34   virtual views::FocusManager* GetFocusManagerForAccelerator() = 0;
     35 
     36   // Returns the parent for the associated context menu.
     37   virtual views::Widget* GetParentForContextMenu() = 0;
     38 
     39   // In some cases (such as when an action is shown in a menu), a substitute
     40   // ExtensionActionViewController should be used for showing popups. This
     41   // returns the preferred control.
     42   virtual ExtensionActionViewController* GetPreferredPopupViewController() = 0;
     43 
     44   // Returns the reference view for the extension action's popup.
     45   virtual views::View* GetReferenceViewForPopup() = 0;
     46 
     47   // Returns the MenuButton (if any) to use in showing the context menu (this
     48   // allows views code to update the pressed state of the button).
     49   virtual views::MenuButton* GetContextMenuButton() = 0;
     50 
     51   // Returns the current web contents.
     52   virtual content::WebContents* GetCurrentWebContents() = 0;
     53 
     54   // Hides whatever popup is active (even if it's not this one).
     55   virtual void HideActivePopup() = 0;
     56 
     57   // Called when the icon is updated; this is forwarded from the icon factory.
     58   virtual void OnIconUpdated() = 0;
     59 
     60   // Called when a popup is shown. See ExecuteAction() for the definition of
     61   // |grant_tab_permissions|.
     62   virtual void OnPopupShown(bool grant_tab_permissions) {}
     63 
     64   // Does any additional cleanup after the popup is closed.
     65   virtual void CleanupPopup() {}
     66 
     67  protected:
     68   virtual ~ExtensionActionViewDelegate() {}
     69 };
     70 
     71 #endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_ACTION_VIEW_DELEGATE_H_
     72