| Index: content/browser/service_manager/service_manager_context.cc
|
| diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc
|
| index 0cad78c8a54fbce6dde976f6c5948d6b269c2fc6..db56719c833e15ef86a50ad54b1117d3f36b5614 100644
|
| --- a/content/browser/service_manager/service_manager_context.cc
|
| +++ b/content/browser/service_manager/service_manager_context.cc
|
| @@ -13,6 +13,7 @@
|
| #include "base/lazy_instance.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| +#include "base/process/process_handle.h"
|
| #include "base/single_thread_task_runner.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "content/browser/gpu/gpu_process_host.h"
|
| @@ -182,19 +183,14 @@ class ServiceManagerContext::InProcessServiceManagerContext
|
| public:
|
| InProcessServiceManagerContext() {}
|
|
|
| - service_manager::mojom::ServiceRequest Start(
|
| + void Start(
|
| + service_manager::mojom::ServicePtrInfo packaged_services_service_info,
|
| std::unique_ptr<BuiltinManifestProvider> manifest_provider) {
|
| - service_manager::mojom::ServicePtr embedder_service_proxy;
|
| - service_manager::mojom::ServiceRequest embedder_service_request(
|
| - &embedder_service_proxy);
|
| - service_manager::mojom::ServicePtrInfo embedder_service_proxy_info =
|
| - embedder_service_proxy.PassInterface();
|
| - BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&InProcessServiceManagerContext::StartOnIOThread, this,
|
| - base::Passed(&manifest_provider),
|
| - base::Passed(&embedder_service_proxy_info)));
|
| - return embedder_service_request;
|
| + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)
|
| + ->PostTask(FROM_HERE,
|
| + base::Bind(&InProcessServiceManagerContext::StartOnIOThread,
|
| + this, base::Passed(&manifest_provider),
|
| + base::Passed(&packaged_services_service_info)));
|
| }
|
|
|
| void ShutDown() {
|
| @@ -210,7 +206,7 @@ class ServiceManagerContext::InProcessServiceManagerContext
|
|
|
| void StartOnIOThread(
|
| std::unique_ptr<BuiltinManifestProvider> manifest_provider,
|
| - service_manager::mojom::ServicePtrInfo embedder_service_proxy_info) {
|
| + service_manager::mojom::ServicePtrInfo packaged_services_service_info) {
|
| manifest_provider_ = std::move(manifest_provider);
|
| catalog_ =
|
| base::MakeUnique<catalog::Catalog>(nullptr, manifest_provider_.get());
|
| @@ -218,12 +214,12 @@ class ServiceManagerContext::InProcessServiceManagerContext
|
| base::MakeUnique<NullServiceProcessLauncherFactory>(),
|
| catalog_->TakeService());
|
|
|
| - service_manager::mojom::ServicePtr service;
|
| - service.Bind(std::move(embedder_service_proxy_info));
|
| + service_manager::mojom::ServicePtr packaged_services_service;
|
| + packaged_services_service.Bind(std::move(packaged_services_service_info));
|
| service_manager_->RegisterService(
|
| - service_manager::Identity(
|
| - mojom::kBrowserServiceName, service_manager::mojom::kRootUserID),
|
| - std::move(service), nullptr);
|
| + service_manager::Identity(mojom::kPackagedServicesServiceName,
|
| + service_manager::mojom::kRootUserID),
|
| + std::move(packaged_services_service), nullptr);
|
| }
|
|
|
| void ShutDownOnIOThread() {
|
| @@ -240,10 +236,11 @@ class ServiceManagerContext::InProcessServiceManagerContext
|
| };
|
|
|
| ServiceManagerContext::ServiceManagerContext() {
|
| - service_manager::mojom::ServiceRequest request;
|
| + service_manager::mojom::ServiceRequest packaged_services_request;
|
| if (service_manager::ServiceManagerIsRemote()) {
|
| mojo::edk::SetParentPipeHandleFromCommandLine();
|
| - request = service_manager::GetServiceRequestFromCommandLine();
|
| + packaged_services_request =
|
| + service_manager::GetServiceRequestFromCommandLine();
|
| } else {
|
| std::unique_ptr<BuiltinManifestProvider> manifest_provider =
|
| base::MakeUnique<BuiltinManifestProvider>();
|
| @@ -252,12 +249,14 @@ ServiceManagerContext::ServiceManagerContext() {
|
| const char* name;
|
| int resource_id;
|
| } kManifests[] = {
|
| - { mojom::kBrowserServiceName, IDR_MOJO_CONTENT_BROWSER_MANIFEST },
|
| - { mojom::kGpuServiceName, IDR_MOJO_CONTENT_GPU_MANIFEST },
|
| - { mojom::kPluginServiceName, IDR_MOJO_CONTENT_PLUGIN_MANIFEST },
|
| - { mojom::kRendererServiceName, IDR_MOJO_CONTENT_RENDERER_MANIFEST },
|
| - { mojom::kUtilityServiceName, IDR_MOJO_CONTENT_UTILITY_MANIFEST },
|
| - { catalog::mojom::kServiceName, IDR_MOJO_CATALOG_MANIFEST },
|
| + {mojom::kBrowserServiceName, IDR_MOJO_CONTENT_BROWSER_MANIFEST},
|
| + {mojom::kGpuServiceName, IDR_MOJO_CONTENT_GPU_MANIFEST},
|
| + {mojom::kPackagedServicesServiceName,
|
| + IDR_MOJO_CONTENT_PACKAGED_SERVICES_MANIFEST},
|
| + {mojom::kPluginServiceName, IDR_MOJO_CONTENT_PLUGIN_MANIFEST},
|
| + {mojom::kRendererServiceName, IDR_MOJO_CONTENT_RENDERER_MANIFEST},
|
| + {mojom::kUtilityServiceName, IDR_MOJO_CONTENT_UTILITY_MANIFEST},
|
| + {catalog::mojom::kServiceName, IDR_MOJO_CATALOG_MANIFEST},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(kManifests); ++i) {
|
| @@ -270,24 +269,44 @@ ServiceManagerContext::ServiceManagerContext() {
|
| manifest.resource_id);
|
| }
|
| in_process_context_ = new InProcessServiceManagerContext;
|
| - request = in_process_context_->Start(std::move(manifest_provider));
|
| +
|
| + service_manager::mojom::ServicePtr packaged_services_service;
|
| + packaged_services_request = mojo::MakeRequest(&packaged_services_service);
|
| + in_process_context_->Start(packaged_services_service.PassInterface(),
|
| + std::move(manifest_provider));
|
| }
|
| +
|
| + packaged_services_connection_ = ServiceManagerConnection::Create(
|
| + std::move(packaged_services_request),
|
| + BrowserThread::GetTaskRunnerForThread(BrowserThread::IO));
|
| +
|
| + service_manager::mojom::ServicePtr root_browser_service;
|
| ServiceManagerConnection::SetForProcess(ServiceManagerConnection::Create(
|
| - std::move(request),
|
| + mojo::MakeRequest(&root_browser_service),
|
| BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)));
|
|
|
| + service_manager::mojom::PIDReceiverPtr pid_receiver;
|
| + packaged_services_connection_->GetConnector()->StartService(
|
| + service_manager::Identity(mojom::kBrowserServiceName,
|
| + service_manager::mojom::kRootUserID),
|
| + std::move(root_browser_service), mojo::MakeRequest(&pid_receiver));
|
| + pid_receiver->SetPID(base::GetCurrentProcId());
|
| +
|
| + packaged_services_connection_->Start();
|
| + ServiceManagerConnection::GetForProcess()->Start();
|
| +
|
| ServiceInfo device_info;
|
| device_info.factory =
|
| base::Bind(&device::CreateDeviceService,
|
| BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE));
|
| - ServiceManagerConnection::GetForProcess()->AddEmbeddedService(
|
| - device::mojom::kServiceName, device_info);
|
| + packaged_services_connection_->AddEmbeddedService(device::mojom::kServiceName,
|
| + device_info);
|
|
|
| ContentBrowserClient::StaticServiceMap services;
|
| GetContentClient()->browser()->RegisterInProcessServices(&services);
|
| for (const auto& entry : services) {
|
| - ServiceManagerConnection::GetForProcess()->AddEmbeddedService(entry.first,
|
| - entry.second);
|
| + packaged_services_connection_->AddEmbeddedService(entry.first,
|
| + entry.second);
|
| }
|
|
|
| // This is safe to assign directly from any thread, because
|
| @@ -296,17 +315,14 @@ ServiceManagerContext::ServiceManagerContext() {
|
| g_io_thread_connector.Get() =
|
| ServiceManagerConnection::GetForProcess()->GetConnector()->Clone();
|
|
|
| - ServiceManagerConnection::GetForProcess()->Start();
|
| -
|
| ContentBrowserClient::OutOfProcessServiceMap sandboxed_services;
|
| GetContentClient()
|
| ->browser()
|
| ->RegisterOutOfProcessServices(&sandboxed_services);
|
| for (const auto& service : sandboxed_services) {
|
| - ServiceManagerConnection::GetForProcess()->AddServiceRequestHandler(
|
| - service.first,
|
| - base::Bind(&StartServiceInUtilityProcess, service.first, service.second,
|
| - true /* use_sandbox */));
|
| + packaged_services_connection_->AddServiceRequestHandler(
|
| + service.first, base::Bind(&StartServiceInUtilityProcess, service.first,
|
| + service.second, true /* use_sandbox */));
|
| }
|
|
|
| ContentBrowserClient::OutOfProcessServiceMap unsandboxed_services;
|
| @@ -317,25 +333,15 @@ ServiceManagerContext::ServiceManagerContext() {
|
| std::make_pair(shape_detection::mojom::kServiceName,
|
| base::ASCIIToUTF16("Shape Detection Service")));
|
| for (const auto& service : unsandboxed_services) {
|
| - ServiceManagerConnection::GetForProcess()->AddServiceRequestHandler(
|
| - service.first,
|
| - base::Bind(&StartServiceInUtilityProcess, service.first, service.second,
|
| - false /* use_sandbox */));
|
| + packaged_services_connection_->AddServiceRequestHandler(
|
| + service.first, base::Bind(&StartServiceInUtilityProcess, service.first,
|
| + service.second, false /* use_sandbox */));
|
| }
|
|
|
| #if (ENABLE_MOJO_MEDIA_IN_GPU_PROCESS)
|
| - ServiceManagerConnection::GetForProcess()->AddServiceRequestHandler(
|
| + packaged_services_connection_->AddServiceRequestHandler(
|
| "media", base::Bind(&StartServiceInGpuProcess, "media"));
|
| #endif
|
| -
|
| - // Initiates the first connection to device service to create the singleton
|
| - // instance, later the same instance will serve all the clients wanting to
|
| - // connect to device service.
|
| - // TODO(rockot): http://crbug.com/679407 Eliminate this connection once
|
| - // content_browser is itself a singleton service.
|
| - std::unique_ptr<service_manager::Connection> device_connection =
|
| - ServiceManagerConnection::GetForProcess()->GetConnector()->Connect(
|
| - device::mojom::kServiceName);
|
| }
|
|
|
| ServiceManagerContext::~ServiceManagerContext() {
|
|
|