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

Unified Diff: base/android/java_handler_thread.cc

Issue 2169553002: Properly throw java exceptions from shouldOverrideUrlLoading (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Better separation of production and test code, and minor cleanups. Created 4 years, 4 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: base/android/java_handler_thread.cc
diff --git a/base/android/java_handler_thread.cc b/base/android/java_handler_thread.cc
index 75270348e6ee15756daa12faf09303d53b5b903a..edd9bfe196d466ab654ca29c6b6f3fcfb2832ca8 100644
--- a/base/android/java_handler_thread.cc
+++ b/base/android/java_handler_thread.cc
@@ -35,8 +35,7 @@ void JavaHandlerThread::Start() {
base::WaitableEvent initialize_event(
WaitableEvent::ResetPolicy::AUTOMATIC,
WaitableEvent::InitialState::NOT_SIGNALED);
- Java_JavaHandlerThread_start(env,
- java_thread_.obj(),
+ Java_JavaHandlerThread_start(env, java_thread_.obj(),
reinterpret_cast<intptr_t>(this),
reinterpret_cast<intptr_t>(&initialize_event));
// Wait for thread to be initialized so it is ready to be used when Start
@@ -45,6 +44,24 @@ void JavaHandlerThread::Start() {
initialize_event.Wait();
}
+void JavaHandlerThread::StartForTesting(base::WaitableEvent* test_done_event) {
+ // Check the thread has not already been started.
+ DCHECK(!message_loop_);
+
+ JNIEnv* env = base::android::AttachCurrentThread();
+ base::WaitableEvent initialize_event(
+ WaitableEvent::ResetPolicy::AUTOMATIC,
+ WaitableEvent::InitialState::NOT_SIGNALED);
+ Java_JavaHandlerThread_startForTesting(
+ env, java_thread_.obj(), reinterpret_cast<intptr_t>(this),
+ reinterpret_cast<intptr_t>(&initialize_event),
+ reinterpret_cast<intptr_t>(test_done_event));
+ // Wait for thread to be initialized so it is ready to be used when Start
+ // returns.
+ base::ThreadRestrictions::ScopedAllowWait wait_allowed;
+ initialize_event.Wait();
+}
+
void JavaHandlerThread::Stop() {
JNIEnv* env = base::android::AttachCurrentThread();
base::WaitableEvent shutdown_event(WaitableEvent::ResetPolicy::AUTOMATIC,
@@ -58,6 +75,18 @@ void JavaHandlerThread::Stop() {
shutdown_event.Wait();
}
+void JavaHandlerThread::StopForTesting() {
+ JNIEnv* env = base::android::AttachCurrentThread();
+ base::WaitableEvent shutdown_event(WaitableEvent::ResetPolicy::AUTOMATIC,
+ WaitableEvent::InitialState::NOT_SIGNALED);
+ Java_JavaHandlerThread_stopForTesting(
+ env, java_thread_.obj(), reinterpret_cast<intptr_t>(this),
+ reinterpret_cast<intptr_t>(&shutdown_event));
+ // Wait for thread to shut down before returning.
+ base::ThreadRestrictions::ScopedAllowWait wait_allowed;
+ shutdown_event.Wait();
+}
+
void JavaHandlerThread::InitializeThread(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jlong event) {
@@ -67,6 +96,19 @@ void JavaHandlerThread::InitializeThread(JNIEnv* env,
reinterpret_cast<base::WaitableEvent*>(event)->Signal();
}
+void JavaHandlerThread::InitializeThreadForTesting(
+ JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ jlong event,
+ jlong test_done_event) {
+ // TYPE_JAVA to get the Android java style message loop.
+ message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_JAVA));
+ static_cast<MessageLoopForUI*>(message_loop_.get())
+ ->StartForTesting(
+ reinterpret_cast<base::WaitableEvent*>(test_done_event));
+ reinterpret_cast<base::WaitableEvent*>(event)->Signal();
+}
+
void JavaHandlerThread::StopThread(JNIEnv* env,
const JavaParamRef<jobject>& obj,
jlong event) {
@@ -74,6 +116,15 @@ void JavaHandlerThread::StopThread(JNIEnv* env,
reinterpret_cast<base::WaitableEvent*>(event)->Signal();
}
+void JavaHandlerThread::StopThreadForTesting(JNIEnv* env,
+ const JavaParamRef<jobject>& obj,
+ jlong event) {
+ static_cast<MessageLoopForUI*>(message_loop_.get())->QuitNow();
+ // The message loop must be destroyed on the thread it is attached to.
+ message_loop_.reset();
+ reinterpret_cast<base::WaitableEvent*>(event)->Signal();
+}
+
// static
bool JavaHandlerThread::RegisterBindings(JNIEnv* env) {
return RegisterNativesImpl(env);

Powered by Google App Engine
This is Rietveld 408576698