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

Unified Diff: content/app/android/content_main.cc

Issue 2613653003: Move some basic early process init into Service Manager (Closed)
Patch Set: . Created 3 years, 9 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: content/app/android/content_main.cc
diff --git a/content/app/android/content_main.cc b/content/app/android/content_main.cc
index d6a1eecff0cfaf7bc6f63827418ef58066107954..fcdc17de91b76cfefee471a57269798bbfc74a7e 100644
--- a/content/app/android/content_main.cc
+++ b/content/app/android/content_main.cc
@@ -10,12 +10,15 @@
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/lazy_instance.h"
+#include "base/memory/ptr_util.h"
#include "base/trace_event/trace_event.h"
#include "content/public/app/content_main.h"
#include "content/public/app/content_main_delegate.h"
#include "content/public/app/content_main_runner.h"
#include "content/public/common/content_switches.h"
#include "jni/ContentMain_jni.h"
+#include "services/service_manager/embedder/main.h"
+#include "services/service_manager/embedder/main_delegate.h"
using base::LazyInstance;
using base::android::JavaParamRef;
@@ -23,12 +26,42 @@ using base::android::JavaParamRef;
namespace content {
namespace {
-LazyInstance<std::unique_ptr<ContentMainRunner>>::DestructorAtExit
- g_content_runner = LAZY_INSTANCE_INITIALIZER;
+
+LazyInstance<std::unique_ptr<service_manager::MainDelegate>>::DestructorAtExit
+ g_service_manager_main_delegate = LAZY_INSTANCE_INITIALIZER;
LazyInstance<std::unique_ptr<ContentMainDelegate>>::DestructorAtExit
g_content_main_delegate = LAZY_INSTANCE_INITIALIZER;
+class ContentServiceManagerMainDelegate : public service_manager::MainDelegate {
jam 2017/03/20 15:06:16 why isn't this shared with the version in content/
Ken Rockot(use gerrit already) 2017/03/20 17:27:05 There were reasons, but in retrospect they weren't
+ public:
+ explicit ContentServiceManagerMainDelegate(
+ ContentMainDelegate* content_main_delegate)
+ : content_main_params_(content_main_delegate),
+ main_runner_(ContentMainRunner::Create()) {}
+ ~ContentServiceManagerMainDelegate() override {}
+
+ // service_manager::MainDelegate:
+ bool Initialize(const InitializeParams& params, int* exit_code) override {
+ // If service_manager::Main is invoked multiple times, we only do real
+ // initialization the first time.
+ if (!initialized_) {
+ initialized_ = true;
+ main_runner_->Initialize(content_main_params_);
+ }
+ return true;
+ }
+
+ int Run() override { return main_runner_->Run(); }
+
+ void ShutDown() override {}
+
+ private:
+ const ContentMainParams content_main_params_;
+ bool initialized_ = false;
+ std::unique_ptr<ContentMainRunner> main_runner_;
+};
+
} // namespace
static jint Start(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
@@ -38,12 +71,15 @@ static jint Start(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
// simultaneously. If we get an asynchonous request followed by a synchronous
// request then we have to call this a second time to finish starting the
// browser synchronously.
- if (!g_content_runner.Get().get()) {
- ContentMainParams params(g_content_main_delegate.Get().get());
- g_content_runner.Get().reset(ContentMainRunner::Create());
- g_content_runner.Get()->Initialize(params);
+ if (!g_service_manager_main_delegate.Get()) {
+ g_service_manager_main_delegate.Get() =
+ base::MakeUnique<ContentServiceManagerMainDelegate>(
+ g_content_main_delegate.Get().get());
}
- return g_content_runner.Get()->Run();
+
+ service_manager::MainParams main_params(
+ g_service_manager_main_delegate.Get().get());
+ return service_manager::Main(main_params);
}
void SetContentMainDelegate(ContentMainDelegate* delegate) {

Powered by Google App Engine
This is Rietveld 408576698