Index: services/shell/service_manager.cc |
diff --git a/services/shell/service_manager.cc b/services/shell/service_manager.cc |
index 5e1de8467fe1d6f2d738fcf1758d13b7c543665f..fcbfa071040a5237e87ea8b9f0606d625b096799 100644 |
--- a/services/shell/service_manager.cc |
+++ b/services/shell/service_manager.cc |
@@ -39,6 +39,7 @@ const char kCapabilityClass_ClientProcess[] = "shell:client_process"; |
const char kCapabilityClass_InstanceName[] = "shell:instance_name"; |
const char kCapabilityClass_AllUsers[] = "shell:all_users"; |
const char kCapabilityClass_ExplicitClass[] = "shell:explicit_class"; |
+const char kCapabilityClass_Unsandboxed[] = "shell:unsandboxed"; |
} // namespace |
@@ -216,10 +217,10 @@ class ServiceManager::Instance |
StartWithService(std::move(service)); |
} |
- void StartWithFilePath(const base::FilePath& path) { |
+ void StartWithFilePath(const base::FilePath& path, bool unsandboxed) { |
CHECK(!service_); |
runner_ = service_manager_->native_runner_factory_->Create(path); |
- bool start_sandboxed = false; |
+ bool start_sandboxed = !unsandboxed; |
mojom::ServicePtr service = runner_->Start( |
path, identity_, start_sandboxed, |
base::Bind(&Instance::PIDAvailable, weak_factory_.GetWeakPtr()), |
@@ -821,7 +822,8 @@ void ServiceManager::OnGotResolvedName(std::unique_ptr<ConnectParams> params, |
instance_name); |
CreateServiceWithFactory(factory, target.name(), std::move(request)); |
} else { |
- instance->StartWithFilePath(result->package_path); |
+ bool unsandboxed = HasClass(capabilities, kCapabilityClass_Unsandboxed); |
+ instance->StartWithFilePath(result->package_path, unsandboxed); |
} |
} |