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_H_
6513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define CHROME_BROWSER_UI_BROWSER_H_
7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#pragma once
8513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
9513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <map>
10513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <set>
11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <string>
12513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include <vector>
13513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
14513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/basictypes.h"
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/compiler_specific.h"
16513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/gtest_prod_util.h"
17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/string16.h"
19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "base/task.h"
20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/command_updater.h"
21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/debugger/devtools_toggle_action.h"
22513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/instant/instant_delegate.h"
23513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/prefs/pref_member.h"
24513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/sessions/session_id.h"
25513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/sessions/tab_restore_service_observer.h"
26513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/sync/profile_sync_service_observer.h"
27513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/tabs/tab_handler.h"
28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tabs/tab_strip_model_delegate.h"  // TODO(beng): remove
29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tabs/tab_strip_model_observer.h"  // TODO(beng): remove
30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/browser_navigator.h"
31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/search_engines/search_engine_tab_helper_delegate.h"
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/shell_dialogs.h"
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h"
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/toolbar/toolbar_model.h"
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/common/extensions/extension_constants.h"
36dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/page_navigator.h"
37dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents_delegate.h"
38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_registrar.h"
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_transition_types.h"
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/page_zoom.h"
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h"
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass BrowserTabRestoreServiceDelegate;
44513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass BrowserWindow;
45513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Extension;
46513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass FindBarController;
47513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass InstantController;
48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass InstantUnloadHandler;
49513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass PrefService;
50513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Profile;
51513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass SessionStorageNamespace;
52513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass SkBitmap;
53513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass StatusBubble;
54513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TabNavigation;
55513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass TabStripModel;
56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochstruct WebApplicationInfo;
57513209b27ff55e2841eac0e4120199c23acce758Ben Murdochnamespace gfx {
58513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Point;
59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
61513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Browser : public TabHandlerDelegate,
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public TabContentsDelegate,
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                public TabContentsWrapperDelegate,
64dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                public SearchEngineTabHelperDelegate,
65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public PageNavigator,
66513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public CommandUpdater::CommandUpdaterDelegate,
67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public NotificationObserver,
68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public SelectFileDialog::Listener,
69513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public TabRestoreServiceObserver,
70513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public ProfileSyncServiceObserver,
71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                public InstantDelegate {
72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch public:
7321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // SessionService::WindowType mirrors these values.  If you add to this
7421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // enum, look at SessionService::WindowType to see if it needs to be
7521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // updated.
76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum Type {
77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    TYPE_NORMAL = 1,
78513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    TYPE_POPUP = 2,
79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // The old-style app created via "Create application shortcuts".
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // Shortcuts to a URL and shortcuts to an installed application
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    // both have this type.
82513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    TYPE_APP = 4,
83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    TYPE_APP_POPUP = TYPE_APP | TYPE_POPUP,
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    TYPE_DEVTOOLS = TYPE_APP | 8,
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // TODO(skerner): crbug/56776: Until the panel UI is complete on all
87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // platforms, apps that set app.launch.container = "panel" have type
88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // APP_POPUP. (see Browser::CreateForApp)
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // NOTE: TYPE_APP_PANEL is a superset of TYPE_APP_POPUP.
9021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    TYPE_APP_PANEL = TYPE_APP | TYPE_POPUP | 16,
91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    TYPE_ANY = TYPE_NORMAL |
92513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch               TYPE_POPUP |
93513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch               TYPE_APP |
94513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch               TYPE_DEVTOOLS |
95513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch               TYPE_APP_PANEL
96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
97513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
98513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Possible elements of the Browser window.
99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum WindowFeature {
100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_NONE = 0,
101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_TITLEBAR = 1,
102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_TABSTRIP = 2,
103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_TOOLBAR = 4,
104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_LOCATIONBAR = 8,
105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_BOOKMARKBAR = 16,
106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_INFOBAR = 32,
107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_SIDEBAR = 64,
108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    FEATURE_DOWNLOADSHELF = 128
109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Maximized state on creation.
112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum MaximizedState {
113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // The maximized state is set to the default, which varies depending upon
114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // what the user has done.
115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    MAXIMIZED_STATE_DEFAULT,
116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Maximized state is explicitly maximized.
118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    MAXIMIZED_STATE_MAXIMIZED,
119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Maximized state is explicitly not maximized (normal).
121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    MAXIMIZED_STATE_UNMAXIMIZED
122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Constructors, Creation, Showing //////////////////////////////////////////
125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Creates a new browser of the given |type| and for the given |profile|. The
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Browser has a NULL window after its construction, InitBrowserWindow must
128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // be called after configuration for window() to be valid.
129513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Avoid using this constructor directly if you can use one of the Create*()
130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // methods below. This applies to almost all non-testing code.
131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  Browser(Type type, Profile* profile);
132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~Browser();
133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Creates a normal tabbed browser with the specified profile. The Browser's
135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // window is created by this function call.
136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* Create(Profile* profile);
137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Like Create, but creates a browser of the specified (popup) type, with the
139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // specified contents, in a popup window of the specified size/position.
140513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* CreateForPopup(Type type, Profile* profile,
141513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 TabContents* new_contents,
142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 const gfx::Rect& initial_bounds);
143513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
144513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Like Create, but creates a browser of the specified type.
145513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* CreateForType(Type type, Profile* profile);
146513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Like Create, but creates a toolbar-less "app" window for the specified
148513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // app. |app_name| is required and is used to identify the window to the
14921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // shell.  If |extension| is set, it is used to determine the size of the
15021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // window to open.
151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* CreateForApp(const std::string& app_name,
15221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                               const gfx::Size& window_size,
153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                               Profile* profile,
154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                               bool is_panel);
155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Like Create, but creates a tabstrip-less and toolbar-less
157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // DevTools "app" window.
158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* CreateForDevTools(Profile* profile);
159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Set overrides for the initial window bounds and maximized state.
161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void set_override_bounds(const gfx::Rect& bounds) {
162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    override_bounds_ = bounds;
163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void set_maximized_state(MaximizedState state) {
165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    maximized_state_ = state;
166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Return true if the initial window bounds have been overridden.
168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool bounds_overridden() const {
169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    return !override_bounds_.IsEmpty();
170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Creates the Browser Window. Prefer to use the static helpers above where
173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // possible. This does not show the window. You need to call window()->Show()
174513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // to show it.
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void InitBrowserWindow();
176513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Accessors ////////////////////////////////////////////////////////////////
178513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  Type type() const { return type_; }
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const std::string& app_name() const { return app_name_; }
181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  Profile* profile() const { return profile_; }
182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const std::vector<std::wstring>& user_data_dir_profiles() const;
183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  gfx::Rect override_bounds() const { return override_bounds_; }
184513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
185513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the InstantController or NULL if there is no InstantController for
186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // this Browser.
187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  InstantController* instant() const { return instant_.get(); }
188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(UNIT_TEST)
190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets the BrowserWindow. This is intended for testing and generally not
191513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // useful outside of testing. Use CreateBrowserWindow outside of testing, or
192513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the static convenience methods that create a BrowserWindow for you.
193513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void set_window(BrowserWindow* window) {
194513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DCHECK(!window_);
195513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    window_ = window;
196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
197513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
198513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // |window()| will return NULL if called before |CreateBrowserWindow()|
20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // is done.
201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BrowserWindow* window() const { return window_; }
202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ToolbarModel* toolbar_model() { return &toolbar_model_; }
203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const SessionID& session_id() const { return session_id_; }
204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  CommandUpdater* command_updater() { return &command_updater_; }
2053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  bool block_command_execution() const { return block_command_execution_; }
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BrowserTabRestoreServiceDelegate* tab_restore_service_delegate() {
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return tab_restore_service_delegate_.get();
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
209513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
210513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Get the FindBarController for this browser, creating it if it does not
211513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // yet exist.
212513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  FindBarController* GetFindBarController();
213513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
214513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if a FindBarController exists for this browser.
215513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool HasFindBarController() const;
216513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
217513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Setters /////////////////////////////////////////////////////////////////
218513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
219513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void set_user_data_dir_profiles(const std::vector<std::wstring>& profiles);
220513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
221513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Browser Creation Helpers /////////////////////////////////////////////////
222513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
223513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens a new window with the default blank tab.
224513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenEmptyWindow(Profile* profile);
225513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
226513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens a new window with the tabs from |profile|'s TabRestoreService.
227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenWindowWithRestoredTabs(Profile* profile);
228513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
229513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens the specified URL in a new browser window in an incognito session.
230513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // If there is already an existing active incognito session for the specified
231513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |profile|, that session is re-used.
232513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenURLOffTheRecord(Profile* profile, const GURL& url);
233513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Open |extension| in |container|, using |existing_tab| if not NULL and if
235513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the correct container type.  Returns the TabContents* that was created or
236513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // NULL.
237513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static TabContents* OpenApplication(
238513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      Profile* profile,
239513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const Extension* extension,
240513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      extension_misc::LaunchContainer container,
241513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      TabContents* existing_tab);
242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens a new application window for the specified url. If |as_panel|
244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // is true, the application will be opened as a Browser::Type::APP_PANEL in
245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // app panel window, otherwise it will be opened as as either
246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Browser::Type::APP a.k.a. "thin frame" (if |extension| is NULL) or
247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Browser::Type::EXTENSION_APP (if |extension| is non-NULL).
248201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // If |app_browser| is not NULL, it is set to the browser that hosts the
249201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // returned tab.
250513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static TabContents* OpenApplicationWindow(
251513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      Profile* profile,
252513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const Extension* extension,
253513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      extension_misc::LaunchContainer container,
254201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const GURL& url,
255201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      Browser** app_browser);
256201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
257201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Open |url| in an app shortcut window.  If |update_shortcut| is true,
258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // update the name, description, and favicon of the shortcut.
259201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // There are two kinds of app shortcuts: Shortcuts to a URL,
260201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // and shortcuts that open an installed application.  This function
261201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // is used to open the former.  To open the latter, use
262201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Browser::OpenApplicationWindow().
263201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  static TabContents* OpenAppShortcutWindow(Profile* profile,
264201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                            const GURL& url,
265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                                            bool update_shortcut);
266513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
267513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Open an application for |extension| in a new application tab, or
268513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |existing_tab| if not NULL.  Returns NULL if there are no appropriate
269513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // existing browser windows for |profile|.
270513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static TabContents* OpenApplicationTab(Profile* profile,
271513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                         const Extension* extension,
272513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                         TabContents* existing_tab);
273513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
274513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens a new window and opens the bookmark manager.
275513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenBookmarkManagerWindow(Profile* profile);
276513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
277513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_MACOSX)
278513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Open a new window with history/downloads/help/options (needed on Mac when
279513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // there are no windows).
280513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenHistoryWindow(Profile* profile);
281513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenDownloadsWindow(Profile* profile);
282513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenHelpWindow(Profile* profile);
283513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenOptionsWindow(Profile* profile);
28472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static void OpenClearBrowingDataDialogWindow(Profile* profile);
28572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static void OpenImportSettingsDialogWindow(Profile* profile);
286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static void OpenInstantConfirmDialogWindow(Profile* profile);
287513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
288513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
289513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Opens a window with the extensions tab in it - needed by long-lived
290513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // extensions which may run with no windows open.
291513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void OpenExtensionsWindow(Profile* profile);
292513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
293513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // State Storage and Retrieval for UI ///////////////////////////////////////
294513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
295513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Save and restore the window position.
296513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  std::string GetWindowPlacementKey() const;
297513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool ShouldSaveWindowPlacement() const;
298513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SaveWindowPlacement(const gfx::Rect& bounds, bool maximized);
299513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  gfx::Rect GetSavedWindowBounds() const;
300513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool GetSavedMaximizedState() const;
301513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Gets the Favicon of the page in the selected tab.
303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  SkBitmap GetCurrentPageIcon() const;
304513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
305513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Gets the title of the window based on the selected tab's title.
306513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  string16 GetWindowTitleForCurrentTab() const;
307513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
308513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Prepares a title string for display (removes embedded newlines, etc).
309513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void FormatTitleForDisplay(string16* title);
310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // OnBeforeUnload handling //////////////////////////////////////////////////
312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
313513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Gives beforeunload handlers the chance to cancel the close.
314513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool ShouldCloseWindow();
315513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool IsAttemptingToCloseBrowser() const {
317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    return is_attempting_to_close_browser_;
318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
319513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Invoked when the window containing us is closing. Performs the necessary
321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // cleanup.
322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OnWindowClosing();
323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // In-progress download termination handling /////////////////////////////////
325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
32621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Are normal and/or incognito downloads in progress?
32721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void CheckDownloadsInProgress(bool* normal_downloads,
32821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen                                bool* incognito_downloads);
32921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
330513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Called when the user has decided whether to proceed or not with the browser
331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // closure.  |cancel_downloads| is true if the downloads should be canceled
332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // and the browser closed, false if the browser should stay open and the
333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // downloads running.
334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void InProgressDownloadResponse(bool cancel_downloads);
335513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TabStripModel pass-thrus /////////////////////////////////////////////////
337513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
338513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  TabStripModel* tabstrip_model() const {
339513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // TODO(beng): remove this accessor. It violates google style.
340513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    return tab_handler_->GetTabStripModel();
341513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
342513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
343513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  int tab_count() const;
344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  int active_index() const;
345513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  int GetIndexOfController(const NavigationController* controller) const;
346201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* GetSelectedTabContentsWrapper() const;
347201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* GetTabContentsWrapperAt(int index) const;
348201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Same as above but correctly handles if GetSelectedTabContents() is NULL
349201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // in the model before dereferencing to get the raw TabContents.
350201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // TODO(pinkerton): These should really be returning TabContentsWrapper
351201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // objects, but that would require changing about 50+ other files. In order
352201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // to keep changes localized, the default is to return a TabContents. Note
353201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // this differs from the TabStripModel because it has far fewer clients.
354513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  TabContents* GetSelectedTabContents() const;
355201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContents* GetTabContentsAt(int index) const;
356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void ActivateTabAt(int index, bool user_gesture);
357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  bool IsTabPinned(int index) const;
358513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CloseAllTabs();
359513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
360513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tab adding/showing functions /////////////////////////////////////////////
361513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
36221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Returns true if the tab strip is editable (for extensions).
36321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool IsTabStripEditable() const;
36421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
365513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the index to insert a tab at during session restore and startup.
366513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |relative_index| gives the index of the url into the number of tabs that
367513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // are going to be opened. For example, if three urls are passed in on the
368513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // command line this is invoked three times with the values 0, 1 and 2.
369513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  int GetIndexForInsertionDuringRestore(int relative_index);
370513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
371513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Adds a selected tab with the specified URL and transition, returns the
372513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // created TabContents.
373201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContentsWrapper* AddSelectedTabWithURL(
374201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const GURL& url,
375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      PageTransition::Type transition);
376513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
377513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Add a new tab, given a TabContents. A TabContents appropriate to
378513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // display the last committed entry is created and returned.
379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TabContents* AddTab(TabContentsWrapper* tab_contents,
380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                      PageTransition::Type type);
381513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
382513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Add a tab with its session history restored from the SessionRestore
383513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // system. If select is true, the tab is selected. |tab_index| gives the index
384513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // to insert the tab at. |selected_navigation| is the index of the
385513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TabNavigation in |navigations| to select. If |extension_app_id| is
386513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // non-empty the tab is an app tab and |extension_app_id| is the id of the
387513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // extension. If |pin| is true and |tab_index|/ is the last pinned tab, then
388513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the newly created tab is pinned. If |from_last_session| is true,
389513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |navigations| are from the previous session.
390513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  TabContents* AddRestoredTab(const std::vector<TabNavigation>& navigations,
391513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              int tab_index,
392513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              int selected_navigation,
393513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              const std::string& extension_app_id,
394513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              bool select,
395513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              bool pin,
396513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              bool from_last_session,
397513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              SessionStorageNamespace* storage_namespace);
398513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Creates a new tab with the already-created TabContents 'new_contents'.
399513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The window for the added contents will be reparented correctly when this
400513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // method returns.  If |disposition| is NEW_POPUP, |pos| should hold the
401513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // initial position.
402513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void AddTabContents(TabContents* new_contents,
403513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                      WindowOpenDisposition disposition,
404513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                      const gfx::Rect& initial_pos,
405513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                      bool user_gesture);
406513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CloseTabContents(TabContents* contents);
407513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
408513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Show a dialog with HTML content. |delegate| contains a pointer to the
409513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // delegate who knows how to display the dialog (which file URL and JSON
410513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // string input to use during initialization). |parent_window| is the window
411513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // that should be parent of the dialog, or NULL for the default.
412513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void BrowserShowHtmlDialog(HtmlDialogUIDelegate* delegate,
413513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             gfx::NativeWindow parent_window);
414513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
415513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Called when a popup select is about to be displayed.
416513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void BrowserRenderWidgetShowing();
417513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Notification that the bookmark bar has changed size.  We need to resize the
419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // content area and notify our InfoBarContainer.
420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void BookmarkBarSizeChanged(bool is_animating);
421513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
422513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Replaces the state of the currently selected tab with the session
423513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // history restored from the SessionRestore system.
424513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ReplaceRestoredTab(
425513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const std::vector<TabNavigation>& navigations,
426513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      int selected_navigation,
427513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      bool from_last_session,
428513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const std::string& extension_app_id,
429513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      SessionStorageNamespace* session_storage_namespace);
430513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
431513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Navigate to an index in the tab history, opening a new tab depending on the
432513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // disposition.
433513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool NavigateToIndexWithDisposition(int index, WindowOpenDisposition disp);
434513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
435513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Show a given a URL. If a tab with the same URL (ignoring the ref) is
436513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // already visible in this browser, it becomes selected. Otherwise a new tab
437dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // is created.
438dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void ShowSingletonTab(const GURL& url);
439513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
440513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Update commands whose state depends on whether the window is in fullscreen
441513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // mode. This is a public function because on Linux, fullscreen mode is an
442513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // async call to X. Once we get the fullscreen callback, the browser window
443513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // will call this method.
444513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateCommandsForFullscreenMode(bool is_fullscreen);
445513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
446513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Assorted browser commands ////////////////////////////////////////////////
447513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
448513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // NOTE: Within each of the following sections, the IDs are ordered roughly by
449513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // how they appear in the GUI/menus (left to right, top to bottom, etc.).
450513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
451513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Navigation commands
452513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void GoBack(WindowOpenDisposition disposition);
453513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void GoForward(WindowOpenDisposition disposition);
454513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Reload(WindowOpenDisposition disposition);
455513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ReloadIgnoringCache(WindowOpenDisposition disposition);  // Shift-reload.
456513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Home(WindowOpenDisposition disposition);
457513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenCurrentURL();
458513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Stop();
459513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Window management commands
460513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void NewWindow();
461513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void NewIncognitoWindow();
462513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CloseWindow();
463513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void NewTab();
464513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CloseTab();
465513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SelectNextTab();
466513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SelectPreviousTab();
467513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenTabpose();
468513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void MoveTabNext();
469513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void MoveTabPrevious();
470513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SelectNumberedTab(int index);
471513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SelectLastTab();
472513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void DuplicateTab();
473513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void WriteCurrentURLToClipboard();
474513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ConvertPopupToTabbedBrowser();
475513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // In kiosk mode, the first toggle is valid, the rest is discarded.
476513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ToggleFullscreenMode();
477513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Exit();
478513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_CHROMEOS)
479513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ToggleCompactNavigationBar();
480513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Search();
48121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void ShowKeyboardOverlay();
482513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
483513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
484513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Page-related commands
485513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void BookmarkCurrentPage();
486513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SavePage();
48721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void ViewSelectedSource();
488513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowFindBar();
489513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
490513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the Browser supports the specified feature. The value of
491513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // this varies during the lifetime of the browser. For example, if the window
492513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // is fullscreen this may return a different value. If you only care about
493513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // whether or not it's possible for the browser to support a particular
494513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // feature use |CanSupportWindowFeature|.
495513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool SupportsWindowFeature(WindowFeature feature) const;
496513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
497513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the Browser can support the specified feature. See comment
498513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // in |SupportsWindowFeature| for details on this.
499513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool CanSupportWindowFeature(WindowFeature feature) const;
500513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
501dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // TODO(port): port these, and re-merge the two function declaration lists.
502513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Page-related commands.
503513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Print();
504513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void EmailPageLocation();
505513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ToggleEncodingAutoDetect();
506513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OverrideEncoding(int encoding_id);
507513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
508513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Clipboard commands
509513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Cut();
510513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Copy();
511513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Paste();
512513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
513513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Find-in-page
514513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Find();
515513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FindNext();
516513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FindPrevious();
517513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
518513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Zoom
519513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void Zoom(PageZoom::Function zoom_function);
520513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
521513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Focus various bits of UI
522513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusToolbar();
523513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusLocationBar();  // Also selects any existing text.
524513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusSearch();
525513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusAppMenu();
526513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusBookmarksToolbar();
527513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusChromeOSStatus();
528513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusNextPane();
529513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FocusPreviousPane();
530513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
531513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Show various bits of UI
532513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenFile();
533513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenCreateShortcutsDialog();
534513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ToggleDevToolsWindow(DevToolsToggleAction action);
53572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void OpenTaskManager(bool highlight_background_resources);
536513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenBugReportDialog();
537513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
538513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ToggleBookmarkBar();
539513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
540513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenBookmarkManager();
541513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowAppMenu();
542513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowBookmarkManagerTab();
543513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowHistoryTab();
544513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowDownloadsTab();
545513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowExtensionsTab();
546513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowAboutConflictsTab();
547513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowBrokenPageTab(TabContents* contents);
548513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ShowOptionsTab(const std::string& sub_page);
549513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenClearBrowsingDataDialog();
550513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenOptionsDialog();
551513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenPasswordManager();
552513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenSyncMyBookmarksDialog();
553513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(ENABLE_REMOTING)
554513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenRemotingSetupDialog();
555513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
556513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenImportSettingsDialog();
557ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void OpenInstantConfirmDialog();
558513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenAboutChromeDialog();
559513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenUpdateChromeDialog();
560513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenHelpTab();
561513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Used by the "Get themes" link in the options dialog.
562513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenThemeGalleryTabAndActivate();
563ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void OpenAutofillHelpTabAndActivate();
564513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenPrivacyDashboardTabAndActivate();
565513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenSearchEngineOptionsDialog();
566513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_CHROMEOS)
567ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void OpenFileManager();
568513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenSystemOptionsDialog();
569513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenInternetOptionsDialog();
570513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenLanguageOptionsDialog();
571513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenSystemTabAndActivate();
572513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenMobilePlanTabAndActivate();
573513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
574513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void OpenPluginsTabAndActivate();
575513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
576513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateDownloadShelfVisibility(bool visible);
577513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
578513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabStripModelDelegate:
579513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool UseVerticalTabs() const;
580513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
581513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  /////////////////////////////////////////////////////////////////////////////
582513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
583513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets the value of homepage related prefs to new values. Since we do not
584513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // want to change these values for existing users, we can not change the
585513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // default values under RegisterUserPrefs. Also if user already has an
586513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // existing profile we do not want to override those preferences so we only
587513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // set new values if they have not been set already. This method gets called
588513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // during First Run.
589513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void SetNewHomePagePrefs(PrefService* prefs);
590513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
591513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void RegisterPrefs(PrefService* prefs);
592513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static void RegisterUserPrefs(PrefService* prefs);
593513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
594513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Helper function to run unload listeners on a TabContents.
595513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static bool RunUnloadEventsHelper(TabContents* contents);
596513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
597513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the Browser which contains the tab with the given
598513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // NavigationController, also filling in |index| (if valid) with the tab's
599513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // index in the tab strip.
600513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns NULL if not found.
601513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This call is O(N) in the number of tabs.
602513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* GetBrowserForController(
603513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const NavigationController* controller, int* index);
604513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
605513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Retrieve the last active tabbed browser with a profile matching |profile|.
606513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* GetTabbedBrowser(Profile* profile, bool match_incognito);
607513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
608513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Retrieve the last active tabbed browser with a profile matching |profile|.
609513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Creates a new Browser if none are available.
610513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  static Browser* GetOrCreateTabbedBrowser(Profile* profile);
611513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
612513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Calls ExecuteCommandWithDisposition with the given disposition.
613513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ExecuteCommandWithDisposition(int id, WindowOpenDisposition);
614513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
61521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Executes a command if it's enabled.
61621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Returns true if the command is executed.
61721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool ExecuteCommandIfEnabled(int id);
61821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
61972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Returns true if |command_id| is a reserved command whose keyboard shortcuts
62072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // should not be sent to the renderer or |event| was triggered by a key that
62172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // we never want to send to the renderer.
62272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  bool IsReservedCommandOrKey(int command_id,
62372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                              const NativeWebKeyboardEvent& event);
624513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
625513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets if command execution shall be blocked. If |block| is true then
626513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // following calls to ExecuteCommand() or ExecuteCommandWithDisposition()
627513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // method will not execute the command, and the last blocked command will be
628513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // recorded for retrieval.
629513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SetBlockCommandExecution(bool block);
630513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
631513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Gets the last blocked command after calling SetBlockCommandExecution(true).
632513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the command id or -1 if there is no command blocked. The
633513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // disposition type of the command will be stored in |*disposition| if it's
634513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // not null.
635513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  int GetLastBlockedCommand(WindowOpenDisposition* disposition);
636513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
637513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Called by browser::Navigate() when a navigation has occurred in a tab in
638513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // this Browser. Updates the UI for the start of this navigation.
639201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void UpdateUIForNavigationInTab(TabContentsWrapper* contents,
640513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                  PageTransition::Type transition,
641513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                  bool user_initiated);
642513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
643513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Called by browser::Navigate() to retrieve the home page if no URL is
644513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // specified.
645513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  GURL GetHomePage() const;
646513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
647513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Interface implementations ////////////////////////////////////////////////
648513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
649513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from PageNavigator:
650513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OpenURL(const GURL& url, const GURL& referrer,
651513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       WindowOpenDisposition disposition,
652513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       PageTransition::Type transition);
653513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
654513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from CommandUpdater::CommandUpdaterDelegate:
655513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ExecuteCommand(int id);
656513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
657513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabRestoreServiceObserver:
658513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabRestoreServiceChanged(TabRestoreService* service);
659513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabRestoreServiceDestroyed(TabRestoreService* service);
660513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
661201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Centralized method for creating a TabContents, configuring and installing
662201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // all its supporting objects and observers.
663201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  static TabContentsWrapper*
664201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      TabContentsFactory(Profile* profile,
665201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                         SiteInstance* site_instance,
666201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                         int routing_id,
667201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                         const TabContents* base_tab_contents,
668201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                         SessionStorageNamespace* session_storage_namespace);
669513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
670513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabHandlerDelegate:
671513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual Profile* GetProfile() const;
672513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual Browser* AsBrowser();
673513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
674513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabStripModelDelegate:
675201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* AddBlankTab(bool foreground);
676201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground);
677201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual Browser* CreateNewStripWithContents(
678201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      TabContentsWrapper* detached_contents,
679201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const gfx::Rect& window_bounds,
680201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      const DockInfo& dock_info,
681201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      bool maximize);
682513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual int GetDragActions() const;
683513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Construct a TabContents for a given URL, profile and transition type.
684513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // If instance is not null, its process will be used to render the tab.
685201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual TabContentsWrapper* CreateTabContentsForURL(const GURL& url,
686513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                               const GURL& referrer,
687513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                               Profile* profile,
688513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                               PageTransition::Type transition,
689513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                               bool defer_load,
690513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                               SiteInstance* instance) const;
691513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanDuplicateContentsAt(int index);
692513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void DuplicateContentsAt(int index);
693513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void CloseFrameAfterDragSession();
694201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void CreateHistoricalTab(TabContentsWrapper* contents);
695201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents);
696513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanCloseContentsAt(int index);
697513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanBookmarkAllTabs() const;
698513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void BookmarkAllTabs();
699513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanCloseTab() const;
700513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ToggleUseVerticalTabs();
701513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanRestoreTab();
702513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void RestoreTab();
703513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool LargeIconsPermitted() const;
704513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
705513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabStripModelObserver:
706201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabInsertedAt(TabContentsWrapper* contents,
707513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             int index,
708513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             bool foreground);
709513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabClosingAt(TabStripModel* tab_strip_model,
710201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                            TabContentsWrapper* contents,
711513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            int index);
712201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabDetachedAt(TabContentsWrapper* contents, int index);
713dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void TabDeselected(TabContentsWrapper* contents);
714201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabSelectedAt(TabContentsWrapper* old_contents,
715201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
716513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             int index,
717513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             bool user_gesture);
718201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabMoved(TabContentsWrapper* contents,
719513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                        int from_index,
720513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                        int to_index);
72172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void TabReplacedAt(TabStripModel* tab_strip_model,
72272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                             TabContentsWrapper* old_contents,
723201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                             TabContentsWrapper* new_contents,
724513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                             int index);
725201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  virtual void TabPinnedStateChanged(TabContentsWrapper* contents, int index);
726513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabStripEmpty();
727513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
72821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Figure out if there are tabs that have beforeunload handlers.
72921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bool TabsNeedBeforeUnloadFired();
73021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
731ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen protected:
732ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Wrapper for the factory method in BrowserWindow. This allows subclasses to
733ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // set their own window.
734ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual BrowserWindow* CreateBrowserWindow();
735ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
736513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private:
737513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  FRIEND_TEST_ALL_PREFIXES(BrowserTest, NoTabsInPopups);
738201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  FRIEND_TEST_ALL_PREFIXES(BrowserTest, ConvertTabToAppShortcut);
73972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserTest, OpenAppWindowLikeNtp);
74072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserTest, AppIdSwitch);
741dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserInitTest, OpenAppShortcutNoPref);
742dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserInitTest, OpenAppShortcutWindowPref);
743dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserInitTest, OpenAppShortcutTabPref);
744dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  FRIEND_TEST_ALL_PREFIXES(BrowserInitTest, OpenAppShortcutPanel);
745513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
746513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Used to describe why a tab is being detached. This is used by
747513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TabDetachedAtImpl.
748513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum DetachType {
749513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Result of TabDetachedAt.
750513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DETACH_TYPE_DETACH,
751513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
752513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Result of TabReplacedAt.
753513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DETACH_TYPE_REPLACE,
754513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
755513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    // Result of the tab strip not having any significant tabs.
756513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    DETACH_TYPE_EMPTY
757513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
758513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
759513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from TabContentsDelegate:
760513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OpenURLFromTab(TabContents* source,
761513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              const GURL& url,
762513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              const GURL& referrer,
763513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              WindowOpenDisposition disposition,
764513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              PageTransition::Type transition);
765513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void NavigationStateChanged(const TabContents* source,
766513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                      unsigned changed_flags);
767513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void AddNewContents(TabContents* source,
768513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              TabContents* new_contents,
769513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              WindowOpenDisposition disposition,
770513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              const gfx::Rect& initial_pos,
771513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              bool user_gesture);
772513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ActivateContents(TabContents* contents);
773513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void DeactivateContents(TabContents* contents);
774513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void LoadingStateChanged(TabContents* source);
775513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void CloseContents(TabContents* source);
776513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void MoveContents(TabContents* source, const gfx::Rect& pos);
777513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void DetachContents(TabContents* source);
778513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsPopup(const TabContents* source) const;
779513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool CanReloadContents(TabContents* source) const;
780513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void UpdateTargetURL(TabContents* source, const GURL& url);
781513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ContentsMouseEvent(
782513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      TabContents* source, const gfx::Point& location, bool motion);
783513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ContentsZoomChange(bool zoom_in);
784513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OnContentSettingsChange(TabContents* source);
785513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetTabContentBlocked(TabContents* contents, bool blocked);
786513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void TabContentsFocused(TabContents* tab_content);
787513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool TakeFocus(bool reverse);
788513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool IsApplication() const;
789513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ConvertContentsToApplication(TabContents* source);
790513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool ShouldDisplayURLField();
791513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowHtmlDialog(HtmlDialogUIDelegate* delegate,
792513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                              gfx::NativeWindow parent_window);
793513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void BeforeUnloadFired(TabContents* source,
794513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 bool proceed,
795513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 bool* proceed_to_fire_unload);
796513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void SetFocusToLocationBar(bool select_all);
797513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void RenderWidgetShowing();
798513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual int GetExtraRenderViewHeight() const;
799513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OnStartDownload(DownloadItem* download, TabContents* tab);
800513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowPageInfo(Profile* profile,
801513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            const GURL& url,
802513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            const NavigationEntry::SSLStatus& ssl,
803513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                            bool show_history);
80421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  virtual void ViewSourceForTab(TabContents* source, const GURL& page_url);
805ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ViewSourceForFrame(TabContents* source,
806ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                  const GURL& frame_url,
807ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                  const std::string& frame_content_state);
808513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
809513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                        bool* is_keyboard_shortcut);
810513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
811513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowRepostFormWarningDialog(TabContents* tab_contents);
812ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ShowContentSettingsPage(ContentSettingsType content_type);
813513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ShowCollectedCookiesDialog(TabContents* tab_contents);
814513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual bool ShouldAddNavigationToHistory(
815513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      const history::HistoryAddPageArgs& add_page_args,
816513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      NavigationType::Type navigation_type);
817513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void ContentRestrictionsChanged(TabContents* source);
818dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void WorkerCrashed();
819513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
82072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Overridden from TabContentsWrapperDelegate:
82172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  virtual void URLStarredChanged(TabContentsWrapper* source,
82272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                 bool starred) OVERRIDE;
823ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void OnDidGetApplicationInfo(TabContentsWrapper* source,
824ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                       int32 page_id) OVERRIDE;
825ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void OnInstallApplication(
826ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      TabContentsWrapper* source,
827ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      const WebApplicationInfo& app_info) OVERRIDE;
828ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
829dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Overridden from SearchEngineTabHelperDelegate:
830dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ConfirmSetDefaultSearchProvider(
831dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      TabContents* tab_contents,
832dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      TemplateURL* template_url,
833dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      TemplateURLModel* template_url_model) OVERRIDE;
834dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  virtual void ConfirmAddSearchProvider(const TemplateURL* template_url,
835dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                                        Profile* profile) OVERRIDE;
83672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
837513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from SelectFileDialog::Listener:
838513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void FileSelected(const FilePath& path, int index, void* params);
839513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
840513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from NotificationObserver:
841513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void Observe(NotificationType type,
842513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       const NotificationSource& source,
843513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                       const NotificationDetails& details);
844513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
845513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overridden from ProfileSyncServiceObserver:
846513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual void OnStateChanged();
847513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
848513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Overriden from InstantDelegate:
849ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void PrepareForInstant() OVERRIDE;
850ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void ShowInstant(TabContentsWrapper* preview_contents) OVERRIDE;
851ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void HideInstant() OVERRIDE;
852ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void CommitInstant(TabContentsWrapper* preview_contents) OVERRIDE;
853ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual void SetSuggestedText(const string16& text,
854ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                InstantCompleteBehavior behavior) OVERRIDE;
855ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  virtual gfx::Rect GetInstantBounds() OVERRIDE;
856513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
857513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Command and state updating ///////////////////////////////////////////////
858513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
859513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Initialize state for all browser commands.
860513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void InitCommandState();
861513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
862513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Update commands whose state depends on the tab's state.
863513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateCommandsForTabState();
864513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
865513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Updates commands when the content's restrictions change.
866513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateCommandsForContentRestrictionState();
867513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
868513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Updates commands for enabling developer tools.
869513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateCommandsForDevTools();
870513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
871ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Updates commands for bookmark editing.
872ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void UpdateCommandsForBookmarkEditing();
873ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
874513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Updates the printing command state.
875513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdatePrintingState(int content_restrictions);
876513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
877513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Ask the Reload/Stop button to change its icon, and update the Stop command
878513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // state.  |is_loading| is true if the current TabContents is loading.
879513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |force| is true if the button should change its icon immediately.
880513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateReloadStopState(bool is_loading, bool force);
881513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
882513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // UI update coalescing and handling ////////////////////////////////////////
883513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
884513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Asks the toolbar (and as such the location bar) to update its state to
885513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // reflect the current tab's current URL, security state, etc.
886513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // If |should_restore_state| is true, we're switching (back?) to this tab and
887513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // should restore any previous location bar state (such as user editing) as
888513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // well.
889513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateToolbar(bool should_restore_state);
890513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
891513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Does one or both of the following for each bit in |changed_flags|:
892513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // . If the update should be processed immediately, it is.
893513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // . If the update should processed asynchronously (to avoid lots of ui
894513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //   updates), then scheduled_updates_ is updated for the |source| and update
895513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //   pair and a task is scheduled (assuming it isn't running already)
896513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //   that invokes ProcessPendingUIUpdates.
897513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ScheduleUIUpdate(const TabContents* source, unsigned changed_flags);
898513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
899513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Processes all pending updates to the UI that have been scheduled by
900513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // ScheduleUIUpdate in scheduled_updates_.
901513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ProcessPendingUIUpdates();
902513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
903513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Removes all entries from scheduled_updates_ whose source is contents.
904513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void RemoveScheduledUpdatesFor(TabContents* contents);
905513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
906513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Getters for UI ///////////////////////////////////////////////////////////
907513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
908513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): remove, and provide AutomationProvider a better way to access
909513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //             the LocationBarView's edit.
910513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  friend class AutomationProvider;
911513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  friend class TestingAutomationProvider;
912513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
913513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns the StatusBubble from the current toolbar. It is possible for
914513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // this to return NULL if called before the toolbar has initialized.
915513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): remove this.
916513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  StatusBubble* GetStatusBubble();
917513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
918513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Session restore functions ////////////////////////////////////////////////
919513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
920513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Notifies the history database of the index for all tabs whose index is
921513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // >= index.
922513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void SyncHistoryWithTabs(int index);
923513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
924513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // OnBeforeUnload handling //////////////////////////////////////////////////
925513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
926513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  typedef std::set<TabContents*> UnloadListenerSet;
927513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
928513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Processes the next tab that needs it's beforeunload/unload event fired.
929513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ProcessPendingTabs();
930513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
931513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Whether we've completed firing all the tabs' beforeunload/unload events.
932513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool HasCompletedUnloadProcessing() const;
933513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
934513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Clears all the state associated with processing tabs' beforeunload/unload
935513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // events since the user cancelled closing the window.
936513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CancelWindowClose();
937513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
938513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Removes |tab| from the passed |set|.
939513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns whether the tab was in the set in the first place.
940513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): this method needs a better name!
941513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool RemoveFromSet(UnloadListenerSet* set, TabContents* tab);
942513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
943513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Cleans up state appropriately when we are trying to close the browser and
944513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the tab has finished firing its unload handler. We also use this in the
945513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // cases where a tab crashes or hangs even if the beforeunload/unload haven't
94672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // successfully fired. If |process_now| is true |ProcessPendingTabs| is
94772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // invoked immediately, otherwise it is invoked after a delay (PostTask).
94872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  //
94972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Typically you'll want to pass in true for |process_now|. Passing in true
95072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // may result in deleting |tab|. If you know that shouldn't happen (because of
95172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // the state of the stack), pass in false.
95272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  void ClearUnloadState(TabContents* tab, bool process_now);
953513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
954513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // In-progress download termination handling /////////////////////////////////
955513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
956513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Called when the window is closing to check if potential in-progress
957513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // downloads should prevent it from closing.
958513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Returns true if the window can close, false otherwise.
959513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool CanCloseWithInProgressDownloads();
960513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
961513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Assorted utility functions ///////////////////////////////////////////////
962513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
963dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Sets the delegate of all the parts of the |TabContentsWrapper| that
964dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // are needed.
965dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  void SetAsDelegate(TabContentsWrapper* tab, Browser* delegate);
966dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
967513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shows the Find Bar, optionally selecting the next entry that matches the
968513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // existing search string for that Tab. |forward_direction| controls the
969513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // search direction.
970513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void FindInPage(bool find_next, bool forward_direction);
971513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
972513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Closes the frame.
973513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TODO(beng): figure out if we need this now that the frame itself closes
974513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  //             after a return to the message loop.
975513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CloseFrame();
976513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
977201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  void TabDetachedAtImpl(TabContentsWrapper* contents,
978201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      int index, DetachType type);
979513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
98072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Create a preference dictionary for the provided application name, in the
98172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // given user profile. This is done only once per application name / per
98272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // session / per user profile.
98372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static void RegisterAppPrefs(const std::string& app_name, Profile* profile);
984513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
985513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Shared code between Reload() and ReloadIgnoringCache().
986513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void ReloadInternal(WindowOpenDisposition disposition, bool ignore_cache);
987513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
988513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Return true if the window dispositions means opening a new tab.
989513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool ShouldOpenNewTabForWindowDisposition(WindowOpenDisposition disposition);
990513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
991513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Depending on the disposition, return the current tab or a clone of the
992513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // current tab.
993513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  TabContents* GetOrCloneTabForDisposition(WindowOpenDisposition disposition);
994513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
995513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Sets the insertion policy of the tabstrip based on whether vertical tabs
996513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // are enabled.
997513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UpdateTabStripModelInsertionPolicy();
998513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
999513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Invoked when the use vertical tabs preference changes. Resets the insertion
1000513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // policy of the tab strip model and notifies the window.
1001513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void UseVerticalTabsChanged();
1002513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1003513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Implementation of SupportsWindowFeature and CanSupportWindowFeature. If
1004513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // |check_fullscreen| is true, the set of features reflect the actual state of
1005513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the browser, otherwise the set of features reflect the possible state of
1006513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // the browser.
1007513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool SupportsWindowFeatureImpl(WindowFeature feature,
1008513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                                 bool check_fullscreen) const;
1009513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1010513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Determines if closing of browser can really be permitted after normal
1011513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // sequence of downloads and unload handlers have given the go-ahead to close.
1012513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // It is called from ShouldCloseWindow.  It checks with
1013513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // TabCloseableStateWatcher to confirm if browser can really be closed.
1014513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Appropriate action is taken by watcher as it sees fit.
1015513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // If watcher denies closing of browser, CancelWindowClose is called to
1016513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // cancel closing of window.
1017513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool IsClosingPermitted();
1018513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1019513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Commits the current instant, returning true on success. This is intended
1020513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // for use from OpenCurrentURL.
1021513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool OpenInstant(WindowOpenDisposition disposition);
1022513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1023513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // If this browser should have instant one is created, otherwise does nothing.
1024513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  void CreateInstantIfNecessary();
1025513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
102621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  // Opens view-source tab for given tab contents.
102721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  void ViewSource(TabContentsWrapper* tab);
102821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
1029dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Creates a NavigateParams struct for a singleton tab navigation.
1030dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  browser::NavigateParams GetSingletonTabNavigateParams(const GURL& url);
1031dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
1032ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Opens view-source tab for any frame within given tab contents.
1033ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  void ViewSource(TabContentsWrapper* tab,
1034ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                  const GURL& url,
1035ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                  const std::string& content_state);
1036ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
1037513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Data members /////////////////////////////////////////////////////////////
1038513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1039513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  NotificationRegistrar registrar_;
1040513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1041513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This Browser's type.
1042513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const Type type_;
1043513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1044513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This Browser's profile.
1045513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  Profile* const profile_;
1046513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1047513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This Browser's window.
1048513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BrowserWindow* window_;
1049513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1050513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This Browser's current TabHandler.
1051513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_ptr<TabHandler> tab_handler_;
1052513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1053513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The CommandUpdater that manages the browser window commands.
1054513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  CommandUpdater command_updater_;
1055513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1056513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // An optional application name which is used to retrieve and save window
1057513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // positions.
1058513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  std::string app_name_;
1059513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1060513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Unique identifier of this browser for session restore. This id is only
1061513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // unique within the current session, and is not guaranteed to be unique
1062513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // across sessions.
1063513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const SessionID session_id_;
1064513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1065513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The model for the toolbar view.
1066513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ToolbarModel toolbar_model_;
1067513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1068513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // UI update coalescing and handling ////////////////////////////////////////
1069513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1070513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  typedef std::map<const TabContents*, int> UpdateMap;
1071513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1072513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Maps from TabContents to pending UI updates that need to be processed.
1073513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // We don't update things like the URL or tab title right away to avoid
1074513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // flickering and extra painting.
1075513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // See ScheduleUIUpdate and ProcessPendingUIUpdates.
1076513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  UpdateMap scheduled_updates_;
1077513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1078513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The following factory is used for chrome update coalescing.
1079513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ScopedRunnableMethodFactory<Browser> chrome_updater_factory_;
1080513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1081513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // OnBeforeUnload handling //////////////////////////////////////////////////
1082513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1083513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tracks tabs that need there beforeunload event fired before we can
1084513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // close the browser. Only gets populated when we try to close the browser.
1085513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  UnloadListenerSet tabs_needing_before_unload_fired_;
1086513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1087513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tracks tabs that need there unload event fired before we can
1088513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // close the browser. Only gets populated when we try to close the browser.
1089513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  UnloadListenerSet tabs_needing_unload_fired_;
1090513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1091513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Whether we are processing the beforeunload and unload events of each tab
1092513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // in preparation for closing the browser.
1093513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool is_attempting_to_close_browser_;
1094513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1095513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // In-progress download termination handling /////////////////////////////////
1096513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1097513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum CancelDownloadConfirmationState {
1098513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    NOT_PROMPTED,          // We have not asked the user.
1099513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    WAITING_FOR_RESPONSE,  // We have asked the user and have not received a
1100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                           // reponse yet.
1101513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    RESPONSE_RECEIVED      // The user was prompted and made a decision already.
1102513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
1103513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1104513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // State used to figure-out whether we should prompt the user for confirmation
1105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // when the browser is closed with in-progress downloads.
1106513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  CancelDownloadConfirmationState cancel_download_confirmation_state_;
1107513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1108513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  /////////////////////////////////////////////////////////////////////////////
1109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1110513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Override values for the bounds of the window and its maximized state.
1111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // These are supplied by callers that don't want to use the default values.
1112513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The default values are typically loaded from local state (last session),
1113513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // obtained from the last window of the same type, or obtained from the
1114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // shell shortcut's startup info.
1115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  gfx::Rect override_bounds_;
1116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  MaximizedState maximized_state_;
1117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The following factory is used to close the frame at a later time.
1119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  ScopedRunnableMethodFactory<Browser> method_factory_;
1120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The Find Bar. This may be NULL if there is no Find Bar, and if it is
1122513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // non-NULL, it may or may not be visible.
1123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_ptr<FindBarController> find_bar_controller_;
1124513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1125513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Dialog box used for opening and saving files.
1126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_refptr<SelectFileDialog> select_file_dialog_;
1127513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Keep track of the encoding auto detect pref.
1129513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BooleanPrefMember encoding_auto_detect_;
1130513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1131513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Keep track of the printing enabled pref.
1132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BooleanPrefMember printing_enabled_;
1133513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1134513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Keep track of the development tools disabled pref.
1135513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BooleanPrefMember dev_tools_disabled_;
1136513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1137513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Keep track of when instant enabled changes.
1138513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  BooleanPrefMember instant_enabled_;
1139513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
114072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // Tracks the preference that controls whether incognito mode is allowed.
114172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  BooleanPrefMember incognito_mode_allowed_;
114272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Tracks whether bookmarks can be modified.
1144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  BooleanPrefMember edit_bookmarks_enabled_;
1145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
1146513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Indicates if command execution is blocked.
1147513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool block_command_execution_;
1148513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Stores the last blocked command id when |block_command_execution_| is true.
1150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  int last_blocked_command_id_;
1151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Stores the disposition type of the last blocked command.
1153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  WindowOpenDisposition last_blocked_command_disposition_;
1154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Different types of action when web app info is available.
1156513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // OnDidGetApplicationInfo uses this to dispatch calls.
1157513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  enum WebAppAction {
1158513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    NONE,             // No action at all.
1159513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    CREATE_SHORTCUT,  // Bring up create application shortcut dialog.
1160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    UPDATE_SHORTCUT   // Update icon for app shortcut.
1161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  };
1162513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1163513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Which deferred action to perform when OnDidGetApplicationInfo is notified
1164513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // from a TabContents. Currently, only one pending action is allowed.
1165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  WebAppAction pending_web_app_action_;
1166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1167513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Tracks the display mode of the tabstrip.
1168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  mutable BooleanPrefMember use_vertical_tabs_;
1169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1170513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The profile's tab restore service. The service is owned by the profile,
1171513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // and we install ourselves as an observer.
1172513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  TabRestoreService* tab_restore_service_;
1173513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Helper which implements the TabRestoreServiceDelegate interface.
1175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<BrowserTabRestoreServiceDelegate> tab_restore_service_delegate_;
1176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
1177513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  scoped_ptr<InstantController> instant_;
1178201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  scoped_ptr<InstantUnloadHandler> instant_unload_handler_;
1179513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(Browser);
1181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch};
1182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
1183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif  // CHROME_BROWSER_UI_BROWSER_H_
1184