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