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 1f228805e7651e4c4876b0ca92393e503dc9ec18..d45a2b02eb5f30213fd20ce479308f66def01dd2 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -209,20 +209,7 @@ RenderFrameHostImpl::RenderFrameHostImpl(RenderViewHostImpl* render_view_host, |
GetSiteInstance()->increment_active_frame_count(); |
} |
- if (GetProcess()->GetServiceRegistry()) { |
- 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_)); |
-#endif |
- } |
+ SetUpMojoIfNeeded(); |
swapout_event_monitor_timeout_.reset(new TimeoutMonitor(base::Bind( |
&RenderFrameHostImpl::OnSwappedOut, weak_ptr_factory_.GetWeakPtr()))); |
@@ -322,7 +309,7 @@ RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { |
} |
ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { |
- return &service_registry_; |
+ return service_registry_.get(); |
} |
bool RenderFrameHostImpl::Send(IPC::Message* message) { |
@@ -1442,6 +1429,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(); |
qsr
2014/10/27 11:45:41
This is not that big a deal, but this should be re
|
+#endif |
+} |
+ |
void RenderFrameHostImpl::PlatformNotificationPermissionRequestDone( |
int request_id, blink::WebNotificationPermission permission) { |
Send(new PlatformNotificationMsg_PermissionRequestComplete( |