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"
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/lifetime/browser_close_manager.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/bookmarks/bookmark_bar.h"
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/fullscreen/fullscreen_exit_bubble_type.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/host_desktop.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/ui/translate/translate_bubble_model.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings_types.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/translate/translate_errors.h"
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/base_window.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Browser;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserWindowTesting;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadShelf;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FindBar;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBar;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatusBubble;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURL;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ToolbarView;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace autofill {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PasswordGenerator;
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct PasswordForm;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NativeWebKeyboardEvent;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SSLStatus;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Extension;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Size;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace web_modal {
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class WebContentsModalDialogHost;
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)////////////////////////////////////////////////////////////////////////////////
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// BrowserWindow interface
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  An interface implemented by the "view" of the Browser window.
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)//  This interface includes ui::BaseWindow methods as well as Browser window
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  specific methods.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: All getters may return NULL.
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class BrowserWindow : public ui::BaseWindow {
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserWindow() {}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //////////////////////////////////////////////////////////////////////////////
7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // ui::BaseWindow interface notes:
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Closes the window as soon as possible. If the window is not in a drag
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // session, it will close immediately; otherwise, it will move offscreen (so
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // events are still fired) until the drag ends, then close. This assumes
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that the Browser is not immediately destroyed, but will be eventually
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // destroyed by other means (eg, the tab strip going to zero elements).
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Bad things happen if the Browser dtor is called directly as a result of
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // invoking this method.
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // virtual void Close() = 0;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser::OnWindowDidShow should be called after showing the window.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // virtual void Show() = 0;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //////////////////////////////////////////////////////////////////////////////
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Browser specific methods:
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns a pointer to the testing interface to the Browser window, or NULL
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if there is none.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BrowserWindowTesting* GetBrowserWindowTesting() = 0;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the status bubble associated with the frame
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual StatusBubble* GetStatusBubble() = 0;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the frame that the selected tab favicon or title has changed. Some
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // frames may need to refresh their title bar.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateTitleBar() = 0;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the state of the bookmark bar changes. This is only invoked if
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the state changes for the current tab, it is not sent when switching tabs.
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void BookmarkBarStateChanged(
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BookmarkBar::AnimateChangeType change_type) = 0;
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Inform the frame that the dev tools window for the selected tab has
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // changed.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateDevTools() = 0;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Update any loading animations running in the window. |should_animate| is
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // true if there are tabs loading and the animations should continue, false
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if there are no active loads and the animations should end.
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateLoadingAnimations(bool should_animate) = 0;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets the starred state for the current tab.
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetStarredState(bool is_starred) = 0;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Sets whether the translate icon is lit for the current tab.
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void SetTranslateIconToggled(bool is_lit) = 0;
118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Called when the active tab changes.  Subclasses which implement
12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // TabStripModelObserver should implement this instead of ActiveTabChanged();
12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // the Browser will call this method while processing that one.
12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnActiveTabChanged(content::WebContents* old_contents,
12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  content::WebContents* new_contents,
12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  int index,
12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  int reason) = 0;
12668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called to force the zoom state to for the active tab to be recalculated.
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |can_show_bubble| is true when a user presses the zoom up or down keyboard
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // shortcuts and will be false in other cases (e.g. switching tabs, "clicking"
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // + or - in the wrench menu to change zoom).
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ZoomChangedForActiveTab(bool can_show_bubble) = 0;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessors for fullscreen mode state.
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterFullscreen(const GURL& url,
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               FullscreenExitBubbleType bubble_type) = 0;
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ExitFullscreen() = 0;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateFullscreenExitBubbleContent(
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url,
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FullscreenExitBubbleType bubble_type) = 0;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Windows and GTK remove the top controls in fullscreen, but Mac and Ash
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // keep the controls in a slide-down panel.
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const = 0;
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the fullscreen bubble is visible.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsFullscreenBubbleVisible() const = 0;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sets state for entering or exiting Win8 Metro snap mode.
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetMetroSnapMode(bool enable) = 0;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the window is currently in Win8 Metro snap mode.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsInMetroSnapMode() const = 0;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the location bar.
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBar* GetLocationBar() const = 0;
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tries to focus the location bar.  Clears the window focus (to avoid
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // inconsistent state) if this fails.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetFocusToLocationBar(bool select_all) = 0;
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Informs the view whether or not a load is in progress for the current tab.
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view can use this notification to update the reload/stop button.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateReloadStopState(bool is_loading, bool force) = 0;
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Updates the toolbar with the state for the specified |contents|.
1683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void UpdateToolbar(content::WebContents* contents) = 0;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the toolbar (for accessibility).
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusToolbar() = 0;
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the app menu like it was a menu bar.
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Not used on the Mac, which has a "normal" menu bar.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusAppMenu() = 0;
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Focuses the bookmarks toolbar (for accessibility).
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusBookmarksToolbar() = 0;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Focuses an infobar, if shown (for accessibility).
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void FocusInfobars() = 0;
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Moves keyboard focus to the next pane.
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RotatePaneFocus(bool forwards) = 0;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the bookmark bar is visible or not.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarVisible() const = 0;
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the bookmark bar is animating or not.
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBookmarkBarAnimating() const = 0;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the tab strip is editable (for extensions).
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsTabStripEditable() const = 0;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the tool bar is visible or not.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsToolbarVisible() const = 0;
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the rect where the resize corner should be drawn by the render
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // widget host view (on top of what the renderer returns). We return an empty
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // rect to identify that there shouldn't be a resize corner (in the cases
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // where we take care of it ourselves at the browser level).
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetRootWindowResizerRect() const = 0;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tells the frame not to render as inactive until the next activation change.
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is required on Windows when dropdown selects are shown to prevent the
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // select from deactivating the browser frame. A stub implementation is
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provided here since the functionality is Windows-specific.
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DisableInactiveFrame() {}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows a confirmation dialog box for adding a search engine described by
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |template_url|. Takes ownership of |template_url|.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ConfirmAddSearchProvider(TemplateURL* template_url,
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        Profile* profile) = 0;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the Update Recommended dialog box.
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowUpdateChromeDialog() = 0;
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the Bookmark bubble. |url| is the URL being bookmarked,
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |already_bookmarked| is true if the url is already bookmarked.
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) = 0;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the bookmark prompt.
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(yosin): Make ShowBookmarkPrompt pure virtual.
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowBookmarkPrompt() {}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Shows the translate bubble.
2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void ShowTranslateBubble(
2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      content::WebContents* contents,
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TranslateBubbleModel::ViewState view_state,
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TranslateErrors::Type error_type) = 0;
2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(ENABLE_ONE_CLICK_SIGNIN)
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  enum OneClickSigninBubbleType {
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE,
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG,
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  };
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback type used with the ShowOneClickSigninBubble() method.  If the
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // user chooses to accept the sign in, the callback is called to start the
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sync process.
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef base::Callback<void(OneClickSigninSyncStarter::StartSyncMode)>
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      StartSyncCallback;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Shows the one-click sign in bubble.  |email| holds the full email address
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // of the account that has signed in.
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowOneClickSigninBubble(
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninBubbleType type,
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& email,
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const base::string16& error_message,
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StartSyncCallback& start_sync_callback) = 0;
2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether or not the shelf view is visible.
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsDownloadShelfVisible() const = 0;
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the DownloadShelf.
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual DownloadShelf* GetDownloadShelf() = 0;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the confirmation dialog box warning that the browser is closing with
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in-progress downloads.
2633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // This method should call |callback| with the user's response.
2643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual void ConfirmBrowserCloseWithPendingDownloads(
2653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      int download_count,
2663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      Browser::DownloadClosePreventionType dialog_type,
2673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      bool app_modal,
2683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      const base::Callback<void(bool)>& callback) = 0;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ThemeService calls this when a user has changed his or her theme,
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // indicating that it's time to redraw everything.
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UserChangedTheme() = 0;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Get extra vertical height that the render view should add to its requests
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to webkit. This can help prevent sending extraneous layout/repaint requests
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // when the delegate is in the process of resizing the tab contents view (e.g.
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // during infobar animations).
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetExtraRenderViewHeight() const = 0;
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Notification that |contents| got the focus through user action (click
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // on the page).
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WebContentsFocused(content::WebContents* contents) = 0;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the website settings using the specified information. |url| is the
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // url of the page/frame the info applies to, |ssl| is the SSL information for
2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that page/frame.  If |show_history| is true, a section showing how many
2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // times that URL has been visited is added to the page info.
2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowWebsiteSettings(Profile* profile,
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   content::WebContents* web_contents,
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const GURL& url,
2917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   const content::SSLStatus& ssl) = 0;
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the app menu (for accessibility).
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAppMenu() = 0;
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows the BrowserWindow object to handle the specified keyboard event
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // before sending it to the renderer.
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns true if the |event| was handled. Otherwise, if the |event| would
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // be handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |*is_keyboard_shortcut| should be set to true.
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PreHandleKeyboardEvent(
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event,
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool* is_keyboard_shortcut) = 0;
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Allows the BrowserWindow object to handle the specified keyboard event,
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // if the renderer did not process it.
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const content::NativeWebKeyboardEvent& event) = 0;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clipboard commands applied to the whole browser window.
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Cut() = 0;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Copy() = 0;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Paste() = 0;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Opens the tabpose view.
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OpenTabpose() = 0;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enters Mac specific fullscreen mode with chrome displayed (e.g. omnibox)
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // on OSX 10.7+, a.k.a. Lion Fullscreen mode.
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Invalid to call on OSX earlier than 10.7.
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enters either from non fullscreen, or from fullscreen without chrome.
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit to normal fullscreen with EnterFullscreen().
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreenWithChrome() = 0;
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenWithChrome() = 0;
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreenWithoutChrome() = 0;
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Return the correct disposition for a popup window based on |bounds|.
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WindowOpenDisposition GetDispositionForPopupBounds(
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& bounds) = 0;
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Construct a FindBar implementation for the |browser|.
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual FindBar* CreateFindBar() = 0;
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Return the WebContentsModalDialogHost for use in positioning web contents
33758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // modal dialogs within the browser window. This can sometimes be NULL (for
33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // instance during tab drag on Views/Win32).
33990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual web_modal::WebContentsModalDialogHost*
34090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GetWebContentsModalDialogHost() = 0;
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the preferred size of the contents in current tab has been
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // changed. We might choose to update the window size to accomodate this
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // change.
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Note that this won't be fired if we change tabs.
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdatePreferredSize(content::WebContents* web_contents,
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   const gfx::Size& pref_size) {}
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Invoked when the contents auto-resized and the container should match it.
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResizeDueToAutoResize(content::WebContents* web_contents,
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const gfx::Size& new_size) {}
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Construct a BrowserWindow implementation for the specified |browser|.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static BrowserWindow* CreateBrowserWindow(Browser* browser);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Returns a HostDesktopType that is compatible with the current Chrome window
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // configuration. On Windows with Ash, this is always HOST_DESKTOP_TYPE_ASH
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // while Chrome is running in Metro mode. Otherwise returns |desktop_type|.
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static chrome::HostDesktopType AdjustHostDesktopType(
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      chrome::HostDesktopType desktop_type);
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the avatar bubble inside |web_contents|. The bubble is positioned
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // relative to |rect|. |rect| should be in the |web_contents| coordinate
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // system.
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubble(content::WebContents* web_contents,
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const gfx::Rect& rect) = 0;
3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shows the avatar bubble on the window frame off of the avatar button.
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowAvatarBubbleFromAvatarButton() = 0;
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Show bubble for password generation positioned relative to |rect|. The
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // subclasses implementing this interface do not own the |password_generator|
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // object which is passed to generate the password. |form| is the form that
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // contains the password field that the bubble will be associated with.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowPasswordGenerationBubble(
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const gfx::Rect& rect,
37758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const autofill::PasswordForm& form,
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      autofill::PasswordGenerator* password_generator) = 0;
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
380bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  // Invoked when the amount of vertical overscroll changes. |delta_y| is the
381bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  // amount of overscroll that has occured in the y-direction.
382bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  virtual void OverscrollUpdate(int delta_y) {}
383bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch
384424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Returns the height inset for RenderView when detached bookmark bar is
385424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // shown.  Invoked when a new RenderHostView is created for a non-NTP
386424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // navigation entry and the bookmark bar is detached.
387424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual int GetRenderViewHeightInsetWithDetachedBookmarkBar() = 0;
388424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
3903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  friend class BrowserCloseManager;
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class BrowserView;
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DestroyBrowser() = 0;
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkBarView;
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocationBarView;
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views {
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class View;
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // defined(OS_WIN)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A BrowserWindow utility interface used for accessing elements of the browser
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UI used only by UI test automation.
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserWindowTesting {
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the BookmarkBarView.
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BookmarkBarView* GetBookmarkBarView() const = 0;
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the LocationBarView.
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual LocationBarView* GetLocationBarView() const = 0;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the TabContentsContainer.
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual views::View* GetTabContentsContainerView() const = 0;
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the ToolbarView.
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ToolbarView* GetToolbarView() const = 0;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~BrowserWindowTesting() {}
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_UI_BROWSER_WINDOW_H_
427