172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// found in the LICENSE file.
4513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
5513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#ifndef CHROME_BROWSER_UI_BROWSER_WINDOW_H_
6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define CHROME_BROWSER_UI_BROWSER_WINDOW_H_
7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#pragma once
8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/content_settings_types.h"
10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/navigation_entry.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h"
12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
13513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Browser;
14513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserWindowTesting;
15513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass DownloadShelf;
16513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass FindBar;
17513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass GURL;
18513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass HtmlDialogUIDelegate;
19513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass LocationBar;
20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass Panel;
21513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Profile;
22513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass StatusBubble;
23513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TabContents;
24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass TabContentsWrapper;
25513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TemplateURL;
26513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TemplateURLModel;
27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if !defined(OS_MACOSX)
28513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass ToolbarView;
29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
30513209b27ff55e2841eac0e4120199c23acce758Ben Murdochstruct NativeWebKeyboardEvent;
31513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
32513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace gfx {
33513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Rect;
34513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
36513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace views {
37513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Window;
38513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
39513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass Extension;
41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch////////////////////////////////////////////////////////////////////////////////
43513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// BrowserWindow interface
44513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch//  An interface implemented by the "view" of the Browser window.
45513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch//
46513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// NOTE: All getters may return NULL.
47513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserWindow {
48513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public:
49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual ~BrowserWindow() {}
50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Show the window, or activates it if it's already visible.
52513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Show() = 0;
53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Show the window, but do not activate it. Does nothing if window
55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // is already visible.
56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ShowInactive() = 0;
57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets the window's size and position to the specified values.
59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetBounds(const gfx::Rect& bounds) = 0;
60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Closes the frame as soon as possible.  If the frame is not in a drag
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // session, it will close immediately; otherwise, it will move offscreen (so
63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // events are still fired) until the drag ends, then close. This assumes
64513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // that the Browser is not immediately destroyed, but will be eventually
65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // destroyed by other means (eg, the tab strip going to zero elements).
66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Bad things happen if the Browser dtor is called directly as a result of
67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // invoking this method.
68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Close() = 0;
69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Activates (brings to front) the window. Restores the window from minimized
71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // state if necessary.
72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Activate() = 0;
73513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Deactivates the window, making the next window in the Z order the active
75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // window.
76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Deactivate() = 0;
77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the window is currently the active/focused window.
79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsActive() const = 0;
80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Flashes the taskbar item associated with this frame.
82513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FlashFrame() = 0;
83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Return a platform dependent identifier for this frame. On Windows, this
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // returns an HWND.
86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual gfx::NativeWindow GetNativeHandle() = 0;
87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns a pointer to the testing interface to the Browser window, or NULL
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // if there is none.
90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual BrowserWindowTesting* GetBrowserWindowTesting() = 0;
91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Return the status bubble associated with the frame
93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual StatusBubble* GetStatusBubble() = 0;
94513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
95513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Inform the receiving frame that an animation has progressed in the
96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // selected tab.
97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): Remove. Infobars/Boomarks bars should talk directly to
98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //             BrowserView.
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ToolbarSizeChanged(bool is_animating) = 0;
100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Inform the frame that the selected tab favicon or title has changed. Some
102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // frames may need to refresh their title bar.
103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateTitleBar() = 0;
104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Invoked when the visibility of the bookmark bar.
106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // NOTE: this is NOT sent when the user toggles the visibility of this,
107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // but rather when the user transitions from a page that forces
108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // it to be visibile to one that doesn't have it visible (or
109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // vice-versa).
110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(sky): see about routing visibility pref changing through here too.
111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShelfVisibilityChanged() = 0;
112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Inform the frame that the dev tools window for the selected tab has
114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // changed.
115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateDevTools() = 0;
116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Update any loading animations running in the window. |should_animate| is
118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // true if there are tabs loading and the animations should continue, false
119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // if there are no active loads and the animations should end.
120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateLoadingAnimations(bool should_animate) = 0;
121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets the starred state for the current tab.
123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetStarredState(bool is_starred) = 0;
124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the nonmaximized bounds of the frame (even if the frame is
126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // currently maximized or minimized) in terms of the screen coordinates.
127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual gfx::Rect GetRestoredBounds() const = 0;
128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Retrieves the window's current bounds, including its frame.
13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // This will only differ from GetRestoredBounds() for maximized
13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // and minimized windows.
13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual gfx::Rect GetBounds() const = 0;
13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): REMOVE?
135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the frame is maximized (aka zoomed).
136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsMaximized() const = 0;
137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Accessors for fullscreen mode state.
139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetFullscreen(bool fullscreen) = 0;
140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsFullscreen() const = 0;
141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the fullscreen bubble is visible.
143513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsFullscreenBubbleVisible() const = 0;
144513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
145513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the location bar.
146513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual LocationBar* GetLocationBar() const = 0;
147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
148513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tries to focus the location bar.  Clears the window focus (to avoid
149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // inconsistent state) if this fails.
150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetFocusToLocationBar(bool select_all) = 0;
151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Informs the view whether or not a load is in progress for the current tab.
153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The view can use this notification to update the reload/stop button.
154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateReloadStopState(bool is_loading, bool force) = 0;
155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Updates the toolbar with the state for the specified |contents|.
157201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void UpdateToolbar(TabContentsWrapper* contents,
158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             bool should_restore_state) = 0;
159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Focuses the toolbar (for accessibility).
161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FocusToolbar() = 0;
162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Focuses the app menu like it was a menu bar.
164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //
165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Not used on the Mac, which has a "normal" menu bar.
166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FocusAppMenu() = 0;
167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Focuses the bookmarks toolbar (for accessibility).
169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FocusBookmarksToolbar() = 0;
170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Focuses the Chrome OS status view (for accessibility).
172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FocusChromeOSStatus() = 0;
173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Moves keyboard focus to the next pane.
175513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void RotatePaneFocus(bool forwards) = 0;
176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns whether the bookmark bar is visible or not.
178513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsBookmarkBarVisible() const = 0;
179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns whether the bookmark bar is animating or not.
181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsBookmarkBarAnimating() const = 0;
182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
18321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Returns whether the tab strip is editable (for extensions).
18421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual bool IsTabStripEditable() const = 0;
18521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns whether the tool bar is visible or not.
187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsToolbarVisible() const = 0;
188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tells the frame not to render as inactive until the next activation change.
190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This is required on Windows when dropdown selects are shown to prevent the
191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // select from deactivating the browser frame. A stub implementation is
192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // provided here since the functionality is Windows-specific.
193513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void DisableInactiveFrame() {}
194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows a confirmation dialog box for setting the default search engine
196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // described by |template_url|. Takes ownership of |template_url|.
197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ConfirmSetDefaultSearchProvider(
198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      TabContents* tab_contents,
199513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      TemplateURL* template_url,
200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      TemplateURLModel* template_url_model) {
201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // TODO(levin): Implement this for non-Windows platforms and make it pure.
202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    // http://crbug.com/38475
203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows a confirmation dialog box for adding a search engine described by
206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |template_url|. Takes ownership of |template_url|.
207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ConfirmAddSearchProvider(const TemplateURL* template_url,
208513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                        Profile* profile) = 0;
209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
210513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows or hides the bookmark bar depending on its current visibility.
211513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ToggleBookmarkBar() = 0;
212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the About Chrome dialog box.
214dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ShowAboutChromeDialog() = 0;
215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the Update Recommended dialog box.
217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowUpdateChromeDialog() = 0;
218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
219513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the Task manager.
220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowTaskManager() = 0;
221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
22272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Shows task information related to background pages.
22372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void ShowBackgroundPages() = 0;
22472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the Bookmark bubble. |url| is the URL being bookmarked,
226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |already_bookmarked| is true if the url is already bookmarked.
227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) = 0;
228513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
229513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Whether or not the shelf view is visible.
230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsDownloadShelfVisible() const = 0;
231513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
232513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the DownloadShelf.
233513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual DownloadShelf* GetDownloadShelf() = 0;
234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
235513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the repost form confirmation dialog box.
236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowRepostFormWarningDialog(TabContents* tab_contents) = 0;
237513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
238513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the collected cookies dialog box.
239513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowCollectedCookiesDialog(TabContents* tab_contents) = 0;
240513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
241513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Show the bubble that indicates to the user that a theme is being installed.
242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowThemeInstallBubble() = 0;
243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the confirmation dialog box warning that the browser is closing with
245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // in-progress downloads.
246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This method should call Browser::InProgressDownloadResponse once the user
247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // has confirmed.
248513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ConfirmBrowserCloseWithPendingDownloads() = 0;
249513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Shows a dialog box with HTML content. |parent_window| is the window the
251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // dialog should be opened modal to and is a native window handle.
252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowHTMLDialog(HtmlDialogUIDelegate* delegate,
253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              gfx::NativeWindow parent_window) = 0;
254513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // ThemeService calls this when a user has changed his or her theme,
256513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // indicating that it's time to redraw everything.
257513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UserChangedTheme() = 0;
258513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
259513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Get extra vertical height that the render view should add to its requests
260513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // to webkit. This can help prevent sending extraneous layout/repaint requests
261513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // when the delegate is in the process of resizing the tab contents view (e.g.
262513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // during infobar animations).
263513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual int GetExtraRenderViewHeight() const = 0;
264513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
265513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Notification that |tab_contents| got the focus through user action (click
266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // on the page).
267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabContentsFocused(TabContents* tab_contents) = 0;
268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the page info using the specified information.
270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |url| is the url of the page/frame the info applies to, |ssl| is the SSL
271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // information for that page/frame.  If |show_history| is true, a section
272513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // showing how many times that URL has been visited is added to the page info.
273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowPageInfo(Profile* profile,
274513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            const GURL& url,
275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            const NavigationEntry::SSLStatus& ssl,
276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            bool show_history) = 0;
277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the app menu (for accessibility).
279513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowAppMenu() = 0;
280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
281513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Allows the BrowserWindow object to handle the specified keyboard event
282513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // before sending it to the renderer.
283513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the |event| was handled. Otherwise, if the |event| would
284513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // be handled in HandleKeyboardEvent() method as a normal keyboard shortcut,
285513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |*is_keyboard_shortcut| should be set to true.
286513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                      bool* is_keyboard_shortcut) = 0;
288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
289513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Allows the BrowserWindow object to handle the specified keyboard event,
290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // if the renderer did not process it.
291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) = 0;
292513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
293513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the create web app shortcut dialog box.
294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ShowCreateWebAppShortcutsDialog(
295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      TabContentsWrapper* tab_contents) = 0;
296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
297201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Shows the create chrome app shortcut dialog box.
298201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void ShowCreateChromeAppShortcutsDialog(Profile* profile,
299201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                                  const Extension* app) = 0;
300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Clipboard commands applied to the whole browser window.
302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Cut() = 0;
303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Copy() = 0;
304513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Paste() = 0;
305513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
306513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Switches between available tabstrip display modes.
307513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ToggleTabStripMode() = 0;
308513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_MACOSX)
310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens the tabpose view.
311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OpenTabpose() = 0;
312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
313513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
3144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // See InstantDelegate for details.
3154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  virtual void PrepareForInstant() = 0;
3164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Invoked when instant's tab contents should be shown.
318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ShowInstant(TabContentsWrapper* preview) = 0;
319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Invoked when the instant's tab contents should be hidden.
321201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // |instant_is_active| indicates if instant is still active.
322201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void HideInstant(bool instant_is_active) = 0;
323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the desired bounds for instant in screen coordinates. Note that if
325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // instant isn't currently visible this returns the bounds instant would be
326513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // placed at.
327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual gfx::Rect GetInstantBounds() = 0;
328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
32921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#if defined(OS_CHROMEOS)
33021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Shows the keyboard overlay dialog box.
33121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void ShowKeyboardOverlay(gfx::NativeWindow owning_window) = 0;
33221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#endif
33321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Construct a BrowserWindow implementation for the specified |browser|.
335513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static BrowserWindow* CreateBrowserWindow(Browser* browser);
336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
337513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Construct a FindBar implementation for the specified |browser|.
338513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static FindBar* CreateFindBar(Browser* browser_window);
339513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
340513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch protected:
341513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  friend class BrowserList;
342513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  friend class BrowserView;
343513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void DestroyBrowser() = 0;
344513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch};
345513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
346513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
347513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BookmarkBarView;
348513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass LocationBarView;
349513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
350513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace views {
351513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass View;
352513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
353513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif  // defined(OS_WIN)
354513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
355513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// A BrowserWindow utility interface used for accessing elements of the browser
356513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// UI used only by UI test automation.
357513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserWindowTesting {
358513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public:
359513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN) || defined(TOOLKIT_VIEWS)
360513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the BookmarkBarView.
361513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual BookmarkBarView* GetBookmarkBarView() const = 0;
362513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
363513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the LocationBarView.
364513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual LocationBarView* GetLocationBarView() const = 0;
365513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
366513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the TabContentsContainer.
367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual views::View* GetTabContentsContainerView() const = 0;
368513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
369513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the TabContentsContainer.
370513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual views::View* GetSidebarContainerView() const = 0;
371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
372513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the ToolbarView.
373513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ToolbarView* GetToolbarView() const = 0;
374513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
375513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch protected:
377513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~BrowserWindowTesting() {}
378513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch};
379513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
380513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif  // CHROME_BROWSER_UI_BROWSER_WINDOW_H_
381