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)#include "content/browser/renderer_host/render_view_host_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/debug/trace_event.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/rtl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/json/json_reader.h" 179ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/metrics/histogram.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/sys_info.h" 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "cc/base/switches.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/child_process_security_policy_impl.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/cross_site_request_manager.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/dom_storage/session_storage_namespace_impl.h" 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/frame_host/frame_tree.h" 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/frame_host/render_frame_host_factory.h" 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/gpu/compositor_util.h" 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/gpu/gpu_data_manager_impl.h" 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/gpu/gpu_process_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/gpu/gpu_surface_tracker.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/host_zoom_map_impl.h" 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/loader/resource_dispatcher_host_impl.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/dip_util.h" 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/browser/renderer_host/media/audio_renderer_host.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_process_host_impl.h" 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_view_host_delegate.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/accessibility_messages.h" 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/browser_plugin/browser_plugin_messages.h" 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/desktop_notification_messages.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/drag_messages.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/common/input_messages.h" 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/inter_process_time_ticks_converter.h" 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/speech_recognition_messages.h" 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/swapped_out_messages.h" 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/view_messages.h" 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/port/browser/render_view_host_delegate_view.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/port/browser/render_widget_host_view_port.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_accessibility_state.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/content_browser_client.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/dom_operation_notification_details.h" 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h" 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_details.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_types.h" 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/render_widget_host_iterator.h" 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/bindings_policy.h" 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_constants.h" 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_switches.h" 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/context_menu_params.h" 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/common/drop_data.h" 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/result_codes.h" 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/url_constants.h" 7090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/common/url_utils.h" 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "net/base/network_change_notifier.h" 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/base/touch/touch_device.h" 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/base/touch/touch_enabled.h" 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/base/ui_base_switches.h" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h" 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/shell_dialogs/selected_file_info.h" 8190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "webkit/browser/fileapi/isolated_context.h" 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#if defined(OS_MACOSX) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/popup_menu_helper_mac.h" 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/browser/media/android/browser_media_player_manager.h" 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#elif defined(OS_WIN) 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/win/win_util.h" 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::TimeDelta; 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebConsoleMessage; 93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragOperation; 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragOperationNone; 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebDragOperationsMask; 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebInputEvent; 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebMediaPlayerAction; 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebPluginAction; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Delay to wait on closing the WebContents for a beforeunload/unload handler to 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// fire. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kUnloadTimeoutMS = 1000; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Translate a WebKit text direction into a base::i18n one. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)base::i18n::TextDirection WebTextDirectionToChromeTextDirection( 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection dir) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (dir) { 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebTextDirectionLeftToRight: 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::i18n::LEFT_TO_RIGHT; 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) case blink::WebTextDirectionRightToLeft: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::i18n::RIGHT_TO_LEFT; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::i18n::UNKNOWN_DIRECTION; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 121f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)#if defined(OS_WIN) && defined(USE_AURA) 122f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) 123f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)const int kVirtualKeyboardDisplayWaitTimeoutMs = 100; 124f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)const int kMaxVirtualKeyboardDisplayRetries = 5; 125f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) 126f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)void DismissVirtualKeyboardTask() { 127f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) static int virtual_keyboard_display_retries = 0; 128f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) // If the virtual keyboard is not yet visible, then we execute the task again 129f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) // waiting for it to show up. 130f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) if (!base::win::DismissVirtualKeyboard()) { 131f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) if (virtual_keyboard_display_retries < kMaxVirtualKeyboardDisplayRetries) { 132f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) BrowserThread::PostDelayedTask( 133f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 134f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) base::Bind(base::IgnoreResult(&DismissVirtualKeyboardTask)), 135f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) TimeDelta::FromMilliseconds(kVirtualKeyboardDisplayWaitTimeoutMs)); 136f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) ++virtual_keyboard_display_retries; 137f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) } else { 138f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) virtual_keyboard_display_retries = 0; 139f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) } 140f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) } 141f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)} 142f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)#endif 143f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderViewHost, public: 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHost* RenderViewHost::FromID(int render_process_id, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id) { 152424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return RenderViewHostImpl::FromID(render_process_id, render_view_id); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHost* RenderViewHost::From(RenderWidgetHost* rwh) { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(rwh->IsRenderView()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(rwh)); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHost::FilterURL(const RenderProcessHost* process, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty_allowed, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL* url) { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl::FilterURL(ChildProcessSecurityPolicyImpl::GetInstance(), 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process, empty_allowed, url); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderViewHostImpl, public: 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHostImpl* RenderViewHostImpl::FromID(int render_process_id, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int render_view_id) { 175424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RenderWidgetHost* widget = 176424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RenderWidgetHost::FromID(render_process_id, render_view_id); 177424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!widget || !widget->IsRenderView()) 178424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return NULL; 179424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return static_cast<RenderViewHostImpl*>(RenderWidgetHostImpl::From(widget)); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHostImpl::RenderViewHostImpl( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SiteInstance* instance, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegate* delegate, 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) RenderFrameHostDelegate* frame_delegate, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostDelegate* widget_delegate, 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id, 188868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int main_frame_routing_id, 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool swapped_out, 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool hidden) 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) : RenderWidgetHostImpl(widget_delegate, 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) instance->GetProcess(), 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) routing_id, 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) hidden), 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(delegate), 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance_(static_cast<SiteInstanceImpl*>(instance)), 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) waiting_for_drag_context_response_(false), 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_(0), 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigations_suspended_(false), 200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) has_accessed_initial_document_(false), 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_swapped_out_(swapped_out), 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_subframe_(false), 203b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) main_frame_id_(-1), 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_reply_msg_(NULL), 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_opener_id_(MSG_ROUTING_NONE), 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_beforeunload_ack_(false), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_unload_ack_(false), 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_timed_out_on_unload_(false), 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_(false), 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) are_javascript_messages_suppressed_(false), 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_allowed_(false), 212f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING), 213f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) virtual_keyboard_requested_(false) { 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DCHECK(instance_.get()); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(delegate_); // http://crbug.com/82827 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) if (main_frame_routing_id == MSG_ROUTING_NONE) 218868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) main_frame_routing_id = GetProcess()->GetNextRoutingID(); 219868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) main_render_frame_host_ = RenderFrameHostFactory::Create( 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) this, frame_delegate, delegate_->GetFrameTree(), 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate_->GetFrameTree()->root(), 223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) main_frame_routing_id, is_swapped_out_); 224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate_->GetFrameTree()->root()->set_render_frame_host( 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) main_render_frame_host_.get(), false); 226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->EnableSendQueue(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!swapped_out) 2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch instance_->increment_active_view_count(); 2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (ResourceDispatcherHostImpl::Get()) { 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::PostTask( 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostCreated, 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Unretained(ResourceDispatcherHostImpl::Get()), 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID())); 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) media_player_manager_.reset(BrowserMediaPlayerManager::Create(this)); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHostImpl::~RenderViewHostImpl() { 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (ResourceDispatcherHostImpl::Get()) { 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::PostTask( 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&ResourceDispatcherHostImpl::OnRenderViewHostDeleted, 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Unretained(ResourceDispatcherHostImpl::Get()), 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID())); 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) delegate_->RenderViewDeleted(this); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Be sure to clean up any leftover state from cross-site requests. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID(), false); 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // If this was swapped out, it already decremented the active view 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // count of the SiteInstance it belongs to. 2627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!is_swapped_out_) 2637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch instance_->decrement_active_view_count(); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)RenderViewHostDelegate* RenderViewHostImpl::GetDelegate() const { 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return delegate_; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SiteInstance* RenderViewHostImpl::GetSiteInstance() const { 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return instance_.get(); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::CreateRenderView( 275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_name, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int opener_route_id, 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 max_page_id) { 2787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TRACE_EVENT0("renderer_host", "RenderViewHostImpl::CreateRenderView"); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!IsRenderViewLive()) << "Creating view twice"; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The process may (if we're sharing a process with another host that already 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // initialized it) or may not (we have our own process or the old process 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // crashed) have been initialized. Calling Init multiple times will be 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ignored, so this is safe. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetProcess()->Init()) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetProcess()->HasConnection()); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(GetProcess()->GetBrowserContext()); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) renderer_initialized_ = true; 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuSurfaceTracker::Get()->SetSurfaceHandle( 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) surface_id(), GetCompositingSurface()); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the RenderView starts with a next_page_id larger than any existing 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page ID it might be asked to render. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 next_page_id = 1; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (max_page_id > -1) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) next_page_id = max_page_id + 1; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMsg_New_Params params; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.renderer_preferences = 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->GetRendererPrefs(GetProcess()->GetBrowserContext()); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.web_preferences = delegate_->GetWebkitPrefs(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.view_id = GetRoutingID(); 3064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) params.main_frame_routing_id = main_render_frame_host()->routing_id(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.surface_id = surface_id(); 308a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch params.session_storage_namespace_id = 309a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch delegate_->GetSessionStorageNamespace(instance_)->id(); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.frame_name = frame_name; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure the RenderView sets its opener correctly. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.opener_route_id = opener_route_id; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.swapped_out = is_swapped_out_; 3143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) params.hidden = is_hidden(); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.next_page_id = next_page_id; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWebScreenInfo(¶ms.screen_info); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.accessibility_mode = accessibility_mode(); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params.allow_partial_swap = !GetProcess()->IsGuest(); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_New(params)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If it's enabled, tell the renderer to set up the Javascript bindings for 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // sending messages back to the browser. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetProcess()->IsGuest()) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(0, enabled_bindings_); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_AllowBindings(GetRoutingID(), enabled_bindings_)); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Let our delegate know that we created a RenderView. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RenderViewCreated(this); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::IsRenderViewLive() const { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return GetProcess()->HasConnection() && renderer_initialized_; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool RenderViewHostImpl::IsSubframe() const { 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_subframe_; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::SyncRendererPrefs() { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SetRendererPrefs(GetRoutingID(), 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->GetRendererPrefs( 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetBrowserContext()))); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)WebPreferences RenderViewHostImpl::GetWebkitPrefs(const GURL& url) { 3481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TRACE_EVENT0("browser", "RenderViewHostImpl::GetWebkitPrefs"); 3491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) WebPreferences prefs; 3501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 3521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.javascript_enabled = 3541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableJavaScript); 3551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.web_security_enabled = 3561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableWebSecurity); 3571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.plugins_enabled = 3581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisablePlugins); 3591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.java_enabled = 3601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableJava); 3611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.remote_fonts_enabled = 3631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableRemoteFonts); 3641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.xslt_enabled = 3651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableXSLT); 3661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.xss_auditor_enabled = 3671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableXSSAuditor); 3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.application_cache_enabled = 3691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableApplicationCache); 3701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.local_storage_enabled = 3721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableLocalStorage); 3731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.databases_enabled = 3741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableDatabases); 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#if defined(OS_ANDROID) && defined(ARCH_CPU_X86) 376a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) prefs.webaudio_enabled = 377a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) command_line.HasSwitch(switches::kEnableWebAudio); 378a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#else 3791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.webaudio_enabled = 3801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableWebAudio); 381a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#endif 3821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.experimental_webgl_enabled = 3841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 3851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisable3DAPIs) && 3861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableExperimentalWebGL); 3871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.flash_3d_enabled = 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableFlash3d); 3911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.flash_stage3d_enabled = 3921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 3931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableFlashStage3d); 3941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.flash_stage3d_baseline_enabled = 3951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableFlashStage3d); 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.gl_multisampling_enabled = 3991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableGLMultisampling); 4001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.privileged_webgl_extensions_enabled = 4011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnablePrivilegedWebGLExtensions); 4021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.site_specific_quirks_enabled = 4031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableSiteSpecificQuirks); 4041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.allow_file_access_from_file_urls = 4051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kAllowFileAccessFromFiles); 4061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_overflow_scroll_enabled = false; 4081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableAcceleratedOverflowScroll)) 4091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_overflow_scroll_enabled = true; 4101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableAcceleratedOverflowScroll)) 4111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_overflow_scroll_enabled = false; 4121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.layer_squashing_enabled = false; 414f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (command_line.HasSwitch(switches::kEnableLayerSquashing)) 415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.layer_squashing_enabled = true; 416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (command_line.HasSwitch(switches::kDisableLayerSquashing)) 417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.layer_squashing_enabled = false; 418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_scrollable_frames_enabled = false; 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableAcceleratedScrollableFrames)) 4211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_scrollable_frames_enabled = true; 4221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableAcceleratedScrollableFrames)) 4231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_scrollable_frames_enabled = false; 4241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.composited_scrolling_for_frames_enabled = false; 4261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableCompositedScrollingForFrames)) 4271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.composited_scrolling_for_frames_enabled = true; 4281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableCompositedScrollingForFrames)) 4291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.composited_scrolling_for_frames_enabled = false; 4301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = false; 4321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch( 4331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kEnableUniversalAcceleratedOverflowScroll)) 4341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = true; 4351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch( 4361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableUniversalAcceleratedOverflowScroll)) 4371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.universal_accelerated_compositing_for_overflow_scroll_enabled = false; 4381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.show_paint_rects = 4401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kShowPaintRects); 4411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_enabled = 4421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 4431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableAcceleratedCompositing); 4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.force_compositing_mode = 4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) content::IsForceCompositingModeEnabled() && 4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableForceCompositingMode); 4471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_2d_canvas_enabled = 4481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 4491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableAccelerated2dCanvas); 4501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.antialiased_2d_canvas_disabled = 4511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kDisable2dCanvasAntialiasing); 4521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_2d_canvas_msaa_sample_count = 4531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) atoi(command_line.GetSwitchValueASCII( 4541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kAcceleratedCanvas2dMSAASampleCount).c_str()); 4551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_filters_enabled = 4561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuProcessHost::gpu_enabled() && 4571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableAcceleratedFilters); 4581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_3d_transforms_enabled = 4591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_animation_enabled = 4601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableAcceleratedLayers); 4611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_plugins_enabled = 4621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableAcceleratedPlugins); 4631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_for_video_enabled = 4641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableAcceleratedVideo); 4651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.fullscreen_enabled = 4661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableFullScreen); 4671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.lazy_layout_enabled = 4681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableExperimentalWebPlatformFeatures); 4691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.region_based_columns_enabled = 4701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableRegionBasedColumns); 4711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.threaded_html_parser = 4721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableThreadedHTMLParser); 4731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.experimental_websocket_enabled = 4741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableExperimentalWebSocket); 4751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(cc::switches::kEnablePinchVirtualViewport)) { 4761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.pinch_virtual_viewport_enabled = true; 4771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.pinch_overlay_scrollbar_thickness = 10; 4781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.use_solid_color_scrollbars = command_line.HasSwitch( 4801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kEnableOverlayScrollbars); 4811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_ANDROID) 4831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.user_gesture_required_for_media_playback = !command_line.HasSwitch( 4841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableGestureRequirementForMediaPlayback); 4851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.user_gesture_required_for_media_fullscreen = !command_line.HasSwitch( 4861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableGestureRequirementForMediaFullscreen); 4871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.touch_enabled = ui::AreTouchEventsEnabled(); 4901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.device_supports_touch = prefs.touch_enabled && 4911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::IsTouchDevicePresent(); 4921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_ANDROID) 4931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.device_supports_mouse = false; 4941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 4951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.pointer_events_max_touch_points = ui::MaxTouchPoints(); 4971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.touch_adjustment_enabled = 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kDisableTouchAdjustment); 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.compositor_touch_hit_testing = 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(cc::switches::kDisableCompositorTouchHitTesting); 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_CHROMEOS) 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool default_enable_scroll_animator = true; 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool default_enable_scroll_animator = false; 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.enable_scroll_animator = default_enable_scroll_animator; 5091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kEnableSmoothScrolling)) 5101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.enable_scroll_animator = true; 5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (command_line.HasSwitch(switches::kDisableSmoothScrolling)) 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.enable_scroll_animator = false; 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.visual_word_movement_enabled = 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableVisualWordMovement); 5161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Certain GPU features might have been blacklisted. 5181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GpuDataManagerImpl::GetInstance()->UpdateRendererWebPrefs(&prefs); 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetProcess()->GetID())) { 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.loads_images_automatically = true; 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.javascript_enabled = true; 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.is_online = !net::NetworkChangeNotifier::IsOffline(); 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if !defined(USE_AURA) 5291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Force accelerated compositing and 2d canvas off for chrome: and about: 5301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // pages (unless it's specifically allowed). 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if ((url.SchemeIs(chrome::kChromeUIScheme) || 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) (url.SchemeIs(chrome::kAboutScheme) && 5331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) url.spec() != kAboutBlankURL)) && 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !command_line.HasSwitch(switches::kAllowWebUICompositing)) { 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_enabled = false; 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_2d_canvas_enabled = false; 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.fixed_position_creates_stacking_context = !command_line.HasSwitch( 5411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableFixedPositionCreatesStackingContext); 5421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_CHROMEOS) 5441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.gesture_tap_highlight_enabled = !command_line.HasSwitch( 5451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableGestureTapHighlight); 5461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#else 5471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.gesture_tap_highlight_enabled = command_line.HasSwitch( 5481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kEnableGestureTapHighlight); 5491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 5501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.number_of_cpu_cores = base::SysInfo::NumberOfProcessors(); 5521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 553f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.viewport_meta_enabled = 554f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line.HasSwitch(switches::kEnableViewportMeta); 555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.viewport_enabled = 557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line.HasSwitch(switches::kEnableViewport) || 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.viewport_meta_enabled; 559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) prefs.main_frame_resizes_are_orientation_changes = 561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) command_line.HasSwitch(switches::kMainFrameResizesAreOrientationChanges); 5621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.deferred_image_decoding_enabled = 5641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) command_line.HasSwitch(switches::kEnableDeferredImageDecoding) || 5651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) cc::switches::IsImplSidePaintingEnabled(); 5661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.spatial_navigation_enabled = command_line.HasSwitch( 5681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kEnableSpatialNavigation); 5691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetContentClient()->browser()->OverrideWebkitPrefs(this, url, &prefs); 5711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disable compositing in guests until we have compositing path implemented 5731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // for guests. 5741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool guest_compositing_enabled = !command_line.HasSwitch( 5751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) switches::kDisableBrowserPluginCompositing); 5761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (GetProcess()->IsGuest() && !guest_compositing_enabled) { 5771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.force_compositing_mode = false; 5781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs.accelerated_compositing_enabled = false; 5791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 5801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return prefs; 5821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::Navigate(const ViewMsg_Navigate_Params& params) { 5857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TRACE_EVENT0("renderer_host", "RenderViewHostImpl::Navigate"); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Browser plugin guests are not allowed to navigate outside web-safe schemes, 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so do not grant them the ability to request additional URLs. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetProcess()->IsGuest()) { 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), params.url); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (params.url.SchemeIs(chrome::kDataScheme) && 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.base_url_for_data_url.SchemeIs(chrome::kFileScheme)) { 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If 'data:' is used, and we have a 'file:' base url, grant access to 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // local files. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance()->GrantRequestURL( 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), params.base_url_for_data_url); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Only send the message if we aren't suspended at the start of a cross-site 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // request. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (navigations_suspended_) { 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Shouldn't be possible to have a second navigation while suspended, since 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigations will only be suspended during a cross-site request. If a 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // second navigation occurs, WebContentsImpl will cancel this pending RVH 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // create a new pending RVH. 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!suspended_nav_params_.get()); 608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) suspended_nav_params_.reset(new ViewMsg_Navigate_Params(params)); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get back to a clean state, in case we start a new navigation without 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // completing a RVH swap or unload handler. 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetSwappedOut(false); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Send(new ViewMsg_Navigate(GetRoutingID(), params)); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force the throbber to start. We do this because WebKit's "started 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // loading" message will be received asynchronously from the UI of the 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser. But we want to keep the throbber in sync with what's happening 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in the UI. For example, we want to start throbbing immediately when the 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user naivgates even if the renderer is delayed. There is also an issue 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // with the throbber starting because the WebUI (which controls whether the 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // favicon is displayed) happens synchronously. If the start loading 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages was asynchronous, then the default favicon would flash in. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // WebKit doesn't send throb notifications for JavaScript URLs, so we 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // don't want to either. 6283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!params.url.SchemeIs(kJavaScriptScheme)) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidStartLoading(this); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NavigateToURL(const GURL& url) { 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewMsg_Navigate_Params params; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.page_id = -1; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.pending_history_list_offset = -1; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.current_history_list_offset = -1; 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.current_history_list_length = 0; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.url = url; 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.transition = PAGE_TRANSITION_LINK; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params.navigation_type = ViewMsg_Navigate_Type::NORMAL; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Navigate(params); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 644c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewHostImpl::SetNavigationsSuspended( 645c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool suspend, 646c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::TimeTicks& proceed_time) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This should only be called to toggle the state. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(navigations_suspended_ != suspend); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigations_suspended_ = suspend; 651c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!suspend && suspended_nav_params_) { 652c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // There's navigation message params waiting to be sent. Now that we're not 653c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // suspended anymore, resume navigation by sending them. If we were swapped 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // out, we should also stop filtering out the IPC messages now. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetSwappedOut(false); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 657c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(!proceed_time.is_null()); 658c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) suspended_nav_params_->browser_navigation_start = proceed_time; 659c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Send(new ViewMsg_Navigate(GetRoutingID(), *suspended_nav_params_.get())); 660c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) suspended_nav_params_.reset(); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::CancelSuspendedNavigations() { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear any state if a pending navigation is canceled or pre-empted. 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (suspended_nav_params_) 667c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) suspended_nav_params_.reset(); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) navigations_suspended_ = false; 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::FirePageBeforeUnload(bool for_cross_site_transition) { 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IsRenderViewLive()) { 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This RenderViewHostImpl doesn't have a live renderer, so just 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // skip running the onbeforeunload handler. 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_waiting_for_beforeunload_ack_ = true; // Checked by OnShouldCloseACK. 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks now = base::TimeTicks::Now(); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnShouldCloseACK(true, now, now); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This may be called more than once (if the user clicks the tab close button 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // several times, or if she clicks the tab close button then the browser close 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // button), and we only send the message once. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_waiting_for_beforeunload_ack_) { 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some of our close messages could be for the tab, others for cross-site 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // transitions. We always want to think it's for closing the tab if any 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the messages were, since otherwise it might be impossible to close 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (if there was a cross-site "close" request pending when the user clicked 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the close button). We want to keep the "for cross site" flag only if 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // both the old and the new ones are also for cross site. 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_ = 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_ && for_cross_site_transition; 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start the hang monitor in case the renderer hangs in the beforeunload 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // handler. 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_beforeunload_ack_ = true; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increment the in-flight event count, to ensure that input events won't 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cancel the timeout timer. 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) increment_in_flight_event_count(); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) send_should_close_start_time_ = base::TimeTicks::Now(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ShouldClose(GetRoutingID())); 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewHostImpl::OnCrossSiteResponse( 709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const GlobalRequestID& global_request_id, 710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool is_transfer, 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::vector<GURL>& transfer_url_chain, 712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const Referrer& referrer, 713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PageTransition page_transition, 714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 frame_id, 715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool should_replace_current_entry) { 716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) RenderViewHostDelegate::RendererManagement* manager = 717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate_->GetRendererManagementDelegate(); 718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (manager) { 719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) manager->OnCrossSiteResponse(this, global_request_id, is_transfer, 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) transfer_url_chain, referrer, page_transition, 721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) frame_id, should_replace_current_entry); 722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewHostImpl::SuppressDialogsUntilSwapOut() { 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Send(new ViewMsg_SuppressDialogsUntilSwapOut(GetRoutingID())); 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 728f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void RenderViewHostImpl::SwapOut() { 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This will be set back to false in OnSwapOutACK, just before we replace 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this RVH with the pending RVH. 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_unload_ack_ = true; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start the hang monitor in case the renderer hangs in the unload handler. 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increment the in-flight event count, to ensure that input events won't 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cancel the timeout timer. 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) increment_in_flight_event_count(); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsRenderViewLive()) { 7407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Send(new ViewMsg_SwapOut(GetRoutingID())); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This RenderViewHost doesn't have a live renderer, so just skip the unload 7437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // event. 7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnSwappedOut(true); 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void RenderViewHostImpl::OnSwapOutACK() { 7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OnSwappedOut(false); 7507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void RenderViewHostImpl::OnSwappedOut(bool timed_out) { 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stop the hang monitor now that the unload handler has finished. 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decrement_in_flight_event_count(); 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_unload_ack_ = false; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) has_timed_out_on_unload_ = timed_out; 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->SwappedOut(this); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::WasSwappedOut() { 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't bother reporting hung state anymore. 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we have timed out on running the unload handler, we consider 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the process hung and we should terminate it if there are no other tabs 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // using the process. If there are other views using this process, the 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unresponsive renderer timeout will catch it. 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool hung = has_timed_out_on_unload_; 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now that we're no longer the active RVH in the tab, start filtering out 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // most IPC messages. Usually the renderer will have stopped sending 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // messages as of OnSwapOutACK. However, we may have timed out waiting 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for that message, and additional IPC messages may keep streaming in. 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We filter them out, as long as that won't cause problems (e.g., we 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // still allow synchronous messages through). 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetSwappedOut(true); 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we are not running the renderer in process and no other tab is using 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the hung process, consider it eligible to be killed, assuming it is a real 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process (unit tests don't have real processes). 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (hung) { 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::ProcessHandle process_handle = GetProcess()->GetHandle(); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int views = 0; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Count the number of active widget hosts for the process, which 7877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // is equivalent to views using the process as of this writing. 78858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) scoped_ptr<RenderWidgetHostIterator> widgets( 78958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) RenderWidgetHost::GetRenderWidgetHosts()); 79058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) while (RenderWidgetHost* widget = widgets->GetNextHost()) { 79158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (widget->GetProcess()->GetID() == GetProcess()->GetID()) 792eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ++views; 793eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!RenderProcessHost::run_renderer_in_process() && 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_handle && views <= 1) { 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The process can safely be terminated, only if WebContents sets 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SuddenTerminationAllowed, which indicates that the timer has expired. 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is not the case if we load data URLs or about:blank. The reason 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is that those have no network requests and this code is hit without 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // setting the unresponsiveness timer. This allows a corner case where a 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation to a data URL will leave a process running, if the 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // beforeunload handler completes fine, but the unload handler hangs. 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // At this time, the complexity to solve this edge case is not worthwhile. 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SuddenTerminationAllowed()) { 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We should kill the process, but for now, just log the data so we can 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // diagnose the kill rate and investigate if separate timer is needed. 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/104346. 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Log a histogram point to help us diagnose how many of those kills 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we have performed. 1 is the enum value for RendererType Normal for 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the histogram. 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UMA_HISTOGRAM_PERCENTAGE( 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "BrowserRenderProcessHost.ChildKillsUnresponsive", 1); 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Inform the renderer that it can exit if no one else is using it. 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_WasSwappedOut(GetRoutingID())); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ClosePage() { 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start the hang monitor in case the renderer hangs in the unload handler. 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_unload_ack_ = true; 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsRenderViewLive()) { 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Since we are sending an IPC message to the renderer, increase the event 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // count to prevent the hang monitor timeout from being stopped by input 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // event acknowledgements. 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) increment_in_flight_event_count(); 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(creis): Should this be moved to Shutdown? It may not be called for 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderViewHosts that have been swapped out. 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::current()->Notify( 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIFICATION_RENDER_VIEW_HOST_WILL_CLOSE_RENDER_VIEW, 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source<RenderViewHost>(this), 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::NoDetails()); 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ClosePage(GetRoutingID())); 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This RenderViewHost doesn't have a live renderer, so just skip the unload 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // event and close the page. 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClosePageIgnoringUnloadEvents(); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ClosePageIgnoringUnloadEvents() { 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_beforeunload_ack_ = false; 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_unload_ack_ = false; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sudden_termination_allowed_ = true; 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->Close(this); 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool RenderViewHostImpl::HasPendingCrossSiteRequest() { 8597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return CrossSiteRequestManager::GetInstance()->HasPendingCrossSiteRequest( 8607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID()); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void RenderViewHostImpl::SetHasPendingCrossSiteRequest( 8647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool has_pending_request) { 8657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( 8667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID(), has_pending_request); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ActivateNearestFindResult(int request_id, 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float x, 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) float y) { 873c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Send(new InputMsg_ActivateNearestFindResult(GetRoutingID(), 874c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_id, x, y)); 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::RequestFindMatchRects(int current_version) { 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_FindMatchRects(GetRoutingID(), current_version)); 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 8814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderViewHostImpl::DisableFullscreenEncryptedMediaPlayback() { 8824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) media_player_manager_->DisableFullscreenEncryptedMediaPlayback(); 8834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragTargetDragEnter( 887eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DropData& drop_data, 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_pt, 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask operations_allowed, 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const int renderer_id = GetProcess()->GetID(); 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The URL could have been cobbled together from any highlighted text string, 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and can't be interpreted as a capability. 898eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DropData filtered_data(drop_data); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, GetProcess(), true, &filtered_data.url); 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The filenames vector, on the other hand, does represent a capability to 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // access the given files. 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fileapi::IsolatedContext::FileInfoSet files; 904eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (std::vector<DropData::FileInfo>::iterator iter( 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filtered_data.filenames.begin()); 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != filtered_data.filenames.end(); ++iter) { 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A dragged file may wind up as the value of an input element, or it 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // may be used as the target of a navigation instead. We don't know 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which will happen at this point, so generously grant both access 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and request permissions to the specific file to cover both cases. 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We do not give it the permission to request all file:// URLs. 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path = 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath::FromUTF8Unsafe(UTF16ToUTF8(iter->path)); 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure we have the same display_name as the one we register. 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter->display_name.empty()) { 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string name; 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files.AddPath(path, &name); 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->display_name = UTF8ToUTF16(name); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files.AddPathWithName(path, UTF16ToUTF8(iter->display_name)); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy->GrantRequestSpecificFileURL(renderer_id, 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::FilePathToFileURL(path)); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the renderer already has permission to read these paths, we don't need 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to re-grant them. This prevents problems with DnD for files in the CrOS 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // file manager--the file manager already had read/write access to those 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // directories, but dragging a file would cause the read/write access to be 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // overwritten with read-only access, making them impossible to delete or 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // rename until the renderer was killed. 9334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!policy->CanReadFile(renderer_id, path)) 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy->GrantReadFile(renderer_id, path); 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fileapi::IsolatedContext* isolated_context = 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fileapi::IsolatedContext::GetInstance(); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(isolated_context); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string filesystem_id = isolated_context->RegisterDraggedFileSystem( 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files); 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!filesystem_id.empty()) { 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Grant the permission iff the ID is valid. 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy->GrantReadFileSystem(renderer_id, filesystem_id); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filtered_data.filesystem_id = UTF8ToUTF16(filesystem_id); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_TargetDragEnter(GetRoutingID(), filtered_data, client_pt, 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_pt, operations_allowed, 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_modifiers)); 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragTargetDragOver( 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_pt, 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask operations_allowed, 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_TargetDragOver(GetRoutingID(), client_pt, screen_pt, 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operations_allowed, key_modifiers)); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragTargetDragLeave() { 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_TargetDragLeave(GetRoutingID())); 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragTargetDrop( 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& client_pt, 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Point& screen_pt, 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int key_modifiers) { 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_TargetDrop(GetRoutingID(), client_pt, screen_pt, 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) key_modifiers)); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DesktopNotificationPermissionRequestDone( 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int callback_context) { 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DesktopNotificationMsg_PermissionRequestDone( 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutingID(), callback_context)); 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DesktopNotificationPostDisplay(int callback_context) { 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DesktopNotificationMsg_PostDisplay(GetRoutingID(), 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) callback_context)); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewHostImpl::DesktopNotificationPostError( 986a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int notification_id, 987a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message) { 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DesktopNotificationMsg_PostError( 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutingID(), notification_id, message)); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DesktopNotificationPostClose(int notification_id, 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool by_user) { 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DesktopNotificationMsg_PostClose( 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutingID(), notification_id, by_user)); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DesktopNotificationPostClick(int notification_id) { 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DesktopNotificationMsg_PostClick(GetRoutingID(), notification_id)); 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ExecuteJavascriptInWebFrame( 1003a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_xpath, 1004a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& jscript) { 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ScriptEvalRequest(GetRoutingID(), frame_xpath, jscript, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, false)); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::ExecuteJavascriptInWebFrameCallbackResult( 1010a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& frame_xpath, 1011a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& jscript, 10122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const JavascriptResultCallback& callback) { 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int next_id = 1; 10142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int key = next_id++; 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ScriptEvalRequest(GetRoutingID(), frame_xpath, jscript, 10162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) key, true)); 10172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) javascript_callbacks_.insert(std::make_pair(key, callback)); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1020a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewHostImpl::JavaScriptDialogClosed( 1021a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) IPC::Message* reply_msg, 1022a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool success, 1023a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& user_input) { 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->SetIgnoreInputEvents(false); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_waiting = 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_beforeunload_ack_ || is_waiting_for_unload_ack_; 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we are executing as part of (before)unload event handling, we don't 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // want to use the regular hung_renderer_delay_ms_ if the user has agreed to 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // leave the current page. In this case, use the regular timeout value used 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // during the (before)unload handling. 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_waiting) { 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartHangMonitorTimeout(TimeDelta::FromMilliseconds( 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success ? kUnloadTimeoutMS : hung_renderer_delay_ms_)); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg, 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success, user_input); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply_msg); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we are waiting for an unload or beforeunload ack and the user has 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // suppressed messages, kill the tab immediately; a page that's spamming 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // alerts in onbeforeunload is presumably malicious, so there's no point in 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // continuing to run its script and dragging out the process. 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This must be done after sending the reply since RenderView can't close 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // correctly while waiting for a response. 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_waiting && are_javascript_messages_suppressed_) 10483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) delegate_->RendererUnresponsive( 10493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) this, is_waiting_for_beforeunload_ack_, is_waiting_for_unload_ack_); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragSourceEndedAt( 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int client_x, int client_y, int screen_x, int screen_y, 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperation operation) { 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_SourceEndedOrMoved( 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutingID(), 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(client_x, client_y), 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(screen_x, screen_y), 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, operation)); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragSourceMovedTo( 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int client_x, int client_y, int screen_x, int screen_y) { 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_SourceEndedOrMoved( 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetRoutingID(), 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(client_x, client_y), 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point(screen_x, screen_y), 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, WebDragOperationNone)); 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DragSourceSystemDragEnded() { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new DragMsg_SourceSystemDragEnded(GetRoutingID())); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::AllowBindings(int bindings_flags) { 10763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Never grant any bindings to browser plugin guests. 10773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (GetProcess()->IsGuest()) { 10783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NOTREACHED() << "Never grant bindings to a guest process."; 10793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return; 10803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 10813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure we aren't granting WebUI bindings to a process that has already 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // been used for non-privileged views. 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bindings_flags & BINDINGS_POLICY_WEB_UI && 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->HasConnection() && 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID())) { 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This process has no bindings yet. Make sure it does not have more 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // than this single active view. 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHostImpl* process = 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<RenderProcessHostImpl*>(GetProcess()); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process->GetActiveViewCount() > 1) 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (bindings_flags & BINDINGS_POLICY_WEB_UI) { 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance()->GrantWebUIBindings( 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID()); 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_bindings_ |= bindings_flags; 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (renderer_initialized_) 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_AllowBindings(GetRoutingID(), enabled_bindings_)); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int RenderViewHostImpl::GetEnabledBindings() const { 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return enabled_bindings_; 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::SetWebUIProperty(const std::string& name, 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) { 11122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This is a sanity check before telling the renderer to enable the property. 11132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It could lie and send the corresponding IPC messages anyway, but we will 11142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // not act on them if enabled_bindings_ doesn't agree. If we get here without 11152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WebUI bindings, kill the renderer process. 11162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI) { 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SetWebUIProperty(GetRoutingID(), name, value)); 11182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 11192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordAction(UserMetricsAction("BindingsMismatchTerminate_RVH_WebUI")); 11202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::KillProcess( 11212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetProcess()->GetHandle(), content::RESULT_CODE_KILLED, false); 11222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::GotFocus() { 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::GotFocus(); // Notifies the renderer it got focus. 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view) 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->GotFocus(); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::LostCapture() { 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::LostCapture(); 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LostCapture(); 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::LostMouseLock() { 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::LostMouseLock(); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LostMouseLock(); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::SetInitialFocus(bool reverse) { 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SetInitialFocus(GetRoutingID(), reverse)); 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::FilesSelectedInChooser( 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<ui::SelectedFileInfo>& files, 11497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch FileChooserParams::Mode permissions) { 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Grant the security access requested to the given files. 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < files.size(); ++i) { 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::SelectedFileInfo& file = files[i]; 11537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (permissions == FileChooserParams::Save) { 115468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance()->GrantCreateReadWriteFile( 11557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetProcess()->GetID(), file.local_path); 11567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 11577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( 11587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetProcess()->GetID(), file.local_path); 11597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_RunFileChooserResponse(GetRoutingID(), files)); 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DirectoryEnumerationFinished( 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int request_id, 11662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::vector<base::FilePath>& files) { 11675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Grant the security access requested to the given files. 11682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (std::vector<base::FilePath>::const_iterator file = files.begin(); 11695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) file != files.end(); ++file) { 11705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance()->GrantReadFile( 11715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), *file); 11725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_EnumerateDirectoryResponse(GetRoutingID(), 11745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, 11755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) files)); 11765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::LoadStateChanged( 11795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 11805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const net::LoadStateWithParam& load_state, 11815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 upload_position, 11825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 upload_size) { 11835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->LoadStateChanged(url, load_state, upload_position, upload_size); 11845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::SuddenTerminationAllowed() const { 11875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sudden_termination_allowed_ || 11885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->SuddenTerminationAllowed(); 11895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 11925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// RenderViewHostImpl, IPC message handlers: 11935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { 11952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!BrowserMessageFilter::CheckCanDispatchOnUI(msg, this)) 11965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 11975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter out most IPC messages if this renderer is swapped out. 11995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We still want to handle certain ACKs to keep our state consistent. 12005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_swapped_out_) { 12015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!SwappedOutMessages::CanHandleWhileSwappedOut(msg)) { 12025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this is a synchronous message and we decided not to handle it, 12035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we must send an error reply, or else the renderer will be stuck 12045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and won't respond to future requests. 12055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (msg.is_sync()) { 12065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply = IPC::SyncMessage::GenerateReply(&msg); 12075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reply->set_reply_error(); 12085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(reply); 12095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't continue looking for someone to handle it. 12115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_->OnMessageReceived(this, msg)) 12165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 12175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool handled = true; 12195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool msg_is_ok = true; 12205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP_EX(RenderViewHostImpl, msg, msg_is_ok) 12212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ShowView, OnShowView) 12222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ShowWidget, OnShowWidget) 12235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ShowFullscreenWidget, 12242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnShowFullscreenWidget) 12252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunModal, OnRunModal) 12262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RenderViewReady, OnRenderViewReady) 12277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch IPC_MESSAGE_HANDLER(ViewHostMsg_RenderProcessGone, OnRenderProcessGone) 12285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad, 12292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidRedirectProvisionalLoad) 12305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidFailProvisionalLoadWithError, 12312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidFailProvisionalLoadWithError) 12322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER_GENERIC(ViewHostMsg_FrameNavigate, OnNavigate(msg)) 12332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateState, OnUpdateState) 12342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTitle, OnUpdateTitle) 12352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateEncoding, OnUpdateEncoding) 12362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateTargetURL, OnUpdateTargetURL) 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateInspectorSetting, 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnUpdateInspectorSetting) 12392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_Close, OnClose) 12402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RequestMove, OnRequestMove) 12412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartLoading, OnDidStartLoading) 12422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidStopLoading, OnDidStopLoading) 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeLoadProgress, 12442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidChangeLoadProgress) 12452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidDisownOpener, OnDidDisownOpener) 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentAvailableInMainFrame, 12472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDocumentAvailableInMainFrame) 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DocumentOnLoadCompletedInMainFrame, 12492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDocumentOnLoadCompletedInMainFrame) 12502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ContextMenu, OnContextMenu) 12512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ToggleFullscreen, OnToggleFullscreen) 12522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_OpenURL, OnOpenURL) 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidContentsPreferredSizeChange, 12542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidContentsPreferredSizeChange) 12552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollOffset, 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidChangeScrollOffset) 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollbarsForMainFrame, 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidChangeScrollbarsForMainFrame) 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollOffsetPinningForMainFrame, 12602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidChangeScrollOffsetPinningForMainFrame) 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeNumWheelEvents, 12622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnDidChangeNumWheelEvents) 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RouteCloseEvent, 12642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnRouteCloseEvent) 12652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RouteMessageEvent, OnRouteMessageEvent) 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage, 12672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnRunJavaScriptMessage) 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, 12692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnRunBeforeUnloadConfirm) 12702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnStartDragging) 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DragHostMsg_TargetDrop_ACK, OnTargetDropACK) 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) 12745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged) 12755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) 12762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnShouldCloseACK) 12772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) 12787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_SwapOut_ACK, OnSwapOutACK) 12792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnSelectionChanged) 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionBoundsChanged, 12812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnSelectionBoundsChanged) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL) 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission, 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnRequestDesktopNotificationPermission) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnShowDesktopNotification) 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel, 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnCancelDesktopNotification) 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_ANDROID) 12912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_ShowPopup, OnShowPopup) 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_RunFileChooser, OnRunFileChooser) 1294868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DidAccessInitialDocument, 1295868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) OnDidAccessInitialDocument) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_DomOperationResponse, 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDomOperationResponse) 129858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) IPC_MESSAGE_HANDLER(AccessibilityHostMsg_Events, OnAccessibilityEvents) 1299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeTouched, OnFocusedNodeTouched) 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the super handle all other messages. 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED( 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handled = RenderWidgetHostImpl::OnMessageReceived(msg)) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP_EX() 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!msg_is_ok) { 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The message had a handler, but its de-serialization failed. 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the renderer. 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecordAction(UserMetricsAction("BadMessageTerminate_RVH")); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->ReceivedBadMessage(); 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return handled; 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)void RenderViewHostImpl::Init() { 1316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) RenderWidgetHostImpl::Init(); 1317424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) main_render_frame_host()->Init(); 1318424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 1319424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::Shutdown() { 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we are being run modally (see RunModal), then we need to cleanup. 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (run_modal_reply_msg_) { 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(run_modal_reply_msg_); 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_reply_msg_ = NULL; 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* opener = 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_); 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opener) { 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener->StartHangMonitorTimeout(TimeDelta::FromMilliseconds( 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hung_renderer_delay_ms_)); 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Balance out the decrement when we got created. 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener->increment_in_flight_event_count(); 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_opener_id_ = MSG_ROUTING_NONE; 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::Shutdown(); 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::IsRenderView() const { 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::CreateNewWindow( 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int route_id, 1345868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int main_frame_route_id, 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_CreateWindow_Params& params, 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SessionStorageNamespace* session_storage_namespace) { 13482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ViewHostMsg_CreateWindow_Params validated_params(params); 13492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 13502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 13512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilterURL(policy, GetProcess(), false, &validated_params.target_url); 13522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilterURL(policy, GetProcess(), false, &validated_params.opener_url); 13532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FilterURL(policy, GetProcess(), true, 13542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &validated_params.opener_security_origin); 13552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1356a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate_->CreateNewWindow( 1357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetProcess()->GetID(), route_id, main_frame_route_id, validated_params, 1358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) session_storage_namespace); 13595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::CreateNewWidget(int route_id, 1362f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebPopupType popup_type) { 1363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate_->CreateNewWidget(GetProcess()->GetID(), route_id, popup_type); 13645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::CreateNewFullscreenWidget(int route_id) { 1367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) delegate_->CreateNewFullscreenWidget(GetProcess()->GetID(), route_id); 13685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnShowView(int route_id, 13712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WindowOpenDisposition disposition, 13722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& initial_pos, 13732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool user_gesture) { 13745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_swapped_out_) { 13755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowCreatedWindow( 13765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) route_id, disposition, initial_pos, user_gesture); 13775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Move_ACK(route_id)); 13795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnShowWidget(int route_id, 13822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& initial_pos) { 13835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_swapped_out_) 13845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowCreatedWidget(route_id, initial_pos); 13855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Move_ACK(route_id)); 13865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnShowFullscreenWidget(int route_id) { 13895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_swapped_out_) 13905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowCreatedFullscreenWidget(route_id); 13915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Move_ACK(route_id)); 13925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRunModal(int opener_id, IPC::Message* reply_msg) { 13955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!run_modal_reply_msg_); 13965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_reply_msg_ = reply_msg; 13975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_modal_opener_id_ = opener_id; 13985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RecordAction(UserMetricsAction("ShowModalDialog")); 14005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl* opener = 14025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostImpl::FromID(GetProcess()->GetID(), run_modal_opener_id_); 14035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (opener) { 14045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener->StopHangMonitorTimeout(); 14055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ack for the mouse down won't come until the dialog closes, so fake it 14065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // so that we don't get a timeout. 14075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) opener->decrement_in_flight_event_count(); 14085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(darin): Bug 1107929: Need to inform our delegate to show this view in 14115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // an app-modal fashion. 14125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRenderViewReady() { 14155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_termination_status_ = base::TERMINATION_STATUS_STILL_RUNNING; 14165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SendScreenRects(); 14175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WasResized(); 14185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RenderViewReady(this); 14195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid RenderViewHostImpl::OnRenderProcessGone(int status, int exit_code) { 14225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Keep the termination status so we can get at it later when we 14235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // need to know why it died. 14245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) render_view_termination_status_ = 14255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<base::TerminationStatus>(status); 14265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Reset frame tree state. 1428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // TODO(creis): Once subframes can be in different processes, we'll need to 1429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // clear just the FrameTreeNodes affected by the crash (and their subtrees). 1430b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) main_frame_id_ = -1; 1431f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) delegate_->GetFrameTree()->SwapMainFrame(main_render_frame_host_.get()); 14325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Our base class RenderWidgetHost needs to reset some stuff. 14345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RendererExited(render_view_termination_status_, exit_code); 14355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delegate_->RenderViewTerminated(this, 1437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static_cast<base::TerminationStatus>(status), 1438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) exit_code); 14395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidStartProvisionalLoadForFrame( 14425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 14435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 parent_frame_id, 14445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 14455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 1446a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) NOTREACHED(); 14475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidRedirectProvisionalLoad( 14505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id, 14515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_url, 14525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& target_url) { 14535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidRedirectProvisionalLoad( 14542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, page_id, source_url, target_url); 14555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidFailProvisionalLoadWithError( 14585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewHostMsg_DidFailProvisionalLoadWithError_Params& params) { 14595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidFailProvisionalLoadWithError(this, params); 14605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 14615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called when the renderer navigates. For every frame loaded, we'll get this 14635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notification containing parameters identifying the navigation. 14645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 14655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subframes are identified by the page transition type. For subframes loaded 14665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// as part of a wider page load, the page_id will be the same as for the top 14675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// level frame. If the user explicitly requests a subframe navigation, we will 14685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// get a new page_id because we need to create a new navigation entry for that 14695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// action. 14702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnNavigate(const IPC::Message& msg) { 14715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read the parameters out of the IPC message directly to avoid making another 14725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // copy when we filter the URLs. 14735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PickleIterator iter(msg); 14745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ViewHostMsg_FrameNavigate_Params validated_params; 14755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!IPC::ParamTraits<ViewHostMsg_FrameNavigate_Params>:: 14765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Read(&msg, &iter, &validated_params)) 14775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're waiting for a cross-site beforeunload ack from this renderer and 14805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we receive a Navigate message from the main frame, then the renderer was 14815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigating already and sent it before hearing the ViewMsg_Stop message. 14825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We do not want to cancel the pending navigation in this case, since the 14835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // old page will soon be stopped. Instead, treat this as a beforeunload ack 14845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to allow the pending navigation to continue. 14855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_waiting_for_beforeunload_ack_ && 14865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_ && 14875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PageTransitionIsMainFrame(validated_params.transition)) { 14882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OnShouldCloseACK(true, send_should_close_start_time_, 14895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks::Now()); 14905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 14915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 14925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we're waiting for an unload ack from this renderer and we receive a 14945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate message, then the renderer was navigating before it received the 14955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // unload request. It will either respond to the unload request soon or our 14965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // timer will expire. Either way, we should ignore this message, because we 14975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have already committed to closing this renderer. 14985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (is_waiting_for_unload_ack_) 14995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1501b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Cache the main frame id, so we can use it for creating the frame tree 1502b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // root node when needed. 1503b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (PageTransitionIsMainFrame(validated_params.transition)) { 1504b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (main_frame_id_ == -1) { 1505b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) main_frame_id_ = validated_params.frame_id; 1506b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } else { 1507b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // TODO(nasko): We plan to remove the usage of frame_id in navigation 1508b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // and move to routing ids. This is in place to ensure that a 1509b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // renderer is not misbehaving and sending us incorrect data. 1510b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DCHECK_EQ(main_frame_id_, validated_params.frame_id); 1511b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 1512b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 15135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* process = GetProcess(); 15142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1515a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Attempts to commit certain off-limits URL should be caught more strictly 1516a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // than our FilterURL checks below. If a renderer violates this policy, it 1517a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // should be killed. 1518a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (!CanCommitURL(validated_params.url)) { 1519a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) VLOG(1) << "Blocked URL " << validated_params.url.spec(); 152090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) validated_params.url = GURL(kAboutBlankURL); 1521a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) RecordAction(UserMetricsAction("CanCommitURL_BlockedAndKilled")); 1522a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Kills the process. 1523a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) process->ReceivedBadMessage(); 15242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 15252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1526868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Now that something has committed, we don't need to track whether the 1527868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // initial page has been accessed. 1528868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) has_accessed_initial_document_ = false; 1529868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 15305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 15315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 15325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Without this check, an evil renderer can trick the browser into creating 15335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a navigation entry for a banned URL. If the user clicks the back button 15345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // followed by the forward button (or clicks reload, or round-trips through 15355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // session restore, etc), we'll think that the browser commanded the 15365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer to load the URL and grant the renderer the privileges to request 15375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the URL. To prevent this attack, we block the renderer from inserting 15385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // banned URLs into the navigation controller in the first place. 15395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, false, &validated_params.url); 15405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &validated_params.referrer.url); 15415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<GURL>::iterator it(validated_params.redirects.begin()); 15425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != validated_params.redirects.end(); ++it) { 15435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, false, &(*it)); 15445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &validated_params.searchable_form_url); 15465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1547b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Without this check, the renderer can trick the browser into using 1548b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // filenames it can't access in a future session restore. 154990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!CanAccessFilesOfPageState(validated_params.page_state)) { 1550b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GetProcess()->ReceivedBadMessage(); 1551b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return; 1552b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 1553b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 15545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidNavigate(this, validated_params); 15555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void RenderViewHostImpl::OnUpdateState(int32 page_id, const PageState& state) { 1558b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // Without this check, the renderer can trick the browser into using 1559b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // filenames it can't access in a future session restore. 156090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) if (!CanAccessFilesOfPageState(state)) { 1561b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) GetProcess()->ReceivedBadMessage(); 1562b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return; 1563b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 1564b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 15655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->UpdateState(this, page_id, state); 15665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnUpdateTitle( 15695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id, 1570a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& title, 1571f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebTextDirection title_direction) { 15725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title.length() > kMaxTitleChars) { 15735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Renderer sent too many characters in title."; 15745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 15755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 15765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->UpdateTitle(this, page_id, title, 15785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebTextDirectionToChromeTextDirection( 15795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_direction)); 15805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnUpdateEncoding(const std::string& encoding_name) { 15835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->UpdateEncoding(this, encoding_name); 15845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnUpdateTargetURL(int32 page_id, const GURL& url) { 15875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_swapped_out_) 15885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->UpdateTargetURL(page_id, url); 15895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Send a notification back to the renderer that we are ready to 15915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // receive more target urls. 15925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_UpdateTargetURL_ACK(GetRoutingID())); 15935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 15945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnUpdateInspectorSetting( 15965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& key, const std::string& value) { 15975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->UpdateInspectorSetting( 15985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this, key, value); 15995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnClose() { 16025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the renderer is telling us to close, it has already run the unload 16035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // events, and we can take the fast path. 16045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClosePageIgnoringUnloadEvents(); 16055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRequestMove(const gfx::Rect& pos) { 16085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_swapped_out_) 16095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RequestMove(pos); 16105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Move_ACK(GetRoutingID())); 16115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidStartLoading() { 16145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidStartLoading(this); 16155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidStopLoading() { 16185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidStopLoading(this); 16195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidChangeLoadProgress(double load_progress) { 16225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidChangeLoadProgress(load_progress); 16235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidDisownOpener() { 16262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate_->DidDisownOpener(this); 16272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDocumentAvailableInMainFrame() { 16305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DocumentAvailableInMainFrame(this); 16315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDocumentOnLoadCompletedInMainFrame( 16345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 page_id) { 16355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DocumentOnLoadCompletedInMainFrame(this, page_id); 16365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnContextMenu(const ContextMenuParams& params) { 16395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Validate the URLs in |params|. If the renderer can't request the URLs 16405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // directly, don't show them in the context menu. 16415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuParams validated_params(params); 16425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* process = GetProcess(); 16435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 16445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 16455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We don't validate |unfiltered_link_url| so that this field can be used 16475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when users want to copy the original link URL. 16485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &validated_params.link_url); 16495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &validated_params.src_url); 16505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, false, &validated_params.page_url); 16515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &validated_params.frame_url); 16525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) delegate_->ShowContextMenu(validated_params); 16545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnToggleFullscreen(bool enter_fullscreen) { 16575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 16585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ToggleFullscreenMode(enter_fullscreen); 1659d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // We need to notify the contents that its fullscreen state has changed. This 1660d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // is done as part of the resize message. 16615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WasResized(); 16625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnOpenURL( 16652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_OpenURL_Params& params) { 16662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL validated_url(params.url); 16675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(ChildProcessSecurityPolicyImpl::GetInstance(), 16685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess(), false, &validated_url); 16695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RequestOpenURL( 16712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this, validated_url, params.referrer, params.disposition, params.frame_id, 1672ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch params.should_replace_current_entry, params.user_gesture); 16735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidContentsPreferredSizeChange( 16765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& new_size) { 16775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->UpdatePreferredSize(new_size); 16785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnRenderAutoResized(const gfx::Size& new_size) { 16815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ResizeDueToAutoResize(new_size); 16825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidChangeScrollOffset() { 16852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (view_) 16862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->ScrollOffsetChanged(); 16872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 16882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidChangeScrollbarsForMainFrame( 16905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_horizontal_scrollbar, bool has_vertical_scrollbar) { 16915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_) 16925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->SetHasHorizontalScrollbar(has_horizontal_scrollbar); 16935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 16945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 16952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidChangeScrollOffsetPinningForMainFrame( 16965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_pinned_to_left, bool is_pinned_to_right) { 16975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_) 16985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->SetScrollOffsetPinning(is_pinned_to_left, is_pinned_to_right); 16995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnDidChangeNumWheelEvents(int count) { 17025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1704a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewHostImpl::OnSelectionChanged(const base::string16& text, 17052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t offset, 170658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& range) { 17075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_) 17085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_->SelectionChanged(text, offset, range); 17095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnSelectionBoundsChanged( 17122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_SelectionBounds_Params& params) { 17135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_) { 17142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) view_->SelectionBoundsChanged(params); 17155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 17165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRouteCloseEvent() { 17195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have the delegate route this to the active RenderViewHost. 17205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RouteCloseEvent(this); 17215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRouteMessageEvent( 17245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ViewMsg_PostMessage_Params& params) { 17255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Give to the delegate to route to the active RenderViewHost. 17265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RouteMessageEvent(this, params); 17275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRunJavaScriptMessage( 1730a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 1731a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& default_prompt, 17325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& frame_url, 17335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JavaScriptMessageType type, 17345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_msg) { 17355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // While a JS message dialog is showing, tabs in the same process shouldn't 17365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process input events. 17375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->SetIgnoreInputEvents(true); 17385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 17395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url, 1740d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) type, reply_msg, 17415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &are_javascript_messages_suppressed_); 17425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnRunBeforeUnloadConfirm(const GURL& frame_url, 1745a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 17462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_reload, 17472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::Message* reply_msg) { 17485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // While a JS before unload dialog is showing, tabs in the same process 17495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // shouldn't process input events. 17505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->SetIgnoreInputEvents(true); 17515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 17525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RunBeforeUnloadConfirm(this, message, is_reload, reply_msg); 17535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnStartDragging( 1756eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const DropData& drop_data, 17575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebDragOperationsMask drag_operations_mask, 17585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& bitmap, 17595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Vector2d& bitmap_offset_in_dip, 17605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DragEventSourceInfo& event_info) { 17615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 17625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!view) 17635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 17645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DropData filtered_data(drop_data); 17665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderProcessHost* process = GetProcess(); 17675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 17685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 17695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Allow drag of Javascript URLs to enable bookmarklet drag to bookmark bar. 17713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (!filtered_data.url.SchemeIs(kJavaScriptScheme)) 17725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, true, &filtered_data.url); 17735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FilterURL(policy, process, false, &filtered_data.html_base_url); 17745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Filter out any paths that the renderer didn't have access to. This prevents 17755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the following attack on a malicious renderer: 17765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. StartDragging IPC sent with renderer-specified filesystem paths that it 17775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // doesn't have read permissions for. 17785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. We initiate a native DnD operation. 17795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. DnD operation immediately ends since mouse is not held down. DnD events 17805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // still fire though, which causes read permissions to be granted to the 17815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer for any file paths in the drop. 17825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filtered_data.filenames.clear(); 1783eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch for (std::vector<DropData::FileInfo>::const_iterator it = 17845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) drop_data.filenames.begin(); 17855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != drop_data.filenames.end(); ++it) { 17862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path(base::FilePath::FromUTF8Unsafe(UTF16ToUTF8(it->path))); 17875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (policy->CanReadFile(GetProcess()->GetID(), path)) 17885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) filtered_data.filenames.push_back(*it); 17895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 179068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) float scale = ui::GetImageScale(GetScaleFactorForView(GetView())); 179168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) gfx::ImageSkia image(gfx::ImageSkiaRep(bitmap, scale)); 17925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->StartDragging(filtered_data, drag_operations_mask, image, 17935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bitmap_offset_in_dip, event_info); 17945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 17955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 17965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnUpdateDragCursor(WebDragOperation current_op) { 17975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 17985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view) 17995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->UpdateDragCursor(current_op); 18005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnTargetDropACK() { 18035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::current()->Notify( 18045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIFICATION_RENDER_VIEW_HOST_DID_RECEIVE_DRAG_TARGET_DROP_ACK, 18055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source<RenderViewHost>(this), 18065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::NoDetails()); 18075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnTakeFocus(bool reverse) { 18105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 18115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view) 18125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view->TakeFocus(reverse); 18135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnFocusedNodeChanged(bool is_editable_node) { 1816f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)#if defined(OS_WIN) && defined(USE_AURA) 1817f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) if (!is_editable_node && virtual_keyboard_requested_) { 1818f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) virtual_keyboard_requested_ = false; 1819f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) BrowserThread::PostDelayedTask( 1820f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 1821f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) base::Bind(base::IgnoreResult(&DismissVirtualKeyboardTask)), 1822f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) TimeDelta::FromMilliseconds(kVirtualKeyboardDisplayWaitTimeoutMs)); 1823f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) } 1824f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles)#endif 18255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::current()->Notify( 18265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIFICATION_FOCUS_CHANGED_IN_PAGE, 18275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source<RenderViewHost>(this), 18285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Details<const bool>(&is_editable_node)); 18295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnAddMessageToConsole( 18325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 level, 1833a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message, 18345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 line_no, 1835a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& source_id) { 183658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (delegate_->AddMessageToConsole(level, message, line_no, source_id)) 1837bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch return; 183858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1839bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch // Pass through log level only on WebUI pages to limit console spew. 1840bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch int32 resolved_level = HasWebUIScheme(delegate_->GetURL()) ? level : 0; 1841bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch 1842bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch if (resolved_level >= ::logging::GetMinLogLevel()) { 1843bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch logging::LogMessage("CONSOLE", line_no, resolved_level).stream() << "\"" << 1844bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch message << "\", source: " << source_id << " (" << line_no << ")"; 18452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 18465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnUserGesture() { 18495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnUserGesture(); 18505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnShouldCloseACK( 18535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool proceed, 18545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& renderer_before_unload_start_time, 18555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::TimeTicks& renderer_before_unload_end_time) { 18565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decrement_in_flight_event_count(); 18575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StopHangMonitorTimeout(); 18585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this renderer navigated while the beforeunload request was in flight, we 18592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // may have cleared this state in OnNavigate, in which case we can ignore 18605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // this message. 18615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_waiting_for_beforeunload_ack_ || is_swapped_out_) 18625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 18635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_waiting_for_beforeunload_ack_ = false; 18655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHostDelegate::RendererManagement* management_delegate = 18675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->GetRendererManagementDelegate(); 18685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (management_delegate) { 18695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeTicks before_unload_end_time; 18705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!send_should_close_start_time_.is_null() && 18715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !renderer_before_unload_start_time.is_null() && 18725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !renderer_before_unload_end_time.is_null()) { 18735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When passing TimeTicks across process boundaries, we need to compensate 18745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for any skew between the processes. Here we are converting the 18755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // renderer's notion of before_unload_end_time to TimeTicks in the browser 18765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process. See comments in inter_process_time_ticks_converter.h for more. 18775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterProcessTimeTicksConverter converter( 18785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalTimeTicks::FromTimeTicks(send_should_close_start_time_), 18795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalTimeTicks::FromTimeTicks(base::TimeTicks::Now()), 18805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoteTimeTicks::FromTimeTicks(renderer_before_unload_start_time), 18815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time)); 18825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LocalTimeTicks browser_before_unload_end_time = 18835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) converter.ToLocalTimeTicks( 18845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoteTimeTicks::FromTimeTicks(renderer_before_unload_end_time)); 18855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) before_unload_end_time = browser_before_unload_end_time.ToTimeTicks(); 18865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) management_delegate->ShouldClosePage( 18885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unload_ack_is_for_cross_site_transition_, proceed, 18895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) before_unload_end_time); 18905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 18915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If canceled, notify the delegate to cancel its pending navigation entry. 18935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!proceed) 18945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->DidCancelLoading(); 18955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 18965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 18972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnClosePageACK() { 18985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) decrement_in_flight_event_count(); 18995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClosePageIgnoringUnloadEvents(); 19005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NotifyRendererUnresponsive() { 19035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RendererUnresponsive( 19043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) this, is_waiting_for_beforeunload_ack_, is_waiting_for_unload_ack_); 19055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NotifyRendererResponsive() { 19085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RendererResponsive(this); 19095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::RequestToLockMouse(bool user_gesture, 19125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool last_unlocked_by_target) { 19135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RequestToLockMouse(user_gesture, last_unlocked_by_target); 19145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RenderViewHostImpl::IsFullscreen() const { 19175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return delegate_->IsFullscreenForCurrentTab(); 19185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnFocus() { 19215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: We allow focus and blur from swapped out RenderViewHosts, even when 19225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the active RenderViewHost is in a different BrowsingInstance (e.g., WebUI). 19235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->Activate(); 19245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnBlur() { 19275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->Deactivate(); 19285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Rect RenderViewHostImpl::GetRootWindowResizerRect() const { 19315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return delegate_->GetRootWindowResizerRect(); 19325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ForwardMouseEvent( 1935f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseEvent& mouse_event) { 19365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We make a copy of the mouse event because 19385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHost::ForwardMouseEvent will delete |mouse_event|. 1939f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebMouseEvent event_copy(mouse_event); 19405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::ForwardMouseEvent(event_copy); 19415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (event_copy.type) { 19435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebInputEvent::MouseMove: 19445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->HandleMouseMove(); 19455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebInputEvent::MouseLeave: 19475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->HandleMouseLeave(); 19485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebInputEvent::MouseDown: 19505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->HandleMouseDown(); 19515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebInputEvent::MouseWheel: 19535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ignore_input_events()) 19545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnIgnoredUIEvent(); 19555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebInputEvent::MouseUp: 19575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->HandleMouseUp(); 19585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 19595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For now, we don't care about the rest. 19605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 19615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnPointerEventActivate() { 19655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->HandlePointerActivate(); 19665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ForwardKeyboardEvent( 19695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const NativeWebKeyboardEvent& key_event) { 19705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (ignore_input_events()) { 19715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (key_event.type == WebInputEvent::RawKeyDown) 19725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->OnIgnoredUIEvent(); 19735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 19745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 19755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl::ForwardKeyboardEvent(key_event); 19765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_ANDROID) 19795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DidSelectPopupMenuItems( 19805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<int>& selected_indices) { 19815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SelectPopupMenuItems(GetRoutingID(), false, 19825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_indices)); 19835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DidCancelPopupMenu() { 19865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SelectPopupMenuItems(GetRoutingID(), true, 19875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int>())); 19885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 19905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX) 19925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DidSelectPopupMenuItem(int selected_index) { 19935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), selected_index)); 19945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DidCancelPopupMenu() { 19975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SelectPopupMenuItem(GetRoutingID(), -1)); 19985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 19995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 20005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::SendOrientationChangeEvent(int orientation) { 20025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_OrientationChangeEvent(GetRoutingID(), orientation)); 20035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ToggleSpeechInput() { 20065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new InputTagSpeechMsg_ToggleSpeechInput(GetRoutingID())); 20075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2009a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)bool RenderViewHostImpl::CanCommitURL(const GURL& url) { 2010a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // TODO(creis): We should also check for WebUI pages here. Also, when the 2011a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // out-of-process iframes implementation is ready, we should check for 2012a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // cross-site URLs that are not allowed to commit in this process. 2013a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 2014a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Give the client a chance to disallow URLs from committing. 2015a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) return GetContentClient()->browser()->CanCommitURL(GetProcess(), url); 2016a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)} 2017a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 20185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::FilterURL(ChildProcessSecurityPolicyImpl* policy, 20195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const RenderProcessHost* process, 20205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool empty_allowed, 20215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL* url) { 20225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (empty_allowed && url->is_empty()) 20235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The browser process should never hear the swappedout:// URL from any 20262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // of the renderer's messages. Check for this in debug builds, but don't 20272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // let it crash a release browser. 20282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(GURL(kSwappedOutURL) != *url); 20292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!url->is_valid()) { 20315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Have to use about:blank for the denied case, instead of an empty GURL. 20325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is because the browser treats navigation to an empty GURL as a 20335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigation to the home page. This is often a privileged page 20345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (chrome://newtab/) which is exactly what we don't want. 203590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *url = GURL(kAboutBlankURL); 20362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordAction(UserMetricsAction("FilterURLTermiate_Invalid")); 20375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 20385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (url->SchemeIs(chrome::kAboutScheme)) { 20415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The renderer treats all URLs in the about: scheme as being about:blank. 20425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Canonicalize about: URLs to about:blank. 204390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *url = GURL(kAboutBlankURL); 20442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordAction(UserMetricsAction("FilterURLTermiate_About")); 20455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not allow browser plugin guests to navigate to non-web URLs, since they 20485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cannot swap processes or grant bindings. 20495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool non_web_url_in_guest = process->IsGuest() && 20505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !(url->is_valid() && policy->IsWebSafeScheme(url->scheme())); 20515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (non_web_url_in_guest || !policy->CanRequestURL(process->GetID(), *url)) { 20535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If this renderer is not permitted to request this URL, we invalidate the 20545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL. This prevents us from storing the blocked URL and becoming confused 20555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // later. 20565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VLOG(1) << "Blocked URL " << url->spec(); 205790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) *url = GURL(kAboutBlankURL); 20582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RecordAction(UserMetricsAction("FilterURLTermiate_Blocked")); 20595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 20605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::SetAltErrorPageURL(const GURL& url) { 20635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_SetAltErrorPageURL(GetRoutingID(), url)); 20645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ExitFullscreen() { 20675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RejectMouseLockOrUnlockIfNecessary(); 2068d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Notify delegate_ and renderer of fullscreen state change. 2069d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) OnToggleFullscreen(false); 20705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2072c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WebPreferences RenderViewHostImpl::GetWebkitPreferences() { 20735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return delegate_->GetWebkitPrefs(); 20745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::DisownOpener() { 20772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should only be called when swapped out. 20782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(is_swapped_out_); 20792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Send(new ViewMsg_DisownOpener(GetRoutingID())); 20812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 20837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void RenderViewHostImpl::SetAccessibilityCallbackForTesting( 2084f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::Callback<void(blink::WebAXEvent)>& callback) { 20857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) accessibility_testing_callback_ = callback; 20862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 20872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2088c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewHostImpl::UpdateWebkitPreferences(const WebPreferences& prefs) { 20895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_UpdateWebPreferences(GetRoutingID(), prefs)); 20905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NotifyTimezoneChange() { 20935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_TimezoneChange(GetRoutingID())); 20945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 20955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 20961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void RenderViewHostImpl::GetAudioOutputControllers( 20971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GetAudioOutputControllersCallback& callback) const { 20981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AudioRendererHost* audio_host = 20991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static_cast<RenderProcessHostImpl*>(GetProcess())->audio_renderer_host(); 21001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) audio_host->GetOutputControllers(GetRoutingID(), callback); 21011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 21021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 21035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ClearFocusedNode() { 21045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ClearFocusedNode(GetRoutingID())); 21055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::Zoom(PageZoom zoom) { 21085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Zoom(GetRoutingID(), zoom)); 21095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ReloadFrame() { 21125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ReloadFrame(GetRoutingID())); 21135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::Find(int request_id, 2116a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& search_text, 2117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebFindOptions& options) { 21185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_Find(GetRoutingID(), request_id, search_text, options)); 21195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2121a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void RenderViewHostImpl::InsertCSS(const base::string16& frame_xpath, 21225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& css) { 21235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_CSSInsertRequest(GetRoutingID(), frame_xpath, css)); 21245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DisableScrollbarsForThreshold(const gfx::Size& size) { 21275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_DisableScrollbarsForSmallWindows(GetRoutingID(), size)); 21285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::EnablePreferredSizeMode() { 21315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_EnablePreferredSizeChangedMode(GetRoutingID())); 21325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::EnableAutoResize(const gfx::Size& min_size, 21355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& max_size) { 21365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetShouldAutoResize(true); 21375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_EnableAutoResize(GetRoutingID(), min_size, max_size)); 21385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::DisableAutoResize(const gfx::Size& new_size) { 21415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetShouldAutoResize(false); 21425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_DisableAutoResize(GetRoutingID(), new_size)); 21435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ExecuteCustomContextMenuCommand( 21465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int action, const CustomContextMenuContext& context) { 21475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_CustomContextMenuAction(GetRoutingID(), context, action)); 21485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NotifyContextMenuClosed( 21515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const CustomContextMenuContext& context) { 21525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_ContextMenuClosed(GetRoutingID(), context)); 21535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::CopyImageAt(int x, int y) { 21565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_CopyImageAt(GetRoutingID(), x, y)); 21575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ExecuteMediaPlayerActionAtLocation( 2160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const gfx::Point& location, const blink::WebMediaPlayerAction& action) { 21615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_MediaPlayerActionAt(GetRoutingID(), location, action)); 21625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::ExecutePluginActionAtLocation( 2165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const gfx::Point& location, const blink::WebPluginAction& action) { 21665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_PluginActionAt(GetRoutingID(), location, action)); 21675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::NotifyMoveOrResizeStarted() { 21705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_MoveOrResizeStarted(GetRoutingID())); 21715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::StopFinding(StopFindAction action) { 21745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new ViewMsg_StopFinding(GetRoutingID(), action)); 21755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 21765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 217758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void RenderViewHostImpl::OnAccessibilityEvents( 217858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::vector<AccessibilityHostMsg_EventParams>& params) { 21795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (view_ && !is_swapped_out_) 218058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) view_->OnAccessibilityEvents(params); 21815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 21827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Always send an ACK or the renderer can be in a bad state. 218358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Send(new AccessibilityMsg_Events_ACK(GetRoutingID())); 21847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 21857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The rest of this code is just for testing; bail out if we're not 21867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // in that mode. 21877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (accessibility_testing_callback_.is_null()) 21887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 21897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 21905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (unsigned i = 0; i < params.size(); i++) { 219158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const AccessibilityHostMsg_EventParams& param = params[i]; 2192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebAXEvent src_type = param.event_type; 2193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (src_type == blink::WebAXEventLayoutComplete || 2194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) src_type == blink::WebAXEventLoadComplete) { 21952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MakeAccessibilityNodeDataTree(param.nodes, &accessibility_tree_); 21965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) accessibility_testing_callback_.Run(src_type); 21985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 21995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void RenderViewHostImpl::OnScriptEvalResponse(int id, 22022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::ListValue& result) { 22032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Value* result_value; 22045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!result.Get(0, &result_value)) { 22055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Programming error or rogue renderer. 22065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED() << "Got bad arguments for OnScriptEvalResponse"; 22075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 22085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::map<int, JavascriptResultCallback>::iterator it = 22112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) javascript_callbacks_.find(id); 22122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it != javascript_callbacks_.end()) { 22132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ExecuteJavascriptInWebFrameCallbackResult was used; do callback. 22142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it->second.Run(result_value); 22152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) javascript_callbacks_.erase(it); 22162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 22172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED() << "Received script response for unknown request"; 22182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 22195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnDidZoomURL(double zoom_level, 22225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool remember, 22235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 22245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMapImpl* host_zoom_map = static_cast<HostZoomMapImpl*>( 22255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostZoomMap::GetForBrowserContext(GetProcess()->GetBrowserContext())); 22265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (remember) { 22272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_zoom_map-> 22282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetZoomLevelForHost(net::GetHostOrSpecFromURL(url), zoom_level); 22295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 22305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_zoom_map->SetTemporaryZoomLevel( 22315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID(), zoom_level); 22325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 22335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnRequestDesktopNotificationPermission( 22365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& source_origin, int callback_context) { 22375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->RequestDesktopNotificationPermission( 22385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) source_origin, callback_context, GetProcess()->GetID(), GetRoutingID()); 22395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnShowDesktopNotification( 22425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ShowDesktopNotificationHostMsgParams& params) { 22435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->ShowDesktopNotification( 22445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) params, GetProcess()->GetID(), GetRoutingID(), false); 22455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnCancelDesktopNotification(int notification_id) { 22485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetContentClient()->browser()->CancelDesktopNotification( 22495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProcess()->GetID(), GetRoutingID(), notification_id); 22505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 22525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnRunFileChooser(const FileChooserParams& params) { 22535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->RunFileChooser(this, params); 22545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2256868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void RenderViewHostImpl::OnDidAccessInitialDocument() { 2257868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) has_accessed_initial_document_ = true; 2258868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) delegate_->DidAccessInitialDocument(); 2259868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 2260868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 22615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void RenderViewHostImpl::OnDomOperationResponse( 22625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& json_string, int automation_id) { 22635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DomOperationNotificationDetails details(json_string, automation_id); 22645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotificationService::current()->Notify( 22655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTIFICATION_DOM_OPERATION_RESPONSE, 22665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Source<RenderViewHost>(this), 22675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Details<DomOperationNotificationDetails>(&details)); 22685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 22695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void RenderViewHostImpl::OnFocusedNodeTouched(bool editable) { 2271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) && defined(USE_AURA) 2272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (editable) { 2273f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) virtual_keyboard_requested_ = base::win::DisplayVirtualKeyboard(); 2274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 2275f60fc993c7b081abf77ce2ffc7fcca1142c8cb01Torne (Richard Coles) virtual_keyboard_requested_ = false; 2276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::win::DismissVirtualKeyboard(); 2277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 2278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 2279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 2280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX) || defined(OS_ANDROID) 2282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewHostImpl::OnShowPopup( 2283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ViewHostMsg_ShowPopup_Params& params) { 2284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderViewHostDelegateView* view = delegate_->GetDelegateView(); 2285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (view) { 2286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) view->ShowPopupMenu(params.bounds, 2287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.item_height, 2288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.item_font_size, 2289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.selected_item, 2290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.popup_items, 2291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.right_aligned, 2292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) params.allow_multiple_selection); 2293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 2296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void RenderViewHostImpl::SetSwappedOut(bool is_swapped_out) { 22987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // We update the number of RenderViews in a SiteInstance when the 22997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // swapped out status of this RenderView gets flipped. 23007dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (is_swapped_out_ && !is_swapped_out) 23017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch instance_->increment_active_view_count(); 23027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch else if (!is_swapped_out_ && is_swapped_out) 23037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch instance_->decrement_active_view_count(); 23047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_swapped_out_ = is_swapped_out; 2306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whenever we change swap out state, we should not be waiting for 2308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // beforeunload or unload acks. We clear them here to be safe, since they 2309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // can cause navigations to be ignored in OnNavigate. 2310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_waiting_for_beforeunload_ack_ = false; 2311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) is_waiting_for_unload_ack_ = false; 2312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) has_timed_out_on_unload_ = false; 2313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 2314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 231590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool RenderViewHostImpl::CanAccessFilesOfPageState( 231690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const PageState& state) const { 2317b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ChildProcessSecurityPolicyImpl* policy = 2318b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) ChildProcessSecurityPolicyImpl::GetInstance(); 231990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 232090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); 2321b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); 2322b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) file != file_paths.end(); ++file) { 2323b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (!policy->CanReadFile(GetProcess()->GetID(), *file)) 2324b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return false; 2325b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) } 2326b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 2327b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} 2328b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 23294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void RenderViewHostImpl::AttachToFrameTree() { 23304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FrameTree* frame_tree = delegate_->GetFrameTree(); 23314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) frame_tree->SwapMainFrame(main_render_frame_host_.get()); 23334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (main_frame_id() != FrameTreeNode::kInvalidFrameId) { 23344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) frame_tree->OnFirstNavigationAfterSwap(main_frame_id()); 23354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 23364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 23374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 23385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 2339