15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/devtools/devtools_window.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/infobars/infobar_container.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/ui/omnibox/omnibox_popup_model_observer.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_frame.h"
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/ui/views/frame/immersive_mode_controller.h"
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/views/frame/scroll_end_effect_controller.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/load_complete_listener.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/models/simple_menu_model.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/sys_color_change_listener.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/button/button.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/single_split_view_listener.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/webview/unhandled_keyboard_event_handler.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_delegate.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget_observer.h"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/window/client_view.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/hang_monitor/hung_plugin_action.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/hang_monitor/hung_window_detector.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: For more information about the objects and files in this directory,
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// view: http://dev.chromium.org/developers/design-documents/browser-window
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarView;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserViewLayout;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentsContainer;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadShelfView;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FullscreenExitBubbleViews;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InfoBarContainerView;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBarView;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusBubbleViews;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchViewController;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabStrip;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TabStripModel;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToolbarView;
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TopContainerView;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class JumpList;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace autofill {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PasswordGenerator;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHost;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AccessiblePaneView;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExternalFocusTracker;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebView;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)///////////////////////////////////////////////////////////////////////////////
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserView
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  A ClientView subclass that provides the contents of a browser window,
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  including the TabStrip, toolbars, download shelves, the content area etc.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserView : public BrowserWindow,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public BrowserWindowTesting,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public TabStripModelObserver,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public ui::AcceleratorProvider,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::WidgetDelegate,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::WidgetObserver,
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::ClientView,
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public InfoBarContainer::Delegate,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    public views::SingleSplitViewListener,
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                    public gfx::SysColorChangeListener,
987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                    public LoadCompleteListener::Delegate,
997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                    public OmniboxPopupModelObserver {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The browser view's class name.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static const char kViewClassName[];
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  BrowserView();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserView();
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Takes ownership of |browser|.
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void Init(Browser* browser);
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_frame(BrowserFrame* frame) { frame_ = frame; }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserFrame* frame() const { return frame_; }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the BrowserView* interface implementation (an
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // instance of this object, typically) for a given native window, or NULL if
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // there is no such association.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Don't use this unless you only have a NativeWindow. In nearly all
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // situations plumb through browser and use it.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static BrowserView* GetBrowserViewForNativeWindow(gfx::NativeWindow window);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the BrowserView used for the specified Browser.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static BrowserView* GetBrowserViewForBrowser(const Browser* browser);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a Browser instance of this view.
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Browser* browser() { return browser_.get(); }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Initializes (or re-initializes) the status bubble.  We try to only create
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // the bubble once and re-use it for the life of the browser, but certain
129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // events (such as changing enabling/disabling Aero on Win) can force a need
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // to change some of the bubble's creation parameters.
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void InitStatusBubble();
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the apparent bounds of the toolbar, in BrowserView coordinates.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These differ from |toolbar_.bounds()| in that they match where the toolbar
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // background image is drawn -- slightly outside the "true" bounds
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // horizontally. Note that this returns the bounds for the toolbar area.
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::Rect GetToolbarBounds() const;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the constraining bounding box that should be used to lay out the
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // FindBar within. This is _not_ the size of the find bar, just the bounding
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // box it should be laid out within. The coordinate system of the returned
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // rect is in the coordinate system of the frame, since the FindBar is a child
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // window.
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect GetFindBarBoundingBox() const;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the preferred height of the TabStrip. Used to position the OTR
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // avatar icon.
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int GetTabStripHeight() const;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Takes some view's origin (relative to this BrowserView) and offsets it such
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that it can be used as the source origin for seamlessly tiling the toolbar
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // background image over that view.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point OffsetPointForToolbarBackgroundImage(
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Point& point) const;
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Container for the tabstrip, toolbar, etc.
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopContainerView* top_container() { return top_container_; }
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessor for the TabStrip.
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TabStrip* tabstrip() { return tabstrip_; }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessor for the Toolbar.
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ToolbarView* toolbar() { return toolbar_; }
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Bookmark bar may be NULL, for example for pop-ups.
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  BookmarkBarView* bookmark_bar() { return bookmark_bar_view_.get(); }
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
168868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // Returns the do-nothing view which controls the z-order of the find bar
169868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // widget relative to views which paint into layers and views which have an
170868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // associated NativeView. The presence / visibility of this view is not
171868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // indicative of the visibility of the find bar widget or even whether
172868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // FindBarController is initialized.
173868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  View* find_bar_host_view() { return find_bar_host_view_; }
174868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Accessor for the InfobarContainer.
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  InfoBarContainerView* infobar_container() { return infobar_container_; }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Accessor for the FullscreenExitBubbleViews.
1797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  FullscreenExitBubbleViews* fullscreen_exit_bubble() {
1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return fullscreen_bubble_.get();
1817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
1827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if various window components are visible.
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool IsTabStripVisible() const;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the profile associated with this Browser window is
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // incognito.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsOffTheRecord() const;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the profile associated with this Browser window is
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // a guest session.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsGuestSession() const;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Returns true if the profile associated with this Browser window is
1958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // not off the record or a guest session.
1968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  bool IsRegularOrGuestSession() const;
1978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
1988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // Returns the resource ID to use for the OTR icon, which depends on
1998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  // which layout is being shown and whether we are full-screen.
2008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  int GetOTRIconResourceID() const;
2018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // Returns the resource ID to use for the Guest icon, which may depend on
2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // which layout is being shown and whether we are full-screen.
2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  int GetGuestIconResourceID() const;
2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the non-client view should render an avatar icon.
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool ShouldShowAvatar() const;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Provides the containing frame with the accelerator for the specified
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // command id. This can be used to provide menu item shortcut hints etc.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if an accelerator was found for the specified |cmd_id|, false
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // otherwise.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetAccelerator(int cmd_id, ui::Accelerator* accelerator);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Returns true if the specificed |accelerator| is registered with this view.
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bool IsAcceleratorRegistered(const ui::Accelerator& accelerator);
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns the active WebContents. Used by our NonClientView's
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TabIconView::TabContentsProvider implementations.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng): exposing this here is a bit bogus, since it's only used to
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // determine loading state. It'd be nicer if we could change this to be
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bool IsSelectedTabLoading() const; or something like that. We could even
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // move it to a WindowDelegate subclass.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::WebContents* GetActiveWebContents() const;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves the icon to use in the frame to indicate an OTR window.
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::ImageSkia GetOTRAvatarIcon() const;
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the Browser object associated with this BrowserView is a
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // tabbed-type window (i.e. a browser window, not an app or popup).
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool IsBrowserTypeNormal() const {
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return browser_->is_type_tabbed();
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // See ImmersiveModeController for description.
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ImmersiveModeController* immersive_mode_controller() const {
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return immersive_mode_controller_.get();
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Restores the focused view. This is also used to set the initial focus
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when a new browser window is created.
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RestoreFocus();
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetWindowSwitcherButton(views::Button* button);
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Button* window_switcher_button() {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return window_switcher_button_;
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Called after the widget's fullscreen state is changed without going through
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // FullscreenController. This method does any processing which was skipped.
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Only exiting fullscreen in this way is currently supported.
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void FullscreenStateChanged();
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called from BookmarkBarView/DownloadShelfView during their show/hide
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // animations.
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ToolbarSizeChanged(bool is_animating);
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from BrowserWindow:
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Show() OVERRIDE;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowInactive() OVERRIDE;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Hide() OVERRIDE;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Close() OVERRIDE;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Activate() OVERRIDE;
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Deactivate() OVERRIDE;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsActive() const OVERRIDE;
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FlashFrame(bool flash) OVERRIDE;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsAlwaysOnTop() const OVERRIDE;
2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void SetAlwaysOnTop(bool always_on_top) OVERRIDE;
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::NativeWindow GetNativeWindow() OVERRIDE;
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BrowserWindowTesting* GetBrowserWindowTesting() OVERRIDE;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual StatusBubble* GetStatusBubble() OVERRIDE;
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateTitleBar() OVERRIDE;
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void BookmarkBarStateChanged(
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BookmarkBar::AnimateChangeType change_type) OVERRIDE;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateDevTools() OVERRIDE;
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateLoadingAnimations(bool should_animate) OVERRIDE;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetStarredState(bool is_starred) OVERRIDE;
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetTranslateIconToggled(bool is_lit) OVERRIDE;
28168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnActiveTabChanged(content::WebContents* old_contents,
28268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  content::WebContents* new_contents,
28368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  int index,
28468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  int reason) OVERRIDE;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ZoomChangedForActiveTab(bool can_show_bubble) OVERRIDE;
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetRestoredBounds() const OVERRIDE;
287b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual ui::WindowShowState GetRestoredState() const OVERRIDE;
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetBounds() const OVERRIDE;
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsMaximized() const OVERRIDE;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsMinimized() const OVERRIDE;
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Maximize() OVERRIDE;
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Minimize() OVERRIDE;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Restore() OVERRIDE;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterFullscreen(
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url, FullscreenExitBubbleType bubble_type) OVERRIDE;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ExitFullscreen() OVERRIDE;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFullscreenExitBubbleContent(
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url,
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FullscreenExitBubbleType bubble_type) OVERRIDE;
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const OVERRIDE;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsFullscreen() const OVERRIDE;
302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool IsFullscreenBubbleVisible() const OVERRIDE;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetMetroSnapMode(bool enable) OVERRIDE;
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsInMetroSnapMode() const OVERRIDE;
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBar* GetLocationBar() const OVERRIDE;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetFocusToLocationBar(bool select_all) OVERRIDE;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateReloadStopState(bool is_loading, bool force) OVERRIDE;
3103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void UpdateToolbar(content::WebContents* contents) OVERRIDE;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusToolbar() OVERRIDE;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusAppMenu() OVERRIDE;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusBookmarksToolbar() OVERRIDE;
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void FocusInfobars() OVERRIDE;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RotatePaneFocus(bool forwards) OVERRIDE;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyBrowser() OVERRIDE;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarVisible() const OVERRIDE;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarAnimating() const OVERRIDE;
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsTabStripEditable() const OVERRIDE;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsToolbarVisible() const OVERRIDE;
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE;
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DisableInactiveFrame() OVERRIDE;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ConfirmAddSearchProvider(TemplateURL* template_url,
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        Profile* profile) OVERRIDE;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowUpdateChromeDialog() OVERRIDE;
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkBubble(const GURL& url,
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  bool already_bookmarked) OVERRIDE;
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkPrompt() OVERRIDE;
3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void ShowTranslateBubble(
3301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      content::WebContents* contents,
331a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TranslateBubbleModel::ViewState view_state,
332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TranslateErrors::Type error_type) OVERRIDE;
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_ONE_CLICK_SIGNIN)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowOneClickSigninBubble(
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninBubbleType type,
336a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& email,
337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& error_message,
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StartSyncCallback& start_sync_callback) OVERRIDE;
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(beng): Not an override, move somewhere else.
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetDownloadShelfVisible(bool visible);
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDownloadShelfVisible() const OVERRIDE;
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual DownloadShelf* GetDownloadShelf() OVERRIDE;
3443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void ConfirmBrowserCloseWithPendingDownloads(
3453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      int download_count,
3463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      Browser::DownloadClosePreventionType dialog_type,
3473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      bool app_modal,
3483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::Callback<void(bool)>& callback) OVERRIDE;
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UserChangedTheme() OVERRIDE;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetExtraRenderViewHeight() const OVERRIDE;
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE;
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowWebsiteSettings(Profile* profile,
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   content::WebContents* web_contents,
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const GURL& url,
3557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   const content::SSLStatus& ssl) OVERRIDE;
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAppMenu() OVERRIDE;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PreHandleKeyboardEvent(
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event,
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool* is_keyboard_shortcut) OVERRIDE;
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event) OVERRIDE;
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cut() OVERRIDE;
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Copy() OVERRIDE;
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Paste() OVERRIDE;
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WindowOpenDisposition GetDispositionForPopupBounds(
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& bounds) OVERRIDE;
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual FindBar* CreateFindBar() OVERRIDE;
36890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual web_modal::WebContentsModalDialogHost*
369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      GetWebContentsModalDialogHost() OVERRIDE;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubble(content::WebContents* web_contents,
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const gfx::Rect& rect) OVERRIDE;
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubbleFromAvatarButton() OVERRIDE;
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowPasswordGenerationBubble(
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& rect,
37558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const autofill::PasswordForm& form,
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      autofill::PasswordGenerator* password_generator) OVERRIDE;
377bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  virtual void OverscrollUpdate(int delta_y) OVERRIDE;
378424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual int GetRenderViewHeightInsetWithDetachedBookmarkBar() OVERRIDE;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from BrowserWindowTesting:
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BookmarkBarView* GetBookmarkBarView() const OVERRIDE;
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBarView* GetLocationBarView() const OVERRIDE;
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetTabContentsContainerView() const OVERRIDE;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ToolbarView* GetToolbarView() const OVERRIDE;
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from TabStripModelObserver:
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TabDetachedAt(content::WebContents* contents,
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             int index) OVERRIDE;
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TabDeactivated(content::WebContents* contents) OVERRIDE;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TabStripEmpty() OVERRIDE;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from ui::AcceleratorProvider:
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetAcceleratorForCommandId(int command_id,
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::Accelerator* accelerator) OVERRIDE;
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::WidgetDelegate:
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanResize() const OVERRIDE;
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanMaximize() const OVERRIDE;
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanActivate() const OVERRIDE;
400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetWindowTitle() const OVERRIDE;
401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::string16 GetAccessibleWindowTitle() const OVERRIDE;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetInitiallyFocusedView() OVERRIDE;
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldShowWindowTitle() const OVERRIDE;
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::ImageSkia GetWindowAppIcon() OVERRIDE;
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::ImageSkia GetWindowIcon() OVERRIDE;
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldShowWindowIcon() const OVERRIDE;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ExecuteWindowsCommand(int command_id) OVERRIDE;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual std::string GetWindowName() const OVERRIDE;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SaveWindowPlacement(const gfx::Rect& bounds,
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   ui::WindowShowState show_state) OVERRIDE;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetSavedWindowPlacement(
4120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      const views::Widget* widget,
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Rect* bounds,
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ui::WindowShowState* show_state) const OVERRIDE;
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetContentsView() OVERRIDE;
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::ClientView* CreateClientView(views::Widget* widget) OVERRIDE;
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWindowBeginUserBoundsChange() OVERRIDE;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWidgetMove() OVERRIDE;
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::Widget* GetWidget() OVERRIDE;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const views::Widget* GetWidget() const OVERRIDE;
421c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void GetAccessiblePanes(std::vector<View*>* panes) OVERRIDE;
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::WidgetObserver:
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnWidgetActivationChanged(views::Widget* widget,
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         bool active) OVERRIDE;
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Overridden from views::ClientView:
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CanClose() OVERRIDE;
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int NonClientHitTest(const gfx::Point& point) OVERRIDE;
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Size GetMinimumSize() OVERRIDE;
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // InfoBarContainer::Delegate overrides
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SkColor GetInfoBarSeparatorColor() const OVERRIDE;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void InfoBarContainerStateChanged(bool is_animating) OVERRIDE;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool DrawInfoBarArrows(int* x) const OVERRIDE;
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // views::SingleSplitViewListener overrides:
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SplitHandleMoved(views::SingleSplitView* sender) OVERRIDE;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // gfx::SysColorChangeListener overrides:
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSysColorChange() OVERRIDE;
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Overridden from views::View:
444b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  virtual const char* GetClassName() const OVERRIDE;
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Layout() OVERRIDE;
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
447a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual void ViewHierarchyChanged(
448a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      const ViewHierarchyChangedDetails& details) OVERRIDE;
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ChildPreferredSizeChanged(View* child) OVERRIDE;
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE;
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Overridden from ui::AcceleratorTarget:
453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // OmniboxPopupModelObserver overrides
4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void OnOmniboxPopupShownOrHidden() OVERRIDE;
4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Testing interface:
459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::SingleSplitView* GetContentsSplitForTest() { return contents_split_; }
460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ContentsContainer* GetContentsContainerForTest() {
461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return contents_container_;
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::WebView* GetContentsWebViewForTest() { return contents_web_view_; }
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
46690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate
46790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // interface to keep these two classes decoupled and testable.
46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  friend class BrowserViewLayoutDelegateImpl;
469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(BrowserViewTest, BrowserView);
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(BrowserViewsAccessibilityTest,
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           TestAboutChromeViewAccObj);
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  enum FullscreenType {
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FOR_DESKTOP,
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FOR_METRO
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Appends to |toolbars| a pointer to each AccessiblePaneView that
479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // can be traversed using F6, in the order they should be traversed.
480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void GetAccessiblePanes(std::vector<views::AccessiblePaneView*>* panes);
481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Constructs and initializes the child views.
483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void InitViews();
484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Callback for the loading animation(s) associated with this view.
486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void LoadingAnimationCallback();
487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // LoadCompleteListener::Delegate implementation. Creates and initializes the
489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // |jumplist_| after the first page load.
490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnLoadCompleted() OVERRIDE;
491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the BrowserViewLayout.
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserViewLayout* GetBrowserViewLayout() const;
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Layout the Status Bubble.
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LayoutStatusBubble();
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Prepare to show the Bookmark Bar for the specified WebContents.
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the Bookmark Bar can be shown (i.e. it's supported for this
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser type) and there should be a subsequent re-layout to show it.
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |contents| can be NULL.
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool MaybeShowBookmarkBar(content::WebContents* contents);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Moves the bookmark bar view to the specified parent, which may be NULL,
505c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // |this|, or |top_container_|. Ensures that |top_container_| stays in front
506c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // of |bookmark_bar_view_|.
507c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetBookmarkBarParent(views::View* new_parent);
508c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Prepare to show an Info Bar for the specified WebContents. Returns
5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if there is an Info Bar to show and one is supported for this Browser
5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // type, and there should be a subsequent re-layout to show it.
5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |contents| can be NULL.
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool MaybeShowInfoBar(content::WebContents* contents);
5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates devtools window for given contents. This method will show docked
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // devtools window for inspected |web_contents| that has docked devtools
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and hide it for NULL or not inspected |web_contents|. It will also make
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sure devtools window size and position are restored for given tab.
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateDevToolsForContents(content::WebContents* web_contents);
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows docked devtools.
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowDevToolsContainer();
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Hides docked devtools.
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HideDevToolsContainer();
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Reads split position from the current tab's devtools window and applies
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // it to the devtools split.
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateDevToolsSplitPosition();
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates various optional child Views, e.g. Bookmarks Bar, Info Bar or the
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Download Shelf in response to a change notification from the specified
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |contents|. |contents| can be NULL. In this case, all optional UI will be
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // removed.
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void UpdateUIForContents(content::WebContents* contents);
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked to update the necessary things when our fullscreen state changes
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to |fullscreen|. On Windows this is invoked immediately when we toggle the
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // full screen state. On Linux changing the fullscreen state is async, so we
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ask the window to change its fullscreen state, then when we get
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // notification that it succeeded this method is invoked.
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If |url| is not empty, it is the URL of the page that requested fullscreen
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (via the fullscreen JS API).
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |bubble_type| determines what should be shown in the fullscreen exit
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // bubble.
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ProcessFullscreen(bool fullscreen,
5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         FullscreenType fullscreen_type,
5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const GURL& url,
5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         FullscreenExitBubbleType bubble_type);
5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Returns whether immmersive fullscreen should replace fullscreen. This
552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // should only occur for "browser-fullscreen" for tabbed-typed windows (not
553eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // for tab-fullscreen and not for app/popup type windows).
554eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool ShouldUseImmersiveFullscreenForUrl(const GURL& url) const;
555eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Copy the accelerator table from the app resources into something we can
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // use.
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void LoadAccelerators();
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Retrieves the command id for the specified Windows app command.
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int GetCommandIDForAppCommandID(int app_command_id) const;
5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Initialize the hung plugin detector.
5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void InitHangMonitor();
5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Possibly records a user metrics action corresponding to the passed-in
5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // accelerator.  Only implemented for Chrome OS, where we're interested in
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // learning about how frequently the top-row keys are used.
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateAcceleratorMetrics(const ui::Accelerator& accelerator,
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                int command_id);
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Calls |method| which is either RenderWidgetHost::Cut, ::Copy, or ::Paste,
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // first trying the content WebContents, then the devtools WebContents, and
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // lastly the Views::Textfield if one is focused.
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DoCutCopyPaste(void (content::RenderWidgetHost::*method)(),
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                      int command_id);
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Calls |method| which is either RenderWidgetHost::Cut, ::Copy, or ::Paste on
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the given WebContents, returning true if it consumed the event.
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool DoCutCopyPasteForWebContents(
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::WebContents* contents,
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      void (content::RenderWidgetHost::*method)());
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the next app-modal dialog box, if there is one to be shown, or moves
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // an existing showing one to the front.
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ActivateAppModalDialog() const;
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Returns the max top arrow height for infobar.
589a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  int GetMaxTopInfoBarArrowHeight();
590a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Last focused view that issued a tab traversal.
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int last_focused_view_storage_id_;
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The BrowserFrame that hosts this view.
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserFrame* frame_;
5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Browser object we are associated with.
5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Browser> browser_;
5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // BrowserView layout (LTR one is pictured here).
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --------------------------------------------------------------------
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // | TopContainerView (top_container_)                                |
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  | Tabs (tabstrip_)                                           |  |
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  |------------------------------------------------------------|  |
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  | Navigation buttons, address bar, menu (toolbar_)           |  |
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |------------------------------------------------------------------|
610ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // | All infobars (infobar_container_) [1]                            |
611a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // |------------------------------------------------------------------|
612ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // | Bookmarks (bookmark_bar_view_) [1]                               |
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |------------------------------------------------------------------|
6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // | Debugger splitter (contents_split_)                              |
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // |  | Page content (contents_container_)                         |  |
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  |  --------------------------------------------------------  |  |
618a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // |  |  | contents_web_view_                                   |  |  |
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  |  --------------------------------------------------------  |  |
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  | Debugger (devtools_container_)                             |  |
6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  |                                                            |  |
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |  --------------------------------------------------------------  |
6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |------------------------------------------------------------------|
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // | Active downloads (download_shelf_)                               |
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // --------------------------------------------------------------------
6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
629ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // [1] The bookmark bar and info bar are swapped when on the new tab page.
630ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  //     Additionally when the bookmark bar is detached, contents_container_ is
631ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  //     positioned on top of the bar while the tab's contents are placed below
632ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  //     the bar.  This allows the find bar to always align with the top of
633ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  //     contents_container_ regardless if there's bookmark or info bars.
6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The view that manages the tab strip, toolbar, and sometimes the bookmark
636ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  // bar. Stacked top in the view hiearachy so it can be used to slide out
637a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // the top views in immersive fullscreen.
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopContainerView* top_container_;
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The TabStrip.
6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TabStrip* tabstrip_;
6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Toolbar containing the navigation buttons, menus and the address bar.
6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ToolbarView* toolbar_;
6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This button sits next to the tabs on the right hand side and it is used
6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // only in windows metro metro mode to allow the user to flip among browser
6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // windows.
6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::Button* window_switcher_button_;
6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The Bookmark Bar View for this window. Lazily created. May be NULL for
652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // non-tabbed browsers like popups. May not be visible.
6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<BookmarkBarView> bookmark_bar_view_;
6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // The do-nothing view which controls the z-order of the find bar widget
656868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // relative to views which paint into layers and views with an associated
657868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  // NativeView.
658868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  View* find_bar_host_view_;
659868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The download shelf view (view at the bottom of the page).
6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<DownloadShelfView> download_shelf_;
6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The InfoBarContainerView that contains InfoBars for the current tab.
6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  InfoBarContainerView* infobar_container_;
6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view that contains the selected WebContents.
667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::WebView* contents_web_view_;
6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view that contains devtools window for the selected WebContents.
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::WebView* devtools_container_;
6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
672a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // The view managing the |contents_web_view_|.
673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ContentsContainer* contents_container_;
6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Split view containing the contents container and devtools container.
6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::SingleSplitView* contents_split_;
6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Side to dock devtools to.
6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DevToolsDockSide devtools_dock_side_;
6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Docked devtools window instance. NULL when current tab is not inspected
6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // or is inspected with undocked version of DevToolsWindow.
6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DevToolsWindow* devtools_window_;
6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tracks and stores the last focused view which is not the
6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // devtools_container_ or any of its children. Used to restore focus once
6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the devtools_container_ is hidden.
6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<views::ExternalFocusTracker> devtools_focus_tracker_;
6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The Status information bubble that appears at the bottom of the window.
6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<StatusBubbleViews> status_bubble_;
6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A mapping between accelerators and commands.
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<ui::Accelerator, int> accelerator_table_;
6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if we have already been initialized.
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool initialized_;
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // True when in ProcessFullscreen(). The flag is used to avoid reentrance and
7001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // to ignore requests to layout while in ProcessFullscreen() to reduce
7011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // jankiness.
7021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  bool in_process_fullscreen_;
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<FullscreenExitBubbleViews> fullscreen_bubble_;
7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
706f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)#if defined(OS_WIN)
7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This object is used to perform periodic actions in a worker
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // thread. It is currently used to monitor hung plugin windows.
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WorkerThreadTicker ticker_;
7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This object is initialized with the frame window HWND. This
7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // object is also passed as a tick handler with the ticker_ object.
7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // It is used to periodically monitor for hung plugin windows
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HungWindowDetector hung_window_detector_;
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This object is invoked by hung_window_detector_ when it detects a hung
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // plugin window.
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  HungPluginAction hung_plugin_action_;
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Helper class to listen for completion of first page load.
7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LoadCompleteListener> load_complete_listener_;
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The custom JumpList for Windows 7.
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<JumpList> jumplist_;
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The timer used to update frames for the Loading Animation.
7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RepeatingTimer<BrowserView> loading_animation_timer_;
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
730c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::UnhandledKeyboardEventHandler unhandled_keyboard_event_handler_;
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Used to measure the loading spinner animation rate.
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TimeTicks last_animation_time_;
7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If this flag is set then SetFocusToLocationBar() will set focus to the
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // location bar even if the browser window is not active.
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool force_location_bar_focus_;
7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<ImmersiveModeController> immersive_mode_controller_;
7402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
741a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  scoped_ptr<ScrollEndEffectController> scroll_end_effect_controller_;
742a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::ScopedSysColorChangeListener color_change_listener_;
7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mutable base::WeakPtrFactory<BrowserView> activate_modal_dialog_factory_;
7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserView);
7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_H_
751