tab_contents.h revision 731df977c0511bca2206b5f333555b1205ff1f43
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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
107d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#include "chrome/browser/profile.h"
117d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#include "chrome/browser/autofill/autofill_host.h"
127d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
137d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// Autofill does not need the entire TabContents class, just
147d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// access to the RenderViewHost and Profile. Later it would
157d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// be nice to create a small class that contains just this
167d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// data for AutoFill. Then Android won't care about this
177d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch// file which as it stands does not compile for us.
187d214dfa174224b459660971e5b5cce2e06be02aBen Murdochclass RenderViewHost;
197d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
207d214dfa174224b459660971e5b5cce2e06be02aBen Murdochclass TabContents {
217d214dfa174224b459660971e5b5cce2e06be02aBen Murdochpublic:
227d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  TabContents()
237d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch    : profile_(ProfileImplAndroid::CreateProfile(FilePath()))
247d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch    , autofill_host_(NULL)
257d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  {
267d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  }
277d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
287d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  Profile* profile() { return profile_; }
297d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  AutoFillHost* autofill_host() { return autofill_host_; }
307d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  void SetAutoFillHost(AutoFillHost* autofill_host) { autofill_host_ = autofill_host; }
317d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
327d214dfa174224b459660971e5b5cce2e06be02aBen Murdochprivate:
337d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  Profile* profile_;
347d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch  AutoFillHost* autofill_host_;
357d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch};
367d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
377d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#else
387d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "build/build_config.h"
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <deque>
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <map>
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/gtest_prod_util.h"
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h"
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/cancelable_request.h"
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/dom_ui/dom_ui_factory.h"
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/download/save_package.h"
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/image_loading_tracker.h"
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/fav_icon_helper.h"
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/find_bar_controller.h"
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/find_notification_details.h"
56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/js_modal_dialog.h"
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_change_registrar.h"
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/password_manager/password_manager_delegate.h"
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/renderer_host/render_view_host_delegate.h"
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/constrained_window.h"
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/language_state.h"
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/navigation_controller.h"
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/navigation_entry.h"
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/page_navigator.h"
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/render_view_host_manager.h"
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/tab_specific_content_settings.h"
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_registrar.h"
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/property_bag.h"
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/renderer_preferences.h"
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/translate_errors.h"
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "gfx/native_widget_types.h"
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "gfx/rect.h"
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/load_states.h"
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/dom_operations.h"
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace gfx {
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Rect;
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace history {
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass HistoryAddPageArgs;
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace printing {
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PrintViewManager;
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace IPC {
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Message;
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace webkit_glue {
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct PasswordForm;
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutocompleteHistoryManager;
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutoFillManager;
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass BlockedContentContainer;
993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass BlockedPluginManager;
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DOMUI;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DownloadItem;
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Extension;
1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass FileSelectHelper;
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InfoBarDelegate;
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass LoadNotificationDetails;
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass OmniboxSearchHint;
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PasswordManager;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PluginInstaller;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile;
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct RendererPreferences;
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass RenderViewHost;
1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SessionStorageNamespace;
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SiteInstance;
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents;
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsDelegate;
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsSSLHelper;
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsView;
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass URLPattern;
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ThumbnailScore;
1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct ViewHostMsg_DomMessage_Params;
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct ViewHostMsg_FrameNavigate_Params;
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct WebPreferences;
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Describes what goes in the main content area of a tab. TabContents is
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the only type of TabContents, and these should be merged together.
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents : public PageNavigator,
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public NotificationObserver,
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public RenderViewHostDelegate,
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public RenderViewHostDelegate::BrowserIntegration,
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public RenderViewHostDelegate::Resource,
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public RenderViewHostManager::Delegate,
133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                    public JavaScriptAppModalDialogDelegate,
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public ImageLoadingTracker::Observer,
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public PasswordManagerDelegate,
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    public TabSpecificContentSettings::Delegate {
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Flags passed to the TabContentsDelegate.NavigationStateChanged to tell it
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // what has changed. Combine them to update more than one thing.
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  enum InvalidateTypes {
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    INVALIDATE_URL             = 1 << 0,  // The URL has changed.
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    INVALIDATE_TAB             = 1 << 1,  // The favicon, app icon, or crashed
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          // state changed.
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    INVALIDATE_LOAD            = 1 << 2,  // The loading state has changed.
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    INVALIDATE_PAGE_ACTIONS    = 1 << 3,  // Page action icons have changed.
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    INVALIDATE_BOOKMARK_BAR    = 1 << 4,  // State of ShouldShowBookmarkBar
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          // changed.
1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    INVALIDATE_TITLE           = 1 << 5,  // The title changed.
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  };
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |base_tab_contents| is used if we want to size the new tab contents view
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // based on an existing tab contents view.  This can be NULL if not needed.
1533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  //
1543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // The session storage namespace parameter allows multiple render views and
1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // tab contentses to share the same session storage (part of the WebStorage
1563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // spec) space. This is useful when restoring tabs, but most callers should
1573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // pass in NULL which will cause a new SessionStorageNamespace to be created.
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContents(Profile* profile,
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              SiteInstance* site_instance,
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              int routing_id,
1613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              const TabContents* base_tab_contents,
1623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick              SessionStorageNamespace* session_storage_namespace);
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~TabContents();
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static void RegisterUserPrefs(PrefService* prefs);
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Intrinsic tab state -------------------------------------------------------
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the property bag for this tab contents, where callers can add
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // extra data they may wish to associate with the tab. Returns a pointer
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // rather than a reference since the PropertyAccessors expect this.
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const PropertyBag* property_bag() const { return &property_bag_; }
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PropertyBag* property_bag() { return &property_bag_; }
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContentsDelegate* delegate() const { return delegate_; }
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_delegate(TabContentsDelegate* d) { delegate_ = d; }
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Gets the controller for this tab contents.
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NavigationController& controller() { return controller_; }
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const NavigationController& controller() const { return controller_; }
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the user profile associated with this TabContents (via the
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NavigationController).
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Profile* profile() const { return controller_.profile(); }
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if contains content rendered by an extension.
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool HostsExtension() const;
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the AutoFillManager, creating it if necessary.
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AutoFillManager* GetAutoFillManager();
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the PasswordManager, creating it if necessary.
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PasswordManager* GetPasswordManager();
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the PluginInstaller, creating it if necessary.
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PluginInstaller* GetPluginInstaller();
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Returns the TabContentsSSLHelper, creating it if necessary.
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContentsSSLHelper* GetSSLHelper();
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the SavePackage which manages the page saving job. May be NULL.
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SavePackage* save_package() const { return save_package_.get(); }
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Return the currently active RenderProcessHost and RenderViewHost. Each of
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // these may change over time.
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderProcessHost* GetRenderProcessHost() const;
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderViewHost* render_view_host() const {
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return render_manager_.current_host();
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the currently active RenderWidgetHostView. This may change over
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // time and can be NULL (during setup and teardown).
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderWidgetHostView* GetRenderWidgetHostView() const {
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return render_manager_.GetRenderWidgetHostView();
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The TabContentsView will never change and is guaranteed non-NULL.
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContentsView* view() const {
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return view_.get();
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the FavIconHelper of this TabContents.
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FavIconHelper& fav_icon_helper() {
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return fav_icon_helper_;
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // App extensions ------------------------------------------------------------
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets the extension denoting this as an app. If |extension| is non-null this
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tab becomes an app-tab. TabContents does not listen for unload events for
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the extension. It's up to consumers of TabContents to do that.
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NOTE: this should only be manipulated before the tab is added to a browser.
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(sky): resolve if this is the right way to identify an app tab. If it
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is, than this should be passed in the constructor.
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetExtensionApp(Extension* extension);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Convenience for setting the app extension by id. This does nothing if
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |extension_app_id| is empty, or an extension can't be found given the
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // specified id.
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetExtensionAppById(const std::string& extension_app_id);
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Extension* extension_app() const { return extension_app_; }
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_app() const { return extension_app_ != NULL; }
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If an app extension has been explicitly set for this TabContents its icon
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is returned.
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NOTE: the returned icon is larger than 16x16 (it's size is
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Extension::EXTENSION_ICON_SMALLISH).
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkBitmap* GetExtensionAppIcon();
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tab navigation state ------------------------------------------------------
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the current navigation properties, which if a navigation is
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // pending may be provisional (e.g., the navigation could result in a
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // download, in which case the URL would revert to what it was previously).
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual const GURL& GetURL() const;
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual const string16& GetTitle() const;
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Initial title assigned to NavigationEntries from Navigate.
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static string16 GetDefaultTitle();
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The max PageID of any page that this TabContents has loaded.  PageIDs
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // increase with each new page that is loaded by a tab.  If this is a
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TabContents, then the max PageID is kept separately on each SiteInstance.
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns -1 if no PageIDs have yet been seen.
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int32 GetMaxPageID();
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the max PageID to be at least the given PageID.
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateMaxPageID(int32 page_id);
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the site instance associated with the current page. By default,
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // there is no site instance. TabContents overrides this to provide proper
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // access to its site instance.
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual SiteInstance* GetSiteInstance() const;
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Defines whether this tab's URL should be displayed in the browser's URL
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // bar. Normally this is true so you can see the URL. This is set to false
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // for the new tab page and related pages so that the URL bar is empty and
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the user is invited to type into it.
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool ShouldDisplayURL();
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the favicon for this tab, or an isNull() bitmap if the tab does not
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // have a favicon. The default implementation uses the current navigation
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // entry.
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkBitmap GetFavIcon() const;
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if we are not using the default favicon.
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool FavIconIsValid() const;
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns whether the favicon should be displayed. If this returns false, no
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // space is provided for the favicon, and the favicon is never displayed.
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool ShouldDisplayFavIcon();
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns a human-readable description the tab's loading state.
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual std::wstring GetStatusText() const;
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Return whether this tab contents is loading a resource.
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_loading() const { return is_loading_; }
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns whether this tab contents is waiting for a first-response for the
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // main resource of the page. This controls whether the throbber state is
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // "waiting" or "loading."
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool waiting_for_response() const { return waiting_for_response_; }
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_starred() const { return is_starred_; }
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string& encoding() const { return encoding_; }
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_encoding(const std::string& encoding);
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void reset_encoding() {
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    encoding_.clear();
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const webkit_glue::WebApplicationInfo& web_app_info() const {
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return web_app_info_;
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const SkBitmap& app_icon() const { return app_icon_; }
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets an app icon associated with TabContents and fires an INVALIDATE_TITLE
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // navigation state change to trigger repaint of title.
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetAppIcon(const SkBitmap& app_icon);
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool displayed_insecure_content() const {
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return displayed_insecure_content_;
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Internal state ------------------------------------------------------------
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This flag indicates whether the tab contents is currently being
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // screenshotted by the DraggedTabController.
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool capturing_contents() const { return capturing_contents_; }
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_capturing_contents(bool cap) { capturing_contents_ = cap; }
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates whether this tab should be considered crashed. The setter will
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // also notify the delegate when the flag is changed.
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_crashed() const { return is_crashed_; }
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIsCrashed(bool state);
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Call this after updating a page action to notify clients about the changes.
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void PageActionStateChanged();
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether the tab is in the process of being destroyed.
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Added as a tentative work-around for focus related bug #4633.  This allows
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // us not to store focus when a tab is being closed.
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_being_destroyed() const { return is_being_destroyed_; }
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Convenience method for notifying the delegate of a navigation state
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // change. See TabContentsDelegate.
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void NotifyNavigationStateChanged(unsigned changed_flags);
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Invoked when the tab contents becomes selected. If you override, be sure
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // and invoke super's implementation.
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidBecomeSelected();
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Invoked when the tab contents becomes hidden.
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NOTE: If you override this, call the superclass version too!
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void WasHidden();
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Activates this contents within its containing window, bringing that window
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to the foreground if necessary.
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Activate();
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Deactivates this contents by deactivating its containing window.
3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void Deactivate();
3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(brettw) document these.
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ShowContents();
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void HideContents();
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef UNIT_TEST
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Expose the render manager for testing.
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderViewHostManager* render_manager() { return &render_manager_; }
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Commands ------------------------------------------------------------------
377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Implementation of PageNavigator.
379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OpenURL(const GURL& url, const GURL& referrer,
380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       WindowOpenDisposition disposition,
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       PageTransition::Type transition);
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called by the NavigationController to cause the TabContents to navigate to
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the current pending entry. The NavigationController should be called back
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // with CommitPendingEntry/RendererDidNavigate on success or
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // DiscardPendingEntry. The callbacks can be inside of this function, or at
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // some future time.
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The entry has a PageID of -1 if newly created (corresponding to navigation
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to a new URL).
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If this method returns false, then the navigation is discarded (equivalent
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to calling DiscardPendingEntry on the NavigationController).
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool NavigateToPendingEntry(
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NavigationController::ReloadType reload_type);
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stop any pending navigation.
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Stop();
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called on a TabContents when it isn't a popup, but a new window.
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DisassociateFromPopupCount();
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Creates a new TabContents with the same state as this one. The returned
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // heap-allocated pointer is owned by the caller.
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual TabContents* Clone();
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Shows the page info.
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ShowPageInfo(const GURL& url,
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    const NavigationEntry::SSLStatus& ssl,
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    bool show_history);
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Window management ---------------------------------------------------------
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Create a new window constrained to this TabContents' clip and visibility.
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The window is initialized by using the supplied delegate to obtain basic
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // window characteristics, and the supplied view for the content. Note that
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the returned ConstrainedWindow might not yet be visible.
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ConstrainedWindow* CreateConstrainedDialog(
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ConstrainedWindowDelegate* delegate);
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Adds a new tab or window with the given already-created contents
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AddNewContents(TabContents* new_contents,
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      WindowOpenDisposition disposition,
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      const gfx::Rect& initial_pos,
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      bool user_gesture);
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Execute code in this tab. Returns true if the message was successfully
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // sent.
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ExecuteCode(int request_id, const std::string& extension_id,
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   bool is_js_code, const std::string& code_string,
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                   bool all_frames);
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called when the blocked popup notification is shown or hidden.
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void PopupNotificationVisibilityChanged(bool visible);
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the number of constrained windows in this tab.  Used by tests.
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_t constrained_window_count() { return child_windows_.size(); }
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::deque<ConstrainedWindow*> ConstrainedWindowList;
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Return an iterator for the first constrained window in this tab contents.
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ConstrainedWindowList::iterator constrained_window_begin()
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  { return child_windows_.begin(); }
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Return an iterator for the last constrained window in this tab contents.
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ConstrainedWindowList::iterator constrained_window_end()
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  { return child_windows_.end(); }
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Views and focus -----------------------------------------------------------
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(brettw): Most of these should be removed and the caller should call
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the view directly.
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the actual window that is focused when this TabContents is shown.
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::NativeView GetContentNativeView() const;
455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the NativeView associated with this TabContents. Outside of
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // automation in the context of the UI, this is required to be implemented.
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::NativeView GetNativeView() const;
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the bounds of this TabContents in the screen coordinate system.
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void GetContainerBounds(gfx::Rect *out) const;
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Makes the tab the focused window.
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void Focus();
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Focuses the first (last if |reverse| is true) element in the page.
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Invoked when this tab is getting the focus through tab traversal (|reverse|
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is true when using Shift-Tab).
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void FocusThroughTabTraversal(bool reverse);
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These next two functions are declared on RenderViewHostManager::Delegate
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // but also accessed directly by other callers.
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if the location bar should be focused by default rather than
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the page contents. The view calls this function when the tab is focused
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to see what it should do.
477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool FocusLocationBarByDefault();
478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Focuses the location bar.
480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetFocusToLocationBar(bool select_all);
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Infobars ------------------------------------------------------------------
483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Adds an InfoBar for the specified |delegate|.
485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AddInfoBar(InfoBarDelegate* delegate);
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Removes the InfoBar for the specified |delegate|.
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void RemoveInfoBar(InfoBarDelegate* delegate);
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Replaces one infobar with another, without any animation in between.
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ReplaceInfoBar(InfoBarDelegate* old_delegate,
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                      InfoBarDelegate* new_delegate);
493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Enumeration and access functions.
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int infobar_delegate_count() const { return infobar_delegates_.size(); }
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InfoBarDelegate* GetInfoBarDelegateAt(int index) {
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return infobar_delegates_.at(index);
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Toolbars and such ---------------------------------------------------------
501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if a Bookmark Bar should be shown for this tab.
503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool ShouldShowBookmarkBar();
504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Notifies the delegate that a download is about to be started.
506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This notification is fired before a local temporary file has been created.
507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool CanDownload(int request_id);
508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Notifies the delegate that a download started.
510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnStartDownload(DownloadItem* download);
511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Notify our delegate that some of our content has animated.
513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ToolbarSizeChanged(bool is_animating);
514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called when a ConstrainedWindow we own is about to be closed.
516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void WillClose(ConstrainedWindow* window);
517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
518731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Called when a BlockedContentContainer we own is about to be closed.
519731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void WillCloseBlockedContentContainer(BlockedContentContainer* container);
520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called when a ConstrainedWindow we own is moved or resized.
522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DidMoveOrResize(ConstrainedWindow* window);
523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Interstitials -------------------------------------------------------------
525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Various other systems need to know about our interstitials.
527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool showing_interstitial_page() const {
528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return render_manager_.interstitial_page() != NULL;
529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Sets the passed passed interstitial as the currently showing interstitial.
532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |interstitial_page| should be non NULL (use the remove_interstitial_page
533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // method to unset the interstitial) and no interstitial page should be set
534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // when there is already a non NULL interstitial page set.
535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_interstitial_page(InterstitialPage* interstitial_page) {
536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    render_manager_.set_interstitial_page(interstitial_page);
537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Unsets the currently showing interstitial.
540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void remove_interstitial_page() {
541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    render_manager_.remove_interstitial_page();
542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the currently showing interstitial, NULL if no interstitial is
545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // showing.
546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  InterstitialPage* interstitial_page() const {
547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return render_manager_.interstitial_page();
548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Find in Page --------------------------------------------------------------
551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Starts the Find operation by calling StartFinding on the Tab. This function
553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // can be called from the outside as a result of hot-keys, so it uses the
554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // last remembered search string as specified with set_find_string(). This
555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // function does not block while a search is in progress. The controller will
556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // receive the results through the notification mechanism. See Observe(...)
557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // for details.
558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StartFinding(string16 search_string,
559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    bool forward_direction,
560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    bool case_sensitive);
561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stops the current Find operation.
563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StopFinding(FindBarController::SelectionAction selection_action);
564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Accessors/Setters for find_ui_active_.
566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool find_ui_active() const { return find_ui_active_; }
567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_find_ui_active(bool find_ui_active) {
568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      find_ui_active_ = find_ui_active;
569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Setter for find_op_aborted_.
572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_find_op_aborted(bool find_op_aborted) {
573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    find_op_aborted_ = find_op_aborted;
574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used _only_ by testing to get or set the current request ID.
577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int current_find_request_id() { return current_find_request_id_; }
578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_current_find_request_id(int current_find_request_id) {
579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    current_find_request_id_ = current_find_request_id;
580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Accessor for find_text_. Used to determine if this TabContents has any
583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // active searches.
584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 find_text() const { return find_text_; }
585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Accessor for the previous search we issued.
587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 previous_find_text() const { return previous_find_text_; }
588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Accessor for find_result_.
590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const FindNotificationDetails& find_result() const {
591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return last_search_result_;
592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Misc state & callbacks ----------------------------------------------------
595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set whether the contents should block javascript message boxes or not.
597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Default is not to block any message boxes.
598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_suppress_javascript_messages(bool suppress_javascript_messages) {
599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    suppress_javascript_messages_ = suppress_javascript_messages;
600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Prepare for saving the current web page to disk.
603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnSavePage();
604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Save page with the main HTML file path, the directory for saving resources,
606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // and the save type: HTML only or complete web page. Returns true if the
607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // saving process has been initiated successfully.
608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool SavePage(const FilePath& main_file, const FilePath& dir_path,
609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                SavePackage::SavePackageType save_type);
610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Tells the user's email client to open a compose window containing the
612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // current page's URL.
613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void EmailPageLocation();
614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Displays asynchronously a print preview (generated by the renderer) if not
616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // already displayed and ask the user for its preferred print settings with
617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the "Print..." dialog box. (managed by the print worker thread).
618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(maruel):  Creates a snapshot of the renderer to be used for the new
619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tab for the printing facility.
620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void PrintPreview();
621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Prints the current document immediately. Since the rendering is
623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // asynchronous, the actual printing will not be completed on the return of
624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // this function. Returns false if printing is impossible at the moment.
625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool PrintNow();
626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Notify the completion of a printing job.
628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void PrintingDone(int document_cookie, bool success);
629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if the active NavigationEntry's page_id equals page_id.
631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool IsActiveEntry(int32 page_id);
632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const std::string& contents_mime_type() const {
634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return contents_mime_type_;
635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if this TabContents will notify about disconnection.
638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool notify_disconnection() const { return notify_disconnection_; }
639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Override the encoding and reload the page by sending down
641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ViewMsg_SetPageEncoding to the renderer. |UpdateEncoding| is kinda
642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the opposite of this, by which 'browser' is notified of
643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the encoding of the current tab from 'renderer' (determined by
644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // auto-detect, http header, meta, bom detection, etc).
645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetOverrideEncoding(const std::string& encoding);
646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Remove any user-defined override encoding and reload by sending down
648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ViewMsg_ResetPageEncodingToDefault to the renderer.
649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ResetOverrideEncoding();
650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void WindowMoveOrResizeStarted();
652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
653731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Sets whether all TabContents added by way of |AddNewContents| should be
654731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // blocked. Transitioning from all blocked to not all blocked results in
655731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // reevaluating any blocked TabContents, which may result in unblocking some
656731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // of the blocked TabContents.
657731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void SetAllContentsBlocked(bool value);
658731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
659731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BlockedContentContainer* blocked_content_container() const {
660731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    return blocked_contents_;
661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RendererPreferences* GetMutableRendererPrefs() {
664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return &renderer_preferences_;
665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_opener_dom_ui_type(DOMUITypeID opener_dom_ui_type) {
668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    opener_dom_ui_type_ = opener_dom_ui_type;
669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We want to time how long it takes to create a new tab page.  This method
672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // gets called as parts of the new tab page have loaded.
673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void LogNewTabTime(const std::string& event_name);
674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the time when we started to create the new tab page.  This time is
676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // from before we created this TabContents.
677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_new_tab_start_time(const base::TimeTicks& time) {
678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    new_tab_start_time_ = time;
679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Notification that tab closing has started.  This can be called multiple
682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // times, subsequent calls are ignored.
683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnCloseStarted();
684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LanguageState& language_state() {
686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return language_state_;
687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns true if underlying TabContentsView should accept drag-n-drop.
690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool ShouldAcceptDragAndDrop() const;
691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates if this tab was explicitly closed by the user (control-w, close
693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tab menu item...). This is false for actions that indirectly close the tab,
694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // such as closing the window.  The setter is maintained by TabStripModel, and
695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the getter only useful from within TAB_CLOSED notification
696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void set_closed_by_user_gesture(bool value) {
697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    closed_by_user_gesture_ = value;
698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool closed_by_user_gesture() const { return closed_by_user_gesture_; }
700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
701731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Overridden from JavaScriptAppModalDialogDelegate:
702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnMessageBoxClosed(IPC::Message* reply_msg,
703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  bool success,
704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  const std::wstring& prompt);
705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetSuppressMessageBoxes(bool suppress_message_boxes);
706731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual gfx::NativeWindow GetMessageBoxRootWindow();
707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual TabContents* AsTabContents();
708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ExtensionHost* AsExtensionHost();
709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The BookmarkDragDelegate is used to forward bookmark drag and drop events
711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // to extensions.
712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::BookmarkDrag* GetBookmarkDragDelegate();
713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // It is up to callers to call SetBookmarkDragDelegate(NULL) when
715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |bookmark_drag| is deleted since this class does not take ownership of
716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |bookmark_drag|.
717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetBookmarkDragDelegate(
718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHostDelegate::BookmarkDrag* bookmark_drag);
719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The TabSpecificContentSettings object is used to query the blocked content
721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // state by various UI elements.
722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabSpecificContentSettings* GetTabSpecificContentSettings() const;
723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // PasswordManagerDelegate implementation.
725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void FillPasswordForm(
726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const webkit_glue::PasswordFormFillData& form_data);
727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void AddSavePasswordInfoBar(PasswordFormManager* form_to_save);
728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual Profile* GetProfileForPasswordManager();
729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool DidLastPageLoadEncounterSSLErrors();
730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Updates history with the specified navigation. This is called by
7323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // OnMsgNavigate to update history state.
7333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void UpdateHistoryForNavigation(
7343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      scoped_refptr<history::HistoryAddPageArgs> add_page_args);
7353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
7363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Sends the page title to the history service. This is called when we receive
7373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // the page title and we know we want to update history.
7383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  void UpdateHistoryPageTitle(const NavigationEntry& entry);
7393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
740731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Gets the zoom percent for this tab.
741731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int GetZoomPercent(bool* enable_increment, bool* enable_decrement);
742731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
743731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Gets the minimum/maximum zoom percent.
744731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int minimum_zoom_percent() const { return minimum_zoom_percent_; }
745731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int maximum_zoom_percent() const { return maximum_zoom_percent_; }
746731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
747731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int content_restrictions() const { return content_restrictions_; }
748731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class NavigationController;
751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used to access the child_windows_ (ConstrainedWindowList) for testing
752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // automation purposes.
7533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  friend class TestingAutomationProvider;
754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FRIEND_TEST_ALL_PREFIXES(TabContentsTest, NoJSMessageOnInterstitials);
756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FRIEND_TEST_ALL_PREFIXES(TabContentsTest, UpdateTitle);
757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FRIEND_TEST_ALL_PREFIXES(TabContentsTest, CrossSiteCantPreemptAfterUnload);
758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Temporary until the view/contents separation is complete.
760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class TabContentsView;
761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN)
762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class TabContentsViewWin;
763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(OS_MACOSX)
764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class TabContentsViewMac;
765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#elif defined(TOOLKIT_USES_GTK)
766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class TabContentsViewGtk;
767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // So InterstitialPage can access SetIsLoading.
770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class InterstitialPage;
771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(brettw) TestTabContents shouldn't exist!
773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class TestTabContents;
774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Used to access the CreateHistoryAddPageArgs member function.
776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  friend class ExternalTabContainer;
777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Changes the IsLoading state and notifies delegate as needed
779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // |details| is used to provide details on the load that just finished
780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // (but can be null if not applicable). Can be overridden.
781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetIsLoading(bool is_loading,
782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                    LoadNotificationDetails* details);
783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
784731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Adds the incoming |new_contents| to the |blocked_contents_| container.
785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AddPopup(TabContents* new_contents,
786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                const gfx::Rect& initial_pos);
787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Called by derived classes to indicate that we're no longer waiting for a
789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // response. This won't actually update the throbber, but it will get picked
790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // up at the next animation step if the throbber is going.
791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void SetNotWaitingForResponse() { waiting_for_response_ = false; }
792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ConstrainedWindowList child_windows_;
794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Expires InfoBars that need to be expired, according to the state carried
796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // in |details|, in response to a new NavigationEntry being committed (the
797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // user navigated to another page).
798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void ExpireInfoBars(
799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const NavigationController::LoadCommittedDetails& details);
800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the DOMUI for the current state of the tab. This will either be
802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the pending DOMUI, the committed DOMUI, or NULL.
803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DOMUI* GetDOMUIForCurrentState();
804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Navigation helpers --------------------------------------------------------
806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These functions are helpers for Navigate() and DidNavigate().
808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handles post-navigation tasks in DidNavigate AFTER the entry has been
810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // committed to the navigation controller. Note that the navigation entry is
811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // not provided since it may be invalid/changed after being committed. The
812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // current navigation entry is in the NavigationController at this point.
813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DidNavigateMainFramePostCommit(
814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const NavigationController::LoadCommittedDetails& details,
815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ViewHostMsg_FrameNavigate_Params& params);
816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void DidNavigateAnyFramePostCommit(
817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHost* render_view_host,
818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const NavigationController::LoadCommittedDetails& details,
819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ViewHostMsg_FrameNavigate_Params& params);
820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Closes all constrained windows.
822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void CloseConstrainedWindows();
823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Updates the starred state from the bookmark bar model. If the state has
825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // changed, the delegate is notified.
826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateStarredStateForCurrentURL();
827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Send the alternate error page URL to the renderer. This method is virtual
829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // so special html pages can override this (e.g., the new tab page).
830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateAlternateErrorPageURL();
831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Send webkit specific settings to the renderer.
833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateWebPreferences();
834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If our controller was restored and the page id is > than the site
836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // instance's page id, the site instances page id is updated as well as the
837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // renderers max page id.
838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateMaxPageIDIfNecessary(SiteInstance* site_instance,
839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                  RenderViewHost* rvh);
840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Returns the history::HistoryAddPageArgs to use for adding a page to
8423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // history.
8433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_refptr<history::HistoryAddPageArgs> CreateHistoryAddPageArgs(
8443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const GURL& virtual_url,
845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const NavigationController::LoadCommittedDetails& details,
846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ViewHostMsg_FrameNavigate_Params& params);
847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Saves the given title to the navigation entry and does associated work. It
849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // will update history and the view for the new title, and also synthesize
850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // titles for file URLs that have none (so we require that the URL of the
851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // entry already be set).
852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This is used as the backend for state updates, which include a new title,
854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // or the dedicated set title message. It returns true if the new title is
855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // different and was therefore updated.
856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool UpdateTitleForEntry(NavigationEntry* entry, const std::wstring& title);
857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Causes the TabContents to navigate in the right renderer to |entry|, which
8593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // must be already part of the entries in the navigation controller.
8603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // This does not change the NavigationController state.
8613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool NavigateToEntry(const NavigationEntry& entry,
8623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                       NavigationController::ReloadType reload_type);
8633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Misc non-view stuff -------------------------------------------------------
865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Helper functions for sending notifications.
867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void NotifySwapped();
868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void NotifyConnected();
869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void NotifyDisconnected();
870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If params has a searchable form, this tries to create a new keyword.
872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void GenerateKeywordIfNecessary(
873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ViewHostMsg_FrameNavigate_Params& params);
874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // TabSpecificContentSettings::Delegate implementation.
8763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnContentSettingsAccessed(bool content_was_blocked);
877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHostDelegate ----------------------------------------------------
879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHostDelegate::BrowserIntegration implementation.
881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnUserGesture();
882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnFindReply(int request_id,
883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int number_of_matches,
884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           const gfx::Rect& selection_rect,
885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int active_match_ordinal,
886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           bool final_update);
887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void GoToEntryAtOffset(int offset);
888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnMissingPluginStatus(int status);
889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnCrashedPlugin(const FilePath& plugin_path);
890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnCrashedWorker();
891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnDidGetApplicationInfo(
892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int32 page_id,
893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const webkit_glue::WebApplicationInfo& info);
8943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnDisabledOutdatedPlugin(const string16& name,
8953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                        const GURL& update_url);
896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnPageContents(const GURL& url,
897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              int renderer_process_id,
898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              int32 page_id,
899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const string16& contents,
900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const std::string& language,
901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              bool page_translatable);
902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnPageTranslated(int32 page_id,
903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                const std::string& original_lang,
904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                const std::string& translated_lang,
905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                TranslateErrors::Type error_type);
9063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void OnSetSuggestResult(int32 page_id, const std::string& result);
907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHostDelegate::Resource implementation.
909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidStartProvisionalLoadForFrame(RenderViewHost* render_view_host,
910731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                               long long frame_id,
911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               bool is_main_frame,
912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               const GURL& url);
913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidStartReceivingResourceResponse(
914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ResourceRequestDetails& details);
915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidRedirectProvisionalLoad(int32 page_id,
916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const GURL& source_url,
917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const GURL& target_url);
918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidRedirectResource(
919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const ResourceRedirectDetails& details);
920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidLoadResourceFromMemoryCache(
921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const GURL& url,
922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::string& frame_origin,
923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::string& main_frame_origin,
924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::string& security_info);
925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidDisplayInsecureContent();
926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidRunInsecureContent(const std::string& security_origin);
927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidFailProvisionalLoadWithError(
928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHost* render_view_host,
929731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      long long frame_id,
930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool is_main_frame,
931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int error_code,
932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const GURL& url,
933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool showing_repost_interstitial);
934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DocumentLoadedInFrame();
935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHostDelegate implementation.
937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::View* GetViewDelegate();
938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::RendererManagement*
939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetRendererManagementDelegate();
940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::BrowserIntegration*
941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetBrowserIntegrationDelegate();
942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::Resource* GetResourceDelegate();
943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::ContentSettings* GetContentSettingsDelegate();
944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::Save* GetSaveDelegate();
945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::Printing* GetPrintingDelegate();
946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::FavIcon* GetFavIconDelegate();
947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::Autocomplete* GetAutocompleteDelegate();
948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::AutoFill* GetAutoFillDelegate();
9493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual RenderViewHostDelegate::BlockedPlugin* GetBlockedPluginDelegate();
950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RenderViewHostDelegate::SSL* GetSSLDelegate();
9513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual RenderViewHostDelegate::FileSelect* GetFileSelectDelegate();
952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual AutomationResourceRoutingDelegate*
953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GetAutomationResourceRoutingDelegate();
954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual TabContents* GetAsTabContents();
955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ViewType::Type GetRenderViewType() const;
956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual int GetBrowserWindowID() const;
957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RenderViewCreated(RenderViewHost* render_view_host);
958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RenderViewReady(RenderViewHost* render_view_host);
959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RenderViewGone(RenderViewHost* render_view_host);
960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RenderViewDeleted(RenderViewHost* render_view_host);
961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidNavigate(RenderViewHost* render_view_host,
962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           const ViewHostMsg_FrameNavigate_Params& params);
963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateState(RenderViewHost* render_view_host,
964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int32 page_id,
965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           const std::string& state);
966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateTitle(RenderViewHost* render_view_host,
967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int32 page_id,
968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           const std::wstring& title);
969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateEncoding(RenderViewHost* render_view_host,
970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const std::string& encoding);
971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateTargetURL(int32 page_id, const GURL& url);
972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateThumbnail(const GURL& url,
973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               const SkBitmap& bitmap,
974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               const ThumbnailScore& score);
975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateInspectorSetting(const std::string& key,
976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      const std::string& value);
977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ClearInspectorSettings();
978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Close(RenderViewHost* render_view_host);
979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RequestMove(const gfx::Rect& new_bounds);
980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidStartLoading();
981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidStopLoading();
9823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void DocumentOnLoadCompletedInMainFrame(
9833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      RenderViewHost* render_view_host,
9843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      int32 page_id);
985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RequestOpenURL(const GURL& url, const GURL& referrer,
986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              WindowOpenDisposition disposition);
987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DomOperationResponse(const std::string& json_string,
988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    int automation_id);
9893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual void ProcessDOMUIMessage(const ViewHostMsg_DomMessage_Params& params);
990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ProcessExternalHostMessage(const std::string& message,
991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const std::string& origin,
992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                          const std::string& target);
993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RunJavaScriptMessage(const std::wstring& message,
994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    const std::wstring& default_prompt,
995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    const GURL& frame_url,
996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    const int flags,
997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    IPC::Message* reply_msg,
998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    bool* did_suppress_message);
999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RunBeforeUnloadConfirm(const std::wstring& message,
1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                      IPC::Message* reply_msg);
1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ShowModalHTMLDialog(const GURL& url, int width, int height,
1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   const std::string& json_arguments,
1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   IPC::Message* reply_msg);
1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void PasswordFormsFound(
1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::vector<webkit_glue::PasswordForm>& forms);
1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void PasswordFormsVisible(
1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const std::vector<webkit_glue::PasswordForm>& visible_forms);
1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void PageHasOSDD(RenderViewHost* render_view_host,
1009731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                           int32 page_id,
1010731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                           const GURL& url,
1011731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                           const ViewHostMsg_PageHasOSDD_Type& provider_type);
1012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual GURL GetAlternateErrorPageURL() const;
1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual RendererPreferences GetRendererPrefs(Profile* profile) const;
1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual WebPreferences GetWebkitPrefs();
1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnIgnoredUIEvent();
1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnJSOutOfMemory();
1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnCrossSiteResponse(int new_render_process_host_id,
1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   int new_request_id);
1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual gfx::Rect GetRootWindowResizerRect() const;
1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RendererUnresponsive(RenderViewHost* render_view_host,
1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                    bool is_during_unload);
1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RendererResponsive(RenderViewHost* render_view_host);
1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void LoadStateChanged(const GURL& url, net::LoadState load_state,
1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                uint64 upload_position, uint64 upload_size);
1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool IsExternalTabContainer() const;
1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidInsertCSS();
1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void FocusedNodeChanged();
1028731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void UpdateZoomLimits(int minimum_percent,
1029731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                int maximum_percent,
1030731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick                                bool remember);
1031731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void UpdateContentRestrictions(int restrictions);
1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHostManager::Delegate -------------------------------------------
1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Blocks/unblocks interaction with renderer process.
1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void BlockTabContent(bool blocked);
1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void BeforeUnloadFiredFromRenderManager(
1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool proceed,
1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bool* proceed_to_fire_unload);
1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void DidStartLoadingFromRenderManager(
1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHost* render_view_host);
1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void RenderViewGoneFromRenderManager(
1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHost* render_view_host);
1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateRenderViewSizeForRenderManager();
1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void NotifySwappedFromRenderManager();
1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual NavigationController& GetControllerForRenderManager();
1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual DOMUI* CreateDOMUIForRenderManager(const GURL& url);
1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual NavigationEntry* GetLastCommittedNavigationEntryForRenderManager();
1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Initializes the given renderer if necessary and creates the view ID
1052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // corresponding to this view host. If this method is not called and the
1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // process is not shared, then the TabContents will act as though the renderer
1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is not running (i.e., it will render "sad tab"). This method is
1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // automatically called from LoadURL.
1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  //
1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If you are attaching to an already-existing RenderView, you should call
1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // InitWithExistingID.
1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual bool CreateRenderViewForRenderManager(
1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      RenderViewHost* render_view_host);
1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NotificationObserver ------------------------------------------------------
1063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // App extensions related methods:
1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Returns the first extension whose extent contains |url|.
1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Extension* GetExtensionContaining(const GURL& url);
1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Resets app_icon_ and if |extension| is non-null creates a new
1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ImageLoadingTracker to load the extension's image.
1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void UpdateExtensionAppIcon(Extension* extension);
1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ImageLoadingTracker::Observer.
1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnImageLoaded(SkBitmap* image, ExtensionResource resource,
1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                             int index);
1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for core operation ---------------------------------------------------
1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Delegate for notifying our owner about stuff. Not owned by us.
1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContentsDelegate* delegate_;
1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handles the back/forward list and loading.
1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NavigationController controller_;
1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The corresponding view.
1090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TabContentsView> view_;
1091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Helper classes ------------------------------------------------------------
1093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Manages creation and swapping of render views.
1095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RenderViewHostManager render_manager_;
1096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stores random bits of data for others to associate with this object.
1098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PropertyBag property_bag_;
1099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Registers and unregisters us for notifications.
1101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar registrar_;
1102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // Registers and unregisters for pref notifications.
11043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  PrefChangeRegistrar pref_change_registrar_;
11053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handles print preview and print job for this contents.
1107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<printing::PrintViewManager> printing_;
1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // SavePackage, lazily created.
1110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<SavePackage> save_package_;
1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // AutocompleteHistoryManager, lazily created.
1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<AutocompleteHistoryManager> autocomplete_history_manager_;
1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // AutoFillManager, lazily created.
1116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<AutoFillManager> autofill_manager_;
1117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // PasswordManager, lazily created.
1119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<PasswordManager> password_manager_;
1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // PluginInstaller, lazily created.
1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<PluginInstaller> plugin_installer_;
1123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TabContentsSSLHelper, lazily created.
1125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TabContentsSSLHelper> ssl_helper_;
1126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // BlockedPluginManager, lazily created.
11283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_ptr<BlockedPluginManager> blocked_plugin_manager_;
11293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
11303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // FileSelectHelper, lazily created.
11313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_ptr<FileSelectHelper> file_select_helper_;
11323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handles drag and drop event forwarding to extensions.
1134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BookmarkDrag* bookmark_drag_;
1135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handles downloading favicons.
1137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FavIconHelper fav_icon_helper_;
1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Cached web app info data.
1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  webkit_glue::WebApplicationInfo web_app_info_;
1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Cached web app icon.
1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkBitmap app_icon_;
1144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // RenderViewHost::ContentSettingsDelegate.
1146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TabSpecificContentSettings> content_settings_delegate_;
1147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for loading state ----------------------------------------------------
1149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates whether we're currently loading a resource.
1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_loading_;
1152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates if the tab is considered crashed.
1154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_crashed_;
1155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // See waiting_for_response() above.
1157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool waiting_for_response_;
1158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates the largest PageID we've seen.  This field is ignored if we are
1160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // a TabContents, in which case the max page ID is stored separately with
1161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // each SiteInstance.
1162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(brettw) this seems like it can be removed according to the comment.
1163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int32 max_page_id_;
1164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // System time at which the current load was started.
1166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks current_load_start_;
1167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The current load state and the URL associated with it.
1169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  net::LoadState load_state_;
1170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::wstring load_state_host_;
1171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Upload progress, for displaying in the status bar.
1172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set to zero when there is no significant upload happening.
1173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  uint64 upload_size_;
1174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  uint64 upload_position_;
1175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for current page -----------------------------------------------------
1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether we have a (non-empty) title for the current page.
1179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used to prevent subsequent title updates from affecting history. This
1180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // prevents some weirdness because some AJAXy apps use titles for status
1181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // messages.
1182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool received_page_title_;
1183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether the current URL is starred
1185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_starred_;
1186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // When a navigation occurs, we record its contents MIME type. It can be
1188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // used to check whether we can do something for some special contents.
1189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string contents_mime_type_;
1190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Character encoding. TODO(jungshik) : convert to std::string
1192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string encoding_;
1193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Object that holds any blocked TabContents spawned from this TabContents.
1195731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  BlockedContentContainer* blocked_contents_;
1196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Should we block all child TabContents this attempts to spawn.
1198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool all_contents_blocked_;
1199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(pkasting): Hack to try and fix Linux browser tests.
1201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool dont_notify_render_view_;
1202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // True if this is a secure page which displayed insecure content.
1204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool displayed_insecure_content_;
1205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for shelves and stuff ------------------------------------------------
1207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Delegates for InfoBars associated with this TabContents.
1209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<InfoBarDelegate*> infobar_delegates_;
1210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for find in page -----------------------------------------------------
1212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(brettw) this should be separated into a helper class.
1214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Each time a search request comes in we assign it an id before passing it
1216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // over the IPC so that when the results come in we can evaluate whether we
1217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // still care about the results of the search (in some cases we don't because
1218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the user has issued a new search).
1219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static int find_request_id_counter_;
1220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // True if the Find UI is active for this Tab.
1222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool find_ui_active_;
1223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // True if a Find operation was aborted. This can happen if the Find box is
1225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // closed or if the search term inside the Find box is erased while a search
1226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // is in progress. This can also be set if a page has been reloaded, and will
1227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // on FindNext result in a full Find operation so that the highlighting for
1228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // inactive matches can be repainted.
1229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool find_op_aborted_;
1230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This variable keeps track of what the most recent request id is.
1232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int current_find_request_id_;
1233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The current string we are/just finished searching for. This is used to
1235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // figure out if this is a Find or a FindNext operation (FindNext should not
1236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // increase the request id).
1237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 find_text_;
1238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The string we searched for before |find_text_|.
1240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  string16 previous_find_text_;
1241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Whether the last search was case sensitive or not.
1243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool last_search_case_sensitive_;
1244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The last find result. This object contains details about the number of
1246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // matches, the find selection rectangle, etc. The UI can access this
1247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // information to build its presentation.
1248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  FindNotificationDetails last_search_result_;
1249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for app extensions ---------------------------------------------------
1251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If non-null this tab is an app tab and this is the extension the tab was
1253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // created for.
1254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Extension* extension_app_;
1255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Icon for extension_app_ (if non-null) or extension_for_current_page_.
1257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SkBitmap extension_app_icon_;
1258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Used for loading extension_app_icon_.
1260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<ImageLoadingTracker> extension_app_image_loader_;
1261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Data for misc internal state ----------------------------------------------
1263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // See capturing_contents() above.
1265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool capturing_contents_;
1266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // See getter above.
1268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_being_destroyed_;
1269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Indicates whether we should notify about disconnection of this
1271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TabContents. This is used to ensure disconnection notifications only
1272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // happen if a connection notification has happened and that they happen only
1273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // once.
1274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool notify_disconnection_;
1275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Maps from handle to page_id.
1277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::map<FaviconService::Handle, int32> HistoryRequestMap;
1278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  HistoryRequestMap history_requests_;
1279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN)
1281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Handle to an event that's set when the page is showing a message box (or
1282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // equivalent constrained window).  Plugin processes check this to know if
1283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // they should pump messages then.
1284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ScopedHandle message_box_active_;
1285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
1286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The time that the last javascript message was dismissed.
1288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks last_javascript_message_dismissal_;
1289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // True if the user has decided to block future javascript messages. This is
1291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // reset on navigations to false on navigations.
1292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool suppress_javascript_messages_;
1293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set to true when there is an active "before unload" dialog.  When true,
1295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // we've forced the throbber to start in Navigate, and we need to remember to
1296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // turn it off in OnJavaScriptMessageBoxClosed if the navigation is canceled.
1297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool is_showing_before_unload_dialog_;
1298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Shows an info-bar to users when they search from a known search engine and
1300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // have never used the monibox for search before.
1301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<OmniboxSearchHint> omnibox_search_hint_;
1302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Settings that get passed to the renderer process.
1304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  RendererPreferences renderer_preferences_;
1305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // If this tab was created from a renderer using window.open, this will be
1307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // non-NULL and represent the DOMUI of the opening renderer.
1308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DOMUITypeID opener_dom_ui_type_;
1309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The time that we started to create the new tab page.
1311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks new_tab_start_time_;
1312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The time that we started to close the tab.
1314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  base::TimeTicks tab_close_start_time_;
1315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Information about the language the page is in and has been translated to.
1317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LanguageState language_state_;
1318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // See description above setter.
1320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool closed_by_user_gesture_;
1321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1322731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Minimum/maximum zoom percent.
1323731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int minimum_zoom_percent_;
1324731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int maximum_zoom_percent_;
1325731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // If true, the default zoom limits have been overriden for this tab, in which
1326731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // case we don't want saved settings to apply to it and we don't want to
1327731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // remember it.
1328731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  bool temporary_zoom_settings_;
1329731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
1330731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Content restrictions, used to disable print/copy etc based on content's
1331731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // (full-page plugins for now only) permissions.
1332731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int content_restrictions_;
13333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // ---------------------------------------------------------------------------
1335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TabContents);
1337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
1338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13397d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch#endif // !ANDROID
13407d214dfa174224b459660971e5b5cce2e06be02aBen Murdoch
1341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_TAB_CONTENTS_TAB_CONTENTS_H_
1342