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

Unified Diff: services/service_manager/public/cpp/standalone_service/main.cc

Issue 2651953002: Revert of [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
Index: services/service_manager/public/cpp/standalone_service/main.cc
diff --git a/services/service_manager/public/cpp/standalone_service/main.cc b/services/service_manager/public/cpp/standalone_service/main.cc
index 717fe48188cf787dfd5a57d4ff6cb985613791c5..f63309bc9fdfcb545a56ef36e55eed2fe6c118bf 100644
--- a/services/service_manager/public/cpp/standalone_service/main.cc
+++ b/services/service_manager/public/cpp/standalone_service/main.cc
@@ -3,11 +3,13 @@
// found in the LICENSE file.
#include "base/at_exit.h"
+#include "base/base_paths.h"
#include "base/command_line.h"
#include "base/debug/stack_trace.h"
#include "base/i18n/icu_util.h"
#include "base/logging.h"
#include "base/macros.h"
+#include "base/path_service.h"
#include "base/process/launch.h"
#include "services/service_manager/public/c/main.h"
#include "services/service_manager/public/cpp/standalone_service/standalone_service.h"
@@ -20,6 +22,42 @@
#endif
namespace {
+
+// Cross-platform helper to override the necessary hard-coded path location
+// used to load ICU data.
+//
+// TODO(rockot): We should just parameterize InitializeICU so hacks like
+// this are unnecessary.
+class ScopedIcuDataDirOverride {
+ public:
+ ScopedIcuDataDirOverride(const base::FilePath& path) {
+#if defined(OS_WIN)
+ base::PathService::Get(base::DIR_MODULE, &original_path_);
+#elif defined(OS_MACOSX)
+ original_path_= base::mac::FrameworkBundlePath();
+#else
+ base::PathService::Get(base::DIR_EXE, &original_path_);
+#endif
+
+ if (!path.empty())
+ SetPathOverride(path);
+ }
+
+ ~ScopedIcuDataDirOverride() { SetPathOverride(original_path_); }
+
+ private:
+ static void SetPathOverride(const base::FilePath& path) {
+#if defined(OS_WIN)
+ base::PathService::Override(base::DIR_MODULE, path);
+#elif defined(OS_MACOSX)
+ base::mac::SetOverrideFrameworkBundlePath(path);
+#else
+ base::PathService::Override(base::DIR_EXE, path);
+#endif
+ }
+
+ base::FilePath original_path_;
+};
// TODO(rockot): We should consider removing ServiceMain and instead allowing
// service sources to define a CreateService method which returns a new instance
@@ -43,7 +81,12 @@
service_manager::InitializeLogging();
- base::i18n::InitializeICU();
+ {
+ base::FilePath icu_data_dir = base::CommandLine::ForCurrentProcess()
+ ->GetSwitchValuePath(service_manager::switches::kIcuDataDir);
+ ScopedIcuDataDirOverride path_override(icu_data_dir);
+ base::i18n::InitializeICU();
+ }
#if !defined(OFFICIAL_BUILD)
// Initialize stack dumping before initializing sandbox to make sure symbol
« no previous file with comments | « services/service_manager/public/cpp/service_test.h ('k') | services/service_manager/public/service_manifest.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698