19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// Copyright 2014 The Chromium Authors. All rights reserved.
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// found in the LICENSE file.
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_ACTION_VIEW_DELEGATE_H_
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_ACTION_VIEW_DELEGATE_H_
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectnamespace content {
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass WebContents;
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectnamespace views {
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass FocusManager;
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass MenuButton;
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass View;
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass Widget;
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass ExtensionActionViewController;
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// The view that surrounds an ExtensionAction and owns the
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// ExtensionActionViewController. Since different actions can subclass
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project// different views, we don't derive views::View directly here.
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectclass ExtensionActionViewDelegate {
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project public:
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns |this| as a view. We need this because our subclasses implement
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // different kinds of views, and inheriting View here is a really bad idea.
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual views::View* GetAsView() = 0;
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns true if this view is being shown inside a menu.
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual bool IsShownInMenu() = 0;
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns the FocusManager to use when registering accelerators.
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual views::FocusManager* GetFocusManagerForAccelerator() = 0;
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns the parent for the associated context menu.
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual views::Widget* GetParentForContextMenu() = 0;
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // In some cases (such as when an action is shown in a menu), a substitute
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // ExtensionActionViewController should be used for showing popups. This
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // returns the preferred control.
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual ExtensionActionViewController* GetPreferredPopupViewController() = 0;
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns the reference view for the extension action's popup.
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual views::View* GetReferenceViewForPopup() = 0;
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns the MenuButton (if any) to use in showing the context menu (this
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // allows views code to update the pressed state of the button).
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual views::MenuButton* GetContextMenuButton() = 0;
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Returns the current web contents.
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual content::WebContents* GetCurrentWebContents() = 0;
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Hides whatever popup is active (even if it's not this one).
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual void HideActivePopup() = 0;
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Called when the icon is updated; this is forwarded from the icon factory.
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual void OnIconUpdated() = 0;
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Called when a popup is shown. See ExecuteAction() for the definition of
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // |grant_tab_permissions|.
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual void OnPopupShown(bool grant_tab_permissions) {}
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  // Does any additional cleanup after the popup is closed.
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual void CleanupPopup() {}
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project protected:
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  virtual ~ExtensionActionViewDelegate() {}
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project};
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif  // CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_ACTION_VIEW_DELEGATE_H_
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project