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

Side by Side Diff: components/cronet/android/cronet_url_request_adapter.cc

Issue 2261103002: Use modified URLRequest::Read() and delegate methods in components/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@URLRequestRead
Patch Set: comments Created 4 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/cronet_url_request_adapter.h" 5 #include "components/cronet/android/cronet_url_request_adapter.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 context_->PostTaskToNetworkThread( 189 context_->PostTaskToNetworkThread(
190 FROM_HERE, base::Bind(&CronetURLRequestAdapter::DestroyOnNetworkThread, 190 FROM_HERE, base::Bind(&CronetURLRequestAdapter::DestroyOnNetworkThread,
191 base::Unretained(this), jsend_on_canceled)); 191 base::Unretained(this), jsend_on_canceled));
192 } 192 }
193 193
194 void CronetURLRequestAdapter::OnReceivedRedirect( 194 void CronetURLRequestAdapter::OnReceivedRedirect(
195 net::URLRequest* request, 195 net::URLRequest* request,
196 const net::RedirectInfo& redirect_info, 196 const net::RedirectInfo& redirect_info,
197 bool* defer_redirect) { 197 bool* defer_redirect) {
198 DCHECK(context_->IsOnNetworkThread()); 198 DCHECK(context_->IsOnNetworkThread());
199 DCHECK(request->status().is_success());
200 JNIEnv* env = base::android::AttachCurrentThread(); 199 JNIEnv* env = base::android::AttachCurrentThread();
201 cronet::Java_CronetUrlRequest_onRedirectReceived( 200 cronet::Java_CronetUrlRequest_onRedirectReceived(
202 env, owner_.obj(), 201 env, owner_.obj(),
203 ConvertUTF8ToJavaString(env, redirect_info.new_url.spec()).obj(), 202 ConvertUTF8ToJavaString(env, redirect_info.new_url.spec()).obj(),
204 redirect_info.status_code, 203 redirect_info.status_code,
205 ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText()) 204 ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText())
206 .obj(), 205 .obj(),
207 GetResponseHeaders(env).obj(), 206 GetResponseHeaders(env).obj(),
208 request->response_info().was_cached ? JNI_TRUE : JNI_FALSE, 207 request->response_info().was_cached ? JNI_TRUE : JNI_FALSE,
209 ConvertUTF8ToJavaString(env, 208 ConvertUTF8ToJavaString(env,
(...skipping 22 matching lines...) Expand all
232 request->Cancel(); 231 request->Cancel();
233 int net_error = net::MapCertStatusToNetError(ssl_info.cert_status); 232 int net_error = net::MapCertStatusToNetError(ssl_info.cert_status);
234 JNIEnv* env = base::android::AttachCurrentThread(); 233 JNIEnv* env = base::android::AttachCurrentThread();
235 cronet::Java_CronetUrlRequest_onError( 234 cronet::Java_CronetUrlRequest_onError(
236 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error, 235 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error,
237 net::QUIC_NO_ERROR, 236 net::QUIC_NO_ERROR,
238 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj(), 237 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj(),
239 request->GetTotalReceivedBytes()); 238 request->GetTotalReceivedBytes());
240 } 239 }
241 240
242 void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request) { 241 void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request,
242 int net_error) {
243 DCHECK_NE(net::ERR_IO_PENDING, net_error);
243 DCHECK(context_->IsOnNetworkThread()); 244 DCHECK(context_->IsOnNetworkThread());
244 if (MaybeReportError(request)) 245
246 if (net_error != net::OK) {
247 ReportError(request, net_error);
245 return; 248 return;
249 }
246 JNIEnv* env = base::android::AttachCurrentThread(); 250 JNIEnv* env = base::android::AttachCurrentThread();
247 cronet::Java_CronetUrlRequest_onResponseStarted( 251 cronet::Java_CronetUrlRequest_onResponseStarted(
248 env, owner_.obj(), request->GetResponseCode(), 252 env, owner_.obj(), request->GetResponseCode(),
249 ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText()) 253 ConvertUTF8ToJavaString(env, request->response_headers()->GetStatusText())
250 .obj(), 254 .obj(),
251 GetResponseHeaders(env).obj(), 255 GetResponseHeaders(env).obj(),
252 request->response_info().was_cached ? JNI_TRUE : JNI_FALSE, 256 request->response_info().was_cached ? JNI_TRUE : JNI_FALSE,
253 ConvertUTF8ToJavaString(env, 257 ConvertUTF8ToJavaString(env,
254 request->response_info().npn_negotiated_protocol) 258 request->response_info().npn_negotiated_protocol)
255 .obj(), 259 .obj(),
256 ConvertUTF8ToJavaString(env, 260 ConvertUTF8ToJavaString(env,
257 request->response_info().proxy_server.ToString()) 261 request->response_info().proxy_server.ToString())
258 .obj()); 262 .obj());
259 } 263 }
260 264
261 void CronetURLRequestAdapter::OnReadCompleted(net::URLRequest* request, 265 void CronetURLRequestAdapter::OnReadCompleted(net::URLRequest* request,
262 int bytes_read) { 266 int bytes_read) {
263 DCHECK(context_->IsOnNetworkThread()); 267 DCHECK(context_->IsOnNetworkThread());
264 if (MaybeReportError(request)) 268
269 if (bytes_read < 0) {
270 ReportError(request, bytes_read);
265 return; 271 return;
266 if (bytes_read != 0) { 272 }
273
274 if (bytes_read == 0) {
275 JNIEnv* env = base::android::AttachCurrentThread();
276 cronet::Java_CronetUrlRequest_onSucceeded(
277 env, owner_.obj(), url_request_->GetTotalReceivedBytes());
278 } else {
267 JNIEnv* env = base::android::AttachCurrentThread(); 279 JNIEnv* env = base::android::AttachCurrentThread();
268 cronet::Java_CronetUrlRequest_onReadCompleted( 280 cronet::Java_CronetUrlRequest_onReadCompleted(
269 env, owner_.obj(), read_buffer_->byte_buffer(), bytes_read, 281 env, owner_.obj(), read_buffer_->byte_buffer(), bytes_read,
270 read_buffer_->initial_position(), read_buffer_->initial_limit(), 282 read_buffer_->initial_position(), read_buffer_->initial_limit(),
271 request->GetTotalReceivedBytes()); 283 request->GetTotalReceivedBytes());
272 // Free the read buffer. This lets the Java ByteBuffer be freed, if the 284 // Free the read buffer. This lets the Java ByteBuffer be freed, if the
273 // embedder releases it, too. 285 // embedder releases it, too.
274 read_buffer_ = nullptr; 286 read_buffer_ = nullptr;
275 } else {
276 JNIEnv* env = base::android::AttachCurrentThread();
277 cronet::Java_CronetUrlRequest_onSucceeded(
278 env, owner_.obj(), url_request_->GetTotalReceivedBytes());
279 } 287 }
280 } 288 }
281 289
282 void CronetURLRequestAdapter::StartOnNetworkThread() { 290 void CronetURLRequestAdapter::StartOnNetworkThread() {
283 DCHECK(context_->IsOnNetworkThread()); 291 DCHECK(context_->IsOnNetworkThread());
284 VLOG(1) << "Starting chromium request: " 292 VLOG(1) << "Starting chromium request: "
285 << initial_url_.possibly_invalid_spec().c_str() 293 << initial_url_.possibly_invalid_spec().c_str()
286 << " priority: " << RequestPriorityToString(initial_priority_); 294 << " priority: " << RequestPriorityToString(initial_priority_);
287 url_request_ = context_->GetURLRequestContext()->CreateRequest( 295 url_request_ = context_->GetURLRequestContext()->CreateRequest(
288 initial_url_, net::DEFAULT_PRIORITY, this); 296 initial_url_, net::DEFAULT_PRIORITY, this);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 345
338 void CronetURLRequestAdapter::ReadDataOnNetworkThread( 346 void CronetURLRequestAdapter::ReadDataOnNetworkThread(
339 scoped_refptr<IOBufferWithByteBuffer> read_buffer, 347 scoped_refptr<IOBufferWithByteBuffer> read_buffer,
340 int buffer_size) { 348 int buffer_size) {
341 DCHECK(context_->IsOnNetworkThread()); 349 DCHECK(context_->IsOnNetworkThread());
342 DCHECK(read_buffer); 350 DCHECK(read_buffer);
343 DCHECK(!read_buffer_); 351 DCHECK(!read_buffer_);
344 352
345 read_buffer_ = read_buffer; 353 read_buffer_ = read_buffer;
346 354
347 int bytes_read = 0; 355 int result = url_request_->Read(read_buffer_.get(), buffer_size);
348 url_request_->Read(read_buffer_.get(), buffer_size, &bytes_read);
349 // If IO is pending, wait for the URLRequest to call OnReadCompleted. 356 // If IO is pending, wait for the URLRequest to call OnReadCompleted.
350 if (url_request_->status().is_io_pending()) 357 if (result == net::ERR_IO_PENDING)
351 return; 358 return;
352 359
353 OnReadCompleted(url_request_.get(), bytes_read); 360 OnReadCompleted(url_request_.get(), result);
354 } 361 }
355 362
356 void CronetURLRequestAdapter::DestroyOnNetworkThread(bool send_on_canceled) { 363 void CronetURLRequestAdapter::DestroyOnNetworkThread(bool send_on_canceled) {
357 DCHECK(context_->IsOnNetworkThread()); 364 DCHECK(context_->IsOnNetworkThread());
358 if (send_on_canceled) { 365 if (send_on_canceled) {
359 JNIEnv* env = base::android::AttachCurrentThread(); 366 JNIEnv* env = base::android::AttachCurrentThread();
360 cronet::Java_CronetUrlRequest_onCanceled(env, owner_.obj()); 367 cronet::Java_CronetUrlRequest_onCanceled(env, owner_.obj());
361 } 368 }
362 delete this; 369 delete this;
363 } 370 }
364 371
365 bool CronetURLRequestAdapter::MaybeReportError(net::URLRequest* request) const { 372 void CronetURLRequestAdapter::ReportError(net::URLRequest* request,
366 DCHECK_NE(net::URLRequestStatus::IO_PENDING, url_request_->status().status()); 373 int net_error) const {
374 DCHECK_NE(net::ERR_IO_PENDING, net_error);
375 DCHECK_LT(net_error, 0);
367 DCHECK_EQ(request, url_request_.get()); 376 DCHECK_EQ(request, url_request_.get());
368 if (url_request_->status().is_success()) 377
369 return false;
370 int net_error = url_request_->status().error();
371 net::NetErrorDetails net_error_details; 378 net::NetErrorDetails net_error_details;
372 url_request_->PopulateNetErrorDetails(&net_error_details); 379 url_request_->PopulateNetErrorDetails(&net_error_details);
373 VLOG(1) << "Error " << net::ErrorToString(net_error) 380 VLOG(1) << "Error " << net::ErrorToString(net_error)
374 << " on chromium request: " << initial_url_.possibly_invalid_spec(); 381 << " on chromium request: " << initial_url_.possibly_invalid_spec();
375 JNIEnv* env = base::android::AttachCurrentThread(); 382 JNIEnv* env = base::android::AttachCurrentThread();
376 cronet::Java_CronetUrlRequest_onError( 383 cronet::Java_CronetUrlRequest_onError(
377 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error, 384 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error,
378 net_error_details.quic_connection_error, 385 net_error_details.quic_connection_error,
379 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj(), 386 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj(),
380 request->GetTotalReceivedBytes()); 387 request->GetTotalReceivedBytes());
381 return true;
382 } 388 }
383 389
384 net::URLRequest* CronetURLRequestAdapter::GetURLRequestForTesting() { 390 net::URLRequest* CronetURLRequestAdapter::GetURLRequestForTesting() {
385 return url_request_.get(); 391 return url_request_.get();
386 } 392 }
387 393
388 } // namespace cronet 394 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698