Start message loop on creation on Android
The message loop has to be started to post tasks on Android. Previously
the message loop is started on PreEarlyInitialization(). Now we need to
post tasks earlier than that. This change starts the message loop when
it being created on Android.
For files:
android_webview/browser/aw_browser_main_parts.cc,
chrome/browser/chrome_browser_main_android.cc,
chromecast/browser/cast_browser_main_parts.cc,
components/cronet/android/cronet_library_loader.cc,
content/shell/browser/shell_browser_main_parts.cc,
remoting/client/chromoting_client_runtime.cc
[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]
Bug: 848615, 729596
Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
Change-Id: I4b2a2afb570096cc56339978ef8e4ba3f3f9ecc7
Reviewed-on: https://chromium-review.googlesource.com/1112958
Commit-Queue: Ran Ji <[email protected]>
Reviewed-by: Ran Ji <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Reviewed-by: Xi Han <[email protected]>
Cr-Commit-Position: refs/heads/master@{#573447}
diff --git a/base/message_loop/message_loop.cc b/base/message_loop/message_loop.cc
index f4cd32c..0ad28fa 100644
--- a/base/message_loop/message_loop.cc
+++ b/base/message_loop/message_loop.cc
@@ -263,6 +263,12 @@
&sequence_local_storage_map_);
RunLoop::RegisterDelegateForCurrentThread(this);
+
+#if defined(OS_ANDROID)
+ // On Android, attach to the native loop when there is one.
+ if (type_ == TYPE_UI || type_ == TYPE_JAVA)
+ static_cast<MessagePumpForUI*>(pump_.get())->Attach(this);
+#endif
}
std::string MessageLoop::GetThreadName() const {
@@ -596,11 +602,6 @@
#endif // defined(OS_IOS)
#if defined(OS_ANDROID)
-void MessageLoopForUI::Start() {
- // No Histogram support for UI message loop as it is managed by Java side
- static_cast<MessagePumpForUI*>(pump_.get())->Start(this);
-}
-
void MessageLoopForUI::Abort() {
static_cast<MessagePumpForUI*>(pump_.get())->Abort();
}
diff --git a/base/message_loop/message_loop.h b/base/message_loop/message_loop.h
index a1c5c40..64838a9 100644
--- a/base/message_loop/message_loop.h
+++ b/base/message_loop/message_loop.h
@@ -363,11 +363,6 @@
#endif
#if defined(OS_ANDROID)
- // On Android, the UI message loop is handled by Java side. So Run() should
- // never be called. Instead use Start(), which will forward all the native UI
- // events to the Java message loop.
- void Start();
-
// In Android there are cases where we want to abort immediately without
// calling Quit(), in these cases we call Abort().
void Abort();
diff --git a/base/message_loop/message_loop_current.cc b/base/message_loop/message_loop_current.cc
index 5554e9f..4959b70 100644
--- a/base/message_loop/message_loop_current.cc
+++ b/base/message_loop/message_loop_current.cc
@@ -168,10 +168,6 @@
#endif // defined(OS_IOS)
#if defined(OS_ANDROID)
-void MessageLoopCurrentForUI::Start() {
- static_cast<MessageLoopForUI*>(current_)->Start();
-}
-
void MessageLoopCurrentForUI::Abort() {
static_cast<MessageLoopForUI*>(current_)->Abort();
}
diff --git a/base/message_loop/message_loop_current.h b/base/message_loop/message_loop_current.h
index 9e19a78..61d1607 100644
--- a/base/message_loop/message_loop_current.h
+++ b/base/message_loop/message_loop_current.h
@@ -225,12 +225,6 @@
#endif
#if defined(OS_ANDROID)
- // Forwards to MessageLoopForUI::Start().
- // TODO(https://crbug.com/825327): Plumb the actual MessageLoopForUI* to
- // callers and remove ability to access this method from
- // MessageLoopCurrentForUI.
- void Start();
-
// Forwards to MessageLoopForUI::Abort().
// TODO(https://crbug.com/825327): Plumb the actual MessageLoopForUI* to
// callers and remove ability to access this method from
diff --git a/base/message_loop/message_pump_android.cc b/base/message_loop/message_pump_android.cc
index 8c5bb57..5f8981d 100644
--- a/base/message_loop/message_pump_android.cc
+++ b/base/message_loop/message_pump_android.cc
@@ -80,7 +80,7 @@
" test_stub_android.h";
}
-void MessagePumpForUI::Start(Delegate* delegate) {
+void MessagePumpForUI::Attach(Delegate* delegate) {
DCHECK(!quit_);
delegate_ = delegate;
run_loop_ = std::make_unique<RunLoop>();
diff --git a/base/message_loop/message_pump_android.h b/base/message_loop/message_pump_android.h
index d09fdde..21f0315 100644
--- a/base/message_loop/message_pump_android.h
+++ b/base/message_loop/message_pump_android.h
@@ -36,7 +36,9 @@
void ScheduleWork() override;
void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
- virtual void Start(Delegate* delegate);
+ // Attaches |delegate| to this native MessagePump. |delegate| will from then
+ // on be invoked by the native loop to process application tasks.
+ virtual void Attach(Delegate* delegate);
// We call Abort when there is a pending JNI exception, meaning that the
// current thread will crash when we return to Java.