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_RENDERER_HOST_RENDER_VIEW_HOST_IMPL_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_IMPL_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 15a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/kill.h" 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/render_frame_host_impl.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_impl.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/site_instance_impl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/accessibility_node_data.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/drag_event_source_info.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/javascript_message_type.h" 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/common/page_transition_types.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/window_container_type.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/load_states.h" 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/WebKit/public/web/WebAXEnums.h" 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebConsoleMessage.h" 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebPopupType.h" 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebTextDirection.h" 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SkBitmap; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ViewMsg_Navigate; 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct AccessibilityHostMsg_EventParams; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct MediaPlayerAction; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_CreateWindow_Params; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_DidFailProvisionalLoadWithError_Params; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ViewHostMsg_OpenURL_Params; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct ViewHostMsg_SelectionBounds_Params; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_ShowPopup_Params; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewMsg_Navigate_Params; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewMsg_PostMessage_Params; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewMsg_StopFinding_Params; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ListValue; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace gfx { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Range; 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace ui { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct SelectedFileInfo; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class BrowserMediaPlayerManager; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChildProcessSecurityPolicyImpl; 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class PageState; 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class RenderFrameHostDelegate; 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class RenderFrameHostImpl; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHostDelegate; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionStorageNamespace; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SessionStorageNamespaceImpl; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestRenderViewHost; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContextMenuParams; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct FileChooserParams; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct Referrer; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ShowDesktopNotificationHostMsgParams; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(COMPILER_MSVC) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderViewHostImpl is the bottom of a diamond-shaped hierarchy, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with RenderWidgetHost at the root. VS warns when methods from the 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// root are overridden in only one of the base classes and not both 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// (in this case, RenderWidgetHostImpl provides implementations of 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// many of the methods). This is a silly warning when dealing with 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// pure virtual methods that only have a single implementation in the 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// hierarchy above this class, and is safe to ignore in this case. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma warning(push) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma warning(disable: 4250) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This implements the RenderViewHost interface that is exposed to 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// embedders of content, and adds things only visible to content. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The exact API of this object needs to be more thoroughly designed. Right 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// now it mimics what WebContentsImpl exposed, which is a fairly large API and 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// may contain things that are not relevant to a common subset of views. See 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// also the comment in render_view_host_delegate.h about the size and scope of 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the delegate API. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Right now, the concept of page navigation (both top level and frame) exists 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in the WebContentsImpl still, so if you instantiate one of these elsewhere, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// you will not be able to traverse pages back and forward. We need to determine 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// if we want to bring that and other functionality down into this object so it 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// can be shared by others. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT RenderViewHostImpl 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public RenderViewHost, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public RenderWidgetHostImpl { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Convenience function, just like RenderViewHost::FromID. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static RenderViewHostImpl* FromID(int render_process_id, int render_view_id); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |routing_id| could be a valid route id, or it could be MSG_ROUTING_NONE, in 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which case RenderWidgetHost will create a new one. |swapped_out| indicates 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // whether the view should initially be swapped out (e.g., for an opener 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // frame being rendered by another process). |hidden| indicates whether the 1123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // view is initially hidden or visible. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The |session_storage_namespace| parameter allows multiple render views and 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebContentses to share the same session storage (part of the WebStorage 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // spec) space. This is useful when restoring contentses, but most callers 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should pass in NULL which will cause a new SessionStorageNamespace to be 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // created. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl( 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* instance, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegate* delegate, 122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RenderFrameHostDelegate* frame_delegate, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostDelegate* widget_delegate, 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id, 125868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int main_frame_routing_id, 1263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool swapped_out, 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool hidden); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderViewHostImpl(); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost implementation. 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AllowBindings(int binding_flags) OVERRIDE; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ClearFocusedNode() OVERRIDE; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ClosePage() OVERRIDE; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CopyImageAt(int x, int y) OVERRIDE; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DesktopNotificationPermissionRequestDone( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int callback_context) OVERRIDE; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DesktopNotificationPostDisplay(int callback_context) OVERRIDE; 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void DesktopNotificationPostError( 139a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int notification_id, 140a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message) OVERRIDE; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DesktopNotificationPostClose(int notification_id, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool by_user) OVERRIDE; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DesktopNotificationPostClick(int notification_id) OVERRIDE; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DirectoryEnumerationFinished( 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int request_id, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<base::FilePath>& files) OVERRIDE; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DisableScrollbarsForThreshold(const gfx::Size& size) OVERRIDE; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragSourceEndedAt( 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int client_x, int client_y, int screen_x, int screen_y, 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragOperation operation) OVERRIDE; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragSourceMovedTo( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int client_x, int client_y, int screen_x, int screen_y) OVERRIDE; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragSourceSystemDragEnded() OVERRIDE; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragTargetDragEnter( 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DropData& drop_data, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_pt, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragOperationsMask operations_allowed, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) OVERRIDE; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragTargetDragOver( 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_pt, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragOperationsMask operations_allowed, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) OVERRIDE; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragTargetDragLeave() OVERRIDE; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DragTargetDrop(const gfx::Point& client_pt, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) OVERRIDE; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void EnableAutoResize(const gfx::Size& min_size, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& max_size) OVERRIDE; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DisableAutoResize(const gfx::Size& new_size) OVERRIDE; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void EnablePreferredSizeMode() OVERRIDE; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExecuteCustomContextMenuCommand( 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int action, const CustomContextMenuContext& context) OVERRIDE; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExecuteMediaPlayerActionAtLocation( 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& location, 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMediaPlayerAction& action) OVERRIDE; 178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void ExecuteJavascriptInWebFrame( 179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_xpath, 180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& jscript) OVERRIDE; 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ExecuteJavascriptInWebFrameCallbackResult( 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_xpath, 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& jscript, 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const JavascriptResultCallback& callback) OVERRIDE; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExecutePluginActionAtLocation( 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& location, 187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebPluginAction& action) OVERRIDE; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExitFullscreen() OVERRIDE; 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void Find(int request_id, const base::string16& search_text, 190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebFindOptions& options) OVERRIDE; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void StopFinding(StopFindAction action) OVERRIDE; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FirePageBeforeUnload(bool for_cross_site_transition) OVERRIDE; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void FilesSelectedInChooser( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<ui::SelectedFileInfo>& files, 1957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileChooserParams::Mode permissions) OVERRIDE; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RenderViewHostDelegate* GetDelegate() const OVERRIDE; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetEnabledBindings() const OVERRIDE; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual SiteInstance* GetSiteInstance() const OVERRIDE; 199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void InsertCSS(const base::string16& frame_xpath, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& css) OVERRIDE; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsRenderViewLive() const OVERRIDE; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsSubframe() const OVERRIDE; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyContextMenuClosed( 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CustomContextMenuContext& context) OVERRIDE; 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyMoveOrResizeStarted() OVERRIDE; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ReloadFrame() OVERRIDE; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetAltErrorPageURL(const GURL& url) OVERRIDE; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetWebUIProperty(const std::string& name, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) OVERRIDE; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Zoom(PageZoom zoom) OVERRIDE; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SyncRendererPrefs() OVERRIDE; 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ToggleSpeechInput() OVERRIDE; 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual WebPreferences GetWebkitPreferences() OVERRIDE; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateWebkitPreferences( 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const WebPreferences& prefs) OVERRIDE; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyTimezoneChange() OVERRIDE; 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void GetAudioOutputControllers( 2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GetAudioOutputControllersCallback& callback) const OVERRIDE; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ActivateNearestFindResult(int request_id, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float x, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float y) OVERRIDE; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestFindMatchRects(int current_version) OVERRIDE; 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void DisableFullscreenEncryptedMediaPlayback() OVERRIDE; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_delegate(RenderViewHostDelegate* d) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(d); // http://crbug.com/82827 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_ = d; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up the RenderView child process. Virtual because it is overridden by 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TestRenderViewHost. If the |frame_name| parameter is non-empty, it is used 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // as the name of the new top-level frame. 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The |opener_route_id| parameter indicates which RenderView created this 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (MSG_ROUTING_NONE if none). If |max_page_id| is larger than -1, the 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderView is told to start issuing page IDs at |max_page_id| + 1. 239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool CreateRenderView(const base::string16& frame_name, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int opener_route_id, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 max_page_id); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TerminationStatus render_view_termination_status() const { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return render_view_termination_status_; 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Returns the content specific prefs for this RenderViewHost. 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebPreferences GetWebkitPrefs(const GURL& url); 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends the given navigation message. Use this rather than sending it 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // yourself since this does the internal bookkeeping described below. This 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // function takes ownership of the provided message pointer. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If a cross-site request is in progress, we may be suspended while waiting 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the onbeforeunload handler, so this function might buffer the message 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rather than sending it. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Navigate(const ViewMsg_Navigate_Params& message); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the specified URL, this is a shortcut for Navigate(). 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NavigateToURL(const GURL& url); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether navigation messages are currently suspended for this 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost. Only true during a cross-site navigation, while waiting 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the onbeforeunload handler. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool are_navigations_suspended() const { return navigations_suspended_; } 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Suspends (or unsuspends) any navigation messages from being sent from this 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost. This is called when a pending RenderViewHost is created 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for a cross-site navigation, because we must suspend any navigations until 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we hear back from the old renderer's onbeforeunload handler. Note that it 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is important that only one navigation event happen after calling this 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // method with |suspend| equal to true. If |suspend| is false and there is 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a suspended_nav_message_, this will send the message. This function 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should only be called to toggle the state; callers should check 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // are_navigations_suspended() first. If |suspend| is false, the time that the 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // user decided the navigation should proceed should be passed as 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |proceed_time|. 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetNavigationsSuspended(bool suspend, 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeTicks& proceed_time); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears any suspended navigation state after a cross-site navigation is 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // canceled or suspended. This is important if we later return to this 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost. 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CancelSuspendedNavigations(); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Whether the initial empty page of this view has been accessed by another 287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // page, making it unsafe to show the pending URL. Always false after the 288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // first commit. 289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool has_accessed_initial_document() { 290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return has_accessed_initial_document_; 291868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) } 292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this RenderViewHost has been swapped out to be displayed by a 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // different process. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_swapped_out() const { return is_swapped_out_; } 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called on the pending RenderViewHost when the network response is ready to 298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // commit. We should ensure that the old RenderViewHost runs its unload 299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // handler and determine whether a transfer to a different RenderViewHost is 300f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // needed. 301f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnCrossSiteResponse( 302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GlobalRequestID& global_request_id, 303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool is_transfer, 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<GURL>& transfer_url_chain, 305f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const Referrer& referrer, 306f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PageTransition page_transition, 307f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 frame_id, 308f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool should_replace_current_entry); 309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Tells the renderer that this RenderView will soon be swapped out, and thus 311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // not to create any new modal dialogs until it happens. This must be done 312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // separately so that the PageGroupLoadDeferrers of any current dialogs are no 313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // longer on the stack when we attempt to swap it out. 314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SuppressDialogsUntilSwapOut(); 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer that this RenderView is being swapped out for one in a 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // different renderer process. It should run its unload handler and move to 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a blank document. The renderer should preserve the Frame object until it 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // exits, in case we come back. The renderer can exit if it has no other 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // active RenderViews, but not until WasSwappedOut is called (when it is no 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // longer visible). 3227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SwapOut(); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Called when either the SwapOut request has been acknowledged or has timed 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // out. 3267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnSwappedOut(bool timed_out); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to notify the renderer that it has been visibly swapped out and 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // replaced by another RenderViewHost, after an earlier call to SwapOut. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It is now safe for the process to exit if there are no other active 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViews. 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WasSwappedOut(); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close the page ignoring whether it has unload events registers. 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is called after the beforeunload and unload events have fired 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and the user has agreed to continue with closing the page. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClosePageIgnoringUnloadEvents(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Returns whether this RenderViewHost has an outstanding cross-site request. 3407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Cleared when we hear the response and start to swap out the old 3417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // RenderViewHost, or if we hear a commit here without a network request. 3427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool HasPendingCrossSiteRequest(); 3437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets whether this RenderViewHost has an outstanding cross-site request, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for which another renderer will need to run an onunload event handler. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is called before the first navigation event for this RenderViewHost, 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // and cleared when we hear the response or commit. 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SetHasPendingCrossSiteRequest(bool has_pending_request); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the RenderView that the JavaScript message that was shown was 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // closed by the user. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void JavaScriptDialogClosed(IPC::Message* reply_msg, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& user_input); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tells the renderer view to focus the first (last if reverse is true) node. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetInitialFocus(bool reverse); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get html data by serializing all frames of current page with lists 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which contain all resource links that have local copy. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The parameter links contain original URLs of all saved links. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The parameter local_paths contain corresponding local file paths of 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // all saved links, which matched with vector:links one by one. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The parameter local_directory_name is relative path of directory which 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // contain all saved auxiliary files included all sub frames and resouces. 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetSerializedHtmlDataForCurrentPageWithLocalLinks( 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<GURL>& links, 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<base::FilePath>& local_paths, 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& local_directory_name); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the RenderViewHost that its load state changed. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadStateChanged(const GURL& url, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::LoadStateWithParam& load_state, 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 upload_position, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 upload_size); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SuddenTerminationAllowed() const; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_sudden_termination_allowed(bool enabled) { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_allowed_ = enabled; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost public overrides. 383424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Init() OVERRIDE; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Shutdown() OVERRIDE; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsRenderView() const OVERRIDE; 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GotFocus() OVERRIDE; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LostCapture() OVERRIDE; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void LostMouseLock() OVERRIDE; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ForwardMouseEvent( 391f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseEvent& mouse_event) OVERRIDE; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPointerEventActivate() OVERRIDE; 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ForwardKeyboardEvent( 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NativeWebKeyboardEvent& key_event) OVERRIDE; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a new RenderView with the given route id. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateNewWindow( 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id, 400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int main_frame_route_id, 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_CreateWindow_Params& params, 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStorageNamespace* session_storage_namespace); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a new RenderWidget with the given route id. |popup_type| indicates 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if this widget is a popup and what kind of popup it is (select, autofill). 406f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void CreateNewWidget(int route_id, blink::WebPopupType popup_type); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a full screen RenderWidget. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CreateNewFullscreenWidget(int route_id); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select popup menu related methods (for external popup menus). 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidSelectPopupMenuItem(int selected_index); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidCancelPopupMenu(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 418424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) BrowserMediaPlayerManager* media_player_manager() { 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return media_player_manager_.get(); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidSelectPopupMenuItems(const std::vector<int>& selected_indices); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidCancelPopupMenu(); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // User rotated the screen. Calls the "onorientationchange" Javascript hook. 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendOrientationChangeEvent(int orientation); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets a bit indicating whether the RenderView is responsible for displaying 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // a subframe in a different process from its parent page. 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_is_subframe(bool is_subframe) { 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_subframe_ = is_subframe; 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 435f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(creis): Remove this when we replace frame IDs with RenderFrameHost 436f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // routing IDs. 437b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int64 main_frame_id() const { 438b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return main_frame_id_; 439b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 440b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the opener to null in the renderer process. 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void DisownOpener(); 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Turn on accessibility testing. The given callback will be run 4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // every time an accessibility notification is received from the 4467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // renderer process, and the accessibility tree it sent can be 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // retrieved using accessibility_tree_for_testing(). 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SetAccessibilityCallbackForTesting( 449f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Callback<void(blink::WebAXEvent)>& callback); 4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Only valid if SetAccessibilityCallbackForTesting was called and 4527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // the callback was run at least once. Returns a snapshot of the 4537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // accessibility tree received from the renderer as of the last time 4547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // a LoadComplete or LayoutComplete accessibility notification was received. 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const AccessibilityNodeDataTreeNode& accessibility_tree_for_testing() { 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return accessibility_tree_; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set accessibility callbacks. 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAccessibilityLayoutCompleteCallbackForTesting( 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback); 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAccessibilityLoadCompleteCallbackForTesting( 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback); 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAccessibilityOtherCallbackForTesting( 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& callback); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool is_waiting_for_beforeunload_ack() { 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return is_waiting_for_beforeunload_ack_; 4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool is_waiting_for_unload_ack() { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return is_waiting_for_unload_ack_; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Returns whether the given URL is allowed to commit in the current process. 476a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // This is a more conservative check than FilterURL, since it will be used to 477a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // kill processes that commit unauthorized URLs. 478a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) bool CanCommitURL(const GURL& url); 479a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks that the given renderer can request |url|, if not it sets it to 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // about:blank. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // empty_allowed must be set to false for navigations for security reasons. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void FilterURL(ChildProcessSecurityPolicyImpl* policy, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RenderProcessHost* process, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty_allowed, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL* url); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Update the FrameTree to use this RenderViewHost's main frame 4894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // RenderFrameHost. Called when the RenderViewHost is committed. 4904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 4914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(ajwong): Remove once RenderViewHost no longer owns the main frame 4924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // RenderFrameHost. 4934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void AttachToFrameTree(); 4944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // The following IPC handlers are public so RenderFrameHost can call them, 4968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // while we transition the code to not use RenderViewHost. 4978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // 4988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // TODO(nasko): Remove those methods once we are done moving navigation 4998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // into RenderFrameHost. 5008bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void OnDidStartProvisionalLoadForFrame(int64 frame_id, 5018bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) int64 parent_frame_id, 5028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool main_frame, 5038bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const GURL& url); 5048bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE: Do not add functions that just send an IPC message that are called in 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // one or two places. Have the caller send the IPC message directly (unless 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the caller places are in different platforms, in which case it's better 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to keep them consistent). 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost protected overrides. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnUserGesture() OVERRIDE; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyRendererUnresponsive() OVERRIDE; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void NotifyRendererResponsive() OVERRIDE; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnRenderAutoResized(const gfx::Size& size) OVERRIDE; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RequestToLockMouse(bool user_gesture, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool last_unlocked_by_target) OVERRIDE; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsFullscreen() const OVERRIDE; 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnFocus() OVERRIDE; 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnBlur() OVERRIDE; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC message handlers. 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowView(int route_id, 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WindowOpenDisposition disposition, 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& initial_pos, 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool user_gesture); 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowWidget(int route_id, const gfx::Rect& initial_pos); 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowFullscreenWidget(int route_id); 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRunModal(int opener_id, IPC::Message* reply_msg); 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRenderViewReady(); 5317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void OnRenderProcessGone(int status, int error_code); 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidRedirectProvisionalLoad(int32 page_id, 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& source_url, 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& target_url); 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidFailProvisionalLoadWithError( 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params); 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnNavigate(const IPC::Message& msg); 53890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnUpdateState(int32 page_id, const PageState& state); 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateTitle(int32 page_id, 540a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 541f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection title_direction); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateEncoding(const std::string& encoding); 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnUpdateTargetURL(int32 page_id, const GURL& url); 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnClose(); 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRequestMove(const gfx::Rect& pos); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidStartLoading(); 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidStopLoading(); 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeLoadProgress(double load_progress); 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidDisownOpener(); 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDocumentAvailableInMainFrame(); 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDocumentOnLoadCompletedInMainFrame(int32 page_id); 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnContextMenu(const ContextMenuParams& params); 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnToggleFullscreen(bool enter_fullscreen); 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnOpenURL(const ViewHostMsg_OpenURL_Params& params); 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidContentsPreferredSizeChange(const gfx::Size& new_size); 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeScrollOffset(); 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeScrollbarsForMainFrame(bool has_horizontal_scrollbar, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_vertical_scrollbar); 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeScrollOffsetPinningForMainFrame(bool is_pinned_to_left, 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_pinned_to_right); 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeNumWheelEvents(int count); 562a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnSelectionChanged(const base::string16& text, 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t offset, 56458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& range); 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSelectionBoundsChanged( 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_SelectionBounds_Params& params); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnPasteFromSelectionClipboard(); 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRouteCloseEvent(); 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRouteMessageEvent(const ViewMsg_PostMessage_Params& params); 570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void OnRunJavaScriptMessage(const base::string16& message, 571a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& default_prompt, 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& frame_url, 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JavaScriptMessageType type, 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::Message* reply_msg); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRunBeforeUnloadConfirm(const GURL& frame_url, 576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_reload, 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::Message* reply_msg); 579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void OnStartDragging(const DropData& drop_data, 580f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDragOperationsMask operations_allowed, 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SkBitmap& bitmap, 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2d& bitmap_offset_in_dip, 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DragEventSourceInfo& event_info); 584f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnUpdateDragCursor(blink::WebDragOperation drag_operation); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnTargetDropACK(); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnTakeFocus(bool reverse); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnFocusedNodeChanged(bool is_editable_node); 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAddMessageToConsole(int32 level, 589a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 line_no, 591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& source_id); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnUpdateInspectorSetting(const std::string& key, 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value); 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShouldCloseACK( 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool proceed, 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& renderer_before_unload_start_time, 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& renderer_before_unload_end_time); 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnClosePageACK(); 5997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnSwapOutACK(); 60058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void OnAccessibilityEvents( 60158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::vector<AccessibilityHostMsg_EventParams>& params); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnScriptEvalResponse(int id, const base::ListValue& result); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDidZoomURL(double zoom_level, bool remember, const GURL& url); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRequestDesktopNotificationPermission(const GURL& origin, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int callback_id); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnShowDesktopNotification( 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShowDesktopNotificationHostMsgParams& params); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCancelDesktopNotification(int notification_id); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRunFileChooser(const FileChooserParams& params); 610868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OnDidAccessInitialDocument(); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDomOperationResponse(const std::string& json_string, 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int automation_id); 613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void OnFocusedNodeTouched(bool editable); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_ANDROID) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnShowPopup(const ViewHostMsg_ShowPopup_Params& params); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(nasko): Remove this accessor once RenderFrameHost moves into the frame 6204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // tree. 6214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) RenderFrameHostImpl* main_render_frame_host() const { 6224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return main_render_frame_host_.get(); 6234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 6244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class TestRenderViewHost; 627868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, BasicRenderFrameHost); 628424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(RenderViewHostTest, RoutingIdSane); 629424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets whether this RenderViewHost is swapped out in favor of another, 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and clears any waiting state that is no longer relevant. 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSwappedOut(bool is_swapped_out); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool CanAccessFilesOfPageState(const PageState& state) const; 635b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 6364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // All RenderViewHosts must have a RenderFrameHost for its main frame. 6374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Currently the RenderFrameHost is created in lock step on construction 6384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // and a pointer to the main frame is given to the FrameTreeNode 6394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // when the RenderViewHost commits (see AttachToFrameTree()). 6404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 6414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // TODO(ajwong): Make this reference non-owning. The root FrameTreeNode of 6424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // the FrameTree should be responsible for owning the main frame's 6434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // RenderFrameHost. 644868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<RenderFrameHostImpl> main_render_frame_host_; 645868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Our delegate, which wants to know about changes in the RenderView. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegate* delegate_; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The SiteInstance associated with this RenderViewHost. All pages drawn 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in this RenderViewHost are part of this SiteInstance. Should not change 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // over time. 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<SiteInstanceImpl> instance_; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // true if we are currently waiting for a response for drag context 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // information. 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool waiting_for_drag_context_response_; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A bitwise OR of bindings types that have been enabled for this RenderView. 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See BindingsPolicy for details. 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int enabled_bindings_; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether we should buffer outgoing Navigate messages rather than sending 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // them. This will be true when a RenderViewHost is created for a cross-site 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request, until we hear back from the onbeforeunload handler of the old 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHost. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool navigations_suspended_; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 668c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // We only buffer the params for a suspended navigation while we have a 669c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // pending RVH for a WebContentsImpl. There will only ever be one suspended 670c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // navigation, because WebContentsImpl will destroy the pending RVH and create 671c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // a new one if a second navigation occurs. 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ViewMsg_Navigate_Params> suspended_nav_params_; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 674868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Whether the initial empty page of this view has been accessed by another 675868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // page, making it unsafe to show the pending URL. Usually false unless 676868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // another window tries to modify the blank page. Always false after the 677868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // first commit. 678868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool has_accessed_initial_document_; 679868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this RenderViewHost is currently swapped out, such that the view is 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // being rendered by another process. 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_swapped_out_; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether this RenderView is responsible for displaying a subframe in a 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // different process from its parent page. 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_subframe_; 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 688b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // The frame id of the main (top level) frame. This value is set on the 6897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // initial navigation of a RenderView and reset when the RenderView's 6907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // process is terminated (in RenderProcessGone). 691b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int64 main_frame_id_; 692b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we were asked to RunModal, then this will hold the reply_msg that we 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must return to the renderer to unblock it. 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* run_modal_reply_msg_; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will hold the routing id of the RenderView that opened us. 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int run_modal_opener_id_; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true when there is a pending ViewMsg_ShouldClose message. This 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ensures we don't spam the renderer with multiple beforeunload requests. 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When either this value or is_waiting_for_unload_ack_ is true, the value of 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unload_ack_is_for_cross_site_transition_ indicates whether this is for a 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cross-site transition or a tab close attempt. 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_waiting_for_beforeunload_ack_; 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true when there is a pending ViewMsg_Close message. Also see 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is_waiting_for_beforeunload_ack_, unload_ack_is_for_cross_site_transition_. 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_waiting_for_unload_ack_; 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set to true when waiting for ViewHostMsg_SwapOut_ACK has timed out. 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_timed_out_on_unload_; 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Valid only when is_waiting_for_beforeunload_ack_ or 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is_waiting_for_unload_ack_ is true. This tells us if the unload request 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is for closing the entire tab ( = false), or only this RenderViewHost in 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the case of a cross-site transition ( = true). 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool unload_ack_is_for_cross_site_transition_; 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool are_javascript_messages_suppressed_; 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The mapping of pending javascript calls created by 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExecuteJavascriptInWebFrameCallbackResult and their corresponding 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // callbacks. 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<int, JavascriptResultCallback> javascript_callbacks_; 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Accessibility callback for testing. 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Callback<void(blink::WebAXEvent)> accessibility_testing_callback_; 7287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The most recently received accessibility tree - for testing only. 7307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AccessibilityNodeDataTreeNode accessibility_tree_; 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // True if the render view can be shut down suddenly. 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool sudden_termination_allowed_; 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The termination status of the last render view that terminated. 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TerminationStatus render_view_termination_status_; 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the last ShouldClose message was sent. 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks send_should_close_start_time_; 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 741f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) // Set to true if we requested the on screen keyboard to be displayed. 742f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) bool virtual_keyboard_requested_; 743f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Manages all the android mediaplayer objects and handling IPCs for video. 7461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) scoped_ptr<BrowserMediaPlayerManager> media_player_manager_; 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderViewHostImpl); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(COMPILER_MSVC) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#pragma warning(pop) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_VIEW_HOST_IMPL_H_ 759