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

Unified Diff: services/service_manager/service_manager.cc

Issue 2651953002: Revert of [Service Manager] Get rid of dynamic service discovery (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
« no previous file with comments | « services/service_manager/service_manager.h ('k') | services/service_manager/standalone/context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/service_manager/service_manager.cc
diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
index 99b9869ee5b99b844139621efe4698041b13fee5..ed5e3044994bf5a44ed47a9c89fa1d9020b5348a 100644
--- a/services/service_manager/service_manager.cc
+++ b/services/service_manager/service_manager.cc
@@ -322,7 +322,8 @@
service.Bind(mojom::ServicePtrInfo(std::move(service_handle), 0));
params->set_client_process_info(std::move(service),
std::move(pid_receiver_request));
- service_manager_->Connect(std::move(params), weak_factory_.GetWeakPtr());
+ service_manager_->Connect(
+ std::move(params), nullptr, weak_factory_.GetWeakPtr());
}
void Connect(const service_manager::Identity& in_target,
@@ -341,7 +342,8 @@
params->set_target(target);
params->set_remote_interfaces(std::move(remote_interfaces));
params->set_connect_callback(callback);
- service_manager_->Connect(std::move(params), weak_factory_.GetWeakPtr());
+ service_manager_->Connect(
+ std::move(params), nullptr, weak_factory_.GetWeakPtr());
}
void BindInterface(const service_manager::Identity& in_target,
@@ -362,7 +364,8 @@
params->set_interface_request_info(interface_name,
std::move(interface_pipe));
params->set_bind_interface_callback(callback);
- service_manager_->Connect(std::move(params), weak_factory_.GetWeakPtr());
+ service_manager_->Connect(
+ std::move(params), nullptr, weak_factory_.GetWeakPtr());
}
void Clone(mojom::ConnectorRequest request) override {
@@ -682,26 +685,22 @@
}
void ServiceManager::Connect(std::unique_ptr<ConnectParams> params) {
- Connect(std::move(params), nullptr);
-}
-
-void ServiceManager::RegisterService(
- const Identity& identity,
- mojom::ServicePtr service,
- mojom::PIDReceiverRequest pid_receiver_request) {
- auto params = base::MakeUnique<ConnectParams>();
-
- if (!pid_receiver_request.is_pending()) {
- mojom::PIDReceiverPtr pid_receiver;
- pid_receiver_request = mojom::PIDReceiverRequest(&pid_receiver);
- pid_receiver->SetPID(base::Process::Current().Pid());
- }
-
- params->set_source(identity);
- params->set_target(identity);
- params->set_client_process_info(
- std::move(service), std::move(pid_receiver_request));
- Connect(std::move(params), nullptr);
+ Connect(std::move(params), nullptr, nullptr);
+}
+
+mojom::ServiceRequest ServiceManager::StartEmbedderService(
+ const std::string& name) {
+ std::unique_ptr<ConnectParams> params(new ConnectParams);
+
+ Identity embedder_identity(name, mojom::kRootUserID);
+ params->set_source(embedder_identity);
+ params->set_target(embedder_identity);
+
+ mojom::ServicePtr service;
+ mojom::ServiceRequest request(&service);
+ Connect(std::move(params), std::move(service), nullptr);
+
+ return request;
}
////////////////////////////////////////////////////////////////////////////////
@@ -766,6 +765,7 @@
}
void ServiceManager::Connect(std::unique_ptr<ConnectParams> params,
+ mojom::ServicePtr service,
base::WeakPtr<Instance> source_instance) {
TRACE_EVENT_INSTANT1("service_manager", "ServiceManager::Connect",
TRACE_EVENT_SCOPE_THREAD, "original_name",
@@ -773,11 +773,10 @@
DCHECK(!params->target().name().empty());
DCHECK(base::IsValidGUID(params->target().user_id()));
DCHECK_NE(mojom::kInheritUserID, params->target().user_id());
- DCHECK(!params->HasClientProcessInfo() ||
- !identity_to_instance_.count(params->target()));
+ DCHECK(!service.is_bound() || !identity_to_instance_.count(params->target()));
// Connect to an existing matching instance, if possible.
- if (!params->HasClientProcessInfo() && ConnectToExistingInstance(&params))
+ if (!service.is_bound() && ConnectToExistingInstance(&params))
return;
// The catalog needs to see the source identity as that of the originating
@@ -792,7 +791,7 @@
name,
base::Bind(&service_manager::ServiceManager::OnGotResolvedName,
weak_ptr_factory_.GetWeakPtr(), base::Passed(&params),
- !!source_instance, source_instance));
+ base::Passed(&service), !!source_instance, source_instance));
}
ServiceManager::Instance* ServiceManager::GetExistingInstance(
@@ -933,6 +932,7 @@
}
void ServiceManager::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
+ mojom::ServicePtr service,
bool has_source_instance,
base::WeakPtr<Instance> source_instance,
mojom::ResolveResultPtr result,
@@ -992,8 +992,12 @@
// Below are various paths through which a new Instance can be bound to a
// Service proxy.
- if (params->HasClientProcessInfo()) {
- // This branch should be reachable only via a call to RegisterService() . We
+ if (service.is_bound()) {
+ // If a ServicePtr was provided, there's no more work to do: someone
+ // is already holding a corresponding ServiceRequest.
+ instance->StartWithService(std::move(service));
+ } else if (params->HasClientProcessInfo()) {
+ // 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->BindPIDReceiver(params->TakePIDReceiverRequest());
@@ -1001,7 +1005,6 @@
return;
} else {
// Otherwise we create a new Service pipe.
- mojom::ServicePtr service;
mojom::ServiceRequest request(&service);
// The catalog was unable to read a manifest for this service. We can't do
« no previous file with comments | « services/service_manager/service_manager.h ('k') | services/service_manager/standalone/context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698