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

Unified Diff: services/service_manager/service_manager.cc

Issue 2431753002: Mus experiment in content shell on Android.
Patch Set: Addressed comments, fixed browser tests and deps. Created 4 years, 2 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 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 {

Powered by Google App Engine
This is Rietveld 408576698