Index: components/cronet/android/test/cronet_test_util.cc |
diff --git a/components/cronet/android/test/cronet_test_util.cc b/components/cronet/android/test/cronet_test_util.cc |
index a44e484fab27ca7aae259ac3f37eddc2360e8b90..1c07e76c668f913f66200bfd8d425400b008db2f 100644 |
--- a/components/cronet/android/test/cronet_test_util.cc |
+++ b/components/cronet/android/test/cronet_test_util.cc |
@@ -6,8 +6,10 @@ |
#include "base/android/jni_android.h" |
#include "base/android/jni_string.h" |
+#include "base/message_loop/message_loop.h" |
+#include "base/threading/thread_task_runner_handle.h" |
#include "components/cronet/android/cronet_url_request_adapter.h" |
-#include "components/cronet/android/test/native_test_server.h" |
+#include "components/cronet/android/cronet_url_request_context_adapter.h" |
#include "jni/CronetTestUtil_jni.h" |
#include "net/url_request/url_request.h" |
@@ -17,13 +19,85 @@ namespace cronet { |
jint GetLoadFlags(JNIEnv* env, |
const JavaParamRef<jclass>& jcaller, |
- const jlong urlRequest) { |
- return reinterpret_cast<CronetURLRequestAdapter*>(urlRequest) |
- ->GetURLRequestForTesting() |
- ->load_flags(); |
+ const jlong jurl_request_adapter) { |
+ return TestUtil::GetURLRequest(jurl_request_adapter)->load_flags(); |
} |
-bool RegisterCronetTestUtil(JNIEnv* env) { |
+// static |
+scoped_refptr<base::SingleThreadTaskRunner> TestUtil::GetTaskRunner( |
+ jlong jcontext_adapter) { |
+ CronetURLRequestContextAdapter* context_adapter = |
+ reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter); |
+ return context_adapter->network_thread_->task_runner(); |
+} |
+ |
+// static |
+net::URLRequestContext* TestUtil::GetURLRequestContext(jlong jcontext_adapter) { |
+ CronetURLRequestContextAdapter* context_adapter = |
+ reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter); |
+ return context_adapter->context_.get(); |
+} |
+ |
+// static |
+void TestUtil::RunAfterContextInitOnNetworkThread(jlong jcontext_adapter, |
+ const base::Closure& task) { |
+ CronetURLRequestContextAdapter* context_adapter = |
+ reinterpret_cast<CronetURLRequestContextAdapter*>(jcontext_adapter); |
+ if (context_adapter->is_context_initialized_) { |
+ task.Run(); |
+ } else { |
+ context_adapter->tasks_waiting_for_context_.push(task); |
+ } |
+} |
+ |
+// static |
+void TestUtil::RunAfterContextInit(jlong jcontext_adapter, |
+ const base::Closure& task) { |
+ GetTaskRunner(jcontext_adapter) |
+ ->PostTask(FROM_HERE, |
+ base::Bind(&TestUtil::RunAfterContextInitOnNetworkThread, |
+ jcontext_adapter, task)); |
+} |
+ |
+// static |
+net::URLRequest* TestUtil::GetURLRequest(jlong jrequest_adapter) { |
+ CronetURLRequestAdapter* request_adapter = |
+ reinterpret_cast<CronetURLRequestAdapter*>(jrequest_adapter); |
+ return request_adapter->url_request_.get(); |
+} |
+ |
+static void PrepareNetworkThreadOnNetworkThread(jlong jcontext_adapter) { |
+ (new base::MessageLoopForIO()) |
+ ->SetTaskRunner(TestUtil::GetTaskRunner(jcontext_adapter)); |
+} |
+ |
+// Tests need to call into libcronet.so code on libcronet.so threads. |
+// libcronet.so's threads are registered with static tables for MessageLoops |
+// and SingleThreadTaskRunners in libcronet.so, so libcronet_test.so |
+// functions that try and access these tables will find missing entries in |
+// the corresponding static tables in libcronet_test.so. Fix this by |
+// initializing a MessageLoop and SingleThreadTaskRunner in libcronet_test.so |
+// for these threads. |
+void PrepareNetworkThread(JNIEnv* env, |
mef
2016/11/16 20:01:27
nit: maybe add a comment that this is called from
pauljensen
2016/11/18 18:12:10
Done.
|
+ const JavaParamRef<jclass>& jcaller, |
+ jlong jcontext_adapter) { |
+ TestUtil::GetTaskRunner(jcontext_adapter) |
+ ->PostTask(FROM_HERE, base::Bind(&PrepareNetworkThreadOnNetworkThread, |
+ jcontext_adapter)); |
+} |
+ |
+static void CleanupNetworkThreadOnNetworkThread() { |
+ delete base::MessageLoop::current(); |
+} |
+ |
+void CleanupNetworkThread(JNIEnv* env, |
mef
2016/11/16 20:01:27
nit: maybe add a comment that this is called from
pauljensen
2016/11/18 18:12:10
Done.
|
+ const JavaParamRef<jclass>& jcaller, |
+ jlong jcontext_adapter) { |
+ TestUtil::GetTaskRunner(jcontext_adapter) |
+ ->PostTask(FROM_HERE, base::Bind(&CleanupNetworkThreadOnNetworkThread)); |
+} |
+ |
+bool TestUtil::Register(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |