| Index: components/cronet/android/cronet_url_request_context_adapter.cc
|
| diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| index 1141e8b2cc0a90b18a593ecb41f478b52168e1a0..9ecb0fcff894d00fc7d8e6d3953871e6d39ba25a 100644
|
| --- a/components/cronet/android/cronet_url_request_context_adapter.cc
|
| +++ b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/android/jni_android.h"
|
| #include "base/android/jni_array.h"
|
| #include "base/android/jni_string.h"
|
| +#include "base/base64.h"
|
| #include "base/bind.h"
|
| #include "base/files/file_path.h"
|
| #include "base/files/file_util.h"
|
| @@ -41,8 +42,10 @@
|
| #include "net/base/net_errors.h"
|
| #include "net/base/network_delegate_impl.h"
|
| #include "net/base/url_util.h"
|
| +#include "net/cert/caching_cert_verifier.h"
|
| #include "net/cert/cert_verifier.h"
|
| #include "net/cookies/cookie_monster.h"
|
| +#include "net/extras/cert/cert_verifier_cache_persister.h"
|
| #include "net/http/http_auth_handler_factory.h"
|
| #include "net/http/http_server_properties_manager.h"
|
| #include "net/log/write_to_file_net_log_observer.h"
|
| @@ -627,6 +630,18 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
|
| }
|
| }
|
|
|
| + // If there is a cert_verifier, then pouplate it's cache with
|
| + // |cert_verifier_data|.
|
| + if (!config->cert_verifier_data.empty() && context_->cert_verifier()) {
|
| + std::string data;
|
| + if (base::Base64Decode(config->cert_verifier_data, &data)) {
|
| + net::CertVerifierCachePersister persister(
|
| + reinterpret_cast<net::CachingCertVerifier*>(
|
| + context_->cert_verifier()));
|
| + persister.LoadCache(data);
|
| + }
|
| + }
|
| +
|
| // Iterate through PKP configuration for every host.
|
| for (const auto& pkp : config->pkp_list) {
|
| // Add the host pinning.
|
| @@ -721,6 +736,16 @@ void CronetURLRequestContextAdapter::StopNetLog(
|
| base::Unretained(this)));
|
| }
|
|
|
| +void CronetURLRequestContextAdapter::GetCertVerifierData(
|
| + JNIEnv* env,
|
| + const JavaParamRef<jobject>& jcaller) {
|
| + PostTaskToNetworkThread(
|
| + FROM_HERE,
|
| + base::Bind(
|
| + &CronetURLRequestContextAdapter::GetCertVerifierDataOnNetworkThread,
|
| + base::Unretained(this)));
|
| +}
|
| +
|
| void CronetURLRequestContextAdapter::StartNetLogToFileOnNetworkThread(
|
| const std::string& file_name, bool log_all) {
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| @@ -753,6 +778,22 @@ void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() {
|
| }
|
| }
|
|
|
| +void CronetURLRequestContextAdapter::GetCertVerifierDataOnNetworkThread() {
|
| + DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| + std::string encoded_data;
|
| + if (is_context_initialized_ && context_->cert_verifier()) {
|
| + std::string data;
|
| + net::CertVerifierCachePersister persister(
|
| + reinterpret_cast<net::CachingCertVerifier*>(context_->cert_verifier()));
|
| + persister.SerializeCache(&data);
|
| + base::Base64Encode(data, &encoded_data);
|
| + }
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_CronetUrlRequestContext_onGetCertVerifierData(
|
| + env, jcronet_url_request_context_.obj(),
|
| + base::android::ConvertUTF8ToJavaString(env, encoded_data).obj());
|
| +}
|
| +
|
| base::Thread* CronetURLRequestContextAdapter::GetFileThread() {
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| if (!file_thread_) {
|
| @@ -800,7 +841,8 @@ static jlong CreateRequestContextConfig(
|
| jint jhttp_cache_mode,
|
| jlong jhttp_cache_max_size,
|
| const JavaParamRef<jstring>& jexperimental_quic_connection_options,
|
| - jlong jmock_cert_verifier) {
|
| + jlong jmock_cert_verifier,
|
| + const JavaParamRef<jstring>& jcert_verifier_data) {
|
| return reinterpret_cast<jlong>(new URLRequestContextConfig(
|
| jquic_enabled,
|
| ConvertNullableJavaStringToUTF8(env, jquic_default_user_agent_id),
|
| @@ -818,7 +860,8 @@ static jlong CreateRequestContextConfig(
|
| ConvertNullableJavaStringToUTF8(
|
| env, jdata_reduction_proxy_secure_proxy_check_url),
|
| base::WrapUnique(
|
| - reinterpret_cast<net::CertVerifier*>(jmock_cert_verifier))));
|
| + reinterpret_cast<net::CertVerifier*>(jmock_cert_verifier)),
|
| + ConvertNullableJavaStringToUTF8(env, jcert_verifier_data)));
|
| }
|
|
|
| // Add a QUIC hint to a URLRequestContextConfig.
|
|
|