| 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(
|
|
|