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

Side by Side Diff: components/cronet/android/test/test_upload_data_stream_handler.cc

Issue 2406273002: [Cronet] Test the libcronet that's shipped, not libcronet_test (Closed)
Patch Set: address two remaining comments Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/cronet/android/test/test_upload_data_stream_handler.h" 5 #include "components/cronet/android/test/test_upload_data_stream_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "components/cronet/android/test/cronet_test_util.h"
14 #include "jni/TestUploadDataStreamHandler_jni.h" 15 #include "jni/TestUploadDataStreamHandler_jni.h"
15 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
16 #include "net/log/net_log_with_source.h" 17 #include "net/log/net_log_with_source.h"
17 18
18 using base::android::JavaParamRef; 19 using base::android::JavaParamRef;
19 20
20 namespace cronet { 21 namespace cronet {
21 22
22 static const size_t kReadBufferSize = 32768; 23 static const size_t kReadBufferSize = 32768;
23 24
24 TestUploadDataStreamHandler::TestUploadDataStreamHandler( 25 TestUploadDataStreamHandler::TestUploadDataStreamHandler(
25 std::unique_ptr<net::UploadDataStream> upload_data_stream, 26 std::unique_ptr<net::UploadDataStream> upload_data_stream,
26 JNIEnv* env, 27 JNIEnv* env,
27 jobject jtest_upload_data_stream_handler) 28 jobject jtest_upload_data_stream_handler,
29 jlong jcontext_adapter)
28 : init_callback_invoked_(false), 30 : init_callback_invoked_(false),
29 read_callback_invoked_(false), 31 read_callback_invoked_(false),
30 bytes_read_(0), 32 bytes_read_(0),
31 network_thread_(new base::Thread("network")) { 33 network_thread_(TestUtil::GetTaskRunner(jcontext_adapter)) {
32 upload_data_stream_ = std::move(upload_data_stream); 34 upload_data_stream_ = std::move(upload_data_stream);
33 base::Thread::Options options;
34 options.message_loop_type = base::MessageLoop::TYPE_IO;
35 network_thread_->StartWithOptions(options);
36 jtest_upload_data_stream_handler_.Reset(env, 35 jtest_upload_data_stream_handler_.Reset(env,
37 jtest_upload_data_stream_handler); 36 jtest_upload_data_stream_handler);
38 } 37 }
39 38
40 TestUploadDataStreamHandler::~TestUploadDataStreamHandler() { 39 TestUploadDataStreamHandler::~TestUploadDataStreamHandler() {
41 } 40 }
42 41
43 void TestUploadDataStreamHandler::Destroy( 42 void TestUploadDataStreamHandler::Destroy(
44 JNIEnv* env, 43 JNIEnv* env,
45 const JavaParamRef<jobject>& jcaller) { 44 const JavaParamRef<jobject>& jcaller) {
46 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 45 DCHECK(!network_thread_->BelongsToCurrentThread());
47 // Stick network_thread_ in a local, so |this| may be destroyed from the 46 network_thread_->DeleteSoon(FROM_HERE, this);
48 // network thread before the network thread is destroyed. 47 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.
49 std::unique_ptr<base::Thread> network_thread = std::move(network_thread_);
50 network_thread->task_runner()->DeleteSoon(FROM_HERE, this);
51 // Deleting thread stops it after all tasks are completed.
52 network_thread.reset();
53 } 48 }
54 49
55 void TestUploadDataStreamHandler::OnInitCompleted(int res) { 50 void TestUploadDataStreamHandler::OnInitCompleted(int res) {
56 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 51 DCHECK(network_thread_->BelongsToCurrentThread());
57 init_callback_invoked_ = true; 52 init_callback_invoked_ = true;
58 JNIEnv* env = base::android::AttachCurrentThread(); 53 JNIEnv* env = base::android::AttachCurrentThread();
59 cronet::Java_TestUploadDataStreamHandler_onInitCompleted( 54 cronet::Java_TestUploadDataStreamHandler_onInitCompleted(
60 env, jtest_upload_data_stream_handler_, res); 55 env, jtest_upload_data_stream_handler_, res);
61 } 56 }
62 57
63 void TestUploadDataStreamHandler::OnReadCompleted(int res) { 58 void TestUploadDataStreamHandler::OnReadCompleted(int res) {
64 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 59 DCHECK(network_thread_->BelongsToCurrentThread());
65 read_callback_invoked_ = true; 60 read_callback_invoked_ = true;
66 bytes_read_ = res; 61 bytes_read_ = res;
67 NotifyJavaReadCompleted(); 62 NotifyJavaReadCompleted();
68 } 63 }
69 64
70 void TestUploadDataStreamHandler::Init(JNIEnv* env, 65 void TestUploadDataStreamHandler::Init(JNIEnv* env,
71 const JavaParamRef<jobject>& jcaller) { 66 const JavaParamRef<jobject>& jcaller) {
72 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 67 DCHECK(!network_thread_->BelongsToCurrentThread());
73 network_thread_->task_runner()->PostTask( 68 network_thread_->PostTask(
74 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::InitOnNetworkThread, 69 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::InitOnNetworkThread,
75 base::Unretained(this))); 70 base::Unretained(this)));
76 } 71 }
77 72
78 void TestUploadDataStreamHandler::Read(JNIEnv* env, 73 void TestUploadDataStreamHandler::Read(JNIEnv* env,
79 const JavaParamRef<jobject>& jcaller) { 74 const JavaParamRef<jobject>& jcaller) {
80 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 75 DCHECK(!network_thread_->BelongsToCurrentThread());
81 network_thread_->task_runner()->PostTask( 76 network_thread_->PostTask(
82 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ReadOnNetworkThread, 77 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ReadOnNetworkThread,
83 base::Unretained(this))); 78 base::Unretained(this)));
84 } 79 }
85 80
86 void TestUploadDataStreamHandler::Reset(JNIEnv* env, 81 void TestUploadDataStreamHandler::Reset(JNIEnv* env,
87 const JavaParamRef<jobject>& jcaller) { 82 const JavaParamRef<jobject>& jcaller) {
88 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 83 DCHECK(!network_thread_->BelongsToCurrentThread());
89 network_thread_->task_runner()->PostTask( 84 network_thread_->PostTask(
90 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ResetOnNetworkThread, 85 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::ResetOnNetworkThread,
91 base::Unretained(this))); 86 base::Unretained(this)));
92 } 87 }
93 88
94 void TestUploadDataStreamHandler::CheckInitCallbackNotInvoked( 89 void TestUploadDataStreamHandler::CheckInitCallbackNotInvoked(
95 JNIEnv* env, 90 JNIEnv* env,
96 const JavaParamRef<jobject>& jcaller) { 91 const JavaParamRef<jobject>& jcaller) {
97 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 92 DCHECK(!network_thread_->BelongsToCurrentThread());
98 network_thread_->task_runner()->PostTask( 93 network_thread_->PostTask(
99 FROM_HERE, base::Bind(&TestUploadDataStreamHandler:: 94 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::
100 CheckInitCallbackNotInvokedOnNetworkThread, 95 CheckInitCallbackNotInvokedOnNetworkThread,
101 base::Unretained(this))); 96 base::Unretained(this)));
102 } 97 }
103 98
104 void TestUploadDataStreamHandler::CheckReadCallbackNotInvoked( 99 void TestUploadDataStreamHandler::CheckReadCallbackNotInvoked(
105 JNIEnv* env, 100 JNIEnv* env,
106 const JavaParamRef<jobject>& jcaller) { 101 const JavaParamRef<jobject>& jcaller) {
107 DCHECK(!network_thread_->task_runner()->BelongsToCurrentThread()); 102 DCHECK(!network_thread_->BelongsToCurrentThread());
108 network_thread_->task_runner()->PostTask( 103 network_thread_->PostTask(
109 FROM_HERE, base::Bind(&TestUploadDataStreamHandler:: 104 FROM_HERE, base::Bind(&TestUploadDataStreamHandler::
110 CheckReadCallbackNotInvokedOnNetworkThread, 105 CheckReadCallbackNotInvokedOnNetworkThread,
111 base::Unretained(this))); 106 base::Unretained(this)));
112 } 107 }
113 108
114 void TestUploadDataStreamHandler::InitOnNetworkThread() { 109 void TestUploadDataStreamHandler::InitOnNetworkThread() {
115 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 110 DCHECK(network_thread_->BelongsToCurrentThread());
116 init_callback_invoked_ = false; 111 init_callback_invoked_ = false;
117 read_buffer_ = nullptr; 112 read_buffer_ = nullptr;
118 bytes_read_ = 0; 113 bytes_read_ = 0;
119 int res = upload_data_stream_->Init( 114 int res = upload_data_stream_->Init(
120 base::Bind(&TestUploadDataStreamHandler::OnInitCompleted, 115 base::Bind(&TestUploadDataStreamHandler::OnInitCompleted,
121 base::Unretained(this)), 116 base::Unretained(this)),
122 net::NetLogWithSource()); 117 net::NetLogWithSource());
123 JNIEnv* env = base::android::AttachCurrentThread(); 118 JNIEnv* env = base::android::AttachCurrentThread();
124 cronet::Java_TestUploadDataStreamHandler_onInitCalled( 119 cronet::Java_TestUploadDataStreamHandler_onInitCalled(
125 env, jtest_upload_data_stream_handler_, res); 120 env, jtest_upload_data_stream_handler_, res);
126 121
127 if (res == net::OK) { 122 if (res == net::OK) {
128 cronet::Java_TestUploadDataStreamHandler_onInitCompleted( 123 cronet::Java_TestUploadDataStreamHandler_onInitCompleted(
129 env, jtest_upload_data_stream_handler_, res); 124 env, jtest_upload_data_stream_handler_, res);
130 } 125 }
131 } 126 }
132 127
133 void TestUploadDataStreamHandler::ReadOnNetworkThread() { 128 void TestUploadDataStreamHandler::ReadOnNetworkThread() {
134 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 129 DCHECK(network_thread_->BelongsToCurrentThread());
135 read_callback_invoked_ = false; 130 read_callback_invoked_ = false;
136 if (!read_buffer_.get()) 131 if (!read_buffer_.get())
137 read_buffer_ = new net::IOBufferWithSize(kReadBufferSize); 132 read_buffer_ = new net::IOBufferWithSize(kReadBufferSize);
138 133
139 int bytes_read = upload_data_stream_->Read( 134 int bytes_read = upload_data_stream_->Read(
140 read_buffer_.get(), kReadBufferSize, 135 read_buffer_.get(), kReadBufferSize,
141 base::Bind(&TestUploadDataStreamHandler::OnReadCompleted, 136 base::Bind(&TestUploadDataStreamHandler::OnReadCompleted,
142 base::Unretained(this))); 137 base::Unretained(this)));
143 if (bytes_read == net::OK) { 138 if (bytes_read == net::OK) {
144 bytes_read_ = bytes_read; 139 bytes_read_ = bytes_read;
145 NotifyJavaReadCompleted(); 140 NotifyJavaReadCompleted();
146 } 141 }
147 } 142 }
148 143
149 void TestUploadDataStreamHandler::ResetOnNetworkThread() { 144 void TestUploadDataStreamHandler::ResetOnNetworkThread() {
150 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 145 DCHECK(network_thread_->BelongsToCurrentThread());
151 read_buffer_ = nullptr; 146 read_buffer_ = nullptr;
152 bytes_read_ = 0; 147 bytes_read_ = 0;
153 upload_data_stream_->Reset(); 148 upload_data_stream_->Reset();
154 JNIEnv* env = base::android::AttachCurrentThread(); 149 JNIEnv* env = base::android::AttachCurrentThread();
155 cronet::Java_TestUploadDataStreamHandler_onResetCompleted( 150 cronet::Java_TestUploadDataStreamHandler_onResetCompleted(
156 env, jtest_upload_data_stream_handler_); 151 env, jtest_upload_data_stream_handler_);
157 } 152 }
158 153
159 void TestUploadDataStreamHandler::CheckInitCallbackNotInvokedOnNetworkThread() { 154 void TestUploadDataStreamHandler::CheckInitCallbackNotInvokedOnNetworkThread() {
160 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 155 DCHECK(network_thread_->BelongsToCurrentThread());
161 JNIEnv* env = base::android::AttachCurrentThread(); 156 JNIEnv* env = base::android::AttachCurrentThread();
162 cronet::Java_TestUploadDataStreamHandler_onCheckInitCallbackNotInvoked( 157 cronet::Java_TestUploadDataStreamHandler_onCheckInitCallbackNotInvoked(
163 env, jtest_upload_data_stream_handler_, !init_callback_invoked_); 158 env, jtest_upload_data_stream_handler_, !init_callback_invoked_);
164 } 159 }
165 160
166 void TestUploadDataStreamHandler::CheckReadCallbackNotInvokedOnNetworkThread() { 161 void TestUploadDataStreamHandler::CheckReadCallbackNotInvokedOnNetworkThread() {
167 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 162 DCHECK(network_thread_->BelongsToCurrentThread());
168 JNIEnv* env = base::android::AttachCurrentThread(); 163 JNIEnv* env = base::android::AttachCurrentThread();
169 cronet::Java_TestUploadDataStreamHandler_onCheckReadCallbackNotInvoked( 164 cronet::Java_TestUploadDataStreamHandler_onCheckReadCallbackNotInvoked(
170 env, jtest_upload_data_stream_handler_, !read_callback_invoked_); 165 env, jtest_upload_data_stream_handler_, !read_callback_invoked_);
171 } 166 }
172 167
173 void TestUploadDataStreamHandler::NotifyJavaReadCompleted() { 168 void TestUploadDataStreamHandler::NotifyJavaReadCompleted() {
174 DCHECK(network_thread_->task_runner()->BelongsToCurrentThread()); 169 DCHECK(network_thread_->BelongsToCurrentThread());
175 JNIEnv* env = base::android::AttachCurrentThread(); 170 JNIEnv* env = base::android::AttachCurrentThread();
176 std::string data_read = ""; 171 std::string data_read = "";
177 if (read_buffer_.get() && bytes_read_ > 0) 172 if (read_buffer_.get() && bytes_read_ > 0)
178 data_read = std::string(read_buffer_->data(), bytes_read_); 173 data_read = std::string(read_buffer_->data(), bytes_read_);
179 cronet::Java_TestUploadDataStreamHandler_onReadCompleted( 174 cronet::Java_TestUploadDataStreamHandler_onReadCompleted(
180 env, jtest_upload_data_stream_handler_, bytes_read_, 175 env, jtest_upload_data_stream_handler_, bytes_read_,
181 base::android::ConvertUTF8ToJavaString(env, data_read).obj()); 176 base::android::ConvertUTF8ToJavaString(env, data_read).obj());
182 } 177 }
183 178
184 static jlong CreateTestUploadDataStreamHandler( 179 static jlong CreateTestUploadDataStreamHandler(
185 JNIEnv* env, 180 JNIEnv* env,
186 const JavaParamRef<jobject>& jtest_upload_data_stream_handler, 181 const JavaParamRef<jobject>& jtest_upload_data_stream_handler,
187 jlong jupload_data_stream) { 182 jlong jupload_data_stream,
183 jlong jcontext_adapter) {
188 std::unique_ptr<net::UploadDataStream> upload_data_stream( 184 std::unique_ptr<net::UploadDataStream> upload_data_stream(
189 reinterpret_cast<net::UploadDataStream*>(jupload_data_stream)); 185 reinterpret_cast<net::UploadDataStream*>(jupload_data_stream));
190 TestUploadDataStreamHandler* handler = new TestUploadDataStreamHandler( 186 TestUploadDataStreamHandler* handler = new TestUploadDataStreamHandler(
191 std::move(upload_data_stream), env, jtest_upload_data_stream_handler); 187 std::move(upload_data_stream), env, jtest_upload_data_stream_handler,
188 jcontext_adapter);
192 return reinterpret_cast<jlong>(handler); 189 return reinterpret_cast<jlong>(handler);
193 } 190 }
194 191
195 bool TestUploadDataStreamHandlerRegisterJni(JNIEnv* env) { 192 bool TestUploadDataStreamHandlerRegisterJni(JNIEnv* env) {
196 return RegisterNativesImpl(env); 193 return RegisterNativesImpl(env);
197 } 194 }
198 195
199 } // namespace cronet 196 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698