12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 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_BROWSER_WINDOW_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_BROWSER_WINDOW_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_forward.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_bar.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble_type.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_types.h"
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/base_window.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserWindowTesting;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadShelf;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FindBar;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBar;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusBubble;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURL;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToolbarView;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace autofill {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PasswordGenerator;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NativeWebKeyboardEvent;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PasswordForm;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SSLStatus;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace web_modal {
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class WebContentsModalDialogHost;
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserWindow interface
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  An interface implemented by the "view" of the Browser window.
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//  This interface includes ui::BaseWindow methods as well as Browser window
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  specific methods.
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: All getters may return NULL.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class BrowserWindow : public ui::BaseWindow {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserWindow() {}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //////////////////////////////////////////////////////////////////////////////
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // ui::BaseWindow interface notes:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes the window as soon as possible. If the window is not in a drag
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // session, it will close immediately; otherwise, it will move offscreen (so
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // events are still fired) until the drag ends, then close. This assumes
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that the Browser is not immediately destroyed, but will be eventually
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // destroyed by other means (eg, the tab strip going to zero elements).
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Bad things happen if the Browser dtor is called directly as a result of
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // invoking this method.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // virtual void Close() = 0;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser::OnWindowDidShow should be called after showing the window.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // virtual void Show() = 0;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //////////////////////////////////////////////////////////////////////////////
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser specific methods:
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the testing interface to the Browser window, or NULL
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if there is none.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BrowserWindowTesting* GetBrowserWindowTesting() = 0;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the status bubble associated with the frame
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual StatusBubble* GetStatusBubble() = 0;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the frame that the selected tab favicon or title has changed. Some
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // frames may need to refresh their title bar.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateTitleBar() = 0;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the state of the bookmark bar changes. This is only invoked if
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the state changes for the current tab, it is not sent when switching tabs.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void BookmarkBarStateChanged(
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BookmarkBar::AnimateChangeType change_type) = 0;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the frame that the dev tools window for the selected tab has
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // changed.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateDevTools() = 0;
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update any loading animations running in the window. |should_animate| is
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if there are tabs loading and the animations should continue, false
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if there are no active loads and the animations should end.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateLoadingAnimations(bool should_animate) = 0;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the starred state for the current tab.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetStarredState(bool is_starred) = 0;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to force the zoom state to for the active tab to be recalculated.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |can_show_bubble| is true when a user presses the zoom up or down keyboard
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // shortcuts and will be false in other cases (e.g. switching tabs, "clicking"
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // + or - in the wrench menu to change zoom).
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ZoomChangedForActiveTab(bool can_show_bubble) = 0;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessors for fullscreen mode state.
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterFullscreen(const GURL& url,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               FullscreenExitBubbleType bubble_type) = 0;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ExitFullscreen() = 0;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFullscreenExitBubbleContent(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FullscreenExitBubbleType bubble_type) = 0;
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Windows and GTK remove the top controls in fullscreen, but Mac and Ash
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // keep the controls in a slide-down panel.
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const = 0;
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the fullscreen bubble is visible.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsFullscreenBubbleVisible() const = 0;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets state for entering or exiting Win8 Metro snap mode.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetMetroSnapMode(bool enable) = 0;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the window is currently in Win8 Metro snap mode.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsInMetroSnapMode() const = 0;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the location bar.
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBar* GetLocationBar() const = 0;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tries to focus the location bar.  Clears the window focus (to avoid
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // inconsistent state) if this fails.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetFocusToLocationBar(bool select_all) = 0;
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Informs the view whether or not a load is in progress for the current tab.
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view can use this notification to update the reload/stop button.
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateReloadStopState(bool is_loading, bool force) = 0;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the toolbar with the state for the specified |contents|.
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void UpdateToolbar(content::WebContents* contents,
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             bool should_restore_state) = 0;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the toolbar (for accessibility).
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusToolbar() = 0;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the app menu like it was a menu bar.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Not used on the Mac, which has a "normal" menu bar.
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusAppMenu() = 0;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the bookmarks toolbar (for accessibility).
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusBookmarksToolbar() = 0;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Focuses an infobar, if shown (for accessibility).
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void FocusInfobars() = 0;
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Moves keyboard focus to the next pane.
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RotatePaneFocus(bool forwards) = 0;
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the bookmark bar is visible or not.
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarVisible() const = 0;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the bookmark bar is animating or not.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarAnimating() const = 0;
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the tab strip is editable (for extensions).
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsTabStripEditable() const = 0;
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the tool bar is visible or not.
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsToolbarVisible() const = 0;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the rect where the resize corner should be drawn by the render
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // widget host view (on top of what the renderer returns). We return an empty
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // rect to identify that there shouldn't be a resize corner (in the cases
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // where we take care of it ourselves at the browser level).
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetRootWindowResizerRect() const = 0;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tells the frame not to render as inactive until the next activation change.
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is required on Windows when dropdown selects are shown to prevent the
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // select from deactivating the browser frame. A stub implementation is
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provided here since the functionality is Windows-specific.
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DisableInactiveFrame() {}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a confirmation dialog box for adding a search engine described by
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |template_url|. Takes ownership of |template_url|.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ConfirmAddSearchProvider(TemplateURL* template_url,
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        Profile* profile) = 0;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows or hides the bookmark bar depending on its current visibility.
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ToggleBookmarkBar() = 0;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the Update Recommended dialog box.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowUpdateChromeDialog() = 0;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the Bookmark bubble. |url| is the URL being bookmarked,
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |already_bookmarked| is true if the url is already bookmarked.
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) = 0;
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the bookmark prompt.
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(yosin): Make ShowBookmarkPrompt pure virtual.
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkPrompt() {}
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_ONE_CLICK_SIGNIN)
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum OneClickSigninBubbleType {
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG,
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback type used with the ShowOneClickSigninBubble() method.  If the
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // user chooses to accept the sign in, the callback is called to start the
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sync process.
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(OneClickSigninSyncStarter::StartSyncMode)>
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      StartSyncCallback;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Shows the one-click sign in bubble.  |email| holds the full email address
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // of the account that has signed in.
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowOneClickSigninBubble(
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninBubbleType type,
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const string16& email,
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const string16& error_message,
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StartSyncCallback& start_sync_callback) = 0;
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  #endif
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether or not the shelf view is visible.
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDownloadShelfVisible() const = 0;
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the DownloadShelf.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual DownloadShelf* GetDownloadShelf() = 0;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the confirmation dialog box warning that the browser is closing with
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in-progress downloads.
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This method should call Browser::InProgressDownloadResponse once the user
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // has confirmed.
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ConfirmBrowserCloseWithPendingDownloads() = 0;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ThemeService calls this when a user has changed his or her theme,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // indicating that it's time to redraw everything.
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UserChangedTheme() = 0;
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get extra vertical height that the render view should add to its requests
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to webkit. This can help prevent sending extraneous layout/repaint requests
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when the delegate is in the process of resizing the tab contents view (e.g.
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // during infobar animations).
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetExtraRenderViewHeight() const = 0;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notification that |contents| got the focus through user action (click
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on the page).
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WebContentsFocused(content::WebContents* contents) = 0;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the website settings using the specified information. |url| is the
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // url of the page/frame the info applies to, |ssl| is the SSL information for
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that page/frame.  If |show_history| is true, a section showing how many
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // times that URL has been visited is added to the page info.
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowWebsiteSettings(Profile* profile,
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   content::WebContents* web_contents,
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const GURL& url,
2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   const content::SSLStatus& ssl) = 0;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the app menu (for accessibility).
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAppMenu() = 0;
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows the BrowserWindow object to handle the specified keyboard event
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // before sending it to the renderer.
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the |event| was handled. Otherwise, if the |event| would
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |*is_keyboard_shortcut| should be set to true.
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PreHandleKeyboardEvent(
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event,
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool* is_keyboard_shortcut) = 0;
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows the BrowserWindow object to handle the specified keyboard event,
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the renderer did not process it.
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event) = 0;
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the create chrome app shortcut dialog box.
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCreateChromeAppShortcutsDialog(Profile* profile,
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const extensions::Extension* app) = 0;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clipboard commands applied to the whole browser window.
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cut() = 0;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Copy() = 0;
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Paste() = 0;
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Opens the tabpose view.
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OpenTabpose() = 0;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enters Mac specific fullscreen mode with chrome displayed (e.g. omnibox)
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // on OSX 10.7+, a.k.a. Lion Fullscreen mode.
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Invalid to call on OSX earlier than 10.7.
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enters either from non fullscreen, or from fullscreen without chrome.
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit to normal fullscreen with EnterFullscreen().
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreenWithChrome() = 0;
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenWithChrome() = 0;
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenWithoutChrome() = 0;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the correct disposition for a popup window based on |bounds|.
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WindowOpenDisposition GetDispositionForPopupBounds(
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& bounds) = 0;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Construct a FindBar implementation for the |browser|.
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual FindBar* CreateFindBar() = 0;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Return the WebContentsModalDialogHost for use in positioning web contents
322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // modal dialogs within the browser window.
32390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual web_modal::WebContentsModalDialogHost*
32490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GetWebContentsModalDialogHost() = 0;
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the preferred size of the contents in current tab has been
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // changed. We might choose to update the window size to accomodate this
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // change.
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note that this won't be fired if we change tabs.
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdatePreferredSize(content::WebContents* web_contents,
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const gfx::Size& pref_size) {}
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the contents auto-resized and the container should match it.
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResizeDueToAutoResize(content::WebContents* web_contents,
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const gfx::Size& new_size) {}
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Construct a BrowserWindow implementation for the specified |browser|.
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static BrowserWindow* CreateBrowserWindow(Browser* browser);
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the avatar bubble inside |web_contents|. The bubble is positioned
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // relative to |rect|. |rect| should be in the |web_contents| coordinate
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // system.
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubble(content::WebContents* web_contents,
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const gfx::Rect& rect) = 0;
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the avatar bubble on the window frame off of the avatar button.
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubbleFromAvatarButton() = 0;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show bubble for password generation positioned relative to |rect|. The
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // subclasses implementing this interface do not own the |password_generator|
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // object which is passed to generate the password. |form| is the form that
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // contains the password field that the bubble will be associated with.
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowPasswordGenerationBubble(
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& rect,
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::PasswordForm& form,
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      autofill::PasswordGenerator* password_generator) = 0;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
358bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  // Invoked when the amount of vertical overscroll changes. |delta_y| is the
359bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  // amount of overscroll that has occured in the y-direction.
360bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  virtual void OverscrollUpdate(int delta_y) {}
361bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  friend void chrome::CloseAllBrowsers();
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class BrowserView;
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyBrowser() = 0;
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarView;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBarView;
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A BrowserWindow utility interface used for accessing elements of the browser
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UI used only by UI test automation.
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserWindowTesting {
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the BookmarkBarView.
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BookmarkBarView* GetBookmarkBarView() const = 0;
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the LocationBarView.
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBarView* GetLocationBarView() const = 0;
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the TabContentsContainer.
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetTabContentsContainerView() const = 0;
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the ToolbarView.
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ToolbarView* GetToolbarView() const = 0;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserWindowTesting() {}
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_BROWSER_WINDOW_H_
400