1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_VIEW_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/command_observer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/toolbar/back_forward_menu_model.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/accessible_pane_view.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/menu_button.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/menu_button_listener.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class BackButton;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserActionsContainer;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class HomeButton;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ReloadButton;
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ToolbarButton;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WrenchMenu;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WrenchMenuModel;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WrenchToolbarButton;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace extensions {
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Command;
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Extension;
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass ExtensionMessageBubbleFactory;
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MenuListener;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The Browser Window's toolbar.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToolbarView : public views::AccessiblePaneView,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::MenuButtonListener,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public ui::AcceleratorProvider,
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public LocationBarView::Delegate,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public content::NotificationObserver,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public CommandObserver,
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::ButtonListener,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    public views::WidgetObserver {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view class name.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kViewClassName[];
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit ToolbarView(Browser* browser);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ToolbarView();
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create the contents of the Browser Toolbar.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Init();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Forces the toolbar (and transitively the location bar) to update its
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // current state.  If |tab| is non-NULL, we're switching (back?) to this tab
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // and should restore any previous location bar state (such as user editing)
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // as well.
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  void Update(content::WebContents* tab);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set focus to the toolbar with complete keyboard access, with the
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // focus initially set to the app menu. Focus will be restored
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to the last focused view if the user escapes.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetPaneFocusAndFocusAppMenu();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the app menu is focused.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsAppMenuFocused();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add a listener to receive a callback when the menu opens.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddMenuListener(views::MenuListener* listener);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Remove a menu listener.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveMenuListener(views::MenuListener* listener);
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetAcceleratorInfo(int id, ui::Accelerator* accel);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the view to which the bookmark bubble should be anchored.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::View* GetBookmarkBubbleAnchor();
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Returns the view to which the Translate bubble should be anchored.
881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  views::View* GetTranslateBubbleAnchor();
891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Executes |command| registered by |extension|.
91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ExecuteExtensionCommand(const extensions::Extension* extension,
92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               const extensions::Command& command);
93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Shows the extension's page action, if present.
95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ShowPageActionPopup(const extensions::Extension* extension);
96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Shows the extension's browser action, if present.
98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ShowBrowserActionPopup(const extensions::Extension* extension);
99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessors...
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser() const { return browser_; }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserActionsContainer* browser_actions() const { return browser_actions_; }
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ReloadButton* reload_button() const { return reload_; }
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LocationBarView* location_bar() const { return location_bar_; }
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::MenuButton* app_menu() const;
106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  HomeButton* home_button() const { return home_; }
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from AccessiblePaneView
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetPaneFocus(View* initial_focus) OVERRIDE;
110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void GetAccessibleState(ui::AXViewState* state) OVERRIDE;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::MenuButtonListener:
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnMenuButtonClicked(views::View* source,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const gfx::Point& point) OVERRIDE;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from LocationBarView::Delegate:
1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual content::WebContents* GetWebContents() OVERRIDE;
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual ToolbarModel* GetToolbarModel() OVERRIDE;
1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual const ToolbarModel* GetToolbarModel() const OVERRIDE;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual InstantController* GetInstant() OVERRIDE;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* CreateViewsBubble(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      views::BubbleDelegateView* bubble_delegate) OVERRIDE;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual PageActionImageView* CreatePageActionImageView(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LocationBarView* owner, ExtensionAction* action) OVERRIDE;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ContentSettingBubbleModelDelegate*
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetContentSettingBubbleModelDelegate() OVERRIDE;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowWebsiteSettings(content::WebContents* web_contents,
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   const GURL& url,
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   const content::SSLStatus& ssl) OVERRIDE;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from CommandObserver:
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnabledStateChangedForCommand(int id, bool enabled) OVERRIDE;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::ButtonListener:
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const ui::Event& event) OVERRIDE;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Overridden from views::WidgetObserver:
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void OnWidgetVisibilityChanged(views::Widget* widget,
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                         bool visible) OVERRIDE;
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from content::NotificationObserver:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationSource& source,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::AcceleratorProvider:
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetAcceleratorForCommandId(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int command_id, ui::Accelerator* accelerator) OVERRIDE;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::View:
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE;
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetMinimumSize() const OVERRIDE;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Layout() OVERRIDE;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HitTestRect(const gfx::Rect& rect) const OVERRIDE;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnThemeChanged() OVERRIDE;
158b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual const char* GetClassName() const OVERRIDE;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AcceleratorPressed(const ui::Accelerator& acc) OVERRIDE;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether the wrench/hotdogs menu is currently showing.
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsWrenchMenuShowing() const;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // Whether the toolbar view needs its background painted by the
1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  // BrowserNonClientFrameView.
1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  bool ShouldPaintBackground() const;
1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  enum {
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // The apparent horizontal space between most items, and the vertical
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // padding above and below them.
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    kStandardSpacing = 3,
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // The top of the toolbar has an edge we have to skip over in addition to
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // the standard spacing.
175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    kVertSpacing = 5,
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  };
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from AccessiblePaneView
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetPaneFocusAndFocusDefault() OVERRIDE;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RemovePaneFocus() OVERRIDE;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Types of display mode this toolbar can have.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum DisplayMode {
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAYMODE_NORMAL,       // Normal toolbar with buttons, etc.
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DISPLAYMODE_LOCATION      // Slimline toolbar showing only compact location
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                              // bar, used for popups.
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if we should show the upgrade recommended dot.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ShouldShowUpgradeRecommended();
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if we should show the background page badge.
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ShouldShowBackgroundPageBadge();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if we should show the warning for incompatible software.
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ShouldShowIncompatibilityWarning();
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the number of pixels above the location bar in non-normal display.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int PopupTopSpacing() const;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Given toolbar contents of size |size|, returns the total toolbar size.
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Size SizeForContentSize(gfx::Size size) const;
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Loads the images for all the child views.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadImages();
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_display_mode_normal() const {
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return display_mode_ == DISPLAYMODE_NORMAL;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the critical notification bubble against the wrench menu.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowCriticalNotification();
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Shows the outdated install notification bubble against the wrench menu.
217effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // |auto_update_enabled| is set to true when auto-upate is on.
218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void ShowOutdatedInstallNotification(bool auto_update_enabled);
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the badge and the accessible name of the app menu (Wrench).
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAppMenuState();
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Updates the severity level on the wrench menu button.
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void UpdateWrenchButtonSeverity();
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnShowHomeButtonChanged();
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int content_shadow_height() const;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Controls
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  BackButton* back_;
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ToolbarButton* forward_;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ReloadButton* reload_;
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  HomeButton* home_;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LocationBarView* location_bar_;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserActionsContainer* browser_actions_;
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WrenchToolbarButton* app_menu_;
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Browser* browser_;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Controls whether or not a home button should be shown on the toolbar.
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BooleanPrefMember show_home_button_;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The display mode used when laying out the toolbar.
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DisplayMode display_mode_;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Wrench model and menu.
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Note that the menu should be destroyed before the model it uses, so the
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // menu should be listed later.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<WrenchMenuModel> wrench_menu_model_;
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<WrenchMenu> wrench_menu_;
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The factory to create bubbles to warn about dangerous/suspicious
253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // extensions.
254effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  scoped_ptr<extensions::ExtensionMessageBubbleFactory>
255effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      extension_message_bubble_factory_;
256effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A list of listeners to call when the menu opens.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<views::MenuListener> menu_listeners_;
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::NotificationRegistrar registrar_;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(ToolbarView);
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_UI_VIEWS_TOOLBAR_TOOLBAR_VIEW_H_
266