Index: content/child/child_thread_impl.cc |
diff --git a/content/child/child_thread_impl.cc b/content/child/child_thread_impl.cc |
index 45b0ec6d299da122f6ce29c251dfa1484294973f..eb827b42593eb3989c7d0b9de96b34f210bd8007 100644 |
--- a/content/child/child_thread_impl.cc |
+++ b/content/child/child_thread_impl.cc |
@@ -657,8 +657,8 @@ 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()); |
+ interface_registry_ = |
+ base::MakeUnique<service_manager::InterfaceRegistry>(); |
} |
return interface_registry_.get(); |
} |
@@ -672,6 +672,16 @@ service_manager::InterfaceProvider* ChildThreadImpl::GetRemoteInterfaces() { |
return remote_interfaces_.get(); |
} |
+const service_manager::ServiceInfo& |
+ ChildThreadImpl::GetChildServiceInfo() const { |
+ return child_info_; |
+} |
+ |
+const service_manager::ServiceInfo& |
+ ChildThreadImpl::GetBrowserServiceInfo() const { |
+ return browser_info_; |
+} |
+ |
IPC::MessageRouter* ChildThreadImpl::GetRouter() { |
DCHECK(message_loop_->task_runner()->BelongsToCurrentThread()); |
return &router_; |
@@ -765,6 +775,9 @@ 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::OnConnect, weak_factory_.GetWeakPtr())); |
} |
bool ChildThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { |
@@ -868,6 +881,15 @@ void ChildThreadImpl::GetAssociatedInterface( |
route->OnAssociatedInterfaceRequest(name, request.PassHandle()); |
} |
+void ChildThreadImpl::OnConnect( |
+ const service_manager::ServiceInfo& local_info, |
+ const service_manager::ServiceInfo& remote_info) { |
+ if (remote_info.identity.name() != kBrowserServiceName) |
+ return; |
+ child_info_ = local_info; |
+ browser_info_ = remote_info; |
+} |
+ |
bool ChildThreadImpl::IsInBrowserProcess() const { |
return static_cast<bool>(browser_process_io_runner_); |
} |