13f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 97d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#ifdef ANDROID 1040eae52c5e5dbf475a0cf368c9ccbb7f8a0653f4Ben Murdoch#include "android/autofill/profile_android.h" 11d8c4c37a7d0961944bfdfaa117d5c68c8e129c97Iain Merrick#include "base/scoped_ptr.h" 120dcd5fce7fd690e4bcadabbb2dfd1a5ef859bb4dKristian Monsen#include "chrome/browser/profiles/profile.h" 137d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#include "chrome/browser/autofill/autofill_host.h" 147d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 157d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// Autofill does not need the entire TabContents class, just 167d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// access to the RenderViewHost and Profile. Later it would 177d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// be nice to create a small class that contains just this 187d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// data for AutoFill. Then Android won't care about this 197d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// file which as it stands does not compile for us. 207d214dfa174224b459660971e5b5cce2e06be02aBen Murdochclass RenderViewHost; 2140eae52c5e5dbf475a0cf368c9ccbb7f8a0653f4Ben Murdochclass URLRequestContextGetter; 227d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 237d214dfa174224b459660971e5b5cce2e06be02aBen Murdochclass TabContents { 247d214dfa174224b459660971e5b5cce2e06be02aBen Murdochpublic: 257d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch TabContents() 267d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch : profile_(ProfileImplAndroid::CreateProfile(FilePath())) 277d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch , autofill_host_(NULL) 287d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch { 297d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch } 307d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 31d8c4c37a7d0961944bfdfaa117d5c68c8e129c97Iain Merrick Profile* profile() { return profile_.get(); } 32d8c4c37a7d0961944bfdfaa117d5c68c8e129c97Iain Merrick void SetProfileRequestContext(URLRequestContextGetter* context) { static_cast<ProfileImplAndroid*>(profile_.get())->SetRequestContext(context); } 337d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch AutoFillHost* autofill_host() { return autofill_host_; } 347d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch void SetAutoFillHost(AutoFillHost* autofill_host) { autofill_host_ = autofill_host; } 357d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 367d214dfa174224b459660971e5b5cce2e06be02aBen Murdochprivate: 37d8c4c37a7d0961944bfdfaa117d5c68c8e129c97Iain Merrick scoped_ptr<Profile> profile_; 387d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch AutoFillHost* autofill_host_; 397d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch}; 407d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 417d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#else 427d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <deque> 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map> 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/gtest_prod_util.h" 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h" 513f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/string16.h" 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/dom_ui/web_ui_factory.h" 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/save_package.h" 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/image_loading_tracker.h" 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/fav_icon_helper.h" 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h" 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/renderer_host/render_view_host_delegate.h" 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/constrained_window.h" 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/language_state.h" 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/navigation_controller.h" 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/navigation_entry.h" 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/page_navigator.h" 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/render_view_host_manager.h" 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/tab_specific_content_settings.h" 6521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h" 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_registrar.h" 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/property_bag.h" 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/renderer_preferences.h" 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/translate_errors.h" 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/common/web_apps.h" 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/load_states.h" 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h" 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 743f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#if defined(OS_WIN) 753f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/win/scoped_handle.h" 763f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#endif 773f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace gfx { 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Rect; 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace history { 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass HistoryAddPageArgs; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace printing { 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PrintPreviewMessageHandler; 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PrintViewManager; 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutocompleteHistoryManager; 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutoFillManager; 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass BlockedContentContainer; 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass WebUI; 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass DesktopNotificationHandler; 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DownloadItem; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Extension; 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass FileSelectHelper; 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InfoBarDelegate; 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass LoadNotificationDetails; 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OmniboxSearchHint; 10272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PluginObserver; 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 10421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenclass PrerenderManager; 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass PrerenderPLTRecorder; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderViewHost; 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SessionStorageNamespace; 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SiteInstance; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap; 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsDelegate; 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass TabContentsObserver; 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsSSLHelper; 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsView; 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass URLPattern; 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstruct RendererPreferences; 117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ThumbnailScore; 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct ViewHostMsg_DomMessage_Params; 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ViewHostMsg_FrameNavigate_Params; 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstruct ViewHostMsg_RunFileChooser_Params; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct WebPreferences; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Describes what goes in the main content area of a tab. TabContents is 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the only type of TabContents, and these should be merged together. 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents : public PageNavigator, 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public NotificationObserver, 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public RenderViewHostDelegate, 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public RenderViewHostManager::Delegate, 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public JavaScriptAppModalDialogDelegate, 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public ImageLoadingTracker::Observer, 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public TabSpecificContentSettings::Delegate { 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Flags passed to the TabContentsDelegate.NavigationStateChanged to tell it 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // what has changed. Combine them to update more than one thing. 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum InvalidateTypes { 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INVALIDATE_URL = 1 << 0, // The URL has changed. 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INVALIDATE_TAB = 1 << 1, // The favicon, app icon, or crashed 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // state changed. 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INVALIDATE_LOAD = 1 << 2, // The loading state has changed. 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INVALIDATE_PAGE_ACTIONS = 1 << 3, // Page action icons have changed. 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INVALIDATE_BOOKMARK_BAR = 1 << 4, // State of ShouldShowBookmarkBar 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // changed. 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick INVALIDATE_TITLE = 1 << 5, // The title changed. 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |base_tab_contents| is used if we want to size the new tab contents view 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // based on an existing tab contents view. This can be NULL if not needed. 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // The session storage namespace parameter allows multiple render views and 1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // tab contentses to share the same session storage (part of the WebStorage 1513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // spec) space. This is useful when restoring tabs, but most callers should 1523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // pass in NULL which will cause a new SessionStorageNamespace to be created. 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContents(Profile* profile, 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SiteInstance* site_instance, 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int routing_id, 1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const TabContents* base_tab_contents, 1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SessionStorageNamespace* session_storage_namespace); 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~TabContents(); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterUserPrefs(PrefService* prefs); 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Intrinsic tab state ------------------------------------------------------- 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the property bag for this tab contents, where callers can add 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // extra data they may wish to associate with the tab. Returns a pointer 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // rather than a reference since the PropertyAccessors expect this. 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const PropertyBag* property_bag() const { return &property_bag_; } 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PropertyBag* property_bag() { return &property_bag_; } 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContentsDelegate* delegate() const { return delegate_; } 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_delegate(TabContentsDelegate* d) { delegate_ = d; } 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Gets the controller for this tab contents. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController& controller() { return controller_; } 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController& controller() const { return controller_; } 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the user profile associated with this TabContents (via the 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NavigationController). 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile() const { return controller_.profile(); } 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if contains content rendered by an extension. 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool HostsExtension() const; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns the TabContentsSSLHelper, creating it if necessary. 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContentsSSLHelper* GetSSLHelper(); 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the SavePackage which manages the page saving job. May be NULL. 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SavePackage* save_package() const { return save_package_.get(); } 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return the currently active RenderProcessHost and RenderViewHost. Each of 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // these may change over time. 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderProcessHost* GetRenderProcessHost() const; 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host() const { 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return render_manager_.current_host(); 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 196513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebUI* web_ui() const { 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return render_manager_.web_ui() ? render_manager_.web_ui() 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : render_manager_.pending_web_ui(); 200513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the currently active RenderWidgetHostView. This may change over 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // time and can be NULL (during setup and teardown). 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderWidgetHostView* GetRenderWidgetHostView() const { 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return render_manager_.GetRenderWidgetHostView(); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The TabContentsView will never change and is guaranteed non-NULL. 209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContentsView* view() const { 210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return view_.get(); 211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the FavIconHelper of this TabContents. 214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FavIconHelper& fav_icon_helper() { 215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return fav_icon_helper_; 216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // App extensions ------------------------------------------------------------ 219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the extension denoting this as an app. If |extension| is non-null this 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // tab becomes an app-tab. TabContents does not listen for unload events for 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the extension. It's up to consumers of TabContents to do that. 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: this should only be manipulated before the tab is added to a browser. 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(sky): resolve if this is the right way to identify an app tab. If it 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is, than this should be passed in the constructor. 227513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetExtensionApp(const Extension* extension); 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Convenience for setting the app extension by id. This does nothing if 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |extension_app_id| is empty, or an extension can't be found given the 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // specified id. 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetExtensionAppById(const std::string& extension_app_id); 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 234513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension_app() const { return extension_app_; } 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_app() const { return extension_app_ != NULL; } 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If an app extension has been explicitly set for this TabContents its icon 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is returned. 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 24072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // NOTE: the returned icon is larger than 16x16 (its size is 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Extension::EXTENSION_ICON_SMALLISH). 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap* GetExtensionAppIcon(); 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Tab navigation state ------------------------------------------------------ 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the current navigation properties, which if a navigation is 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // pending may be provisional (e.g., the navigation could result in a 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // download, in which case the URL would revert to what it was previously). 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const GURL& GetURL() const; 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual const string16& GetTitle() const; 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initial title assigned to NavigationEntries from Navigate. 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static string16 GetDefaultTitle(); 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The max PageID of any page that this TabContents has loaded. PageIDs 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // increase with each new page that is loaded by a tab. If this is a 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TabContents, then the max PageID is kept separately on each SiteInstance. 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns -1 if no PageIDs have yet been seen. 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int32 GetMaxPageID(); 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Updates the max PageID to be at least the given PageID. 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateMaxPageID(int32 page_id); 263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the site instance associated with the current page. By default, 265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // there is no site instance. TabContents overrides this to provide proper 266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // access to its site instance. 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual SiteInstance* GetSiteInstance() const; 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Defines whether this tab's URL should be displayed in the browser's URL 270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // bar. Normally this is true so you can see the URL. This is set to false 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // for the new tab page and related pages so that the URL bar is empty and 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the user is invited to type into it. 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ShouldDisplayURL(); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the favicon for this tab, or an isNull() bitmap if the tab does not 276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // have a favicon. The default implementation uses the current navigation 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // entry. 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap GetFavIcon() const; 279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if we are not using the default favicon. 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool FavIconIsValid() const; 282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns whether the favicon should be displayed. If this returns false, no 284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // space is provided for the favicon, and the favicon is never displayed. 285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ShouldDisplayFavIcon(); 286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a human-readable description the tab's loading state. 2883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen virtual string16 GetStatusText() const; 289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Add and remove observers for page navigation notifications. Adding or 291201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // removing multiple times has no effect. The order in which notifications 292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // are sent to observers is undefined. Clients must be sure to remove the 293201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // observer before they go away. 29472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void AddObserver(TabContentsObserver* observer); 29572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RemoveObserver(TabContentsObserver* observer); 296201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return whether this tab contents is loading a resource. 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_loading() const { return is_loading_; } 299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns whether this tab contents is waiting for a first-response for the 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // main resource of the page. This controls whether the throbber state is 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // "waiting" or "loading." 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool waiting_for_response() const { return waiting_for_response_; } 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& encoding() const { return encoding_; } 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_encoding(const std::string& encoding); 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void reset_encoding() { 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch encoding_.clear(); 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const WebApplicationInfo& web_app_info() const { 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return web_app_info_; 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkBitmap& app_icon() const { return app_icon_; } 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets an app icon associated with TabContents and fires an INVALIDATE_TITLE 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // navigation state change to trigger repaint of title. 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetAppIcon(const SkBitmap& app_icon); 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool displayed_insecure_content() const { 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return displayed_insecure_content_; 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Internal state ------------------------------------------------------------ 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This flag indicates whether the tab contents is currently being 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // screenshotted by the DraggedTabController. 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool capturing_contents() const { return capturing_contents_; } 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_capturing_contents(bool cap) { capturing_contents_ = cap; } 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates whether this tab should be considered crashed. The setter will 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // also notify the delegate when the flag is changed. 33421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen bool is_crashed() const { 33521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen return (crashed_status_ == base::TERMINATION_STATUS_PROCESS_CRASHED || 33621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen crashed_status_ == base::TERMINATION_STATUS_ABNORMAL_TERMINATION || 33721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen crashed_status_ == base::TERMINATION_STATUS_PROCESS_WAS_KILLED); 33821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen } 33921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::TerminationStatus crashed_status() const { return crashed_status_; } 34021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int crashed_error_code() const { return crashed_error_code_; } 34121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void SetIsCrashed(base::TerminationStatus status, int error_code); 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Call this after updating a page action to notify clients about the changes. 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PageActionStateChanged(); 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether the tab is in the process of being destroyed. 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Added as a tentative work-around for focus related bug #4633. This allows 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // us not to store focus when a tab is being closed. 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_being_destroyed() const { return is_being_destroyed_; } 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Convenience method for notifying the delegate of a navigation state 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // change. See TabContentsDelegate. 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyNavigationStateChanged(unsigned changed_flags); 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invoked when the tab contents becomes selected. If you override, be sure 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and invoke super's implementation. 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidBecomeSelected(); 358201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch base::TimeTicks last_selected_time() const { 359201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return last_selected_time_; 360201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invoked when the tab contents becomes hidden. 363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: If you override this, call the superclass version too! 364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void WasHidden(); 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Activates this contents within its containing window, bringing that window 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to the foreground if necessary. 368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Activate(); 369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Deactivates this contents by deactivating its containing window. 3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void Deactivate(); 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(brettw) document these. 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowContents(); 375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HideContents(); 376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns true if the before unload and unload listeners need to be 378201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // fired. The value of this changes over time. For example, if true and the 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // before unload listener is executed and allows the user to exit, then this 380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // returns false. 381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool NeedToFireBeforeUnload(); 382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef UNIT_TEST 384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Expose the render manager for testing. 385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostManager* render_manager() { return &render_manager_; } 386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // In the underlying RenderViewHostManager, swaps in the provided 38921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // RenderViewHost to replace the current RenderViewHost. The current RVH 39021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // will be shutdown and ultimately deleted. 39121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void SwapInRenderViewHost(RenderViewHost* rvh); 39221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Commands ------------------------------------------------------------------ 394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implementation of PageNavigator. 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OpenURL(const GURL& url, const GURL& referrer, 397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PageTransition::Type transition); 399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called by the NavigationController to cause the TabContents to navigate to 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the current pending entry. The NavigationController should be called back 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // with CommitPendingEntry/RendererDidNavigate on success or 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // DiscardPendingEntry. The callbacks can be inside of this function, or at 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // some future time. 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The entry has a PageID of -1 if newly created (corresponding to navigation 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to a new URL). 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If this method returns false, then the navigation is discarded (equivalent 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to calling DiscardPendingEntry on the NavigationController). 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool NavigateToPendingEntry( 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController::ReloadType reload_type); 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stop any pending navigation. 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Stop(); 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called on a TabContents when it isn't a popup, but a new window. 418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DisassociateFromPopupCount(); 419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a new TabContents with the same state as this one. The returned 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // heap-allocated pointer is owned by the caller. 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TabContents* Clone(); 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Shows the page info. 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ShowPageInfo(const GURL& url, 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationEntry::SSLStatus& ssl, 427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool show_history); 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 42921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Saves the favicon for the current page. 43021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void SaveFavicon(); 43121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Window management --------------------------------------------------------- 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Create a new window constrained to this TabContents' clip and visibility. 435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The window is initialized by using the supplied delegate to obtain basic 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // window characteristics, and the supplied view for the content. Note that 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the returned ConstrainedWindow might not yet be visible. 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindow* CreateConstrainedDialog( 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindowDelegate* delegate); 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Adds a new tab or window with the given already-created contents 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddNewContents(TabContents* new_contents, 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition, 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos, 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool user_gesture); 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Execute code in this tab. Returns true if the message was successfully 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // sent. 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ExecuteCode(int request_id, const std::string& extension_id, 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_js_code, const std::string& code_string, 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool all_frames); 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when the blocked popup notification is shown or hidden. 454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void PopupNotificationVisibilityChanged(bool visible); 455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the number of constrained windows in this tab. Used by tests. 457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch size_t constrained_window_count() { return child_windows_.size(); } 458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::deque<ConstrainedWindow*> ConstrainedWindowList; 460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return an iterator for the first constrained window in this tab contents. 462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindowList::iterator constrained_window_begin() 463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { return child_windows_.begin(); } 464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return an iterator for the last constrained window in this tab contents. 466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindowList::iterator constrained_window_end() 467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch { return child_windows_.end(); } 468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Views and focus ----------------------------------------------------------- 470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(brettw): Most of these should be removed and the caller should call 471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the view directly. 472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the actual window that is focused when this TabContents is shown. 474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::NativeView GetContentNativeView() const; 475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the NativeView associated with this TabContents. Outside of 477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // automation in the context of the UI, this is required to be implemented. 478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::NativeView GetNativeView() const; 479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the bounds of this TabContents in the screen coordinate system. 481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetContainerBounds(gfx::Rect *out) const; 482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Makes the tab the focused window. 484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void Focus(); 485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Focuses the first (last if |reverse| is true) element in the page. 487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invoked when this tab is getting the focus through tab traversal (|reverse| 488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is true when using Shift-Tab). 489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void FocusThroughTabTraversal(bool reverse); 490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // These next two functions are declared on RenderViewHostManager::Delegate 492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // but also accessed directly by other callers. 493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the location bar should be focused by default rather than 495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the page contents. The view calls this function when the tab is focused 496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to see what it should do. 497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool FocusLocationBarByDefault(); 498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Focuses the location bar. 500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetFocusToLocationBar(bool select_all); 501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Creates a view and sets the size for the specified RVH. 50321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void CreateViewAndSetSizeForRVH(RenderViewHost* rvh); 50421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Infobars ------------------------------------------------------------------ 506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Adds an InfoBar for the specified |delegate|. 508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void AddInfoBar(InfoBarDelegate* delegate); 509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Removes the InfoBar for the specified |delegate|. 511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void RemoveInfoBar(InfoBarDelegate* delegate); 512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Replaces one infobar with another, without any animation in between. 514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ReplaceInfoBar(InfoBarDelegate* old_delegate, 515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InfoBarDelegate* new_delegate); 516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Enumeration and access functions. 51872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen size_t infobar_count() const { return infobar_delegates_.size(); } 51972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // WARNING: This does not sanity-check |index|! 52072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InfoBarDelegate* GetInfoBarDelegateAt(size_t index) { 52172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return infobar_delegates_[index]; 522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Toolbars and such --------------------------------------------------------- 525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if a Bookmark Bar should be shown for this tab. 527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ShouldShowBookmarkBar(); 528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Notifies the delegate that a download is about to be started. 530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This notification is fired before a local temporary file has been created. 531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool CanDownload(int request_id); 532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Notifies the delegate that a download started. 534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnStartDownload(DownloadItem* download); 535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Notify our delegate that some of our content has animated. 537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ToolbarSizeChanged(bool is_animating); 538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when a ConstrainedWindow we own is about to be closed. 540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void WillClose(ConstrainedWindow* window); 541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 542731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Called when a BlockedContentContainer we own is about to be closed. 543731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void WillCloseBlockedContentContainer(BlockedContentContainer* container); 544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when a ConstrainedWindow we own is moved or resized. 546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DidMoveOrResize(ConstrainedWindow* window); 547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Interstitials ------------------------------------------------------------- 549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Various other systems need to know about our interstitials. 551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool showing_interstitial_page() const { 552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return render_manager_.interstitial_page() != NULL; 553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the passed passed interstitial as the currently showing interstitial. 556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |interstitial_page| should be non NULL (use the remove_interstitial_page 557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // method to unset the interstitial) and no interstitial page should be set 558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // when there is already a non NULL interstitial page set. 559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_interstitial_page(InterstitialPage* interstitial_page) { 560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch render_manager_.set_interstitial_page(interstitial_page); 561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Unsets the currently showing interstitial. 564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void remove_interstitial_page() { 565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch render_manager_.remove_interstitial_page(); 566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the currently showing interstitial, NULL if no interstitial is 569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // showing. 570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch InterstitialPage* interstitial_page() const { 571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return render_manager_.interstitial_page(); 572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Misc state & callbacks ---------------------------------------------------- 575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set whether the contents should block javascript message boxes or not. 577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Default is not to block any message boxes. 578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_suppress_javascript_messages(bool suppress_javascript_messages) { 579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch suppress_javascript_messages_ = suppress_javascript_messages; 580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Prepare for saving the current web page to disk. 583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnSavePage(); 584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Save page with the main HTML file path, the directory for saving resources, 586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and the save type: HTML only or complete web page. Returns true if the 587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // saving process has been initiated successfully. 588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool SavePage(const FilePath& main_file, const FilePath& dir_path, 589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SavePackage::SavePackageType save_type); 590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 59172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Sets save_package_, taking care to register and unregister the observers. 59272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void SetSavePackage(SavePackage* save_package); 59372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Tells the user's email client to open a compose window containing the 595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // current page's URL. 596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void EmailPageLocation(); 597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Displays asynchronously a print preview (generated by the renderer) if not 599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // already displayed and ask the user for its preferred print settings with 600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the "Print..." dialog box. (managed by the print worker thread). 601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(maruel): Creates a snapshot of the renderer to be used for the new 602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // tab for the printing facility. 603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PrintPreview(); 604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Prints the current document immediately. Since the rendering is 606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // asynchronous, the actual printing will not be completed on the return of 607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // this function. Returns false if printing is impossible at the moment. 608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool PrintNow(); 609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Notify the completion of a printing job. 611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void PrintingDone(int document_cookie, bool success); 612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the active NavigationEntry's page_id equals page_id. 614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsActiveEntry(int32 page_id); 615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& contents_mime_type() const { 617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return contents_mime_type_; 618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if this TabContents will notify about disconnection. 621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool notify_disconnection() const { return notify_disconnection_; } 622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Override the encoding and reload the page by sending down 624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ViewMsg_SetPageEncoding to the renderer. |UpdateEncoding| is kinda 625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the opposite of this, by which 'browser' is notified of 626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the encoding of the current tab from 'renderer' (determined by 627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // auto-detect, http header, meta, bom detection, etc). 628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetOverrideEncoding(const std::string& encoding); 629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Remove any user-defined override encoding and reload by sending down 631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ViewMsg_ResetPageEncodingToDefault to the renderer. 632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ResetOverrideEncoding(); 633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void WindowMoveOrResizeStarted(); 635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 636731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Sets whether all TabContents added by way of |AddNewContents| should be 637731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // blocked. Transitioning from all blocked to not all blocked results in 638731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // reevaluating any blocked TabContents, which may result in unblocking some 639731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // of the blocked TabContents. 640731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void SetAllContentsBlocked(bool value); 641731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 642731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContentContainer* blocked_content_container() const { 643731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return blocked_contents_; 644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RendererPreferences* GetMutableRendererPrefs() { 647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return &renderer_preferences_; 648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void set_opener_web_ui_type(WebUITypeID opener_web_ui_type) { 65172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen opener_web_ui_type_ = opener_web_ui_type; 652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We want to time how long it takes to create a new tab page. This method 655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // gets called as parts of the new tab page have loaded. 656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void LogNewTabTime(const std::string& event_name); 657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set the time when we started to create the new tab page. This time is 659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // from before we created this TabContents. 660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_new_tab_start_time(const base::TimeTicks& time) { 661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch new_tab_start_time_ = time; 662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Notification that tab closing has started. This can be called multiple 665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // times, subsequent calls are ignored. 666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnCloseStarted(); 667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LanguageState& language_state() { 669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return language_state_; 670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if underlying TabContentsView should accept drag-n-drop. 673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ShouldAcceptDragAndDrop() const; 674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // A render view-originated drag has ended. Informs the render view host and 67672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // tab contents delegate. 67772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void SystemDragEnded(); 67872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates if this tab was explicitly closed by the user (control-w, close 680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // tab menu item...). This is false for actions that indirectly close the tab, 681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // such as closing the window. The setter is maintained by TabStripModel, and 682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the getter only useful from within TAB_CLOSED notification 683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void set_closed_by_user_gesture(bool value) { 684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch closed_by_user_gesture_ = value; 685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool closed_by_user_gesture() const { return closed_by_user_gesture_; } 687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 688731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Overridden from JavaScriptAppModalDialogDelegate: 689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnMessageBoxClosed(IPC::Message* reply_msg, 690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool success, 691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& prompt); 692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetSuppressMessageBoxes(bool suppress_message_boxes); 693731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual gfx::NativeWindow GetMessageBoxRootWindow(); 694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TabContents* AsTabContents(); 695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ExtensionHost* AsExtensionHost(); 696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The BookmarkDragDelegate is used to forward bookmark drag and drop events 698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // to extensions. 699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderViewHostDelegate::BookmarkDrag* GetBookmarkDragDelegate(); 700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // It is up to callers to call SetBookmarkDragDelegate(NULL) when 702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |bookmark_drag| is deleted since this class does not take ownership of 703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |bookmark_drag|. 704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetBookmarkDragDelegate( 705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostDelegate::BookmarkDrag* bookmark_drag); 706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The TabSpecificContentSettings object is used to query the blocked content 708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // state by various UI elements. 709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabSpecificContentSettings* GetTabSpecificContentSettings() const; 710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Updates history with the specified navigation. This is called by 7123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // OnMsgNavigate to update history state. 7133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void UpdateHistoryForNavigation( 7143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<history::HistoryAddPageArgs> add_page_args); 7153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Sends the page title to the history service. This is called when we receive 7173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // the page title and we know we want to update history. 7183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void UpdateHistoryPageTitle(const NavigationEntry& entry); 7193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 720513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Gets the zoom level for this tab. 721513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch double GetZoomLevel() const; 722513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 723731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Gets the zoom percent for this tab. 724731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetZoomPercent(bool* enable_increment, bool* enable_decrement); 725731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 726201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Shows a fade effect over this tab contents. Repeated calls will be ignored 727201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // until the fade is canceled. If |animate| is true the fade should animate. 728201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void FadeForInstant(bool animate); 72921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 730201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Immediately removes the fade. 731201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void CancelInstantFade(); 732201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 73321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Opens view-source tab for this contents. 73421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void ViewSource(); 73521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 736731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Gets the minimum/maximum zoom percent. 737731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int minimum_zoom_percent() const { return minimum_zoom_percent_; } 738731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int maximum_zoom_percent() const { return maximum_zoom_percent_; } 739731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 740731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int content_restrictions() const { return content_restrictions_; } 741731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 74272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutocompleteHistoryManager* autocomplete_history_manager() { 74372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return autocomplete_history_manager_.get(); 74472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 74572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutoFillManager* autofill_manager() { return autofill_manager_.get(); } 74672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 74772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen protected: 74872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // from RenderViewHostDelegate. 74972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool OnMessageReceived(const IPC::Message& message); 75072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class NavigationController; 753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to access the child_windows_ (ConstrainedWindowList) for testing 754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // automation purposes. 7553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick friend class TestingAutomationProvider; 756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FRIEND_TEST_ALL_PREFIXES(TabContentsTest, NoJSMessageOnInterstitials); 758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FRIEND_TEST_ALL_PREFIXES(TabContentsTest, UpdateTitle); 759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FRIEND_TEST_ALL_PREFIXES(TabContentsTest, CrossSiteCantPreemptAfterUnload); 76072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FRIEND_TEST_ALL_PREFIXES(FormStructureBrowserTest, HTMLFiles); 76172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FRIEND_TEST_ALL_PREFIXES(NavigationControllerTest, HistoryNavigate); 76272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen FRIEND_TEST_ALL_PREFIXES(RenderViewHostManagerTest, PageDoesBackAndReload); 763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Temporary until the view/contents separation is complete. 765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class TabContentsView; 766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class TabContentsViewWin; 768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX) 769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class TabContentsViewMac; 770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(TOOLKIT_USES_GTK) 771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class TabContentsViewGtk; 772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // So InterstitialPage can access SetIsLoading. 775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class InterstitialPage; 776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(brettw) TestTabContents shouldn't exist! 778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class TestTabContents; 779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Used to access the CreateHistoryAddPageArgs member function. 781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch friend class ExternalTabContainer; 782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Used to access RVH Delegates. 78421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen friend class PrerenderManager; 78521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 7863f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // Message handlers. 7873f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidStartProvisionalLoadForFrame(int64 frame_id, 7883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen bool main_frame, 7893f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const GURL& url); 7903f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidRedirectProvisionalLoad(int32 page_id, 7913f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const GURL& source_url, 7923f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const GURL& target_url); 7933f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidFailProvisionalLoadWithError(int64 frame_id, 7943f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen bool main_frame, 7953f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen int error_code, 7963f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const GURL& url, 7973f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen bool showing_repost_interstitial); 7983f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidLoadResourceFromMemoryCache(const GURL& url, 7993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::string& frame_origin, 8003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::string& main_frame_origin, 8013f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen const std::string& security_info); 8023f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidDisplayInsecureContent(); 80372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnDidRunInsecureContent(const std::string& security_origin, 80472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const GURL& target_url); 8053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDocumentLoadedInFrame(int64 frame_id); 8063f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen void OnDidFinishLoad(int64 frame_id); 80772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnUpdateContentRestrictions(int restrictions); 80872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnPDFHasUnsupportedFeature(); 80972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 81072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnGoToEntryAtOffset(int offset); 81172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnDidGetApplicationInfo(int32 page_id, const WebApplicationInfo& info); 81272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnInstallApplication(const WebApplicationInfo& info); 81372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnPageContents(const GURL& url, 81472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen int32 page_id, 81572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16& contents, 81672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& language, 81772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool page_translatable); 81872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnPageTranslated(int32 page_id, 81972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& original_lang, 82072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& translated_lang, 82172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TranslateErrors::Type error_type); 82272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnSetSuggestions(int32 page_id, 82372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::vector<std::string>& suggestions); 82472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnInstantSupportDetermined(int32 page_id, bool result); 82572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void OnRunFileChooser(const ViewHostMsg_RunFileChooser_Params& params); 8263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Changes the IsLoading state and notifies delegate as needed 828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // |details| is used to provide details on the load that just finished 829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // (but can be null if not applicable). Can be overridden. 830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetIsLoading(bool is_loading, 831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LoadNotificationDetails* details); 832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 833731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Adds the incoming |new_contents| to the |blocked_contents_| container. 834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void AddPopup(TabContents* new_contents, 835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& initial_pos); 836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called by derived classes to indicate that we're no longer waiting for a 838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // response. This won't actually update the throbber, but it will get picked 839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // up at the next animation step if the throbber is going. 840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetNotWaitingForResponse() { waiting_for_response_ = false; } 841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ConstrainedWindowList child_windows_; 843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Expires InfoBars that need to be expired, according to the state carried 845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // in |details|, in response to a new NavigationEntry being committed (the 846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // user navigated to another page). 847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ExpireInfoBars( 848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController::LoadCommittedDetails& details); 849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 85072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns the WebUI for the current state of the tab. This will either be 85172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the pending WebUI, the committed WebUI, or NULL. 85272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebUI* GetWebUIForCurrentState(); 853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Navigation helpers -------------------------------------------------------- 855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // These functions are helpers for Navigate() and DidNavigate(). 857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles post-navigation tasks in DidNavigate AFTER the entry has been 859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // committed to the navigation controller. Note that the navigation entry is 860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // not provided since it may be invalid/changed after being committed. The 861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // current navigation entry is in the NavigationController at this point. 862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DidNavigateMainFramePostCommit( 863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController::LoadCommittedDetails& details, 864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DidNavigateAnyFramePostCommit( 866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host, 867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController::LoadCommittedDetails& details, 868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Closes all constrained windows. 871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CloseConstrainedWindows(); 872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Send the alternate error page URL to the renderer. This method is virtual 874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // so special html pages can override this (e.g., the new tab page). 875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateAlternateErrorPageURL(); 876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Send webkit specific settings to the renderer. 878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateWebPreferences(); 879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 880513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Instruct the renderer to update the zoom level. 881513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void UpdateZoomLevel(); 882513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If our controller was restored and the page id is > than the site 884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // instance's page id, the site instances page id is updated as well as the 885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // renderers max page id. 886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateMaxPageIDIfNecessary(SiteInstance* site_instance, 887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* rvh); 888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 8893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Returns the history::HistoryAddPageArgs to use for adding a page to 8903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // history. 8913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<history::HistoryAddPageArgs> CreateHistoryAddPageArgs( 8923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& virtual_url, 893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NavigationController::LoadCommittedDetails& details, 894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Saves the given title to the navigation entry and does associated work. It 897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // will update history and the view for the new title, and also synthesize 898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // titles for file URLs that have none (so we require that the URL of the 899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // entry already be set). 900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is used as the backend for state updates, which include a new title, 902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // or the dedicated set title message. It returns true if the new title is 903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // different and was therefore updated. 904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool UpdateTitleForEntry(NavigationEntry* entry, const std::wstring& title); 905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Causes the TabContents to navigate in the right renderer to |entry|, which 9073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // must be already part of the entries in the navigation controller. 9083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This does not change the NavigationController state. 9093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool NavigateToEntry(const NavigationEntry& entry, 9103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NavigationController::ReloadType reload_type); 9113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Misc non-view stuff ------------------------------------------------------- 913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Helper functions for sending notifications. 915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifySwapped(); 916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyConnected(); 917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void NotifyDisconnected(); 918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If params has a searchable form, this tries to create a new keyword. 920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GenerateKeywordIfNecessary( 921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TabSpecificContentSettings::Delegate implementation. 9243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void OnContentSettingsAccessed(bool content_was_blocked); 925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate ---------------------------------------------------- 927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostDelegate implementation. 929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderViewHostDelegate::View* GetViewDelegate(); 930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderViewHostDelegate::RendererManagement* 931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetRendererManagementDelegate(); 932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderViewHostDelegate::ContentSettings* GetContentSettingsDelegate(); 933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RenderViewHostDelegate::SSL* GetSSLDelegate(); 934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual AutomationResourceRoutingDelegate* 935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GetAutomationResourceRoutingDelegate(); 936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual TabContents* GetAsTabContents(); 937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ViewType::Type GetRenderViewType() const; 938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual int GetBrowserWindowID() const; 939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewCreated(RenderViewHost* render_view_host); 940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewReady(RenderViewHost* render_view_host); 94121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void RenderViewGone(RenderViewHost* render_view_host, 94221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::TerminationStatus status, 94321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int error_code); 944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewDeleted(RenderViewHost* render_view_host); 945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidNavigate(RenderViewHost* render_view_host, 946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ViewHostMsg_FrameNavigate_Params& params); 947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateState(RenderViewHost* render_view_host, 948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int32 page_id, 949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& state); 950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateTitle(RenderViewHost* render_view_host, 951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int32 page_id, 952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& title); 953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateEncoding(RenderViewHost* render_view_host, 954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& encoding); 955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateTargetURL(int32 page_id, const GURL& url); 956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateThumbnail(const GURL& url, 957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const SkBitmap& bitmap, 958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ThumbnailScore& score); 959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateInspectorSetting(const std::string& key, 960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& value); 961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ClearInspectorSettings(); 962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Close(RenderViewHost* render_view_host); 963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RequestMove(const gfx::Rect& new_bounds); 964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidStartLoading(); 965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidStopLoading(); 96621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void DidChangeLoadProgress(double progress); 9673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void DocumentOnLoadCompletedInMainFrame( 9683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick RenderViewHost* render_view_host, 9693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int32 page_id); 970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RequestOpenURL(const GURL& url, const GURL& referrer, 971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WindowOpenDisposition disposition); 972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DomOperationResponse(const std::string& json_string, 973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int automation_id); 97472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void ProcessWebUIMessage(const ViewHostMsg_DomMessage_Params& params); 975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ProcessExternalHostMessage(const std::string& message, 976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& origin, 977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& target); 978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RunJavaScriptMessage(const std::wstring& message, 979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::wstring& default_prompt, 980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const GURL& frame_url, 981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const int flags, 982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_msg, 983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* did_suppress_message); 984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RunBeforeUnloadConfirm(const std::wstring& message, 985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_msg); 986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ShowModalHTMLDialog(const GURL& url, int width, int height, 987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& json_arguments, 988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch IPC::Message* reply_msg); 989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void PageHasOSDD(RenderViewHost* render_view_host, 990731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int32 page_id, 991731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const GURL& url, 992731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick const ViewHostMsg_PageHasOSDD_Type& provider_type); 993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual GURL GetAlternateErrorPageURL() const; 994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual RendererPreferences GetRendererPrefs(Profile* profile) const; 995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual WebPreferences GetWebkitPrefs(); 99672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void OnUserGesture(); 997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnIgnoredUIEvent(); 998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnJSOutOfMemory(); 999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnCrossSiteResponse(int new_render_process_host_id, 1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int new_request_id); 1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RendererUnresponsive(RenderViewHost* render_view_host, 1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_during_unload); 1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RendererResponsive(RenderViewHost* render_view_host); 1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void LoadStateChanged(const GURL& url, net::LoadState load_state, 1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint64 upload_position, uint64 upload_size); 1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool IsExternalTabContainer() const; 1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidInsertCSS(); 100821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual void FocusedNodeChanged(bool is_editable_node); 1009731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void UpdateZoomLimits(int minimum_percent, 1010731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int maximum_percent, 1011731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool remember); 101272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void WorkerCrashed(); 1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHostManager::Delegate ------------------------------------------- 1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Blocks/unblocks interaction with renderer process. 1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void BlockTabContent(bool blocked); 1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void BeforeUnloadFiredFromRenderManager( 1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool proceed, 1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool* proceed_to_fire_unload); 1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void DidStartLoadingFromRenderManager( 1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host); 1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void RenderViewGoneFromRenderManager( 1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host); 1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateRenderViewSizeForRenderManager(); 1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void NotifySwappedFromRenderManager(); 1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual NavigationController& GetControllerForRenderManager(); 102972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual WebUI* CreateWebUIForRenderManager(const GURL& url); 1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual NavigationEntry* GetLastCommittedNavigationEntryForRenderManager(); 1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initializes the given renderer if necessary and creates the view ID 1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // corresponding to this view host. If this method is not called and the 1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // process is not shared, then the TabContents will act as though the renderer 1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // is not running (i.e., it will render "sad tab"). This method is 1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // automatically called from LoadURL. 1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If you are attaching to an already-existing RenderView, you should call 1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // InitWithExistingID. 1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool CreateRenderViewForRenderManager( 1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHost* render_view_host); 1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NotificationObserver ------------------------------------------------------ 1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Observe(NotificationType type, 1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details); 1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // App extensions related methods: 1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the first extension whose extent contains |url|. 1052513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* GetExtensionContaining(const GURL& url); 1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Resets app_icon_ and if |extension| is non-null creates a new 1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ImageLoadingTracker to load the extension's image. 1056513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void UpdateExtensionAppIcon(const Extension* extension); 1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ImageLoadingTracker::Observer. 1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnImageLoaded(SkBitmap* image, ExtensionResource resource, 1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int index); 1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Checks with the PrerenderManager if the specified URL has been preloaded, 106372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // and if so, swap the RenderViewHost with the preload into this TabContents 106472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // object. 106572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool MaybeUsePreloadedPage(const GURL& url); 106672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for core operation --------------------------------------------------- 1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delegate for notifying our owner about stuff. Not owned by us. 1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch TabContentsDelegate* delegate_; 1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles the back/forward list and loading. 1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NavigationController controller_; 1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The corresponding view. 1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TabContentsView> view_; 1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Helper classes ------------------------------------------------------------ 1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Manages creation and swapping of render views. 1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RenderViewHostManager render_manager_; 1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Stores random bits of data for others to associate with this object. 1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PropertyBag property_bag_; 1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Registers and unregisters us for notifications. 1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationRegistrar registrar_; 1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 10893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Registers and unregisters for pref notifications. 10903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PrefChangeRegistrar pref_change_registrar_; 10913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 109272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Handles print job for this contents. 1093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<printing::PrintViewManager> printing_; 1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 109572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Handles print preview for this contents. 109672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<printing::PrintPreviewMessageHandler> print_preview_; 109772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // SavePackage, lazily created. 1099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<SavePackage> save_package_; 1100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // AutocompleteHistoryManager. 1102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_; 1103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // AutoFillManager. 1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<AutoFillManager> autofill_manager_; 1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Handles plugin messages. 110872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<PluginObserver> plugin_observer_; 110972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 111072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Prerender PageLoadTime Recorder. 111172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<PrerenderPLTRecorder> prerender_plt_recorder_; 1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TabContentsSSLHelper, lazily created. 1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TabContentsSSLHelper> ssl_helper_; 1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // FileSelectHelper, lazily created. 11173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<FileSelectHelper> file_select_helper_; 11183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles drag and drop event forwarding to extensions. 1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BookmarkDrag* bookmark_drag_; 1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles downloading favicons. 1123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FavIconHelper fav_icon_helper_; 1124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cached web app info data. 11264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch WebApplicationInfo web_app_info_; 1127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Cached web app icon. 1129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap app_icon_; 1130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // RenderViewHost::ContentSettingsDelegate. 1132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TabSpecificContentSettings> content_settings_delegate_; 1133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 113472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Handles desktop notification IPCs. 113572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<DesktopNotificationHandler> desktop_notification_handler_; 113672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 113772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for loading state ---------------------------------------------------- 1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates whether we're currently loading a resource. 1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_loading_; 1142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates if the tab is considered crashed. 114421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::TerminationStatus crashed_status_; 114521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen int crashed_error_code_; 1146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // See waiting_for_response() above. 1148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool waiting_for_response_; 1149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates the largest PageID we've seen. This field is ignored if we are 1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // a TabContents, in which case the max page ID is stored separately with 1152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // each SiteInstance. 1153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(brettw) this seems like it can be removed according to the comment. 1154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int32 max_page_id_; 1155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // System time at which the current load was started. 1157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks current_load_start_; 1158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The current load state and the URL associated with it. 1160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch net::LoadState load_state_; 11613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen string16 load_state_host_; 1162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Upload progress, for displaying in the status bar. 1163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set to zero when there is no significant upload happening. 1164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint64 upload_size_; 1165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch uint64 upload_position_; 1166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for current page ----------------------------------------------------- 1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Whether we have a (non-empty) title for the current page. 1170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to prevent subsequent title updates from affecting history. This 1171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // prevents some weirdness because some AJAXy apps use titles for status 1172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // messages. 1173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool received_page_title_; 1174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // When a navigation occurs, we record its contents MIME type. It can be 1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // used to check whether we can do something for some special contents. 1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string contents_mime_type_; 1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1179201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Character encoding. 1180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string encoding_; 1181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Object that holds any blocked TabContents spawned from this TabContents. 1183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BlockedContentContainer* blocked_contents_; 1184731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Should we block all child TabContents this attempts to spawn. 1186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool all_contents_blocked_; 1187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(pkasting): Hack to try and fix Linux browser tests. 1189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool dont_notify_render_view_; 1190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if this is a secure page which displayed insecure content. 1192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool displayed_insecure_content_; 1193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for shelves and stuff ------------------------------------------------ 1195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Delegates for InfoBars associated with this TabContents. 1197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<InfoBarDelegate*> infobar_delegates_; 1198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for app extensions --------------------------------------------------- 1200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If non-null this tab is an app tab and this is the extension the tab was 1202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // created for. 1203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension_app_; 1204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Icon for extension_app_ (if non-null) or extension_for_current_page_. 1206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap extension_app_icon_; 1207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used for loading extension_app_icon_. 1209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<ImageLoadingTracker> extension_app_image_loader_; 1210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Data for misc internal state ---------------------------------------------- 1212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // See capturing_contents() above. 1214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool capturing_contents_; 1215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // See getter above. 1217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_being_destroyed_; 1218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Indicates whether we should notify about disconnection of this 1220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TabContents. This is used to ensure disconnection notifications only 1221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // happen if a connection notification has happened and that they happen only 1222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // once. 1223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool notify_disconnection_; 1224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Maps from handle to page_id. 1226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::map<FaviconService::Handle, int32> HistoryRequestMap; 1227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HistoryRequestMap history_requests_; 1228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN) 1230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handle to an event that's set when the page is showing a message box (or 1231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // equivalent constrained window). Plugin processes check this to know if 1232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // they should pump messages then. 12333f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen base::win::ScopedHandle message_box_active_; 1234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 1235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time that the last javascript message was dismissed. 1237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks last_javascript_message_dismissal_; 1238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // True if the user has decided to block future javascript messages. This is 1240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // reset on navigations to false on navigations. 1241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool suppress_javascript_messages_; 1242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set to true when there is an active "before unload" dialog. When true, 1244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // we've forced the throbber to start in Navigate, and we need to remember to 1245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // turn it off in OnJavaScriptMessageBoxClosed if the navigation is canceled. 1246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool is_showing_before_unload_dialog_; 1247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Shows an info-bar to users when they search from a known search engine and 1249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // have never used the monibox for search before. 1250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<OmniboxSearchHint> omnibox_search_hint_; 1251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Settings that get passed to the renderer process. 1253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch RendererPreferences renderer_preferences_; 1254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If this tab was created from a renderer using window.open, this will be 125672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // non-NULL and represent the WebUI of the opening renderer. 125772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen WebUITypeID opener_web_ui_type_; 1258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time that we started to create the new tab page. 1260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks new_tab_start_time_; 1261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time that we started to close the tab. 1263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::TimeTicks tab_close_start_time_; 1264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1265201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // The time that this tab was last selected. 1266201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch base::TimeTicks last_selected_time_; 1267201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Information about the language the page is in and has been translated to. 1269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch LanguageState language_state_; 1270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // See description above setter. 1272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool closed_by_user_gesture_; 1273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1274731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Minimum/maximum zoom percent. 1275731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int minimum_zoom_percent_; 1276731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int maximum_zoom_percent_; 1277731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // If true, the default zoom limits have been overriden for this tab, in which 1278731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // case we don't want saved settings to apply to it and we don't want to 1279731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // remember it. 1280731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool temporary_zoom_settings_; 1281731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // A list of observers notified when page state changes. Weak references. 128372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ObserverList<TabContentsObserver> observers_; 1284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1285731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Content restrictions, used to disable print/copy etc based on content's 1286731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // (full-page plugins for now only) permissions. 1287731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int content_restrictions_; 12883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(TabContents); 1290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 1291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12927d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#endif // !ANDROID 12937d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch 1294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_H_ 1295