15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_IMPL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_IMPL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/containers/scoped_ptr_hash_map.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h"
17a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/process.h"
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/values.h"
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/frame_tree.h"
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/navigation_controller_delegate.h"
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/navigation_controller_impl.h"
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/frame_host/navigator_delegate.h"
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/browser/frame_host/render_frame_host_delegate.h"
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/frame_host/render_frame_host_manager.h"
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/browser/media/audio_stream_monitor.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_delegate.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_delegate.h"
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/common/accessibility_mode_enums.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h"
30a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#include "content/public/browser/color_chooser.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/renderer_preferences.h"
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/resource_type.h"
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/three_d_api_types.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/load_states.h"
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "net/http/http_response_headers.h"
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebDragOperation.h"
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/page_transition_types.h"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect_f.h"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct BrowserPluginHostMsg_ResizeGuest_Params;
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ViewHostMsg_DateTimeDialogValue_Params;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewMsg_PostMessage_Params;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginEmbedder;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BrowserPluginGuest;
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserPluginGuestManager;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DateTimeChooserAndroid;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DownloadItem;
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class GeolocationDispatcherHost;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InterstitialPageImpl;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class JavaScriptDialogManager;
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ManifestManagerHost;
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class MidiDispatcherHost;
59ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass PowerSaveBlocker;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHost;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHostDelegateView;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewHostImpl;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHostImpl;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SavePackage;
65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class ScreenOrientationDispatcherHost;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SiteInstance;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestWebContents;
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebContentsAudioMuter;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsDelegate;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsImpl;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsObserver;
72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class WebContentsView;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContentsViewDelegate;
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)struct AXEventNotificationDetails;
75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)struct ColorSuggestion;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct FaviconURL;
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct LoadNotificationDetails;
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ResourceRedirectDetails;
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ResourceRequestDetails;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#if defined(OS_ANDROID)
826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class WebContentsAndroid;
836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif
846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Factory function for the implementations that content knows about. Takes
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ownership of |delegate|.
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)WebContentsView* CreateWebContentsView(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsImpl* web_contents,
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    WebContentsViewDelegate* delegate,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    RenderViewHostDelegateView** render_view_host_delegate_view);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT WebContentsImpl
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public NON_EXPORTED_BASE(WebContents),
94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      public NON_EXPORTED_BASE(RenderFrameHostDelegate),
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public RenderViewHostDelegate,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      public RenderWidgetHostDelegate,
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      public RenderFrameHostManager::Delegate,
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      public NotificationObserver,
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      public NON_EXPORTED_BASE(NavigationControllerDelegate),
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      public NON_EXPORTED_BASE(NavigatorDelegate) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebContentsImpl();
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static WebContentsImpl* CreateWithOpener(
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const WebContents::CreateParams& params,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WebContentsImpl* opener);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  static std::vector<WebContentsImpl*> GetAllWebContents();
109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Returns the opener WebContentsImpl, if any. This can be set to null if the
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // opener is closed or the page clears its window.opener.
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WebContentsImpl* opener() const { return opener_; }
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates a swapped out RenderView. This is used by the browser plugin to
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // create a swapped out RenderView in the embedder render process for the
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // guest, to expose the guest's window object to the embedder.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This returns the routing ID of the newly created swapped out RenderView.
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int CreateSwappedOutRenderView(SiteInstance* instance);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Complex initialization here. Specifically needed to avoid having
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // members call back into our virtual functions in the constructor.
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Init(const WebContents::CreateParams& params);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns the SavePackage which manages the page saving job. May be NULL.
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SavePackage* save_package() const { return save_package_.get(); }
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_ANDROID)
1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // In Android WebView, the RenderView needs created even there is no
1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // navigation entry, this allows Android WebViews to use
1303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // javascript: URLs that load into the DOMWindow before the first page
1313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // load. This is not safe to do in any context that a web page could get a
1323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // reference to the DOMWindow before the first page load.
1333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  bool CreateRenderViewForInitialEmptyDocument();
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Expose the render manager for testing.
137a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TODO(creis): Remove this now that we can get to it via FrameTreeNode.
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RenderFrameHostManager* GetRenderManagerForTesting();
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns guest browser plugin object, or NULL if this WebContents is not a
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // guest.
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserPluginGuest* GetBrowserPluginGuest() const;
143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Sets a BrowserPluginGuest object for this WebContents. If this WebContents
145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // has a BrowserPluginGuest then that implies that it is being hosted by
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // a BrowserPlugin object in an embedder renderer process.
147eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void SetBrowserPluginGuest(BrowserPluginGuest* guest);
148eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns embedder browser plugin object, or NULL if this WebContents is not
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // an embedder.
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserPluginEmbedder* GetBrowserPluginEmbedder() const;
152eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Gets the current fullscreen render widget's routing ID. Returns
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // MSG_ROUTING_NONE when there is no fullscreen render widget.
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int GetFullscreenWidgetRoutingID() const;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Invoked when visible SSL state (as defined by SSLStatus) changes.
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DidChangeVisibleSSLState();
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Informs the render view host and the BrowserPluginEmbedder, if present, of
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // a Drag Source End.
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void DragSourceEndedAt(int client_x, int client_y, int screen_x,
163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      int screen_y, blink::WebDragOperation operation);
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // A response has been received for a resource request.
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DidGetResourceResponseStart(
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const ResourceRequestDetails& details);
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // A redirect was received while requesting a resource.
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void DidGetRedirectForResourceRequest(
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderViewHost* render_view_host,
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const ResourceRedirectDetails& details);
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  WebContentsView* GetView() const;
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GeolocationDispatcherHost* geolocation_dispatcher_host() {
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return geolocation_dispatcher_host_.get();
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ScreenOrientationDispatcherHost* screen_orientation_dispatcher_host() {
181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return screen_orientation_dispatcher_host_.get();
182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool should_normally_be_visible() { return should_normally_be_visible_; }
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Broadcasts the mode change to all frames.
187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void SetAccessibilityMode(AccessibilityMode mode);
188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Adds the given accessibility mode to the current accessibility mode
190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // bitmap.
191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void AddAccessibilityMode(AccessibilityMode mode);
192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Removes the given accessibility mode from the current accessibility
194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // mode bitmap, managing the bits that are shared with other modes such
195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // that a bit will only be turned off when all modes that depend on it
196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // have been removed.
197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void RemoveAccessibilityMode(AccessibilityMode mode);
198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebContents ------------------------------------------------------
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebContentsDelegate* GetDelegate() OVERRIDE;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetDelegate(WebContentsDelegate* delegate) OVERRIDE;
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NavigationControllerImpl& GetController() OVERRIDE;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const NavigationControllerImpl& GetController() const OVERRIDE;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual BrowserContext* GetBrowserContext() const OVERRIDE;
205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual const GURL& GetURL() const OVERRIDE;
206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual const GURL& GetVisibleURL() const OVERRIDE;
207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual const GURL& GetLastCommittedURL() const OVERRIDE;
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RenderProcessHost* GetRenderProcessHost() const OVERRIDE;
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual RenderFrameHost* GetMainFrame() OVERRIDE;
210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual RenderFrameHost* GetFocusedFrame() OVERRIDE;
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ForEachFrame(
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::Callback<void(RenderFrameHost*)>& on_frame) OVERRIDE;
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SendToAllFrames(IPC::Message* message) OVERRIDE;
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RenderViewHost* GetRenderViewHost() const OVERRIDE;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetRoutingID() const OVERRIDE;
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RenderWidgetHostView* GetRenderWidgetHostView() const OVERRIDE;
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual RenderWidgetHostView* GetFullscreenRenderWidgetHostView() const
218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      OVERRIDE;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebUI* CreateWebUI(const GURL& url) OVERRIDE;
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebUI* GetWebUI() const OVERRIDE;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebUI* GetCommittedWebUI() const OVERRIDE;
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUserAgentOverride(const std::string& override) OVERRIDE;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const std::string& GetUserAgentOverride() const OVERRIDE;
224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void EnableTreeOnlyAccessibilityMode() OVERRIDE;
225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsTreeOnlyAccessibilityModeForTesting() const OVERRIDE;
226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsFullAccessibilityModeForTesting() const OVERRIDE;
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN)
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetParentNativeViewAccessible(
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::NativeViewAccessible accessible_parent) OVERRIDE;
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual const base::string16& GetTitle() const OVERRIDE;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int32 GetMaxPageID() OVERRIDE;
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int32 GetMaxPageIDForSiteInstance(
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SiteInstance* site_instance) OVERRIDE;
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SiteInstance* GetSiteInstance() const OVERRIDE;
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual SiteInstance* GetPendingSiteInstance() const OVERRIDE;
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsLoading() const OVERRIDE;
238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool IsLoadingToDifferentDocument() const OVERRIDE;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsWaitingForResponse() const OVERRIDE;
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const net::LoadStateWithParam& GetLoadState() const OVERRIDE;
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual const base::string16& GetLoadStateHost() const OVERRIDE;
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual uint64 GetUploadSize() const OVERRIDE;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual uint64 GetUploadPosition() const OVERRIDE;
2447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual std::set<GURL> GetSitesInTab() const OVERRIDE;
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const std::string& GetEncoding() const OVERRIDE;
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool DisplayedInsecureContent() const OVERRIDE;
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void IncrementCapturerCount(const gfx::Size& capture_size) OVERRIDE;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void DecrementCapturerCount() OVERRIDE;
249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual int GetCapturerCount() const OVERRIDE;
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool IsAudioMuted() const OVERRIDE;
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetAudioMuted(bool mute) OVERRIDE;
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsCrashed() const OVERRIDE;
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetIsCrashed(base::TerminationStatus status,
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            int error_code) OVERRIDE;
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual base::TerminationStatus GetCrashedStatus() const OVERRIDE;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsBeingDestroyed() const OVERRIDE;
2576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void NotifyNavigationStateChanged(
2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      InvalidateTypes changed_flags) OVERRIDE;
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual base::TimeTicks GetLastActiveTime() const OVERRIDE;
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WasShown() OVERRIDE;
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void WasHidden() OVERRIDE;
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool NeedToFireBeforeUnload() OVERRIDE;
263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void DispatchBeforeUnload(bool for_cross_site_transition) OVERRIDE;
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Stop() OVERRIDE;
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebContents* Clone() OVERRIDE;
266e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual void ReloadFocusedFrame(bool ignore_cache) OVERRIDE;
267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Undo() OVERRIDE;
268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Redo() OVERRIDE;
269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Cut() OVERRIDE;
270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Copy() OVERRIDE;
271c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void CopyToFindPboard() OVERRIDE;
272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Paste() OVERRIDE;
273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void PasteAndMatchStyle() OVERRIDE;
274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Delete() OVERRIDE;
275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void SelectAll() OVERRIDE;
276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Unselect() OVERRIDE;
277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void Replace(const base::string16& word) OVERRIDE;
278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void ReplaceMisspelling(const base::string16& word) OVERRIDE;
279c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void NotifyContextMenuClosed(
280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      const CustomContextMenuContext& context) OVERRIDE;
281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void ExecuteCustomContextMenuCommand(
282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      int action, const CustomContextMenuContext& context) OVERRIDE;
283010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::NativeView GetNativeView() OVERRIDE;
284010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::NativeView GetContentNativeView() OVERRIDE;
285010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::NativeWindow GetTopLevelNativeWindow() OVERRIDE;
286010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Rect GetContainerBounds() OVERRIDE;
287010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual gfx::Rect GetViewBounds() OVERRIDE;
288010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual DropData* GetDropData() OVERRIDE;
289010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void Focus() OVERRIDE;
290010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void SetInitialFocus() OVERRIDE;
291010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void StoreFocus() OVERRIDE;
292010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void RestoreFocus() OVERRIDE;
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void FocusThroughTabTraversal(bool reverse) OVERRIDE;
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShowingInterstitialPage() const OVERRIDE;
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual InterstitialPage* GetInterstitialPage() const OVERRIDE;
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsSavable() OVERRIDE;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnSavePage() OVERRIDE;
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool SavePage(const base::FilePath& main_file,
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                        const base::FilePath& dir_path,
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        SavePageType save_type) OVERRIDE;
301ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void SaveFrame(const GURL& url,
302ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                         const Referrer& referrer) OVERRIDE;
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GenerateMHTML(
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const base::FilePath& file,
305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      const base::Callback<void(int64)>& callback)
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          OVERRIDE;
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual const std::string& GetContentsMimeType() const OVERRIDE;
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool WillNotifyDisconnection() const OVERRIDE;
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetOverrideEncoding(const std::string& encoding) OVERRIDE;
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResetOverrideEncoding() OVERRIDE;
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RendererPreferences* GetMutableRendererPrefs() OVERRIDE;
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Close() OVERRIDE;
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SystemDragEnded() OVERRIDE;
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UserGestureDone() OVERRIDE;
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetClosedByUserGesture(bool value) OVERRIDE;
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GetClosedByUserGesture() const OVERRIDE;
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ViewSource() OVERRIDE;
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ViewFrameSource(const GURL& url,
31990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                               const PageState& page_state) OVERRIDE;
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetMinimumZoomPercent() const OVERRIDE;
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int GetMaximumZoomPercent() const OVERRIDE;
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE;
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool GotResponseToLockMouseRequest(bool allowed) OVERRIDE;
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool HasOpener() const OVERRIDE;
32590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void DidChooseColorInColorChooser(SkColor color) OVERRIDE;
32690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void DidEndColorChooser() OVERRIDE;
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual int DownloadImage(const GURL& url,
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            bool is_favicon,
329d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                            uint32_t max_bitmap_size,
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            const ImageDownloadCallback& callback) OVERRIDE;
3315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool IsSubframe() const OVERRIDE;
3325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Find(int request_id,
3335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const base::string16& search_text,
3345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                    const blink::WebFindOptions& options) OVERRIDE;
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void StopFinding(StopFindAction action) OVERRIDE;
336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void InsertCSS(const std::string& css) OVERRIDE;
3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool WasRecentlyAudible() OVERRIDE;
3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void GetManifest(const GetManifestCallback&) OVERRIDE;
339a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_ANDROID)
340a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual base::android::ScopedJavaLocalRef<jobject> GetJavaWebContents()
341a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      OVERRIDE;
3426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual WebContentsAndroid* GetWebContentsAndroid();
343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#elif defined(OS_MACOSX)
344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void SetAllowOtherViews(bool allow) OVERRIDE;
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool GetAllowOtherViews() OVERRIDE;
346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation of PageNavigator.
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebContents* OpenURL(const OpenURLParams& params) OVERRIDE;
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation of IPC::Sender.
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool Send(IPC::Message* message) OVERRIDE;
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RenderFrameHostDelegate ---------------------------------------------------
355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual bool OnMessageReceived(RenderFrameHost* render_frame_host,
356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                 const IPC::Message& message) OVERRIDE;
357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual const GURL& GetMainFrameLastCommittedURL() const OVERRIDE;
358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void RenderFrameCreated(RenderFrameHost* render_frame_host) OVERRIDE;
359a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void RenderFrameDeleted(RenderFrameHost* render_frame_host) OVERRIDE;
360effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void DidStartLoading(RenderFrameHost* render_frame_host,
361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                               bool to_different_document) OVERRIDE;
362effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void SwappedOut(RenderFrameHost* render_frame_host) OVERRIDE;
3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DidDeferAfterResponseStarted(
3646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const TransitionLayerData& transition_data) OVERRIDE;
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool WillHandleDeferAfterResponseStarted() OVERRIDE;
3665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void WorkerCrashed(RenderFrameHost* render_frame_host) OVERRIDE;
3675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void ShowContextMenu(RenderFrameHost* render_frame_host,
3685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const ContextMenuParams& params) OVERRIDE;
369010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void RunJavaScriptMessage(RenderFrameHost* render_frame_host,
370c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    const base::string16& message,
371c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    const base::string16& default_prompt,
372c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    const GURL& frame_url,
373c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    JavaScriptMessageType type,
374c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                    IPC::Message* reply_msg) OVERRIDE;
375010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void RunBeforeUnloadConfirm(RenderFrameHost* render_frame_host,
376c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                      const base::string16& message,
377c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                      bool is_reload,
378c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                                      IPC::Message* reply_msg) OVERRIDE;
3795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual void DidAccessInitialDocument() OVERRIDE;
380010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void DidDisownOpener(RenderFrameHost* render_frame_host) OVERRIDE;
381010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual void DocumentOnLoadCompleted(
382010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      RenderFrameHost* render_frame_host) OVERRIDE;
383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void UpdateTitle(RenderFrameHost* render_frame_host,
384cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                           int32 page_id,
385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                           const base::string16& title,
386cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                           base::i18n::TextDirection title_direction) OVERRIDE;
387cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void UpdateEncoding(RenderFrameHost* render_frame_host,
388cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                              const std::string& encoding) OVERRIDE;
3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual WebContents* GetAsWebContents() OVERRIDE;
3900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual bool IsNeverVisible() OVERRIDE;
391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual AccessibilityMode GetAccessibilityMode() const OVERRIDE;
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void AccessibilityEventReceived(
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const std::vector<AXEventNotificationDetails>& details) OVERRIDE;
3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual RenderFrameHost* GetGuestByInstanceID(int browser_plugin_instance_id)
3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      OVERRIDE;
396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN)
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual gfx::NativeViewAccessible GetParentNativeViewAccessible() OVERRIDE;
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
400a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // RenderViewHostDelegate ----------------------------------------------------
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RenderViewHostDelegateView* GetDelegateView() OVERRIDE;
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool OnMessageReceived(RenderViewHost* render_view_host,
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const IPC::Message& message) OVERRIDE;
4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // RenderFrameHostDelegate has the same method, so list it there because this
4055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // interface is going away.
4065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // virtual WebContents* GetAsWebContents() OVERRIDE;
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderViewReady(RenderViewHost* render_view_host) OVERRIDE;
410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RenderViewTerminated(RenderViewHost* render_view_host,
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                    base::TerminationStatus status,
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                    int error_code) OVERRIDE;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderViewDeleted(RenderViewHost* render_view_host) OVERRIDE;
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateState(RenderViewHost* render_view_host,
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           int32 page_id,
41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                           const PageState& page_state) OVERRIDE;
4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void UpdateTargetURL(const GURL& url) OVERRIDE;
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Close(RenderViewHost* render_view_host) OVERRIDE;
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestMove(const gfx::Rect& new_bounds) OVERRIDE;
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DidCancelLoading() OVERRIDE;
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void DocumentAvailableInMainFrame(
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderViewHost* render_view_host) OVERRIDE;
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RouteCloseEvent(RenderViewHost* rvh) OVERRIDE;
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RouteMessageEvent(
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderViewHost* rvh,
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ViewMsg_PostMessage_Params& params) OVERRIDE;
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool AddMessageToConsole(int32 level,
428a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   const base::string16& message,
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32 line_no,
430a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                   const base::string16& source_id) OVERRIDE;
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RendererPreferences GetRendererPrefs(
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      BrowserContext* browser_context) const OVERRIDE;
4336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual WebPreferences ComputeWebkitPrefs() OVERRIDE;
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnUserGesture() OVERRIDE;
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnIgnoredUIEvent() OVERRIDE;
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RendererUnresponsive(RenderViewHost* render_view_host,
4373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                    bool is_during_beforeunload,
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                    bool is_during_unload) OVERRIDE;
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RendererResponsive(RenderViewHost* render_view_host) OVERRIDE;
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LoadStateChanged(const GURL& url,
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                const net::LoadStateWithParam& load_state,
4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint64 upload_position,
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                uint64 upload_size) OVERRIDE;
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Activate() OVERRIDE;
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Deactivate() OVERRIDE;
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LostCapture() OVERRIDE;
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleMouseDown() OVERRIDE;
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleMouseUp() OVERRIDE;
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandlePointerActivate() OVERRIDE;
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleGestureBegin() OVERRIDE;
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleGestureEnd() OVERRIDE;
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RunFileChooser(
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderViewHost* render_view_host,
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const FileChooserParams& params) OVERRIDE;
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ToggleFullscreenMode(bool enter_fullscreen) OVERRIDE;
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool IsFullscreenForCurrentTab() const OVERRIDE;
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdatePreferredSize(const gfx::Size& pref_size) OVERRIDE;
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ResizeDueToAutoResize(const gfx::Size& new_size) OVERRIDE;
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestToLockMouse(bool user_gesture,
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  bool last_unlocked_by_target) OVERRIDE;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void LostMouseLock() OVERRIDE;
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CreateNewWindow(
463a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      int render_process_id,
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int route_id,
465868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      int main_frame_route_id,
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ViewHostMsg_CreateWindow_Params& params,
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SessionStorageNamespace* session_storage_namespace) OVERRIDE;
468a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void CreateNewWidget(int render_process_id,
469a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                               int route_id,
470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                               blink::WebPopupType popup_type) OVERRIDE;
471a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void CreateNewFullscreenWidget(int render_process_id,
472a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                         int route_id) OVERRIDE;
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCreatedWindow(int route_id,
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 WindowOpenDisposition disposition,
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const gfx::Rect& initial_pos,
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool user_gesture) OVERRIDE;
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCreatedWidget(int route_id,
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const gfx::Rect& initial_pos) OVERRIDE;
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShowCreatedFullscreenWidget(int route_id) OVERRIDE;
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequestMediaAccessPermission(
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const MediaStreamRequest& request,
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const MediaResponseCallback& callback) OVERRIDE;
4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool CheckMediaAccessPermission(const GURL& security_origin,
4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                          MediaStreamType type) OVERRIDE;
485a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  virtual SessionStorageNamespace* GetSessionStorageNamespace(
486a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch      SiteInstance* instance) OVERRIDE;
48746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual SessionStorageNamespaceMap GetSessionStorageNamespaceMap() OVERRIDE;
4884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual FrameTree* GetFrameTree() OVERRIDE;
489e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual void SetIsVirtualKeyboardRequested(bool requested) OVERRIDE;
490e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  virtual bool IsVirtualKeyboardRequested() OVERRIDE;
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
492a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // NavigatorDelegate ---------------------------------------------------------
493a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
494a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void DidStartProvisionalLoad(
495a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
496a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      const GURL& validated_url,
497a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      bool is_error_page,
498a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      bool is_iframe_srcdoc) OVERRIDE;
4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void DidStartNavigationTransition(
5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      RenderFrameHostImpl* render_frame_host) OVERRIDE;
5015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidFailProvisionalLoadWithError(
5025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
5035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params)
5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      OVERRIDE;
5055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidFailLoadWithError(
5065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
5075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GURL& url,
5085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int error_code,
5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const base::string16& error_description) OVERRIDE;
5105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidCommitProvisionalLoad(
511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
5125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GURL& url,
5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ui::PageTransition transition_type) OVERRIDE;
514e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual void DidNavigateMainFramePreCommit(
515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      bool navigation_is_within_page) OVERRIDE;
5165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidNavigateMainFramePostCommit(
5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const LoadCommittedDetails& details,
5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const FrameHostMsg_DidCommitProvisionalLoad_Params& params) OVERRIDE;
5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidNavigateAnyFramePostCommit(
5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const LoadCommittedDetails& details,
5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const FrameHostMsg_DidCommitProvisionalLoad_Params& params) OVERRIDE;
5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetMainFrameMimeType(const std::string& mime_type) OVERRIDE;
52446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual bool CanOverscrollContent() const OVERRIDE;
525a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  virtual void NotifyChangedNavigationState(
526a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      InvalidateTypes changed_flags) OVERRIDE;
5275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void AboutToNavigateRenderFrame(
5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host) OVERRIDE;
5295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DidStartNavigationToPendingEntry(
5305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHostImpl* render_frame_host,
5315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const GURL& url,
5325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      NavigationController::ReloadType reload_type) OVERRIDE;
533a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void RequestOpenURL(RenderFrameHostImpl* render_frame_host,
534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              const OpenURLParams& params) OVERRIDE;
5350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual bool ShouldPreserveAbortedURLs() OVERRIDE;
536a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // RenderWidgetHostDelegate --------------------------------------------------
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RenderWidgetDeleted(
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderWidgetHostImpl* render_widget_host) OVERRIDE;
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool PreHandleKeyboardEvent(
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const NativeWebKeyboardEvent& event,
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool* is_keyboard_shortcut) OVERRIDE;
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void HandleKeyboardEvent(
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const NativeWebKeyboardEvent& event) OVERRIDE;
546a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool HandleWheelEvent(
547f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const blink::WebMouseWheelEvent& event) OVERRIDE;
5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual bool PreHandleGestureEvent(
5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const blink::WebGestureEvent& event) OVERRIDE;
550effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual bool HandleGestureEvent(
551effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      const blink::WebGestureEvent& event) OVERRIDE;
55290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  virtual void DidSendScreenRects(RenderWidgetHostImpl* rwh) OVERRIDE;
553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual BrowserAccessibilityManager* GetRootBrowserAccessibilityManager()
554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      OVERRIDE;
555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual BrowserAccessibilityManager*
556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      GetOrCreateRootBrowserAccessibilityManager() OVERRIDE;
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // RenderFrameHostManager::Delegate ------------------------------------------
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool CreateRenderViewForRenderManager(
5615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderViewHost* render_view_host,
5625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      int opener_route_id,
563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      int proxy_routing_id,
5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      bool for_main_frame_navigation) OVERRIDE;
5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool CreateRenderFrameForRenderManager(
5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      RenderFrameHost* render_frame_host,
5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      int parent_routing_id) OVERRIDE;
5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void BeforeUnloadFiredFromRenderManager(
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool proceed, const base::TimeTicks& proceed_time,
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool* proceed_to_fire_unload) OVERRIDE;
5717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  virtual void RenderProcessGoneFromRenderManager(
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      RenderViewHost* render_view_host) OVERRIDE;
5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UpdateRenderViewSizeForRenderManager() OVERRIDE;
5744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  virtual void CancelModalDialogsForRenderManager() OVERRIDE;
575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void NotifySwappedFromRenderManager(RenderFrameHost* old_host,
576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                              RenderFrameHost* new_host,
577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                              bool is_main_frame) OVERRIDE;
5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual int CreateOpenerRenderViewsForRenderManager(
5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      SiteInstance* instance) OVERRIDE;
5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NavigationControllerImpl&
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetControllerForRenderManager() OVERRIDE;
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual WebUIImpl* CreateWebUIForRenderManager(const GURL& url) OVERRIDE;
5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual NavigationEntry*
5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GetLastCommittedNavigationEntryForRenderManager() OVERRIDE;
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool FocusLocationBarByDefault() OVERRIDE;
5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetFocusToLocationBar(bool select_all) OVERRIDE;
5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void CreateViewAndSetSizeForRVH(RenderViewHost* rvh) OVERRIDE;
5883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual bool IsHidden() OVERRIDE;
5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NotificationObserver ------------------------------------------------------
5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Observe(int type,
5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const NotificationSource& source,
5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const NotificationDetails& details) OVERRIDE;
5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // NavigationControllerDelegate ----------------------------------------------
5971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
5981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual WebContents* GetWebContents() OVERRIDE;
5991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void NotifyNavigationEntryCommitted(
6001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      const LoadCommittedDetails& load_details) OVERRIDE;
6011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Invoked before a form repost warning is shown.
6031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void NotifyBeforeFormRepostWarningShow() OVERRIDE;
6041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Activate this WebContents and show a form repost warning.
6061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void ActivateAndShowRepostFormWarningDialog() OVERRIDE;
6071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Whether the initial empty page of this view has been accessed by another
6095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // page, making it unsafe to show the pending URL. Always false after the
6105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // first commit.
6115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  virtual bool HasAccessedInitialDocument() OVERRIDE;
6125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
6131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Updates the max page ID for the current SiteInstance in this
6141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // WebContentsImpl to be at least |page_id|.
6151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void UpdateMaxPageID(int32 page_id) OVERRIDE;
6161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Updates the max page ID for the given SiteInstance in this WebContentsImpl
6181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // to be at least |page_id|.
6191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void UpdateMaxPageIDForSiteInstance(SiteInstance* site_instance,
6201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                              int32 page_id) OVERRIDE;
6211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Copy the current map of SiteInstance ID to max page ID from another tab.
6231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // This is necessary when this tab adopts the NavigationEntries from
6241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // |web_contents|.
6251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void CopyMaxPageIDsFrom(WebContents* web_contents) OVERRIDE;
6261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Called by the NavigationController to cause the WebContentsImpl to navigate
6281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // to the current pending entry. The NavigationController should be called
6291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // back with RendererDidNavigate on success or DiscardPendingEntry on failure.
6301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The callbacks can be inside of this function, or at some future time.
6311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  //
6321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // The entry has a PageID of -1 if newly created (corresponding to navigation
6331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // to a new URL).
6341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  //
6351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // If this method returns false, then the navigation is discarded (equivalent
6361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // to calling DiscardPendingEntry on the NavigationController).
6371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual bool NavigateToPendingEntry(
6381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      NavigationController::ReloadType reload_type) OVERRIDE;
6391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Sets the history for this WebContentsImpl to |history_length| entries, and
6411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // moves the current page_id to the last entry in the list if it's valid.
6421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // This is mainly used when a prerendered page is swapped into the current
6431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // tab. The method is virtual for testing.
6441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void SetHistoryLengthAndPrune(
6451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      const SiteInstance* site_instance,
6461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      int merge_history_length,
6471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      int32 minimum_page_id) OVERRIDE;
6481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called by InterstitialPageImpl when it creates a RenderFrameHost.
6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void RenderFrameForInterstitialPageCreated(
6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      RenderFrameHost* render_frame_host) OVERRIDE;
6521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Sets the passed interstitial as the currently showing interstitial.
6541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // No interstitial page should already be attached.
6551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void AttachInterstitialPage(
6561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      InterstitialPageImpl* interstitial_page) OVERRIDE;
6571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Unsets the currently showing interstitial.
6591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void DetachInterstitialPage() OVERRIDE;
6601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
6611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Changes the IsLoading state and notifies the delegate as needed.
6621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // |details| is used to provide details on the load that just finished
6631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // (but can be null if not applicable).
6641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual void SetIsLoading(RenderViewHost* render_view_host,
6651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                            bool is_loading,
666effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            bool to_different_document,
6671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                            LoadNotificationDetails* details) OVERRIDE;
6681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  typedef base::Callback<void(WebContents*)> CreatedCallback;
6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
671c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Requests the renderer to select the region between two points in the
672c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // currently focused frame.
673c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void SelectRange(const gfx::Point& start, const gfx::Point& end);
674c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Notifies the main frame that it can continue navigation (if it was deferred
676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // immediately at first response).
677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void ResumeResponseDeferredAtStart();
678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
67903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Forces overscroll to be disabled (used by touch emulation).
68003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void SetForceDisableOverscrollContent(bool force_disable);
68103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
6821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AudioStreamMonitor* audio_stream_monitor() {
6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return &audio_stream_monitor_;
6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool has_audio_power_save_blocker_for_testing() const {
6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return audio_power_save_blocker_;
6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool has_video_power_save_blocker_for_testing() const {
6911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return video_power_save_blocker_;
6921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
6931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  friend class TestNavigationObserver;
696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  friend class WebContentsAddedObserver;
6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WebContentsObserver;
6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class WebContents;  // To implement factory methods.
6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, NoJSMessageOnInterstitials);
7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, UpdateTitle);
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, FindOpenerRVHWhenPending);
7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest,
7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           CrossSiteCantPreemptAfterUnload);
7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, PendingContents);
706b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, FrameTreeShape);
7075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(WebContentsImplTest, GetLastActiveTime);
7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(FormStructureBrowserTest, HTMLFiles);
7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(NavigationControllerTest, HistoryNavigate);
710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(RenderFrameHostManagerTest, PageDoesBackAndReload);
711cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(SitePerProcessBrowserTest, CrossSiteIframe);
7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  FRIEND_TEST_ALL_PREFIXES(SitePerProcessAccessibilityBrowserTest,
7131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           CrossSiteIframeAccessibility);
7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // So InterstitialPageImpl can access SetIsLoading.
7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class InterstitialPageImpl;
7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(brettw) TestWebContents shouldn't exist!
7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class TestWebContents;
7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
72190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  class DestructionObserver;
72290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See WebContents::Create for a description of these parameters.
7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsImpl(BrowserContext* browser_context,
7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  WebContentsImpl* opener);
7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Add and remove observers for page navigation notifications. The order in
728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // which notifications are sent to observers is undefined. Clients must be
729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // sure to remove the observer before they go away.
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddObserver(WebContentsObserver* observer);
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveObserver(WebContentsObserver* observer);
7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Clears this tab's opener if it has been closed.
73490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void OnWebContentsDestroyed(WebContentsImpl* web_contents);
73590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
73690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Creates and adds to the map a destruction observer watching |web_contents|.
73790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // No-op if such an observer already exists.
73890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void AddDestructionObserver(WebContentsImpl* web_contents);
73990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
74090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Deletes and removes from the map a destruction observer
74190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // watching |web_contents|. No-op if there is no such observer.
74290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  void RemoveDestructionObserver(WebContentsImpl* web_contents);
7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Traverses all the RenderFrameHosts in the FrameTree and creates a set
745f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // all the unique RenderWidgetHostViews.
746f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  std::set<RenderWidgetHostView*> GetRenderWidgetHostViewsInTree();
747cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
7485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Callback function when showing JavaScript dialogs.  Takes in a routing ID
7495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // pair to identify the RenderFrameHost that opened the dialog, because it's
7505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // possible for the RenderFrameHost to be deleted by the time this is called.
7515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnDialogClosed(int render_process_id,
7525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                      int render_frame_id,
7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      IPC::Message* reply_msg,
754c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                      bool dialog_was_suppressed,
7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool success,
756a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const base::string16& user_input);
7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Callback function when requesting permission to access the PPAPI broker.
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |result| is true if permission was granted.
7603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  void OnPpapiBrokerPermissionResult(int routing_id, bool result);
7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
762a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  bool OnMessageReceived(RenderViewHost* render_view_host,
763a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                         RenderFrameHost* render_frame_host,
764a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                         const IPC::Message& message);
765a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // IPC message handlers.
767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnThemeColorChanged(SkColor theme_color);
7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDidLoadResourceFromMemoryCache(const GURL& url,
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& security_info,
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& http_request,
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        const std::string& mime_type,
7725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        ResourceType resource_type);
7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDidDisplayInsecureContent();
7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnDidRunInsecureContent(const std::string& security_origin,
7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               const GURL& target_url);
776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnDocumentLoadedInFrame();
777effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnDidFinishLoad(const GURL& url);
778cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnDidStartLoading(bool to_different_document);
779cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnDidStopLoading();
780cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void OnDidChangeLoadProgress(double load_progress);
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnGoToEntryAtOffset(int offset);
7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnUpdateZoomLimits(int minimum_percent,
783cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                          int maximum_percent);
7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnEnumerateDirectory(int request_id, const base::FilePath& path);
7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnRegisterProtocolHandler(const std::string& protocol,
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 const GURL& url,
788a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                 const base::string16& title,
7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 bool user_gesture);
790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnUnregisterProtocolHandler(const std::string& protocol,
791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                   const GURL& url,
792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                   bool user_gesture);
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnFindReply(int request_id,
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int number_of_matches,
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const gfx::Rect& selection_rect,
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   int active_match_ordinal,
7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   bool final_update);
7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID)
7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnFindMatchRectsReply(int version,
8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const std::vector<gfx::RectF>& rects,
8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const gfx::RectF& active_rect);
8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnOpenDateTimeDialog(
8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const ViewHostMsg_DateTimeDialogValue_Params& value);
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
806a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnPepperPluginHung(int plugin_child_id,
807a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                          const base::FilePath& path,
808a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                          bool is_hung);
809a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnPluginCrashed(const base::FilePath& plugin_path,
8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       base::ProcessId plugin_pid);
811a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnDomOperationResponse(const std::string& json_string,
812a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              int automation_id);
8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnAppCacheAccessed(const GURL& manifest_url, bool blocked_by_policy);
814a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void OnOpenColorChooser(int color_chooser_id,
815a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                          SkColor color,
816a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                          const std::vector<ColorSuggestion>& suggestions);
8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnEndColorChooser(int color_chooser_id);
8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnSetSelectedColorInColorChooser(int color_chooser_id, SkColor color);
8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void OnWebUISend(const GURL& source_url,
8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const std::string& name,
8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   const base::ListValue& args);
8223240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  void OnRequestPpapiBrokerPermission(int routing_id,
8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      const GURL& url,
8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      const base::FilePath& plugin_path);
8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void OnBrowserPluginMessage(const IPC::Message& message);
826c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnDidDownloadImage(int id,
82790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                          int http_status_code,
828c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                          const GURL& image_url,
829d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                          const std::vector<SkBitmap>& bitmaps,
830d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                          const std::vector<gfx::Size>& original_bitmap_sizes);
831010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void OnUpdateFaviconURL(const std::vector<FaviconURL>& candidates);
832010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void OnFirstVisuallyNonEmptyPaint();
8335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnMediaPlayingNotification(int64 player_cookie,
8345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                  bool has_video,
83534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)                                  bool has_audio,
83634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)                                  bool is_remote);
8375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnMediaPausedNotification(int64 player_cookie);
8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnShowValidationMessage(const gfx::Rect& anchor_in_root_view,
8395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const base::string16& main_text,
8405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                               const base::string16& sub_text);
8415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnHideValidationMessage();
8425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnMoveValidationMessage(const gfx::Rect& anchor_in_root_view);
8435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Called by derived classes to indicate that we're no longer waiting for a
8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // response. This won't actually update the throbber, but it will get picked
8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // up at the next animation step if the throbber is going.
8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetNotWaitingForResponse() { waiting_for_response_ = false; }
8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Navigation helpers --------------------------------------------------------
8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These functions are helpers for Navigate() and DidNavigate().
8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles post-navigation tasks in DidNavigate AFTER the entry has been
8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // committed to the navigation controller. Note that the navigation entry is
8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // not provided since it may be invalid/changed after being committed. The
8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // current navigation entry is in the NavigationController at this point.
857eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // If our controller was restored, update the max page ID associated with the
8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // given RenderViewHost to be larger than the number of restored entries.
8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is called in CreateRenderView before any navigations in the RenderView
8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // have begun, to prevent any races in updating RenderView::next_page_id.
8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void UpdateMaxPageIDIfNecessary(RenderViewHost* rvh);
8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Saves the given title to the navigation entry and does associated work. It
8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // will update history and the view for the new title, and also synthesize
8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // titles for file URLs that have none (so we require that the URL of the
8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // entry already be set).
8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //
8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This is used as the backend for state updates, which include a new title,
8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // or the dedicated set title message. It returns true if the new title is
8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // different and was therefore updated.
8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UpdateTitleForEntry(NavigationEntryImpl* entry,
873a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                           const base::string16& title);
8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Recursively creates swapped out RenderViews for this tab's opener chain
8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // (including this tab) in the given SiteInstance, allowing other tabs to send
8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // cross-process JavaScript calls to their opener(s).  Returns the route ID of
8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this tab's RenderView for |instance|.
8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int CreateOpenerRenderViews(SiteInstance* instance);
8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper for CreateNewWidget/CreateNewFullscreenWidget.
882a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  void CreateNewWidget(int render_process_id,
883a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       int route_id,
8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       bool is_fullscreen,
885f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                       blink::WebPopupType popup_type);
8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper for ShowCreatedWidget/ShowCreatedFullscreenWidget.
8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ShowCreatedWidget(int route_id,
8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         bool is_fullscreen,
8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const gfx::Rect& initial_pos);
8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Finds the new RenderWidgetHost and returns it. Note that this can only be
8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // called once as this call also removes it from the internal map.
8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderWidgetHostView* GetCreatedWidget(int route_id);
8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Finds the new WebContentsImpl by route_id, initializes it for
8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // renderer-initiated creation, and returns it. Note that this can only be
8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // called once as this call also removes it from the internal map.
8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsImpl* GetCreatedWindow(int route_id);
9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
901cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Tracking loading progress -------------------------------------------------
902cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
903cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Resets the tracking state of the current load.
904cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void ResetLoadProgressState();
905cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
906cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Calculates the progress of the current load and notifies the delegate.
907cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SendLoadProgressChanged();
908cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
909cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Called once when the last frame on the page has stopped loading.
910cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void DidStopLoading(RenderFrameHost* render_frame_host);
911cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Misc non-view stuff -------------------------------------------------------
9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper functions for sending notifications.
915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void NotifyViewSwapped(RenderViewHost* old_host, RenderViewHost* new_host);
916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void NotifyFrameSwapped(RenderFrameHost* old_host, RenderFrameHost* new_host);
9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void NotifyDisconnected();
9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetEncoding(const std::string& encoding);
9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
921f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO(creis): This should take in a FrameTreeNode to know which node's
922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // render manager to return.  For now, we just return the root's.
923f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  RenderFrameHostManager* GetRenderManager() const;
924f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderViewHostImpl* GetRenderViewHostImpl();
9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removes browser plugin embedder if there is one.
9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void RemoveBrowserPluginEmbedder();
9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Clear |render_frame_host|'s tracking entry for its power save blockers.
931010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  void ClearPowerSaveBlockers(RenderFrameHost* render_frame_host);
932ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
9331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Clear tracking entries for all RenderFrameHosts, clears
9341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |audio_power_save_blocker_| and |video_power_save_blocker_|.
935ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void ClearAllPowerSaveBlockers();
936ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
9371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Creates an audio or video power save blocker respectively.
9381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CreateAudioPowerSaveBlocker();
9391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void CreateVideoPowerSaveBlocker();
9401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
9411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Releases the audio power save blockers if |active_audio_players_| is empty.
9421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Likewise, releases the video power save blockers if |active_video_players_|
9431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // is empty.
9441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void MaybeReleasePowerSaveBlockers();
9451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
946424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Helper function to invoke WebContentsDelegate::GetSizeForNewRenderView().
947010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  gfx::Size GetSizeForNewRenderView();
948424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnFrameRemoved(RenderFrameHost* render_frame_host);
9504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
9515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Helper method that's called whenever |preferred_size_| or
9525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |preferred_size_for_capture_| changes, to propagate the new value to the
9535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |delegate_|.
9545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnPreferredSizeChanged(const gfx::Size& old_size);
9555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
9561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Helper methods for adding or removing player entries in |player_map| under
9571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // the key |render_frame_message_source_|.
9581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef std::vector<int64> PlayerList;
9591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef std::map<uintptr_t, PlayerList> ActiveMediaPlayerMap;
9601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void AddMediaPlayerEntry(int64 player_cookie,
9611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           ActiveMediaPlayerMap* player_map);
9621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void RemoveMediaPlayerEntry(int64 player_cookie,
9631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              ActiveMediaPlayerMap* player_map);
9641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Removes all entries from |player_map| for |render_frame_host|.
9651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void RemoveAllMediaPlayerEntries(RenderFrameHost* render_frame_host,
9661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                   ActiveMediaPlayerMap* player_map);
9671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
968f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Adds/removes a callback called on creation of each new WebContents.
969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Deprecated, about to remove.
970f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static void AddCreatedCallback(const CreatedCallback& callback);
971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static void RemoveCreatedCallback(const CreatedCallback& callback);
972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data for core operation ---------------------------------------------------
9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Delegate for notifying our owner about stuff. Not owned by us.
9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsDelegate* delegate_;
9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Handles the back/forward list and loading.
9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigationControllerImpl controller_;
9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The corresponding view.
982010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  scoped_ptr<WebContentsView> view_;
9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The view of the RVHD. Usually this is our WebContentsView implementation,
9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // but if an embedder uses a different WebContentsView, they'll need to
9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // provide this.
9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RenderViewHostDelegateView* render_view_host_delegate_view_;
9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Tracks created WebContentsImpl objects that have not been shown yet. They
9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // are identified by the route ID passed to CreateNewWindow.
9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<int, WebContentsImpl*> PendingContents;
9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PendingContents pending_contents_;
9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // These maps hold on to the widgets that we created on behalf of the renderer
9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // that haven't shown yet.
9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::map<int, RenderWidgetHostView*> PendingWidgetViews;
9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PendingWidgetViews pending_widget_views_;
9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
99990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  typedef std::map<WebContentsImpl*, DestructionObserver*> DestructionObservers;
100090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DestructionObservers destruction_observers_;
100190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // A list of observers notified when page state changes. Weak references.
1003f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // This MUST be listed above frame_tree_ since at destruction time the
10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // latter might cause RenderViewHost's destructor to call us and we might use
10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the observer list then.
10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ObserverList<WebContentsObserver> observers_;
10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The tab that opened this tab, if any.  Will be set to null if the opener
10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // is closed.
10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WebContentsImpl* opener_;
10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // True if this tab was opened by another tab. This is not unset if the opener
10130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // is closed.
10140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool created_with_opener_;
10150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
10165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#if defined(OS_WIN)
1017c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  gfx::NativeViewAccessible accessible_parent_;
1018c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
1019c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Helper classes ------------------------------------------------------------
10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Tracking variables and associated power save blockers for media playback.
10231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ActiveMediaPlayerMap active_audio_players_;
10241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ActiveMediaPlayerMap active_video_players_;
10251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<PowerSaveBlocker> audio_power_save_blocker_;
10261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<PowerSaveBlocker> video_power_save_blocker_;
1027ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
1028f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Manages the frame tree of the page and process swaps in each node.
10294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  FrameTree frame_tree_;
10304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // SavePackage, lazily created.
10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<SavePackage> save_package_;
10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data for loading state ----------------------------------------------------
10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates whether we're currently loading a resource.
10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_loading_;
10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1039cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Indicates whether the current load is to a different document. Only valid
1040cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // if is_loading_ is true.
1041cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool is_load_to_different_document_;
1042cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates if the tab is considered crashed.
10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::TerminationStatus crashed_status_;
10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int crashed_error_code_;
10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Whether this WebContents is waiting for a first-response for the
10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // main resource of the page. This controls whether the throbber state is
10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "waiting" or "loading."
10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool waiting_for_response_;
10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Map of SiteInstance ID to max page ID for this tab. A page ID is specific
10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to a given tab and SiteInstance, and must be valid for the lifetime of the
10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebContentsImpl.
10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::map<int32, int32> max_page_ids_;
10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The current load state and the URL associated with it.
10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  net::LoadStateWithParam load_state_;
1059a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 load_state_host_;
1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // LoadingProgressMap maps FrameTreeNode IDs to a double representing that
1062cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // frame's completion (from 0 to 1).
1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  typedef base::hash_map<int64, double> LoadingProgressMap;
1064cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  LoadingProgressMap loading_progresses_;
1065cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  double loading_total_progress_;
1066cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1067cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  base::TimeTicks loading_last_progress_update_;
1068cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1069cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Counter to track how many frames have sent start notifications but not
1070cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // stop notifications.
1071cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  int loading_frames_in_progress_;
1072cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Upload progress, for displaying in the status bar.
10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set to zero when there is no significant upload happening.
10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64 upload_size_;
10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64 upload_position_;
10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data for current page -----------------------------------------------------
10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When a title cannot be taken from any entry, this title will be used.
1081a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  base::string16 page_title_when_no_navigation_entry_;
10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When a navigation occurs, we record its contents MIME type. It can be
10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // used to check whether we can do something for some special contents.
10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string contents_mime_type_;
10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1087cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The last reported character encoding, not canonicalized.
1088cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string last_reported_encoding_;
1089cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1090cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The canonicalized character encoding.
1091cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string canonical_encoding_;
10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // True if this is a secure page which displayed insecure content.
10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool displayed_insecure_content_;
10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Whether the initial empty page has been accessed by another page, making it
10975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // unsafe to show the pending URL. Usually false unless another window tries
10985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // to modify the blank page.  Always false after the first commit.
10995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool has_accessed_initial_document_;
11005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data for misc internal state ----------------------------------------------
11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // When > 0, the WebContents is currently being captured (e.g., for
11042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // screenshots or mirroring); and the underlying RenderWidgetHost should not
11052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // be told it is hidden.
11062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int capturer_count_;
11072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tracks whether RWHV should be visible once capturer_count_ becomes zero.
11092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool should_normally_be_visible_;
11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See getter above.
11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_being_destroyed_;
11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Indicates whether we should notify about disconnection of this
11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // WebContentsImpl. This is used to ensure disconnection notifications only
11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // happen if a connection notification has happened and that they happen only
11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // once.
11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool notify_disconnection_;
11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Pointer to the JavaScript dialog manager, lazily assigned. Used because the
11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // delegate of this WebContentsImpl is nulled before its destructor is called.
11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  JavaScriptDialogManager* dialog_manager_;
11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Set to true when there is an active "before unload" dialog.  When true,
11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // we've forced the throbber to start in Navigate, and we need to remember to
11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // turn it off in OnJavaScriptMessageBoxClosed if the navigation is canceled.
11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_showing_before_unload_dialog_;
11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Settings that get passed to the renderer process.
11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RendererPreferences renderer_preferences_;
11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The time that this WebContents was last made active. The initial value is
11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // the WebContents creation time.
11345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::TimeTicks last_active_time_;
11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // See description above setter.
11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool closed_by_user_gesture_;
11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Minimum/maximum zoom percent.
11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int minimum_zoom_percent_;
11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int maximum_zoom_percent_;
11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The raw accumulated zoom value and the actual zoom increments made for an
1144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // an in-progress pinch gesture.
1145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  float totalPinchGestureAmount_;
1146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  int currentPinchZoomStepDelta_;
1147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The intrinsic size of the page.
11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Size preferred_size_;
11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The preferred size for content screen capture.  When |capturer_count_| > 0,
11525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // this overrides |preferred_size_|.
11535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Size preferred_size_for_capture_;
11545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_ANDROID)
11562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Date time chooser opened by this tab.
11572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Only used in Android since all other platforms use a multi field UI.
11582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<DateTimeChooserAndroid> date_time_chooser_;
11592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
11602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1161a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Holds information about a current color chooser dialog, if one is visible.
1162a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  struct ColorChooserInfo {
1163a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ColorChooserInfo(int render_process_id,
1164a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                     int render_frame_id,
1165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                     ColorChooser* chooser,
1166a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                     int identifier);
1167a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    ~ColorChooserInfo();
1168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    int render_process_id;
1170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    int render_frame_id;
1171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // Color chooser that was opened by this tab.
1173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    scoped_ptr<ColorChooser> chooser;
1174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // A unique identifier for the current color chooser.  Identifiers are
1176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // unique across a renderer process.  This avoids race conditions in
1177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // synchronizing the browser and renderer processes.  For example, if a
1178a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // renderer closes one chooser and opens another, and simultaneously the
1179a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // user picks a color in the first chooser, the IDs can be used to drop the
1180a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // "chose a color" message rather than erroneously tell the renderer that
1181a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // the user picked a color in the second chooser.
1182a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    int identifier;
1183a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  };
1184a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1185a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  scoped_ptr<ColorChooserInfo> color_chooser_info_;
11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Manages the embedder state for browser plugins, if this WebContents is an
11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // embedder; NULL otherwise.
11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<BrowserPluginEmbedder> browser_plugin_embedder_;
11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Manages the guest state for browser plugin, if this WebContents is a guest;
11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // NULL otherwise.
11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<BrowserPluginGuest> browser_plugin_guest_;
11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This must be at the end, or else we might get notifications and use other
11955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // member variables that are gone.
11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NotificationRegistrar registrar_;
11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Used during IPC message dispatching from the RenderView/RenderFrame so that
11995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // the handlers can get a pointer to the RVH through which the message was
1200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // received.
1201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  RenderViewHost* render_view_message_source_;
12025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  RenderFrameHost* render_frame_message_source_;
12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // All live RenderWidgetHostImpls that are created by this object and may
12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // outlive it.
12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::set<RenderWidgetHostImpl*> created_widgets_;
12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Routing id of the shown fullscreen widget or MSG_ROUTING_NONE otherwise.
12092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int fullscreen_widget_routing_id_;
12102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // At the time the fullscreen widget was being shut down, did it have focus?
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // This is used to restore focus to the WebContentsView after both: 1) the
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // fullscreen widget is destroyed, and 2) the WebContentsDelegate has
1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // completed making layout changes to effect an exit from fullscreen mode.
1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool fullscreen_widget_had_focus_at_shutdown_;
1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Maps the ids of pending image downloads to their callbacks
1218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  typedef std::map<int, ImageDownloadCallback> ImageDownloadMap;
1219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ImageDownloadMap image_download_map_;
12202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
12215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Whether this WebContents is responsible for displaying a subframe in a
12225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // different process from its parent page.
12235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool is_subframe_;
12245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
122503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Whether overscroll should be unconditionally disabled.
122603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool force_disable_overscroll_content_;
1227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Whether the last JavaScript dialog shown was suppressed. Used for testing.
1229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool last_dialog_suppressed_;
1230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<GeolocationDispatcherHost> geolocation_dispatcher_host_;
1232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<MidiDispatcherHost> midi_dispatcher_host_;
1234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_ptr<ScreenOrientationDispatcherHost>
1236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      screen_orientation_dispatcher_host_;
1237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
12381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<ManifestManagerHost> manifest_manager_host_;
12391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The accessibility mode for all frames. This is queried when each frame
1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // is created, and broadcast to all frames when it changes.
1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  AccessibilityMode accessibility_mode_;
1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Monitors power levels for audio streams associated with this WebContents.
12451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AudioStreamMonitor audio_stream_monitor_;
12461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Created on-demand to mute all audio output from this WebContents.
12481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<WebContentsAudioMuter> audio_muter_;
12491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::WeakPtrFactory<WebContentsImpl> loading_weak_factory_;
12511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1252e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  bool virtual_keyboard_requested_;
1253e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WebContentsImpl);
12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_WEB_CONTENTS_WEB_CONTENTS_IMPL_H_
1260