Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(208)

Side by Side Diff: content/browser/frame_host/render_frame_host_impl.cc

Issue 2821473002: Service CreateNewWindow on the UI thread with a new mojo interface (Closed)
Patch Set: dcheng fixes + security exploit browsertest nerfing Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698