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

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

Issue 1393713005: [Cronet] Add error code and immediatelyRetryable() to UrlRequestException (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 "cronet_url_request_adapter.h" 5 #include "cronet_url_request_adapter.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "components/cronet/android/cronet_url_request_context_adapter.h" 12 #include "components/cronet/android/cronet_url_request_context_adapter.h"
13 #include "jni/CronetUrlRequest_jni.h" 13 #include "jni/CronetUrlRequest_jni.h"
14 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
15 #include "net/base/load_flags.h" 15 #include "net/base/load_flags.h"
16 #include "net/base/net_errors.h" 16 #include "net/base/net_errors.h"
17 #include "net/base/request_priority.h" 17 #include "net/base/request_priority.h"
18 #include "net/cert/cert_status_flags.h" 18 #include "net/cert/cert_status_flags.h"
19 #include "net/http/http_response_headers.h" 19 #include "net/http/http_response_headers.h"
20 #include "net/http/http_status_code.h" 20 #include "net/http/http_status_code.h"
21 #include "net/http/http_util.h" 21 #include "net/http/http_util.h"
22 #include "net/ssl/ssl_info.h" 22 #include "net/ssl/ssl_info.h"
23 #include "net/url_request/redirect_info.h" 23 #include "net/url_request/redirect_info.h"
24 #include "net/url_request/url_request_context.h" 24 #include "net/url_request/url_request_context.h"
25 25
26 using base::android::ConvertUTF8ToJavaString; 26 using base::android::ConvertUTF8ToJavaString;
27 27
28 namespace cronet { 28 namespace cronet {
29 29
30 namespace {
31
32 // Error codes for the most popular network stack error codes.
33 // For descriptions see corresponding constants in UrlRequestException.java.
34 // A Java counterpart will be generated for this enum.
35 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.net
36 enum UrlRequestError {
37 LISTENER_THREW,
38 HOSTNAME_NOT_RESOLVED,
39 INTERNET_DISCONNECTED,
40 NETWORK_CHANGED,
41 TIMED_OUT,
42 CONNECTION_CLOSED,
43 CONNECTION_TIMED_OUT,
44 CONNECTION_REFUSED,
45 CONNECTION_RESET,
46 ADDRESS_UNREACHABLE,
47 OTHER,
48 };
49
50 // Convert most popular net::ERR_* values to counterparts accessible in Java.
51 UrlRequestError NetErrorToUrlRequestError(int net_error) {
52 switch (net_error) {
53 case net::ERR_NAME_NOT_RESOLVED:
54 return HOSTNAME_NOT_RESOLVED;
55 case net::ERR_INTERNET_DISCONNECTED:
56 return INTERNET_DISCONNECTED;
57 case net::ERR_NETWORK_CHANGED:
58 return NETWORK_CHANGED;
59 case net::ERR_TIMED_OUT:
60 return TIMED_OUT;
61 case net::ERR_CONNECTION_CLOSED:
62 return CONNECTION_CLOSED;
63 case net::ERR_CONNECTION_TIMED_OUT:
64 return CONNECTION_TIMED_OUT;
65 case net::ERR_CONNECTION_REFUSED:
66 return CONNECTION_REFUSED;
67 case net::ERR_CONNECTION_RESET:
68 return CONNECTION_RESET;
69 case net::ERR_ADDRESS_UNREACHABLE:
70 return ADDRESS_UNREACHABLE;
71 default:
72 return OTHER;
73 }
74 }
75 }
76
30 // Explicitly register static JNI functions. 77 // Explicitly register static JNI functions.
31 bool CronetUrlRequestAdapterRegisterJni(JNIEnv* env) { 78 bool CronetUrlRequestAdapterRegisterJni(JNIEnv* env) {
32 return RegisterNativesImpl(env); 79 return RegisterNativesImpl(env);
33 } 80 }
34 81
35 static jlong CreateRequestAdapter(JNIEnv* env, 82 static jlong CreateRequestAdapter(JNIEnv* env,
36 const JavaParamRef<jobject>& jurl_request, 83 const JavaParamRef<jobject>& jurl_request,
37 jlong jurl_request_context_adapter, 84 jlong jurl_request_context_adapter,
38 const JavaParamRef<jstring>& jurl_string, 85 const JavaParamRef<jstring>& jurl_string,
39 jint jpriority) { 86 jint jpriority) {
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 322
276 void CronetURLRequestAdapter::OnSSLCertificateError( 323 void CronetURLRequestAdapter::OnSSLCertificateError(
277 net::URLRequest* request, 324 net::URLRequest* request,
278 const net::SSLInfo& ssl_info, 325 const net::SSLInfo& ssl_info,
279 bool fatal) { 326 bool fatal) {
280 DCHECK(context_->IsOnNetworkThread()); 327 DCHECK(context_->IsOnNetworkThread());
281 request->Cancel(); 328 request->Cancel();
282 int net_error = net::MapCertStatusToNetError(ssl_info.cert_status); 329 int net_error = net::MapCertStatusToNetError(ssl_info.cert_status);
283 JNIEnv* env = base::android::AttachCurrentThread(); 330 JNIEnv* env = base::android::AttachCurrentThread();
284 cronet::Java_CronetUrlRequest_onError( 331 cronet::Java_CronetUrlRequest_onError(
285 env, owner_.obj(), net_error, 332 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error,
286 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj()); 333 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj());
287 } 334 }
288 335
289 void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request) { 336 void CronetURLRequestAdapter::OnResponseStarted(net::URLRequest* request) {
290 DCHECK(context_->IsOnNetworkThread()); 337 DCHECK(context_->IsOnNetworkThread());
291 if (MaybeReportError(request)) 338 if (MaybeReportError(request))
292 return; 339 return;
293 JNIEnv* env = base::android::AttachCurrentThread(); 340 JNIEnv* env = base::android::AttachCurrentThread();
294 cronet::Java_CronetUrlRequest_onResponseStarted(env, owner_.obj(), 341 cronet::Java_CronetUrlRequest_onResponseStarted(env, owner_.obj(),
295 request->GetResponseCode()); 342 request->GetResponseCode());
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 bool CronetURLRequestAdapter::MaybeReportError(net::URLRequest* request) const { 419 bool CronetURLRequestAdapter::MaybeReportError(net::URLRequest* request) const {
373 DCHECK_NE(net::URLRequestStatus::IO_PENDING, url_request_->status().status()); 420 DCHECK_NE(net::URLRequestStatus::IO_PENDING, url_request_->status().status());
374 DCHECK_EQ(request, url_request_); 421 DCHECK_EQ(request, url_request_);
375 if (url_request_->status().is_success()) 422 if (url_request_->status().is_success())
376 return false; 423 return false;
377 int net_error = url_request_->status().error(); 424 int net_error = url_request_->status().error();
378 VLOG(1) << "Error " << net::ErrorToString(net_error) 425 VLOG(1) << "Error " << net::ErrorToString(net_error)
379 << " on chromium request: " << initial_url_.possibly_invalid_spec(); 426 << " on chromium request: " << initial_url_.possibly_invalid_spec();
380 JNIEnv* env = base::android::AttachCurrentThread(); 427 JNIEnv* env = base::android::AttachCurrentThread();
381 cronet::Java_CronetUrlRequest_onError( 428 cronet::Java_CronetUrlRequest_onError(
382 env, owner_.obj(), net_error, 429 env, owner_.obj(), NetErrorToUrlRequestError(net_error), net_error,
383 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj()); 430 ConvertUTF8ToJavaString(env, net::ErrorToString(net_error)).obj());
384 return true; 431 return true;
385 } 432 }
386 433
387 } // namespace cronet 434 } // namespace cronet
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698