Chromium Code Reviews| Index: components/cronet/android/test/test_upload_data_stream_handler.cc |
| diff --git a/components/cronet/android/test/test_upload_data_stream_handler.cc b/components/cronet/android/test/test_upload_data_stream_handler.cc |
| index 8ddf76eb2868b1ed646206e80fd170aa8ad6ff56..6214638ea080bab673a9e9713af1e9cf02200904 100644 |
| --- a/components/cronet/android/test/test_upload_data_stream_handler.cc |
| +++ b/components/cronet/android/test/test_upload_data_stream_handler.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "base/bind.h" |
| +#include "components/cronet/android/test/cronet_test_util.h" |
| #include "jni/TestUploadDataStreamHandler_jni.h" |
| #include "net/base/net_errors.h" |
| #include "net/log/net_log_with_source.h" |
| @@ -24,15 +25,13 @@ static const size_t kReadBufferSize = 32768; |
| TestUploadDataStreamHandler::TestUploadDataStreamHandler( |
| std::unique_ptr<net::UploadDataStream> upload_data_stream, |
| JNIEnv* env, |
| - jobject jtest_upload_data_stream_handler) |
| + jobject jtest_upload_data_stream_handler, |
| + jlong jcontext_adapter) |
| : init_callback_invoked_(false), |
| read_callback_invoked_(false), |
| bytes_read_(0), |
| - network_thread_(new base::Thread("network")) { |
| + network_thread_(TestUtil::GetTaskRunner(jcontext_adapter)) { |
| upload_data_stream_ = std::move(upload_data_stream); |
| - base::Thread::Options options; |
| - options.message_loop_type = base::MessageLoop::TYPE_IO; |
| - network_thread_->StartWithOptions(options); |
| jtest_upload_data_stream_handler_.Reset(env, |
| jtest_upload_data_stream_handler); |
| } |
| @@ -43,17 +42,13 @@ TestUploadDataStreamHandler::~TestUploadDataStreamHandler() { |
| void TestUploadDataStreamHandler::Destroy( |
| JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - // Stick network_thread_ in a local, so |this| may be destroyed from the |
| - // network thread before the network thread is destroyed. |
| - std::unique_ptr<base::Thread> network_thread = std::move(network_thread_); |
| - network_thread->task_runner()->DeleteSoon(FROM_HERE, this); |
| - // Deleting thread stops it after all tasks are completed. |
| - network_thread.reset(); |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->DeleteSoon(FROM_HERE, this); |
| + network_thread_ = nullptr; |
|
mef
2016/11/16 18:45:44
I think there is a bug here. If |this| gets destro
pauljensen
2016/11/18 18:12:10
Done.
|
| } |
| void TestUploadDataStreamHandler::OnInitCompleted(int res) { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| init_callback_invoked_ = true; |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| cronet::Java_TestUploadDataStreamHandler_onInitCompleted( |
| @@ -61,7 +56,7 @@ void TestUploadDataStreamHandler::OnInitCompleted(int res) { |
| } |
| void TestUploadDataStreamHandler::OnReadCompleted(int res) { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| read_callback_invoked_ = true; |
| bytes_read_ = res; |
| NotifyJavaReadCompleted(); |
| @@ -69,24 +64,24 @@ void TestUploadDataStreamHandler::OnReadCompleted(int res) { |
| void TestUploadDataStreamHandler::Init(JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - network_thread_->task_runner()->PostTask( |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->PostTask( |
| FROM_HERE, base::Bind(&TestUploadDataStreamHandler::InitOnNetworkThread, |
| base::Unretained(this))); |
| } |
| void TestUploadDataStreamHandler::Read(JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - network_thread_->task_runner()->PostTask( |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->PostTask( |
| FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ReadOnNetworkThread, |
| base::Unretained(this))); |
| } |
| void TestUploadDataStreamHandler::Reset(JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - network_thread_->task_runner()->PostTask( |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->PostTask( |
| FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ResetOnNetworkThread, |
| base::Unretained(this))); |
| } |
| @@ -94,8 +89,8 @@ void TestUploadDataStreamHandler::Reset(JNIEnv* env, |
| void TestUploadDataStreamHandler::CheckInitCallbackNotInvoked( |
| JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - network_thread_->task_runner()->PostTask( |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->PostTask( |
| FROM_HERE, base::Bind(&TestUploadDataStreamHandler:: |
| CheckInitCallbackNotInvokedOnNetworkThread, |
| base::Unretained(this))); |
| @@ -104,15 +99,15 @@ void TestUploadDataStreamHandler::CheckInitCallbackNotInvoked( |
| void TestUploadDataStreamHandler::CheckReadCallbackNotInvoked( |
| JNIEnv* env, |
| const JavaParamRef<jobject>& jcaller) { |
| - DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); |
| - network_thread_->task_runner()->PostTask( |
| + DCHECK(!network_thread_->BelongsToCurrentThread()); |
| + network_thread_->PostTask( |
| FROM_HERE, base::Bind(&TestUploadDataStreamHandler:: |
| CheckReadCallbackNotInvokedOnNetworkThread, |
| base::Unretained(this))); |
| } |
| void TestUploadDataStreamHandler::InitOnNetworkThread() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| init_callback_invoked_ = false; |
| read_buffer_ = nullptr; |
| bytes_read_ = 0; |
| @@ -131,7 +126,7 @@ void TestUploadDataStreamHandler::InitOnNetworkThread() { |
| } |
| void TestUploadDataStreamHandler::ReadOnNetworkThread() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| read_callback_invoked_ = false; |
| if (!read_buffer_.get()) |
| read_buffer_ = new net::IOBufferWithSize(kReadBufferSize); |
| @@ -147,7 +142,7 @@ void TestUploadDataStreamHandler::ReadOnNetworkThread() { |
| } |
| void TestUploadDataStreamHandler::ResetOnNetworkThread() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| read_buffer_ = nullptr; |
| bytes_read_ = 0; |
| upload_data_stream_->Reset(); |
| @@ -157,21 +152,21 @@ void TestUploadDataStreamHandler::ResetOnNetworkThread() { |
| } |
| void TestUploadDataStreamHandler::CheckInitCallbackNotInvokedOnNetworkThread() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| cronet::Java_TestUploadDataStreamHandler_onCheckInitCallbackNotInvoked( |
| env, jtest_upload_data_stream_handler_, !init_callback_invoked_); |
| } |
| void TestUploadDataStreamHandler::CheckReadCallbackNotInvokedOnNetworkThread() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| cronet::Java_TestUploadDataStreamHandler_onCheckReadCallbackNotInvoked( |
| env, jtest_upload_data_stream_handler_, !read_callback_invoked_); |
| } |
| void TestUploadDataStreamHandler::NotifyJavaReadCompleted() { |
| - DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); |
| + DCHECK(network_thread_->BelongsToCurrentThread()); |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| std::string data_read = ""; |
| if (read_buffer_.get() && bytes_read_ > 0) |
| @@ -184,11 +179,13 @@ void TestUploadDataStreamHandler::NotifyJavaReadCompleted() { |
| static jlong CreateTestUploadDataStreamHandler( |
| JNIEnv* env, |
| const JavaParamRef<jobject>& jtest_upload_data_stream_handler, |
| - jlong jupload_data_stream) { |
| + jlong jupload_data_stream, |
| + jlong jcontext_adapter) { |
| std::unique_ptr<net::UploadDataStream> upload_data_stream( |
| reinterpret_cast<net::UploadDataStream*>(jupload_data_stream)); |
| TestUploadDataStreamHandler* handler = new TestUploadDataStreamHandler( |
| - std::move(upload_data_stream), env, jtest_upload_data_stream_handler); |
| + std::move(upload_data_stream), env, jtest_upload_data_stream_handler, |
| + jcontext_adapter); |
| return reinterpret_cast<jlong>(handler); |
| } |