Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(704)

Unified Diff: services/service_manager/service_manager.cc

Issue 2610173003: Add RegisterService, split out of Connect(). (Closed)
Patch Set: . Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: services/service_manager/service_manager.cc
diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
index acfcaaf51e02febad62ea28dac2cf44aa890440b..59844a4d150b590c9c2fc4df812364f496894231 100644
--- a/services/service_manager/service_manager.cc
+++ b/services/service_manager/service_manager.cc
@@ -234,6 +234,18 @@ class ServiceManager::Instance
};
// mojom::Connector implementation:
+ void RegisterService(
+ const Identity& target,
+ mojom::ClientProcessConnectionPtr client_process_connection) override {
+ Connect(
+ target,
+ mojom::InterfaceProviderRequest(),
+ std::move(client_process_connection),
+ base::Bind(
+ &service_manager::ServiceManager::Instance::EmptyConnectCallback,
+ weak_factory_.GetWeakPtr()));
+ }
+
void Connect(const service_manager::Identity& in_target,
mojom::InterfaceProviderRequest remote_interfaces,
mojom::ClientProcessConnectionPtr client_process_connection,
@@ -432,6 +444,9 @@ class ServiceManager::Instance
OnServiceLost(service_manager_->GetWeakPtr());
}
+ void EmptyConnectCallback(mojom::ConnectResult result,
+ const std::string& user_id) {}
+
service_manager::ServiceManager* const service_manager_;
// An id that identifies this instance. Distinct from pid, as a single process
@@ -884,10 +899,12 @@ void ServiceManager::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
// is already holding a corresponding ServiceRequest.
instance->StartWithService(std::move(service));
} else if (!client_process_connection.is_null()) {
- // Likewise if a ClientProcessConnection was given via Connect(), it
- // provides the Service proxy to use.
+ // This branch should be reachable only via a call to RegisterService(). We
+ // start the instance but return early before we connect to it. Clients will
+ // call Connect() with the target identity subsequently.
instance->StartWithClientProcessConnection(
std::move(client_process_connection));
+ return;
} else {
// Otherwise we create a new Service pipe.
mojom::ServiceRequest request(&service);

Powered by Google App Engine
This is Rietveld 408576698