Index: components/cronet/android/cronet_url_request_adapter.cc |
diff --git a/components/cronet/android/cronet_url_request_adapter.cc b/components/cronet/android/cronet_url_request_adapter.cc |
index cb021c5411e271309e4726888c505be08ce80004..1a70b7084fc12b9525069762807195bc47f8d743 100644 |
--- a/components/cronet/android/cronet_url_request_adapter.cc |
+++ b/components/cronet/android/cronet_url_request_adapter.cc |
@@ -196,7 +196,6 @@ void CronetURLRequestAdapter::OnReceivedRedirect( |
const net::RedirectInfo& redirect_info, |
bool* defer_redirect) { |
DCHECK(context_->IsOnNetworkThread()); |
- DCHECK(request->status().is_success()); |
JNIEnv* env = base::android::AttachCurrentThread(); |
cronet::Java_CronetUrlRequest_onRedirectReceived( |
env, owner_.obj(), |
@@ -239,10 +238,15 @@ void CronetURLRequestAdapter::OnSSLCertificateError( |
request->GetTotalReceivedBytes()); |
} |
-void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request) { |
+void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request, |
+ int net_error) { |
+ DCHECK_NE(net::ERR_IO_PENDING, net_error); |
DCHECK(context_->IsOnNetworkThread()); |
- if (MaybeReportError(request)) |
+ |
+ if (net_error != net::OK) { |
+ ReportError(request, net_error); |
return; |
+ } |
JNIEnv* env = base::android::AttachCurrentThread(); |
cronet::Java_CronetUrlRequest_onResponseStarted( |
env, owner_.obj(), request->GetResponseCode(), |
@@ -261,9 +265,17 @@ void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request) { |
void CronetURLRequestAdapter::OnReadCompleted(net::URLRequest* request, |
int bytes_read) { |
DCHECK(context_->IsOnNetworkThread()); |
- if (MaybeReportError(request)) |
+ |
+ if (bytes_read < 0) { |
+ ReportError(request, bytes_read); |
return; |
- if (bytes_read != 0) { |
+ } |
+ |
+ if (bytes_read == 0) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ cronet::Java_CronetUrlRequest_onSucceeded( |
+ env, owner_.obj(), url_request_->GetTotalReceivedBytes()); |
+ } else { |
JNIEnv* env = base::android::AttachCurrentThread(); |
cronet::Java_CronetUrlRequest_onReadCompleted( |
env, owner_.obj(), read_buffer_->byte_buffer(), bytes_read, |
@@ -272,10 +284,6 @@ void CronetURLRequestAdapter::OnReadCompleted(net::URLRequest* request, |
// Free the read buffer. This lets the Java ByteBuffer be freed, if the |
// embedder releases it, too. |
read_buffer_ = nullptr; |
- } else { |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- cronet::Java_CronetUrlRequest_onSucceeded( |
- env, owner_.obj(), url_request_->GetTotalReceivedBytes()); |
} |
} |
@@ -344,13 +352,12 @@ void CronetURLRequestAdapter::ReadDataOnNetworkThread( |
read_buffer_ = read_buffer; |
- int bytes_read = 0; |
- url_request_->Read(read_buffer_.get(), buffer_size, &bytes_read); |
+ int result = url_request_->Read(read_buffer_.get(), buffer_size); |
// If IO is pending, wait for the URLRequest to call OnReadCompleted. |
- if (url_request_->status().is_io_pending()) |
+ if (result == net::ERR_IO_PENDING) |
return; |
- OnReadCompleted(url_request_.get(), bytes_read); |
+ OnReadCompleted(url_request_.get(), result); |
} |
void CronetURLRequestAdapter::DestroyOnNetworkThread(bool send_on_canceled) { |
@@ -362,12 +369,12 @@ void CronetURLRequestAdapter::DestroyOnNetworkThread(bool send_on_canceled) { |
delete this; |
} |
-bool CronetURLRequestAdapter::MaybeReportError(net::URLRequest* request) const { |
- DCHECK_NE(net::URLRequestStatus::IO_PENDING, url_request_->status().status()); |
+void CronetURLRequestAdapter::ReportError(net::URLRequest* request, |
+ int net_error) const { |
+ DCHECK_NE(net::ERR_IO_PENDING, net_error); |
+ DCHECK_LT(net_error, 0); |
DCHECK_EQ(request, url_request_.get()); |
- if (url_request_->status().is_success()) |
- return false; |
- int net_error = url_request_->status().error(); |
+ |
net::NetErrorDetails net_error_details; |
url_request_->PopulateNetErrorDetails(&net_error_details); |
VLOG(1) << "Error " << net::ErrorToString(net_error) |
@@ -378,7 +385,6 @@ bool CronetURLRequestAdapter::MaybeReportError(net::URLRequest* request) const { |
net_error_details.quic_connection_error, |
ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj(), |
request->GetTotalReceivedBytes()); |
- return true; |
} |
net::URLRequest* CronetURLRequestAdapter::GetURLRequestForTesting() { |