Index: content/browser/frame_host/render_frame_host_impl.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
index c1c14271a73a2558628c21240503339c22e31346..5fa0e31e1ada885fd0f1d757b6033673b1d850b7 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -202,20 +202,7 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host, |
GetSiteInstance()->increment_active_frame_count(); |
} |
- if (GetProcess()->GetServiceRegistry()) { |
- GetProcess()->GetServiceRegistry()->ConnectToRemoteService( |
- &render_frame_setup_); |
- mojo::ServiceProviderPtr service_provider; |
- render_frame_setup_->GetServiceProviderForFrame( |
- routing_id_, mojo::GetProxy(&service_provider)); |
- service_registry_.BindRemoteServiceProvider( |
- service_provider.PassMessagePipe()); |
- |
-#if defined(OS_ANDROID) |
- service_registry_android_.reset( |
- new ServiceRegistryAndroid(&service_registry_)); |
-#endif |
- } |
+ SetUpMojoIfNeeded(); |
swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( |
&RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); |
@@ -315,7 +302,7 @@ RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { |
} |
ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { |
- return &service_registry_; |
+ return service_registry_.get(); |
} |
bool RenderFrameHostImpl::Send(IPC::Message* message) { |
@@ -1413,6 +1400,35 @@ void RenderFrameHostImpl::CommitNavigation( |
stream_handle_ = body.Pass(); |
} |
+void RenderFrameHostImpl::SetUpMojoIfNeeded() { |
+ if (service_registry_.get()) |
+ return; |
+ |
+ service_registry_.reset(new ServiceRegistryImpl()); |
+ if (!GetProcess()->GetServiceRegistry()) |
+ return; |
+ |
+ RenderFrameSetupPtr setup; |
+ GetProcess()->GetServiceRegistry()->ConnectToRemoteService(&setup); |
+ mojo::ServiceProviderPtr service_provider; |
+ setup->GetServiceProviderForFrame(routing_id_, |
+ mojo::GetProxy(&service_provider)); |
+ service_registry_->BindRemoteServiceProvider( |
+ service_provider.PassMessagePipe()); |
+ |
+#if defined(OS_ANDROID) |
+ service_registry_android_.reset( |
+ new ServiceRegistryAndroid(service_registry_.get())); |
+#endif |
+} |
+ |
+void RenderFrameHostImpl::InvalidateMojoConnection() { |
+ service_registry_.reset(); |
+#if defined(OS_ANDROID) |
+ service_registry_android_.reset(); |
+#endif |
+} |
+ |
void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( |
int request_id, blink::WebNotificationPermission permission) { |
Send(new PlatformNotificationMsg_PermissionRequestComplete( |