| Index: services/service_manager/service_manager.cc
|
| diff --git a/services/service_manager/service_manager.cc b/services/service_manager/service_manager.cc
|
| index aa46c32e5ebf07cd2af769a228e8cbd0c628298d..dd35ede3c15b63bd1e76567eaaf84e8794b7376d 100644
|
| --- a/services/service_manager/service_manager.cc
|
| +++ b/services/service_manager/service_manager.cc
|
| @@ -244,6 +244,7 @@ class ServiceManager::Instance
|
| return connection_spec_;
|
| }
|
| const Identity& identity() const { return identity_; }
|
| + void set_identity(const Identity& identity) { identity_ = identity; }
|
| uint32_t id() const { return id_; }
|
|
|
| // Service:
|
| @@ -460,7 +461,7 @@ class ServiceManager::Instance
|
| // may vend multiple application instances, and this object may exist before a
|
| // process is launched.
|
| const uint32_t id_;
|
| - const Identity identity_;
|
| + Identity identity_;
|
| const InterfaceProviderSpec connection_spec_;
|
| const bool allow_any_application_;
|
| std::unique_ptr<NativeRunner> runner_;
|
| @@ -800,6 +801,7 @@ void ServiceManager::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
|
| if (result->connection_spec.has_value())
|
| connection_spec = result->connection_spec.value();
|
|
|
| + const Identity original_target(params->target());
|
| const std::string user_id =
|
| HasCapability(connection_spec, kCapability_AllUsers)
|
| ? base::GenerateGUID() : params->target().user_id();
|
| @@ -850,8 +852,12 @@ void ServiceManager::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
|
| CHECK(!result->package_path.empty() && result->connection_spec.has_value());
|
|
|
| if (target.name() != result->resolved_name) {
|
| + // When part of a packaged app, use the original user ID.
|
| + Identity packaged_app_target(target);
|
| + packaged_app_target.set_user_id(original_target.user_id());
|
| + instance->set_identity(packaged_app_target);
|
| instance->StartWithService(std::move(service));
|
| - Identity factory(result->resolved_name, target.user_id(),
|
| + Identity factory(result->resolved_name, original_target.user_id(),
|
| instance_name);
|
| CreateServiceWithFactory(factory, target.name(), std::move(request));
|
| } else {
|
|
|