Chromium Code Reviews| 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( |