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

Unified Diff: chrome/app/mash/mash_runner.cc

Issue 2645973006: [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 | « chrome/app/mash/DEPS ('k') | chrome/browser/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/app/mash/mash_runner.cc
diff --git a/chrome/app/mash/mash_runner.cc b/chrome/app/mash/mash_runner.cc
index 8a239734d91b9e2149dae48d512dfdfa649585ed..72da180500ea28703f49e08d926401a4a64d34ed 100644
--- a/chrome/app/mash/mash_runner.cc
+++ b/chrome/app/mash/mash_runner.cc
@@ -4,14 +4,18 @@
#include "chrome/app/mash/mash_runner.h"
+#include <string>
+
#include "base/at_exit.h"
#include "base/base_paths.h"
#include "base/base_switches.h"
#include "base/bind.h"
#include "base/command_line.h"
#include "base/debug/debugger.h"
+#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/i18n/icu_util.h"
+#include "base/json/json_reader.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
@@ -22,6 +26,7 @@
#include "base/sys_info.h"
#include "base/task_scheduler/task_scheduler.h"
#include "base/threading/sequenced_worker_pool.h"
+#include "base/threading/thread.h"
#include "base/trace_event/trace_event.h"
#include "components/tracing/common/trace_to_console.h"
#include "components/tracing/common/tracing_switches.h"
@@ -29,6 +34,8 @@
#include "content/public/common/service_names.mojom.h"
#include "mash/package/mash_packaged_service.h"
#include "mash/session/public/interfaces/constants.mojom.h"
+#include "mojo/edk/embedder/embedder.h"
+#include "mojo/edk/embedder/scoped_ipc_support.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "services/catalog/public/interfaces/catalog.mojom.h"
#include "services/catalog/public/interfaces/constants.mojom.h"
@@ -61,19 +68,8 @@ const char* kMashChild = "mash-child";
const char kChromeMashServiceName[] = "chrome_mash";
-const char kChromeContentBrowserPackageName[] = "chrome_content_browser";
-const char kChromeContentGpuPackageName[] = "chrome_content_gpu";
-const char kChromeContentRendererPackageName[] = "chrome_content_renderer";
-const char kChromeContentUtilityPackageName[] = "chrome_content_utility";
-
-const char kPackagesPath[] = "Packages";
-const char kManifestFilename[] = "manifest.json";
-
-base::FilePath GetPackageManifestPath(const std::string& package_name) {
- base::FilePath exe = base::CommandLine::ForCurrentProcess()->GetProgram();
- return exe.DirName().AppendASCII(kPackagesPath).AppendASCII(package_name)
- .AppendASCII(kManifestFilename);
-}
+const base::FilePath::CharType kChromeMashCatalogFilename[] =
+ FILE_PATH_LITERAL("chrome_mash_catalog.json");
bool IsChild() {
return base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -172,45 +168,39 @@ int MashRunner::Run() {
void MashRunner::RunMain() {
base::SequencedWorkerPool::EnableWithRedirectionToTaskSchedulerForProcess();
+ mojo::edk::Init();
+
+ base::Thread ipc_thread("IPC thread");
+ ipc_thread.StartWithOptions(
+ base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
+ mojo::edk::ScopedIPCSupport ipc_support(
+ ipc_thread.task_runner(),
+ mojo::edk::ScopedIPCSupport::ShutdownPolicy::FAST);
+
+ std::string catalog_contents;
+ base::FilePath exe_path;
+ base::PathService::Get(base::DIR_EXE, &exe_path);
+ base::FilePath catalog_path = exe_path.Append(kChromeMashCatalogFilename);
+ bool result = base::ReadFileToString(catalog_path, &catalog_contents);
+ DCHECK(result);
+ std::unique_ptr<base::Value> manifest_value =
+ base::JSONReader::Read(catalog_contents);
+ DCHECK(manifest_value);
+
// TODO(sky): refactor BackgroundServiceManager so can supply own context, we
// shouldn't we using context as it has a lot of stuff we don't really want
// in chrome.
ServiceProcessLauncherDelegateImpl service_process_launcher_delegate;
- service_manager::BackgroundServiceManager background_service_manager;
- std::unique_ptr<service_manager::BackgroundServiceManager::InitParams>
- init_params(new service_manager::BackgroundServiceManager::InitParams);
- init_params->service_process_launcher_delegate =
- &service_process_launcher_delegate;
- background_service_manager.Init(std::move(init_params));
+ service_manager::BackgroundServiceManager background_service_manager(
+ &service_process_launcher_delegate, std::move(manifest_value));
+ service_manager::mojom::ServicePtr service;
context_.reset(new service_manager::ServiceContext(
base::MakeUnique<mash::MashPackagedService>(),
- background_service_manager.CreateServiceRequest(kChromeMashServiceName)));
-
- // We need to send a sync messages to the Catalog, so we wait for a completed
- // connection first.
- std::unique_ptr<service_manager::Connection> catalog_connection =
- context_->connector()->Connect(catalog::mojom::kServiceName);
- {
- base::RunLoop run_loop;
- catalog_connection->AddConnectionCompletedClosure(run_loop.QuitClosure());
- run_loop.Run();
- }
-
- // Synchronously override manifests needed for content process services.
- catalog::mojom::CatalogControlPtr catalog_control;
- catalog_connection->GetInterface(&catalog_control);
- CHECK(catalog_control->OverrideManifestPath(
- content::mojom::kBrowserServiceName,
- GetPackageManifestPath(kChromeContentBrowserPackageName)));
- CHECK(catalog_control->OverrideManifestPath(
- content::mojom::kGpuServiceName,
- GetPackageManifestPath(kChromeContentGpuPackageName)));
- CHECK(catalog_control->OverrideManifestPath(
- content::mojom::kRendererServiceName,
- GetPackageManifestPath(kChromeContentRendererPackageName)));
- CHECK(catalog_control->OverrideManifestPath(
- content::mojom::kUtilityServiceName,
- GetPackageManifestPath(kChromeContentUtilityPackageName)));
+ service_manager::mojom::ServiceRequest(&service)));
+ background_service_manager.RegisterService(
+ service_manager::Identity(
+ kChromeMashServiceName, service_manager::mojom::kRootUserID),
+ std::move(service), nullptr);
// Ping mash_session to ensure an instance is brought up
context_->connector()->Connect(mash::session::mojom::kServiceName);
« no previous file with comments | « chrome/app/mash/DEPS ('k') | chrome/browser/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698