OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/frame_host/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/containers/hash_tables.h" | 12 #include "base/containers/hash_tables.h" |
13 #include "base/lazy_instance.h" | 13 #include "base/lazy_instance.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "base/metrics/histogram_macros.h" | 15 #include "base/metrics/histogram_macros.h" |
16 #include "base/metrics/user_metrics.h" | 16 #include "base/metrics/user_metrics.h" |
17 #include "base/process/kill.h" | 17 #include "base/process/kill.h" |
18 #include "base/time/time.h" | 18 #include "base/time/time.h" |
19 #include "build/build_config.h" | 19 #include "build/build_config.h" |
20 #include "content/browser/accessibility/browser_accessibility_manager.h" | 20 #include "content/browser/accessibility/browser_accessibility_manager.h" |
21 #include "content/browser/accessibility/browser_accessibility_state_impl.h" | 21 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
22 #include "content/browser/bluetooth/web_bluetooth_service_impl.h" | 22 #include "content/browser/bluetooth/web_bluetooth_service_impl.h" |
23 #include "content/browser/browser_main_loop.h" | 23 #include "content/browser/browser_main_loop.h" |
24 #include "content/browser/child_process_security_policy_impl.h" | 24 #include "content/browser/child_process_security_policy_impl.h" |
25 #include "content/browser/devtools/render_frame_devtools_agent_host.h" | 25 #include "content/browser/devtools/render_frame_devtools_agent_host.h" |
26 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" | |
26 #include "content/browser/download/mhtml_generation_manager.h" | 27 #include "content/browser/download/mhtml_generation_manager.h" |
27 #include "content/browser/frame_host/cross_process_frame_connector.h" | 28 #include "content/browser/frame_host/cross_process_frame_connector.h" |
28 #include "content/browser/frame_host/debug_urls.h" | 29 #include "content/browser/frame_host/debug_urls.h" |
29 #include "content/browser/frame_host/frame_tree.h" | 30 #include "content/browser/frame_host/frame_tree.h" |
30 #include "content/browser/frame_host/frame_tree_node.h" | 31 #include "content/browser/frame_host/frame_tree_node.h" |
31 #include "content/browser/frame_host/navigation_entry_impl.h" | 32 #include "content/browser/frame_host/navigation_entry_impl.h" |
32 #include "content/browser/frame_host/navigation_handle_impl.h" | 33 #include "content/browser/frame_host/navigation_handle_impl.h" |
33 #include "content/browser/frame_host/navigation_request.h" | 34 #include "content/browser/frame_host/navigation_request.h" |
34 #include "content/browser/frame_host/navigator.h" | 35 #include "content/browser/frame_host/navigator.h" |
35 #include "content/browser/frame_host/navigator_impl.h" | 36 #include "content/browser/frame_host/navigator_impl.h" |
(...skipping 16 matching lines...) Expand all Loading... | |
52 #include "content/browser/renderer_host/render_view_host_delegate_view.h" | 53 #include "content/browser/renderer_host/render_view_host_delegate_view.h" |
53 #include "content/browser/renderer_host/render_view_host_impl.h" | 54 #include "content/browser/renderer_host/render_view_host_impl.h" |
54 #include "content/browser/renderer_host/render_widget_host_delegate.h" | 55 #include "content/browser/renderer_host/render_widget_host_delegate.h" |
55 #include "content/browser/renderer_host/render_widget_host_impl.h" | 56 #include "content/browser/renderer_host/render_widget_host_impl.h" |
56 #include "content/browser/renderer_host/render_widget_host_view_base.h" | 57 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
57 #include "content/browser/shared_worker/shared_worker_service_impl.h" | 58 #include "content/browser/shared_worker/shared_worker_service_impl.h" |
58 #include "content/browser/websockets/websocket_manager.h" | 59 #include "content/browser/websockets/websocket_manager.h" |
59 #include "content/browser/webui/web_ui_controller_factory_registry.h" | 60 #include "content/browser/webui/web_ui_controller_factory_registry.h" |
60 #include "content/common/accessibility_messages.h" | 61 #include "content/common/accessibility_messages.h" |
61 #include "content/common/associated_interface_provider_impl.h" | 62 #include "content/common/associated_interface_provider_impl.h" |
63 #include "content/common/associated_interface_registry_impl.h" | |
62 #include "content/common/associated_interfaces.mojom.h" | 64 #include "content/common/associated_interfaces.mojom.h" |
63 #include "content/common/content_security_policy/content_security_policy.h" | 65 #include "content/common/content_security_policy/content_security_policy.h" |
64 #include "content/common/frame_messages.h" | 66 #include "content/common/frame_messages.h" |
65 #include "content/common/frame_owner_properties.h" | 67 #include "content/common/frame_owner_properties.h" |
66 #include "content/common/input_messages.h" | 68 #include "content/common/input_messages.h" |
67 #include "content/common/inter_process_time_ticks_converter.h" | 69 #include "content/common/inter_process_time_ticks_converter.h" |
68 #include "content/common/navigation_params.h" | 70 #include "content/common/navigation_params.h" |
69 #include "content/common/render_message_filter.mojom.h" | 71 #include "content/common/render_message_filter.mojom.h" |
70 #include "content/common/renderer.mojom.h" | 72 #include "content/common/renderer.mojom.h" |
71 #include "content/common/site_isolation_policy.h" | 73 #include "content/common/site_isolation_policy.h" |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
387 accessibility_reset_token_(0), | 389 accessibility_reset_token_(0), |
388 accessibility_reset_count_(0), | 390 accessibility_reset_count_(0), |
389 browser_plugin_embedder_ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), | 391 browser_plugin_embedder_ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), |
390 no_create_browser_accessibility_manager_for_testing_(false), | 392 no_create_browser_accessibility_manager_for_testing_(false), |
391 web_ui_type_(WebUI::kNoWebUI), | 393 web_ui_type_(WebUI::kNoWebUI), |
392 pending_web_ui_type_(WebUI::kNoWebUI), | 394 pending_web_ui_type_(WebUI::kNoWebUI), |
393 should_reuse_web_ui_(false), | 395 should_reuse_web_ui_(false), |
394 has_selection_(false), | 396 has_selection_(false), |
395 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED), | 397 last_navigation_previews_state_(PREVIEWS_UNSPECIFIED), |
396 frame_host_binding_(this), | 398 frame_host_binding_(this), |
399 frame_host_associated_binding_(this), | |
397 waiting_for_init_(renderer_initiated_creation), | 400 waiting_for_init_(renderer_initiated_creation), |
398 has_focused_editable_element_(false), | 401 has_focused_editable_element_(false), |
399 weak_ptr_factory_(this) { | 402 weak_ptr_factory_(this) { |
400 frame_tree_->AddRenderViewHostRef(render_view_host_); | 403 frame_tree_->AddRenderViewHostRef(render_view_host_); |
401 GetProcess()->AddRoute(routing_id_, this); | 404 GetProcess()->AddRoute(routing_id_, this); |
402 g_routing_id_frame_map.Get().insert(std::make_pair( | 405 g_routing_id_frame_map.Get().insert(std::make_pair( |
403 RenderFrameHostID(GetProcess()->GetID(), routing_id_), | 406 RenderFrameHostID(GetProcess()->GetID(), routing_id_), |
404 this)); | 407 this)); |
405 site_instance_->AddObserver(this); | 408 site_instance_->AddObserver(this); |
406 GetSiteInstance()->IncrementActiveFrameCount(); | 409 GetSiteInstance()->IncrementActiveFrameCount(); |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
822 IPC_MESSAGE_HANDLER(FrameHostMsg_ShowCreatedWindow, OnShowCreatedWindow) | 825 IPC_MESSAGE_HANDLER(FrameHostMsg_ShowCreatedWindow, OnShowCreatedWindow) |
823 IPC_END_MESSAGE_MAP() | 826 IPC_END_MESSAGE_MAP() |
824 | 827 |
825 // No further actions here, since we may have been deleted. | 828 // No further actions here, since we may have been deleted. |
826 return handled; | 829 return handled; |
827 } | 830 } |
828 | 831 |
829 void RenderFrameHostImpl::OnAssociatedInterfaceRequest( | 832 void RenderFrameHostImpl::OnAssociatedInterfaceRequest( |
830 const std::string& interface_name, | 833 const std::string& interface_name, |
831 mojo::ScopedInterfaceEndpointHandle handle) { | 834 mojo::ScopedInterfaceEndpointHandle handle) { |
832 delegate_->OnAssociatedInterfaceRequest( | 835 if (associated_registry_->CanBindRequest(interface_name)) { |
833 this, interface_name, std::move(handle)); | 836 associated_registry_->BindRequest(interface_name, std::move(handle)); |
837 } else { | |
838 delegate_->OnAssociatedInterfaceRequest(this, interface_name, | |
839 std::move(handle)); | |
840 } | |
834 } | 841 } |
835 | 842 |
836 void RenderFrameHostImpl::AccessibilityPerformAction( | 843 void RenderFrameHostImpl::AccessibilityPerformAction( |
837 const ui::AXActionData& action_data) { | 844 const ui::AXActionData& action_data) { |
838 Send(new AccessibilityMsg_PerformAction(routing_id_, action_data)); | 845 Send(new AccessibilityMsg_PerformAction(routing_id_, action_data)); |
839 } | 846 } |
840 | 847 |
841 bool RenderFrameHostImpl::AccessibilityViewHasFocus() const { | 848 bool RenderFrameHostImpl::AccessibilityViewHasFocus() const { |
842 RenderWidgetHostView* view = render_view_host_->GetWidget()->GetView(); | 849 RenderWidgetHostView* view = render_view_host_->GetWidget()->GetView(); |
843 if (view) | 850 if (view) |
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1109 // shutdown). Ignore such messages. | 1116 // shutdown). Ignore such messages. |
1110 if (!is_active() || frame_tree_node_->current_frame_host() != this || | 1117 if (!is_active() || frame_tree_node_->current_frame_host() != this || |
1111 !render_frame_created_) | 1118 !render_frame_created_) |
1112 return; | 1119 return; |
1113 | 1120 |
1114 frame_tree_->AddFrame(frame_tree_node_, GetProcess()->GetID(), new_routing_id, | 1121 frame_tree_->AddFrame(frame_tree_node_, GetProcess()->GetID(), new_routing_id, |
1115 scope, frame_name, frame_unique_name, sandbox_flags, | 1122 scope, frame_name, frame_unique_name, sandbox_flags, |
1116 container_policy, frame_owner_properties); | 1123 container_policy, frame_owner_properties); |
1117 } | 1124 } |
1118 | 1125 |
1119 void RenderFrameHostImpl::OnCreateNewWindow( | |
1120 int32_t render_view_route_id, | |
1121 int32_t main_frame_route_id, | |
1122 int32_t main_frame_widget_route_id, | |
1123 const mojom::CreateNewWindowParams& params, | |
1124 SessionStorageNamespace* session_storage_namespace) { | |
1125 mojom::CreateNewWindowParamsPtr validated_params(params.Clone()); | |
1126 GetProcess()->FilterURL(false, &validated_params->target_url); | |
1127 | |
1128 // TODO(nick): http://crbug.com/674307 |opener_url|, |opener_security_origin|, | |
1129 // and |opener_top_level_frame_url| should not be parameters; we can just use | |
1130 // last_committed_url(), etc. Of these, |opener_top_level_frame_url| is | |
1131 // particularly egregious, since an oopif isn't expected to know its top URL. | |
1132 GetProcess()->FilterURL(false, &validated_params->opener_url); | |
1133 GetProcess()->FilterURL(true, &validated_params->opener_security_origin); | |
1134 | |
1135 // Ignore creation when sent from a frame that's not current. | |
1136 if (frame_tree_node_->current_frame_host() == this) { | |
1137 delegate_->CreateNewWindow(GetSiteInstance(), render_view_route_id, | |
1138 main_frame_route_id, main_frame_widget_route_id, | |
1139 *validated_params, session_storage_namespace); | |
1140 } | |
1141 | |
1142 // Our caller (RenderWidgetHelper::OnCreateNewWindowOnUI) will send | |
1143 // ViewMsg_Close if the above step did not adopt |main_frame_route_id|. | |
1144 } | |
1145 | |
1146 void RenderFrameHostImpl::SetLastCommittedOrigin(const url::Origin& origin) { | 1126 void RenderFrameHostImpl::SetLastCommittedOrigin(const url::Origin& origin) { |
1147 last_committed_origin_ = origin; | 1127 last_committed_origin_ = origin; |
1148 CSPContext::SetSelf(origin); | 1128 CSPContext::SetSelf(origin); |
1149 } | 1129 } |
1150 | 1130 |
1151 void RenderFrameHostImpl::OnDetach() { | 1131 void RenderFrameHostImpl::OnDetach() { |
1152 frame_tree_->RemoveFrame(frame_tree_node_); | 1132 frame_tree_->RemoveFrame(frame_tree_node_); |
1153 } | 1133 } |
1154 | 1134 |
1155 void RenderFrameHostImpl::OnFrameFocused() { | 1135 void RenderFrameHostImpl::OnFrameFocused() { |
(...skipping 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2440 #endif | 2420 #endif |
2441 | 2421 |
2442 void RenderFrameHostImpl::OnShowCreatedWindow(int pending_widget_routing_id, | 2422 void RenderFrameHostImpl::OnShowCreatedWindow(int pending_widget_routing_id, |
2443 WindowOpenDisposition disposition, | 2423 WindowOpenDisposition disposition, |
2444 const gfx::Rect& initial_rect, | 2424 const gfx::Rect& initial_rect, |
2445 bool user_gesture) { | 2425 bool user_gesture) { |
2446 delegate_->ShowCreatedWindow(GetProcess()->GetID(), pending_widget_routing_id, | 2426 delegate_->ShowCreatedWindow(GetProcess()->GetID(), pending_widget_routing_id, |
2447 disposition, initial_rect, user_gesture); | 2427 disposition, initial_rect, user_gesture); |
2448 } | 2428 } |
2449 | 2429 |
2430 void RenderFrameHostImpl::CreateNewWindow( | |
2431 mojom::CreateNewWindowParamsPtr params, | |
2432 const CreateNewWindowCallback& callback) { | |
ncarter (slow)
2017/04/20 21:30:36
We should have an early-return path up top here fo
Charlie Harrison
2017/04/21 15:30:07
Done.
| |
2433 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
2434 bool no_javascript_access = false; | |
2435 | |
2436 bool can_create_window = GetContentClient()->browser()->CanCreateWindow( | |
2437 this, params->opener_url, params->opener_top_level_frame_url, | |
2438 params->opener_security_origin, params->window_container_type, | |
2439 params->target_url, params->referrer, params->frame_name, | |
2440 params->disposition, *params->features, params->user_gesture, | |
2441 params->opener_suppressed, &no_javascript_access); | |
2442 | |
2443 mojom::CreateNewWindowReplyPtr reply = mojom::CreateNewWindowReply::New(); | |
2444 if (!can_create_window) { | |
2445 RunCreateWindowCompleteCallback(callback, std::move(reply), | |
2446 MSG_ROUTING_NONE, MSG_ROUTING_NONE, | |
2447 MSG_ROUTING_NONE, 0); | |
2448 return; | |
2449 } | |
2450 | |
2451 // This will clone the sessionStorage for namespace_id_to_clone. | |
2452 | |
2453 StoragePartition* storage_partition = BrowserContext::GetStoragePartition( | |
2454 GetSiteInstance()->GetBrowserContext(), GetSiteInstance()); | |
2455 DOMStorageContextWrapper* dom_storage_context = | |
2456 static_cast<DOMStorageContextWrapper*>( | |
2457 storage_partition->GetDOMStorageContext()); | |
2458 scoped_refptr<SessionStorageNamespaceImpl> cloned_namespace = | |
2459 new SessionStorageNamespaceImpl(dom_storage_context, | |
2460 params->session_storage_namespace_id); | |
2461 reply->cloned_session_storage_namespace_id = cloned_namespace->id(); | |
2462 | |
2463 // If the opener is suppressed or script access is disallowed, we should | |
2464 // open the window in a new BrowsingInstance, and thus a new process. That | |
2465 // means the current renderer process will not be able to route messages to | |
2466 // it. Because of this, we will immediately show and navigate the window | |
2467 // in OnCreateNewWindowOnUI, using the params provided here. | |
2468 int render_view_route_id = MSG_ROUTING_NONE; | |
2469 int main_frame_route_id = MSG_ROUTING_NONE; | |
2470 int main_frame_widget_route_id = MSG_ROUTING_NONE; | |
2471 int render_process_id = GetProcess()->GetID(); | |
2472 if (!params->opener_suppressed && !no_javascript_access) { | |
2473 render_view_route_id = GetProcess()->GetNextRoutingID(); | |
2474 main_frame_route_id = GetProcess()->GetNextRoutingID(); | |
2475 // TODO(avi): When RenderViewHostImpl has-a RenderWidgetHostImpl, this | |
2476 // should be updated to give the widget a distinct routing ID. | |
2477 // https://crbug.com/545684 | |
2478 main_frame_widget_route_id = render_view_route_id; | |
2479 // Block resource requests until the frame is created, since the HWND might | |
2480 // be needed if a response ends up creating a plugin. We'll only have a | |
2481 // single frame at this point. These requests will be resumed either in | |
2482 // WebContentsImpl::CreateNewWindow or RenderFrameHost::Init. | |
2483 // TODO(crbug.com/581037): Now that NPAPI is deprecated we should be able to | |
2484 // remove this, but more investigation is needed. | |
2485 auto block_requests_for_route = base::Bind( | |
2486 [](const GlobalFrameRoutingId& id) { | |
2487 auto* rdh = ResourceDispatcherHostImpl::Get(); | |
2488 if (rdh) | |
2489 rdh->BlockRequestsForRoute(id); | |
2490 }, | |
2491 GlobalFrameRoutingId(render_process_id, main_frame_route_id)); | |
2492 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | |
2493 block_requests_for_route); | |
2494 } | |
2495 | |
2496 DCHECK(IsRenderFrameLive()); | |
2497 | |
2498 // Actually validate the params and create the window. | |
2499 mojom::CreateNewWindowParamsPtr validated_params(params.Clone()); | |
2500 GetProcess()->FilterURL(false, &validated_params->target_url); | |
2501 | |
2502 // TODO(nick): http://crbug.com/674307 |opener_url|, |opener_security_origin|, | |
2503 // and |opener_top_level_frame_url| should not be parameters; we can just use | |
2504 // last_committed_url(), etc. Of these, |opener_top_level_frame_url| is | |
2505 // particularly egregious, since an oopif isn't expected to know its top URL. | |
ncarter (slow)
2017/04/20 21:30:36
Yay, we can fix this now. I'll be happy to do it i
Charlie Harrison
2017/04/21 15:30:07
:D
| |
2506 GetProcess()->FilterURL(false, &validated_params->opener_url); | |
2507 GetProcess()->FilterURL(true, &validated_params->opener_security_origin); | |
2508 | |
2509 // Ignore creation when sent from a frame that's not current. | |
2510 if (frame_tree_node_->current_frame_host() == this) { | |
2511 delegate_->CreateNewWindow(GetSiteInstance(), this, render_view_route_id, | |
2512 main_frame_route_id, main_frame_widget_route_id, | |
2513 *validated_params, cloned_namespace.get()); | |
2514 } | |
2515 | |
2516 // If we did not create a WebContents to host the renderer-created | |
2517 // RenderFrame/RenderView/RenderWidget objects, make sure to send invalid | |
2518 // routing ids back to the renderer. | |
2519 if (main_frame_route_id != MSG_ROUTING_NONE) { | |
2520 bool succeeded = | |
2521 RenderWidgetHost::FromID(render_process_id, | |
2522 main_frame_widget_route_id) != nullptr; | |
2523 if (!succeeded) { | |
2524 DCHECK(!RenderFrameHost::FromID(render_process_id, main_frame_route_id)); | |
2525 DCHECK(!RenderViewHost::FromID(render_process_id, render_view_route_id)); | |
2526 RunCreateWindowCompleteCallback(callback, std::move(reply), | |
2527 MSG_ROUTING_NONE, MSG_ROUTING_NONE, | |
2528 MSG_ROUTING_NONE, 0); | |
2529 return; | |
2530 } | |
2531 DCHECK(RenderFrameHost::FromID(render_process_id, main_frame_route_id)); | |
2532 DCHECK(RenderViewHost::FromID(render_process_id, render_view_route_id)); | |
2533 } | |
2534 | |
2535 RunCreateWindowCompleteCallback( | |
2536 callback, std::move(reply), render_view_route_id, main_frame_route_id, | |
2537 main_frame_widget_route_id, cloned_namespace->id()); | |
2538 } | |
2539 | |
2540 void RenderFrameHostImpl::RunCreateWindowCompleteCallback( | |
2541 const CreateNewWindowCallback& callback, | |
2542 mojom::CreateNewWindowReplyPtr reply, | |
2543 int render_view_route_id, | |
2544 int main_frame_route_id, | |
2545 int main_frame_widget_route_id, | |
2546 int cloned_session_storage_namespace_id) { | |
2547 reply->route_id = render_view_route_id; | |
2548 reply->main_frame_route_id = main_frame_route_id; | |
2549 reply->main_frame_widget_route_id = main_frame_widget_route_id; | |
2550 reply->cloned_session_storage_namespace_id = | |
2551 cloned_session_storage_namespace_id; | |
2552 callback.Run(std::move(reply)); | |
2553 } | |
2554 | |
2450 void RenderFrameHostImpl::RegisterMojoInterfaces() { | 2555 void RenderFrameHostImpl::RegisterMojoInterfaces() { |
2451 device::GeolocationServiceContext* geolocation_service_context = | 2556 device::GeolocationServiceContext* geolocation_service_context = |
2452 delegate_ ? delegate_->GetGeolocationServiceContext() : NULL; | 2557 delegate_ ? delegate_->GetGeolocationServiceContext() : NULL; |
2453 | 2558 |
2454 #if !defined(OS_ANDROID) | 2559 #if !defined(OS_ANDROID) |
2455 // The default (no-op) implementation of InstalledAppProvider. On Android, the | 2560 // The default (no-op) implementation of InstalledAppProvider. On Android, the |
2456 // real implementation is provided in Java. | 2561 // real implementation is provided in Java. |
2457 GetInterfaceRegistry()->AddInterface( | 2562 GetInterfaceRegistry()->AddInterface( |
2458 base::Bind(&InstalledAppProviderImplDefault::Create)); | 2563 base::Bind(&InstalledAppProviderImplDefault::Create)); |
2459 #endif // !defined(OS_ANDROID) | 2564 #endif // !defined(OS_ANDROID) |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2888 | 2993 |
2889 // An error page is expected to commit, hence why is_loading_ is set to true. | 2994 // An error page is expected to commit, hence why is_loading_ is set to true. |
2890 is_loading_ = true; | 2995 is_loading_ = true; |
2891 frame_tree_node_->ResetNavigationRequest(true, true); | 2996 frame_tree_node_->ResetNavigationRequest(true, true); |
2892 } | 2997 } |
2893 | 2998 |
2894 void RenderFrameHostImpl::SetUpMojoIfNeeded() { | 2999 void RenderFrameHostImpl::SetUpMojoIfNeeded() { |
2895 if (interface_registry_.get()) | 3000 if (interface_registry_.get()) |
2896 return; | 3001 return; |
2897 | 3002 |
3003 associated_registry_ = base::MakeUnique<AssociatedInterfaceRegistryImpl>(); | |
2898 interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>( | 3004 interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>( |
2899 mojom::kNavigation_FrameSpec); | 3005 mojom::kNavigation_FrameSpec); |
2900 | 3006 |
3007 auto make_binding = [](RenderFrameHostImpl* impl, | |
3008 mojom::FrameHostIPCAssociatedRequest request) { | |
3009 impl->frame_host_associated_binding_.Bind(std::move(request)); | |
3010 }; | |
3011 static_cast<AssociatedInterfaceRegistry*>(associated_registry_.get()) | |
3012 ->AddInterface(base::Bind(make_binding, base::Unretained(this))); | |
3013 | |
2901 ServiceManagerConnection* service_manager_connection = | 3014 ServiceManagerConnection* service_manager_connection = |
2902 BrowserContext::GetServiceManagerConnectionFor( | 3015 BrowserContext::GetServiceManagerConnectionFor( |
2903 GetProcess()->GetBrowserContext()); | 3016 GetProcess()->GetBrowserContext()); |
2904 // |service_manager_connection| may not be set in unit tests using | 3017 // |service_manager_connection| may not be set in unit tests using |
2905 // TestBrowserContext. | 3018 // TestBrowserContext. |
2906 if (service_manager_connection) { | 3019 if (service_manager_connection) { |
2907 on_connect_handler_id_ = service_manager_connection->AddOnConnectHandler( | 3020 on_connect_handler_id_ = service_manager_connection->AddOnConnectHandler( |
2908 base::Bind(&RenderFrameHostImpl::OnRendererConnect, | 3021 base::Bind(&RenderFrameHostImpl::OnRendererConnect, |
2909 weak_ptr_factory_.GetWeakPtr())); | 3022 weak_ptr_factory_.GetWeakPtr())); |
2910 } | 3023 } |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3669 } | 3782 } |
3670 | 3783 |
3671 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( | 3784 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( |
3672 const std::string& interface_name, | 3785 const std::string& interface_name, |
3673 mojo::ScopedMessagePipeHandle pipe) { | 3786 mojo::ScopedMessagePipeHandle pipe) { |
3674 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); | 3787 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); |
3675 } | 3788 } |
3676 #endif | 3789 #endif |
3677 | 3790 |
3678 } // namespace content | 3791 } // namespace content |
OLD | NEW |