| OLD | NEW |
| 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_context_adapter.h" | 5 #include "components/cronet/android/cronet_url_request_context_adapter.h" |
| 6 | 6 |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 #include "net/nqe/external_estimate_provider.h" | 61 #include "net/nqe/external_estimate_provider.h" |
| 62 #include "net/nqe/network_qualities_prefs_manager.h" | 62 #include "net/nqe/network_qualities_prefs_manager.h" |
| 63 #include "net/proxy/proxy_config_service_android.h" | 63 #include "net/proxy/proxy_config_service_android.h" |
| 64 #include "net/proxy/proxy_service.h" | 64 #include "net/proxy/proxy_service.h" |
| 65 #include "net/sdch/sdch_owner.h" | 65 #include "net/sdch/sdch_owner.h" |
| 66 #include "net/ssl/channel_id_service.h" | 66 #include "net/ssl/channel_id_service.h" |
| 67 #include "net/url_request/url_request_context.h" | 67 #include "net/url_request/url_request_context.h" |
| 68 #include "net/url_request/url_request_context_builder.h" | 68 #include "net/url_request/url_request_context_builder.h" |
| 69 #include "net/url_request/url_request_interceptor.h" | 69 #include "net/url_request/url_request_interceptor.h" |
| 70 | 70 |
| 71 #if defined(DATA_REDUCTION_PROXY_SUPPORT) | |
| 72 #include "components/cronet/android/cronet_data_reduction_proxy.h" | |
| 73 #endif | |
| 74 | |
| 75 using base::android::JavaParamRef; | 71 using base::android::JavaParamRef; |
| 76 using base::android::ScopedJavaLocalRef; | 72 using base::android::ScopedJavaLocalRef; |
| 77 | 73 |
| 78 namespace { | 74 namespace { |
| 79 | 75 |
| 80 // Always split NetLog events into 10 files. | 76 // Always split NetLog events into 10 files. |
| 81 const int kNumNetLogEventFiles = 10; | 77 const int kNumNetLogEventFiles = 10; |
| 82 | 78 |
| 83 // This class wraps a NetLog that also contains network change events. | 79 // This class wraps a NetLog that also contains network change events. |
| 84 class NetLogWithNetworkChangeEvents { | 80 class NetLogWithNetworkChangeEvents { |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 jcronet_url_request_context) { | 604 jcronet_url_request_context) { |
| 609 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); | 605 DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| 610 DCHECK(!is_context_initialized_); | 606 DCHECK(!is_context_initialized_); |
| 611 DCHECK(proxy_config_service_); | 607 DCHECK(proxy_config_service_); |
| 612 | 608 |
| 613 // TODO(mmenke): Add method to have the builder enable SPDY. | 609 // TODO(mmenke): Add method to have the builder enable SPDY. |
| 614 net::URLRequestContextBuilder context_builder; | 610 net::URLRequestContextBuilder context_builder; |
| 615 | 611 |
| 616 std::unique_ptr<net::NetworkDelegate> network_delegate( | 612 std::unique_ptr<net::NetworkDelegate> network_delegate( |
| 617 new BasicNetworkDelegate()); | 613 new BasicNetworkDelegate()); |
| 618 #if defined(DATA_REDUCTION_PROXY_SUPPORT) | |
| 619 DCHECK(!data_reduction_proxy_); | |
| 620 // For now, the choice to enable the data reduction proxy happens once, | |
| 621 // at initialization. It cannot be disabled thereafter. | |
| 622 if (!config->data_reduction_proxy_key.empty()) { | |
| 623 data_reduction_proxy_.reset(new CronetDataReductionProxy( | |
| 624 config->data_reduction_proxy_key, config->data_reduction_primary_proxy, | |
| 625 config->data_reduction_fallback_proxy, | |
| 626 config->data_reduction_secure_proxy_check_url, config->user_agent, | |
| 627 GetNetworkTaskRunner(), g_net_log.Get().net_log())); | |
| 628 network_delegate = data_reduction_proxy_->CreateNetworkDelegate( | |
| 629 std::move(network_delegate)); | |
| 630 context_builder.set_proxy_delegate( | |
| 631 data_reduction_proxy_->CreateProxyDelegate()); | |
| 632 std::vector<std::unique_ptr<net::URLRequestInterceptor>> interceptors; | |
| 633 interceptors.push_back(data_reduction_proxy_->CreateInterceptor()); | |
| 634 context_builder.SetInterceptors(std::move(interceptors)); | |
| 635 } | |
| 636 #endif // defined(DATA_REDUCTION_PROXY_SUPPORT) | |
| 637 context_builder.set_network_delegate(std::move(network_delegate)); | 614 context_builder.set_network_delegate(std::move(network_delegate)); |
| 638 context_builder.set_net_log(g_net_log.Get().net_log()); | 615 context_builder.set_net_log(g_net_log.Get().net_log()); |
| 639 | 616 |
| 640 // Android provides a local HTTP proxy server that handles proxying when a PAC | 617 // Android provides a local HTTP proxy server that handles proxying when a PAC |
| 641 // URL is present. Create a proxy service without a resolver and rely on this | 618 // URL is present. Create a proxy service without a resolver and rely on this |
| 642 // local HTTP proxy. See: crbug.com/432539. | 619 // local HTTP proxy. See: crbug.com/432539. |
| 643 context_builder.set_proxy_service( | 620 context_builder.set_proxy_service( |
| 644 net::ProxyService::CreateWithoutProxyResolver( | 621 net::ProxyService::CreateWithoutProxyResolver( |
| 645 std::move(proxy_config_service_), g_net_log.Get().net_log())); | 622 std::move(proxy_config_service_), g_net_log.Get().net_log())); |
| 646 | 623 |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 | 789 |
| 813 context_->transport_security_state() | 790 context_->transport_security_state() |
| 814 ->SetEnablePublicKeyPinningBypassForLocalTrustAnchors( | 791 ->SetEnablePublicKeyPinningBypassForLocalTrustAnchors( |
| 815 config->bypass_public_key_pinning_for_local_trust_anchors); | 792 config->bypass_public_key_pinning_for_local_trust_anchors); |
| 816 | 793 |
| 817 JNIEnv* env = base::android::AttachCurrentThread(); | 794 JNIEnv* env = base::android::AttachCurrentThread(); |
| 818 jcronet_url_request_context_.Reset(env, jcronet_url_request_context.obj()); | 795 jcronet_url_request_context_.Reset(env, jcronet_url_request_context.obj()); |
| 819 Java_CronetUrlRequestContext_initNetworkThread(env, | 796 Java_CronetUrlRequestContext_initNetworkThread(env, |
| 820 jcronet_url_request_context); | 797 jcronet_url_request_context); |
| 821 | 798 |
| 822 #if defined(DATA_REDUCTION_PROXY_SUPPORT) | |
| 823 if (data_reduction_proxy_) | |
| 824 data_reduction_proxy_->Init(true, GetURLRequestContext()); | |
| 825 #endif | |
| 826 is_context_initialized_ = true; | 799 is_context_initialized_ = true; |
| 827 while (!tasks_waiting_for_context_.empty()) { | 800 while (!tasks_waiting_for_context_.empty()) { |
| 828 tasks_waiting_for_context_.front().Run(); | 801 tasks_waiting_for_context_.front().Run(); |
| 829 tasks_waiting_for_context_.pop(); | 802 tasks_waiting_for_context_.pop(); |
| 830 } | 803 } |
| 831 } | 804 } |
| 832 | 805 |
| 833 void CronetURLRequestContextAdapter::Destroy( | 806 void CronetURLRequestContextAdapter::Destroy( |
| 834 JNIEnv* env, | 807 JNIEnv* env, |
| 835 const JavaParamRef<jobject>& jcaller) { | 808 const JavaParamRef<jobject>& jcaller) { |
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 static jlong CreateRequestContextConfig( | 1058 static jlong CreateRequestContextConfig( |
| 1086 JNIEnv* env, | 1059 JNIEnv* env, |
| 1087 const JavaParamRef<jclass>& jcaller, | 1060 const JavaParamRef<jclass>& jcaller, |
| 1088 const JavaParamRef<jstring>& juser_agent, | 1061 const JavaParamRef<jstring>& juser_agent, |
| 1089 const JavaParamRef<jstring>& jstorage_path, | 1062 const JavaParamRef<jstring>& jstorage_path, |
| 1090 jboolean jquic_enabled, | 1063 jboolean jquic_enabled, |
| 1091 const JavaParamRef<jstring>& jquic_default_user_agent_id, | 1064 const JavaParamRef<jstring>& jquic_default_user_agent_id, |
| 1092 jboolean jhttp2_enabled, | 1065 jboolean jhttp2_enabled, |
| 1093 jboolean jsdch_enabled, | 1066 jboolean jsdch_enabled, |
| 1094 jboolean jbrotli_enabled, | 1067 jboolean jbrotli_enabled, |
| 1095 const JavaParamRef<jstring>& jdata_reduction_proxy_key, | |
| 1096 const JavaParamRef<jstring>& jdata_reduction_proxy_primary_proxy, | |
| 1097 const JavaParamRef<jstring>& jdata_reduction_proxy_fallback_proxy, | |
| 1098 const JavaParamRef<jstring>& jdata_reduction_proxy_secure_proxy_check_url, | |
| 1099 jboolean jdisable_cache, | 1068 jboolean jdisable_cache, |
| 1100 jint jhttp_cache_mode, | 1069 jint jhttp_cache_mode, |
| 1101 jlong jhttp_cache_max_size, | 1070 jlong jhttp_cache_max_size, |
| 1102 const JavaParamRef<jstring>& jexperimental_quic_connection_options, | 1071 const JavaParamRef<jstring>& jexperimental_quic_connection_options, |
| 1103 jlong jmock_cert_verifier, | 1072 jlong jmock_cert_verifier, |
| 1104 jboolean jenable_network_quality_estimator, | 1073 jboolean jenable_network_quality_estimator, |
| 1105 jboolean jbypass_public_key_pinning_for_local_trust_anchors, | 1074 jboolean jbypass_public_key_pinning_for_local_trust_anchors, |
| 1106 const JavaParamRef<jstring>& jcert_verifier_data) { | 1075 const JavaParamRef<jstring>& jcert_verifier_data) { |
| 1107 return reinterpret_cast<jlong>(new URLRequestContextConfig( | 1076 return reinterpret_cast<jlong>(new URLRequestContextConfig( |
| 1108 jquic_enabled, | 1077 jquic_enabled, |
| 1109 ConvertNullableJavaStringToUTF8(env, jquic_default_user_agent_id), | 1078 ConvertNullableJavaStringToUTF8(env, jquic_default_user_agent_id), |
| 1110 jhttp2_enabled, jsdch_enabled, jbrotli_enabled, | 1079 jhttp2_enabled, jsdch_enabled, jbrotli_enabled, |
| 1111 static_cast<URLRequestContextConfig::HttpCacheType>(jhttp_cache_mode), | 1080 static_cast<URLRequestContextConfig::HttpCacheType>(jhttp_cache_mode), |
| 1112 jhttp_cache_max_size, jdisable_cache, | 1081 jhttp_cache_max_size, jdisable_cache, |
| 1113 ConvertNullableJavaStringToUTF8(env, jstorage_path), | 1082 ConvertNullableJavaStringToUTF8(env, jstorage_path), |
| 1114 ConvertNullableJavaStringToUTF8(env, juser_agent), | 1083 ConvertNullableJavaStringToUTF8(env, juser_agent), |
| 1115 ConvertNullableJavaStringToUTF8(env, | 1084 ConvertNullableJavaStringToUTF8(env, |
| 1116 jexperimental_quic_connection_options), | 1085 jexperimental_quic_connection_options), |
| 1117 ConvertNullableJavaStringToUTF8(env, jdata_reduction_proxy_key), | |
| 1118 ConvertNullableJavaStringToUTF8(env, jdata_reduction_proxy_primary_proxy), | |
| 1119 ConvertNullableJavaStringToUTF8(env, | |
| 1120 jdata_reduction_proxy_fallback_proxy), | |
| 1121 ConvertNullableJavaStringToUTF8( | |
| 1122 env, jdata_reduction_proxy_secure_proxy_check_url), | |
| 1123 base::WrapUnique( | 1086 base::WrapUnique( |
| 1124 reinterpret_cast<net::CertVerifier*>(jmock_cert_verifier)), | 1087 reinterpret_cast<net::CertVerifier*>(jmock_cert_verifier)), |
| 1125 jenable_network_quality_estimator, | 1088 jenable_network_quality_estimator, |
| 1126 jbypass_public_key_pinning_for_local_trust_anchors, | 1089 jbypass_public_key_pinning_for_local_trust_anchors, |
| 1127 ConvertNullableJavaStringToUTF8(env, jcert_verifier_data))); | 1090 ConvertNullableJavaStringToUTF8(env, jcert_verifier_data))); |
| 1128 } | 1091 } |
| 1129 | 1092 |
| 1130 // Add a QUIC hint to a URLRequestContextConfig. | 1093 // Add a QUIC hint to a URLRequestContextConfig. |
| 1131 static void AddQuicHint(JNIEnv* env, | 1094 static void AddQuicHint(JNIEnv* env, |
| 1132 const JavaParamRef<jclass>& jcaller, | 1095 const JavaParamRef<jclass>& jcaller, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1210 JNIEnv* env, | 1173 JNIEnv* env, |
| 1211 const JavaParamRef<jclass>& jcaller) { | 1174 const JavaParamRef<jclass>& jcaller) { |
| 1212 DCHECK(base::StatisticsRecorder::IsActive()); | 1175 DCHECK(base::StatisticsRecorder::IsActive()); |
| 1213 std::vector<uint8_t> data; | 1176 std::vector<uint8_t> data; |
| 1214 if (!HistogramManager::GetInstance()->GetDeltas(&data)) | 1177 if (!HistogramManager::GetInstance()->GetDeltas(&data)) |
| 1215 return ScopedJavaLocalRef<jbyteArray>(); | 1178 return ScopedJavaLocalRef<jbyteArray>(); |
| 1216 return base::android::ToJavaByteArray(env, &data[0], data.size()); | 1179 return base::android::ToJavaByteArray(env, &data[0], data.size()); |
| 1217 } | 1180 } |
| 1218 | 1181 |
| 1219 } // namespace cronet | 1182 } // namespace cronet |
| OLD | NEW |