| 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 {
|
| + 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) {
|
|
|