Index: content/child/child_thread_impl.cc |
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc |
index 8cd4f524326e5182e999e7e0ac34761c1e8a23ac..2bcb5e49ee44329da081ddf4b52953c946df0536 100644 |
--- a/content/child/child_thread_impl.cc |
+++ b/content/child/child_thread_impl.cc |
@@ -644,7 +644,7 @@ ServiceManagerConnection* ChildThreadImpl::GetServiceManagerConnection() { |
service_manager::InterfaceRegistry* ChildThreadImpl::GetInterfaceRegistry() { |
if (!interface_registry_.get()) { |
interface_registry_ = base::MakeUnique<service_manager::InterfaceRegistry>( |
- service_manager::Identity(), service_manager::InterfaceProviderSpec()); |
+ service_manager::mojom::kServiceManager_ConnectorSpec); |
} |
return interface_registry_.get(); |
} |
@@ -658,6 +658,22 @@ service_manager::InterfaceProvider* ChildThreadImpl::GetRemoteInterfaces() { |
return remote_interfaces_.get(); |
} |
+const service_manager::ServiceInfo& |
+ ChildThreadImpl::GetChildServiceInfo() const { |
+ DCHECK(IsConnectedToBrowser()); |
+ return child_info_; |
+} |
+ |
+const service_manager::ServiceInfo& |
+ ChildThreadImpl::GetBrowserServiceInfo() const { |
+ DCHECK(IsConnectedToBrowser()); |
+ return browser_info_; |
+} |
+ |
+bool ChildThreadImpl::IsConnectedToBrowser() const { |
+ return connected_to_browser_; |
+} |
+ |
IPC::MessageRouter* ChildThreadImpl::GetRouter() { |
DCHECK(message_loop_->task_runner()->BelongsToCurrentThread()); |
return &router_; |
@@ -751,6 +767,10 @@ bool ChildThreadImpl::OnMessageReceived(const IPC::Message& msg) { |
void ChildThreadImpl::StartServiceManagerConnection() { |
DCHECK(service_manager_connection_); |
service_manager_connection_->Start(); |
+ // We don't care about storing the id, since if this pipe closes we're toast. |
+ service_manager_connection_->AddOnConnectHandler( |
+ base::Bind(&ChildThreadImpl::OnServiceConnect, |
+ weak_factory_.GetWeakPtr())); |
} |
bool ChildThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { |
@@ -854,6 +874,17 @@ void ChildThreadImpl::GetAssociatedInterface( |
route->OnAssociatedInterfaceRequest(name, request.PassHandle()); |
} |
+void ChildThreadImpl::OnServiceConnect( |
+ const service_manager::ServiceInfo& local_info, |
+ const service_manager::ServiceInfo& remote_info) { |
+ if (remote_info.identity.name() != kBrowserServiceName) |
+ return; |
+ DCHECK(!connected_to_browser_); |
+ connected_to_browser_ = true; |
+ child_info_ = local_info; |
+ browser_info_ = remote_info; |
+} |
+ |
bool ChildThreadImpl::IsInBrowserProcess() const { |
return static_cast<bool>(browser_process_io_runner_); |
} |