Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4910)

Unified Diff: chrome/browser/ui/views/toolbar/browser_action_view.h

Issue 431173002: Create ExtensionActionView class (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge conflict Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/toolbar/browser_action_view.h
diff --git a/chrome/browser/ui/views/toolbar/browser_action_view.h b/chrome/browser/ui/views/toolbar/browser_action_view.h
index 25dfe71bd08bca82b6cd8d3e56114f8509e04a8b..61cdf1bb499056366352e6c175f68d901742bf5f 100644
--- a/chrome/browser/ui/views/toolbar/browser_action_view.h
+++ b/chrome/browser/ui/views/toolbar/browser_action_view.h
@@ -5,17 +5,14 @@
#ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_BROWSER_ACTION_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_TOOLBAR_BROWSER_ACTION_VIEW_H_
-#include "chrome/browser/extensions/extension_action_icon_factory.h"
-#include "chrome/browser/extensions/extension_context_menu_model.h"
-#include "chrome/browser/ui/views/extensions/extension_popup.h"
+#include "chrome/browser/ui/views/extensions/extension_action_view_controller.h"
+#include "chrome/browser/ui/views/extensions/extension_action_view_delegate.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
-#include "ui/views/context_menu_controller.h"
#include "ui/views/controls/button/menu_button.h"
#include "ui/views/controls/button/menu_button_listener.h"
#include "ui/views/drag_controller.h"
#include "ui/views/view.h"
-#include "ui/views/widget/widget_observer.h"
class Browser;
class BrowserActionButton;
@@ -23,18 +20,12 @@ class ExtensionAction;
namespace extensions {
class Extension;
-class ExtensionToolbarModel;
}
namespace gfx {
class Image;
}
-namespace views {
-class MenuItemView;
-class MenuRunner;
-}
-
////////////////////////////////////////////////////////////////////////////////
// BrowserActionView
// A single entry in the browser action container. This contains the actual
@@ -45,8 +36,8 @@ class BrowserActionView : public views::View {
// dragged/dropped.
class Delegate : public views::DragController {
public:
- // Returns the current tab's ID, or -1 if there is no current tab.
- virtual int GetCurrentTabId() const = 0;
+ // Returns the current web contents.
+ virtual content::WebContents* GetCurrentWebContents() = 0;
// Called when a browser action becomes visible/hidden.
virtual void OnBrowserActionVisibilityChanged() = 0;
@@ -70,9 +61,6 @@ class BrowserActionView : public views::View {
// Hides the active popup of the delegate, if one exists.
virtual void HideActivePopup() = 0;
- // Returns the Model backing the browser actions.
- virtual extensions::ExtensionToolbarModel* GetModel() = 0;
-
protected:
virtual ~Delegate() {}
};
@@ -82,7 +70,7 @@ class BrowserActionView : public views::View {
Delegate* delegate);
virtual ~BrowserActionView();
- BrowserActionButton* button() { return button_; }
+ BrowserActionButton* button() { return button_.get(); }
// Gets browser action button icon with the badge.
gfx::ImageSkia GetIconWithBadge();
@@ -98,17 +86,11 @@ class BrowserActionView : public views::View {
const views::CullSet& cull_set) OVERRIDE;
private:
- // The Browser object this view is associated with.
- Browser* browser_;
-
// Usually a container for this view.
Delegate* delegate_;
// The button this view contains.
- BrowserActionButton* button_;
-
- // Extension this view associated with.
- const extensions::Extension* extension_;
+ scoped_ptr<BrowserActionButton> button_;
DISALLOW_COPY_AND_ASSIGN(BrowserActionView);
};
@@ -117,15 +99,12 @@ class BrowserActionView : public views::View {
// BrowserActionButton
// The BrowserActionButton is a specialization of the MenuButton class.
-// It acts on a ExtensionAction, in this case a BrowserAction and handles
-// loading the image for the button asynchronously on the file thread.
+// This wraps an ExtensionActionView, and has knowledge of how to render itself
+// and when to trigger the extension action.
class BrowserActionButton : public views::MenuButton,
+ public ExtensionActionViewDelegate,
public views::ButtonListener,
- public views::ContextMenuController,
- public content::NotificationObserver,
- public ExtensionActionIconFactory::Observer,
- public views::WidgetObserver,
- public ExtensionContextMenuModel::PopupDelegate {
+ public content::NotificationObserver {
public:
// The IconObserver will receive a notification when the button's icon has
// been updated.
@@ -138,15 +117,19 @@ class BrowserActionButton : public views::MenuButton,
};
BrowserActionButton(const extensions::Extension* extension,
- Browser* browser_,
+ Browser* browser,
BrowserActionView::Delegate* delegate);
+ virtual ~BrowserActionButton();
- // Call this instead of delete.
- void Destroy();
-
- ExtensionAction* browser_action() const { return browser_action_; }
- const extensions::Extension* extension() { return extension_; }
-
+ const extensions::Extension* extension() const {
+ return view_controller_->extension();
+ }
+ ExtensionAction* extension_action() {
+ return view_controller_->extension_action();
+ }
+ ExtensionActionViewController* view_controller() {
+ return view_controller_.get();
+ }
void set_icon_observer(IconObserver* icon_observer) {
icon_observer_ = icon_observer;
}
@@ -155,42 +138,20 @@ class BrowserActionButton : public views::MenuButton,
void UpdateState();
// Does this button's action have a popup?
- virtual bool IsPopup();
- virtual GURL GetPopupUrl();
-
- // Show this extension's popup. If |grant_tab_permissions| is true, this will
- // grant the extension active tab permissions. Only do this if this was done
- // through a user action (and not e.g. an API).
- bool ShowPopup(ExtensionPopup::ShowAction show_action,
- bool grant_tab_permissions);
-
- // Hides the popup, if one is open.
- void HidePopup();
-
- // Executes the browser action (and also shows the popup, if one exists).
- void ExecuteBrowserAction();
+ bool IsPopup();
// Overridden from views::View:
- virtual bool CanHandleAccelerators() const OVERRIDE;
virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
// Overridden from views::ButtonListener:
virtual void ButtonPressed(views::Button* sender,
const ui::Event& event) OVERRIDE;
- // Overridden from views::ContextMenuController.
- virtual void ShowContextMenuForView(View* source,
- const gfx::Point& point,
- ui::MenuSourceType source_type) OVERRIDE;
-
// Overridden from content::NotificationObserver:
virtual void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) OVERRIDE;
- // Overriden from ExtensionActionIconFactory::Observer.
- virtual void OnIconUpdated() OVERRIDE;
-
// MenuButton behavior overrides. These methods all default to LabelButton
// behavior unless this button is a popup. In that case, it uses MenuButton
// behavior. MenuButton has the notion of a child popup being shown where the
@@ -205,12 +166,6 @@ class BrowserActionButton : public views::MenuButton,
virtual scoped_ptr<views::LabelButtonBorder> CreateDefaultBorder() const
OVERRIDE;
- // Overridden from ui::AcceleratorTarget.
- virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
-
- // ExtensionContextMenuModel::PopupDelegate:
- virtual void InspectPopup() OVERRIDE;
-
// Notifications when to set button state to pushed/not pushed (for when the
// popup/context menu is hidden or shown by the container).
void SetButtonPushed();
@@ -221,10 +176,6 @@ class BrowserActionButton : public views::MenuButton,
// receive drag events.
bool IsEnabled(int tab_id) const;
- // Accessors.
- ExtensionActionIconFactory& icon_factory() { return icon_factory_; }
- ExtensionPopup* popup() { return popup_; }
-
// Gets the icon of this button and its badge.
gfx::ImageSkia GetIconWithBadge();
@@ -238,64 +189,35 @@ class BrowserActionButton : public views::MenuButton,
virtual void OnDragDone() OVERRIDE;
private:
- virtual ~BrowserActionButton();
-
- // views::WidgetObserver:
- virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
-
- // Register an extension command if the extension has an active one.
- void MaybeRegisterExtensionCommand();
-
- // Unregisters an extension command, if the extension has registered one and
- // it is active.
- void MaybeUnregisterExtensionCommand(bool only_if_active);
-
- // Cleans up after the popup. If |close_widget| is true, this will call
- // Widget::Close() on the popup's widget; otherwise it assumes the popup is
- // already closing.
- void CleanupPopup(bool close_widget);
-
- // The Browser object this button is associated with.
- Browser* browser_;
-
- // The browser action this view represents. The ExtensionAction is not owned
- // by this class.
- ExtensionAction* browser_action_;
-
- // The extension associated with the browser action we're displaying.
- const extensions::Extension* extension_;
+ // ExtensionActionViewDelegate:
+ virtual views::View* GetAsView() OVERRIDE;
+ virtual bool IsShownInMenu() OVERRIDE;
+ virtual views::FocusManager* GetFocusManagerForAccelerator() OVERRIDE;
+ virtual views::Widget* GetParentForContextMenu() OVERRIDE;
+ virtual views::View* GetReferenceViewForPopup() OVERRIDE;
+ virtual content::WebContents* GetCurrentWebContents() OVERRIDE;
+ virtual void HideActivePopup() OVERRIDE;
+ virtual void OnIconUpdated() OVERRIDE;
+ virtual void OnPopupShown(bool grant_tab_permissions) OVERRIDE;
+ virtual void CleanupPopup() OVERRIDE;
+ virtual void OnWillShowContextMenus() OVERRIDE;
+ virtual void OnContextMenuDone() OVERRIDE;
- // The object that will be used to get the browser action icon for us.
- // It may load the icon asynchronously (in which case the initial icon
- // returned by the factory will be transparent), so we have to observe it for
- // updates to the icon.
- ExtensionActionIconFactory icon_factory_;
+ // The controller for this ExtensionAction view.
+ scoped_ptr<ExtensionActionViewController> view_controller_;
// Delegate that usually represents a container for BrowserActionView.
BrowserActionView::Delegate* delegate_;
- // Used to make sure MaybeRegisterExtensionCommand() is called only once
- // from ViewHierarchyChanged().
+ // Used to make sure we only register the command once.
bool called_registered_extension_command_;
content::NotificationRegistrar registrar_;
- // The extension key binding accelerator this browser action is listening for
- // (to show the popup).
- scoped_ptr<ui::Accelerator> keybinding_;
-
- // Responsible for running the menu.
- scoped_ptr<views::MenuRunner> menu_runner_;
-
- // The browser action's popup, if it is visible; NULL otherwise.
- ExtensionPopup* popup_;
-
// The observer that we need to notify when the icon of the button has been
// updated.
IconObserver* icon_observer_;
- friend class base::DeleteHelper<BrowserActionButton>;
-
DISALLOW_COPY_AND_ASSIGN(BrowserActionButton);
};

Powered by Google App Engine
This is Rietveld 408576698