Moves android specific code into android directory
This moves android specific code out of the shared code and into the
place that needs it.
BUG=none
TEST=none
R=qsr@chromium.org, davemoore@chromium.org
Review URL: https://codereview.chromium.org/805113002
diff --git a/shell/BUILD.gn b/shell/BUILD.gn
index 5468555..c9856e0 100644
--- a/shell/BUILD.gn
+++ b/shell/BUILD.gn
@@ -160,8 +160,6 @@
"task_runners.h",
"test_child_process.cc",
"test_child_process.h",
- "ui_application_loader_android.cc",
- "ui_application_loader_android.h",
]
deps = [
@@ -192,10 +190,12 @@
if (is_android) {
sources += [
- "android/android_handler.h",
"android/android_handler.cc",
- "android/android_handler_loader.h",
+ "android/android_handler.h",
"android/android_handler_loader.cc",
+ "android/android_handler_loader.h",
+ "android/ui_application_loader_android.cc",
+ "android/ui_application_loader_android.h",
]
deps += [
@@ -223,7 +223,7 @@
"android/apk/src/org/chromium/mojo_shell_apk/Bootstrap.java",
"android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java",
]
- jni_package = "mojo"
+ jni_package = "mojo/shell"
}
android_library("bootstrap_java") {
diff --git a/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java b/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
index 1d904c1..43e0c92 100644
--- a/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
+++ b/shell/android/apk/src/org/chromium/mojo_shell_apk/MojoMain.java
@@ -17,7 +17,7 @@
/**
* A placeholder class to call native functions.
**/
-@JNINamespace("mojo")
+@JNINamespace("mojo::shell")
public class MojoMain {
private static final String TAG = "MojoMain";
diff --git a/shell/android/library_loader.cc b/shell/android/library_loader.cc
index 963e285..c112db6 100644
--- a/shell/android/library_loader.cc
+++ b/shell/android/library_loader.cc
@@ -15,7 +15,7 @@
base::android::RegistrationMethod kMojoRegisteredMethods[] = {
{"AndroidHandler", mojo::RegisterAndroidHandlerJni},
- {"MojoMain", mojo::RegisterMojoMain},
+ {"MojoMain", mojo::shell::RegisterMojoMain},
{"PlatformViewportAndroid",
native_viewport::PlatformViewportAndroid::Register},
};
diff --git a/shell/android/mojo_main.cc b/shell/android/mojo_main.cc
index b8bada5..a91ef2f 100644
--- a/shell/android/mojo_main.cc
+++ b/shell/android/mojo_main.cc
@@ -19,6 +19,11 @@
#include "jni/MojoMain_jni.h"
#include "mojo/application_manager/application_loader.h"
#include "mojo/application_manager/application_manager.h"
+#include "mojo/application_manager/background_shell_application_loader.h"
+#include "services/gles2/gpu_impl.h"
+#include "services/native_viewport/native_viewport_impl.h"
+#include "shell/android/android_handler_loader.h"
+#include "shell/android/ui_application_loader_android.h"
#include "shell/context.h"
#include "shell/init.h"
#include "ui/gl/gl_surface_egl.h"
@@ -26,21 +31,86 @@
using base::LazyInstance;
namespace mojo {
+namespace shell {
namespace {
LazyInstance<scoped_ptr<base::MessageLoop>> g_java_message_loop =
LAZY_INSTANCE_INITIALIZER;
-LazyInstance<scoped_ptr<shell::Context>> g_context = LAZY_INSTANCE_INITIALIZER;
+LazyInstance<scoped_ptr<Context>> g_context = LAZY_INSTANCE_INITIALIZER;
LazyInstance<scoped_ptr<base::android::JavaHandlerThread>> g_shell_thread =
LAZY_INSTANCE_INITIALIZER;
+class NativeViewportApplicationLoader : public ApplicationLoader,
+ public ApplicationDelegate,
+ public InterfaceFactory<NativeViewport>,
+ public InterfaceFactory<Gpu> {
+ public:
+ NativeViewportApplicationLoader() : gpu_state_(new gles2::GpuImpl::State) {}
+ ~NativeViewportApplicationLoader() override {}
+
+ private:
+ // ApplicationLoader implementation.
+ void Load(ApplicationManager* manager,
+ const GURL& url,
+ ScopedMessagePipeHandle shell_handle,
+ LoadCallback callback) override {
+ DCHECK(shell_handle.is_valid());
+ app_.reset(new ApplicationImpl(this, shell_handle.Pass()));
+ }
+
+ void OnApplicationError(ApplicationManager* manager,
+ const GURL& url) override {}
+
+ // ApplicationDelegate implementation.
+ bool ConfigureIncomingConnection(
+ mojo::ApplicationConnection* connection) override {
+ connection->AddService<NativeViewport>(this);
+ connection->AddService<Gpu>(this);
+ return true;
+ }
+
+ // InterfaceFactory<NativeViewport> implementation.
+ void Create(ApplicationConnection* connection,
+ InterfaceRequest<NativeViewport> request) override {
+ BindToRequest(new native_viewport::NativeViewportImpl(app_.get(), false),
+ &request);
+ }
+
+ // InterfaceFactory<Gpu> implementation.
+ void Create(ApplicationConnection* connection,
+ InterfaceRequest<Gpu> request) override {
+ new gles2::GpuImpl(request.Pass(), gpu_state_);
+ }
+
+ scoped_refptr<gles2::GpuImpl::State> gpu_state_;
+ scoped_ptr<ApplicationImpl> app_;
+ DISALLOW_COPY_AND_ASSIGN(NativeViewportApplicationLoader);
+};
+
+void ConfigureAndroidServices(Context* context) {
+ context->application_manager()->SetLoaderForURL(
+ make_scoped_ptr(new UIApplicationLoader(
+ make_scoped_ptr(new NativeViewportApplicationLoader()),
+ g_java_message_loop.Get().get())),
+ GURL("mojo:native_viewport_service"));
+
+ // Android handler is bundled with the Mojo shell, because it uses the
+ // MojoShell application as the JNI bridge to bootstrap execution of other
+ // Android Mojo apps that need JNI.
+ context->application_manager()->SetLoaderForURL(
+ make_scoped_ptr(new BackgroundShellApplicationLoader(
+ make_scoped_ptr(new AndroidHandlerLoader()), "android_handler",
+ base::MessageLoop::TYPE_DEFAULT)),
+ GURL("mojo:android_handler"));
+}
+
void RunShell(std::vector<GURL> app_urls) {
- shell::Context* context = g_context.Pointer()->get();
+ Context* context = g_context.Pointer()->get();
context->Init();
- context->set_ui_loop(g_java_message_loop.Get().get());
+ ConfigureAndroidServices(context);
for (std::vector<GURL>::const_iterator it = app_urls.begin();
it != app_urls.end(); ++it) {
context->Run(*it);
@@ -62,12 +132,12 @@
base::FilePath mojo_shell_file_path(
base::android::ConvertJavaStringToUTF8(env, mojo_shell_path));
base::CommandLine::ForCurrentProcess()->SetProgram(mojo_shell_file_path);
- mojo::shell::InitializeLogging();
+ InitializeLogging();
// We want ~MessageLoop to happen prior to ~Context. Initializing
// LazyInstances is akin to stack-allocating objects; their destructors
// will be invoked first-in-last-out.
- shell::Context* shell_context = new shell::Context();
+ Context* shell_context = new Context();
shell_context->mojo_url_resolver()->SetLocalAppsPath(base::FilePath(
base::android::ConvertJavaStringToUTF8(env, j_local_apps_directory)));
g_context.Get().reset(shell_context);
@@ -103,4 +173,5 @@
return RegisterNativesImpl(env);
}
+} // namespace shell
} // namespace mojo
diff --git a/shell/android/mojo_main.h b/shell/android/mojo_main.h
index 65fec20..bc2e9f1 100644
--- a/shell/android/mojo_main.h
+++ b/shell/android/mojo_main.h
@@ -8,9 +8,11 @@
#include <jni.h>
namespace mojo {
+namespace shell {
bool RegisterMojoMain(JNIEnv* env);
+} // namespace shell
} // namespace mojo
#endif // SHELL_ANDROID_MOJO_MAIN_H_
diff --git a/shell/ui_application_loader_android.cc b/shell/android/ui_application_loader_android.cc
similarity index 85%
rename from shell/ui_application_loader_android.cc
rename to shell/android/ui_application_loader_android.cc
index 7c2f2e3..ca4ff8b 100644
--- a/shell/ui_application_loader_android.cc
+++ b/shell/android/ui_application_loader_android.cc
@@ -2,22 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "shell/ui_application_loader_android.h"
+#include "shell/android/ui_application_loader_android.h"
#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
#include "mojo/application_manager/application_manager.h"
-#include "shell/context.h"
namespace mojo {
UIApplicationLoader::UIApplicationLoader(
scoped_ptr<ApplicationLoader> real_loader,
- shell::Context* context)
- : loader_(real_loader.Pass()), context_(context) {
+ base::MessageLoop* ui_message_loop)
+ : loader_(real_loader.Pass()), ui_message_loop_(ui_message_loop) {
}
UIApplicationLoader::~UIApplicationLoader() {
- context_->ui_loop()->PostTask(
+ ui_message_loop_->PostTask(
FROM_HERE, base::Bind(&UIApplicationLoader::ShutdownOnUIThread,
base::Unretained(this)));
}
@@ -27,7 +27,7 @@
ScopedMessagePipeHandle shell_handle,
LoadCallback callback) {
DCHECK(shell_handle.is_valid());
- context_->ui_loop()->PostTask(
+ ui_message_loop_->PostTask(
FROM_HERE,
base::Bind(&UIApplicationLoader::LoadOnUIThread, base::Unretained(this),
manager, url, base::Passed(&shell_handle)));
@@ -35,7 +35,7 @@
void UIApplicationLoader::OnApplicationError(ApplicationManager* manager,
const GURL& url) {
- context_->ui_loop()->PostTask(
+ ui_message_loop_->PostTask(
FROM_HERE, base::Bind(&UIApplicationLoader::OnApplicationErrorOnUIThread,
base::Unretained(this), manager, url));
}
diff --git a/shell/ui_application_loader_android.h b/shell/android/ui_application_loader_android.h
similarity index 83%
rename from shell/ui_application_loader_android.h
rename to shell/android/ui_application_loader_android.h
index 64b13f0..7de34c7 100644
--- a/shell/ui_application_loader_android.h
+++ b/shell/android/ui_application_loader_android.h
@@ -2,28 +2,28 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef SHELL_UI_APPLICATION_LOADER_ANDROID_H_
-#define SHELL_UI_APPLICATION_LOADER_ANDROID_H_
+#ifndef SHELL_ANDROID_UI_APPLICATION_LOADER_ANDROID_H_
+#define SHELL_ANDROID_UI_APPLICATION_LOADER_ANDROID_H_
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "mojo/application_manager/application_loader.h"
+namespace base {
+class MessageLoop;
+}
+
namespace mojo {
class ApplicationManager;
-namespace shell {
-class Context;
-}
-
// ApplicationLoader implementation that creates a background thread and issues
// load
// requests there.
class UIApplicationLoader : public ApplicationLoader {
public:
UIApplicationLoader(scoped_ptr<ApplicationLoader> real_loader,
- shell::Context* context);
+ base::MessageLoop* ui_message_loop);
~UIApplicationLoader() override;
// ApplicationLoader overrides:
@@ -49,11 +49,11 @@
void ShutdownOnUIThread();
scoped_ptr<ApplicationLoader> loader_;
- shell::Context* context_;
+ base::MessageLoop* ui_message_loop_;
DISALLOW_COPY_AND_ASSIGN(UIApplicationLoader);
};
} // namespace mojo
-#endif // SHELL_UI_APPLICATION_LOADER_ANDROID_H_
+#endif // SHELL_ANDROID_UI_APPLICATION_LOADER_ANDROID_H_
diff --git a/shell/context.cc b/shell/context.cc
index b034fc5..c38de5e 100644
--- a/shell/context.cc
+++ b/shell/context.cc
@@ -31,15 +31,8 @@
#include "shell/in_process_dynamic_service_runner.h"
#include "shell/out_of_process_dynamic_service_runner.h"
#include "shell/switches.h"
-#include "shell/ui_application_loader_android.h"
#include "url/gurl.h"
-#if defined(OS_ANDROID)
-#include "services/gles2/gpu_impl.h"
-#include "services/native_viewport/native_viewport_impl.h"
-#include "shell/android/android_handler_loader.h"
-#endif // defined(OS_ANDROID)
-
namespace mojo {
namespace shell {
namespace {
@@ -122,56 +115,6 @@
} // namespace
-#if defined(OS_ANDROID)
-class Context::NativeViewportApplicationLoader
- : public ApplicationLoader,
- public ApplicationDelegate,
- public InterfaceFactory<NativeViewport>,
- public InterfaceFactory<Gpu> {
- public:
- NativeViewportApplicationLoader() : gpu_state_(new gles2::GpuImpl::State) {}
- virtual ~NativeViewportApplicationLoader() {}
-
- private:
- // ApplicationLoader implementation.
- virtual void Load(ApplicationManager* manager,
- const GURL& url,
- ScopedMessagePipeHandle shell_handle,
- LoadCallback callback) override {
- DCHECK(shell_handle.is_valid());
- app_.reset(new ApplicationImpl(this, shell_handle.Pass()));
- }
-
- virtual void OnApplicationError(ApplicationManager* manager,
- const GURL& url) override {}
-
- // ApplicationDelegate implementation.
- virtual bool ConfigureIncomingConnection(
- mojo::ApplicationConnection* connection) override {
- connection->AddService<NativeViewport>(this);
- connection->AddService<Gpu>(this);
- return true;
- }
-
- // InterfaceFactory<NativeViewport> implementation.
- virtual void Create(ApplicationConnection* connection,
- InterfaceRequest<NativeViewport> request) override {
- BindToRequest(new native_viewport::NativeViewportImpl(app_.get(), false),
- &request);
- }
-
- // InterfaceFactory<Gpu> implementation.
- virtual void Create(ApplicationConnection* connection,
- InterfaceRequest<Gpu> request) override {
- new gles2::GpuImpl(request.Pass(), gpu_state_);
- }
-
- scoped_refptr<gles2::GpuImpl::State> gpu_state_;
- scoped_ptr<ApplicationImpl> app_;
- DISALLOW_COPY_AND_ASSIGN(NativeViewportApplicationLoader);
-};
-#endif
-
Context::Context() : application_manager_(this) {
DCHECK(!base::MessageLoop::current());
}
@@ -231,17 +174,6 @@
application_manager_.set_default_loader(
scoped_ptr<ApplicationLoader>(dynamic_application_loader));
-// The native viewport service synchronously waits for certain messages. If we
-// don't run it on its own thread we can easily deadlock. Long term native
-// viewport should run its own process so that this isn't an issue.
-#if defined(OS_ANDROID)
- application_manager_.SetLoaderForURL(
- scoped_ptr<ApplicationLoader>(new UIApplicationLoader(
- scoped_ptr<ApplicationLoader>(new NativeViewportApplicationLoader()),
- this)),
- GURL("mojo:native_viewport_service"));
-#endif
-
if (command_line->HasSwitch(switches::kSpy)) {
spy_.reset(
new mojo::Spy(&application_manager_,
@@ -251,20 +183,6 @@
// was implemented by src\mojo\spy\websocket_server.h and .cc.
}
-#if defined(OS_ANDROID)
- {
- // Android handler is bundled with the Mojo shell, because it uses the
- // MojoShell application as the JNI bridge to bootstrap execution of other
- // Android Mojo apps that need JNI.
- scoped_ptr<BackgroundShellApplicationLoader> loader(
- new BackgroundShellApplicationLoader(
- scoped_ptr<ApplicationLoader>(new AndroidHandlerLoader()),
- "android_handler", base::MessageLoop::TYPE_DEFAULT));
- application_manager_.SetLoaderForURL(loader.Pass(),
- GURL("mojo:android_handler"));
- }
-#endif
-
tracing::TraceDataCollectorPtr trace_data_collector_ptr;
application_manager_.ConnectToService(GURL("mojo:tracing"),
&trace_data_collector_ptr);
diff --git a/shell/context.h b/shell/context.h
index 71ef68b..b7f129a 100644
--- a/shell/context.h
+++ b/shell/context.h
@@ -12,10 +12,6 @@
#include "shell/mojo_url_resolver.h"
#include "shell/task_runners.h"
-#if defined(OS_ANDROID)
-#include "base/android/scoped_java_ref.h"
-#endif // defined(OS_ANDROID)
-
namespace mojo {
class Spy;
@@ -43,11 +39,6 @@
ApplicationManager* application_manager() { return &application_manager_; }
MojoURLResolver* mojo_url_resolver() { return &mojo_url_resolver_; }
-#if defined(OS_ANDROID)
- base::MessageLoop* ui_loop() const { return ui_loop_; }
- void set_ui_loop(base::MessageLoop* ui_loop) { ui_loop_ = ui_loop; }
-#endif // defined(OS_ANDROID)
-
private:
class NativeViewportApplicationLoader;
@@ -61,9 +52,6 @@
ApplicationManager application_manager_;
MojoURLResolver mojo_url_resolver_;
scoped_ptr<Spy> spy_;
-#if defined(OS_ANDROID)
- base::MessageLoop* ui_loop_;
-#endif // defined(OS_ANDROID)
DISALLOW_COPY_AND_ASSIGN(Context);
};