| 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 9e1ebfe059390cd22dc31f505f9920692b8065ce..55678c1d814205f31e41a9b2346e3ff6a8d13513 100644
|
| --- a/components/cronet/android/cronet_url_request_context_adapter.cc
|
| +++ b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| @@ -55,6 +55,7 @@
|
| #include "net/cert/caching_cert_verifier.h"
|
| #include "net/cert/cert_verifier.h"
|
| #include "net/cookies/cookie_monster.h"
|
| +#include "net/dns/host_cache.h"
|
| #include "net/http/http_auth_handler_factory.h"
|
| #include "net/http/http_server_properties_manager.h"
|
| #include "net/log/file_net_log_observer.h"
|
| @@ -599,6 +600,48 @@ void CronetURLRequestContextAdapter::ProvideThroughputObservations(
|
| base::Unretained(this), should));
|
| }
|
|
|
| +void CronetURLRequestContextAdapter::PutHostCacheOnNetworkThread(
|
| + std::string hostname,
|
| + net::AddressList address_list,
|
| + base::TimeDelta ttl) {
|
| + DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| + net::HostCache::Key key(hostname, net::ADDRESS_FAMILY_UNSPECIFIED, 0);
|
| + net::HostCache::Entry entry(net::OK, address_list, ttl);
|
| + context_->host_resolver()->GetHostCache()->Set(key, entry,
|
| + base::TimeTicks::Now(), ttl);
|
| +}
|
| +
|
| +void CronetURLRequestContextAdapter::PutHostCache(
|
| + JNIEnv* env,
|
| + const base::android::JavaParamRef<jobject>& jcaller,
|
| + const base::android::JavaParamRef<jstring>& jhostname,
|
| + const base::android::JavaParamRef<jobjectArray>& jaddresses,
|
| + jint jseconds_to_live) {
|
| + size_t address_count = env->GetArrayLength(jaddresses);
|
| + net::AddressList address_list;
|
| + for (size_t i = 0; i < address_count; ++i) {
|
| + ScopedJavaLocalRef<jbyteArray> bytes_array(
|
| + env,
|
| + static_cast<jbyteArray>(env->GetObjectArrayElement(jaddresses, i)));
|
| + size_t address_size = env->GetArrayLength(bytes_array.obj());
|
| + if (address_size != net::IPAddress::kIPv4AddressSize &&
|
| + address_size != net::IPAddress::kIPv6AddressSize) {
|
| + LOG(ERROR) << "Unsupported IP address size: " << address_size;
|
| + return;
|
| + }
|
| + jbyte* bytes = env->GetByteArrayElements(bytes_array.obj(), nullptr);
|
| + address_list.push_back(net::IPEndPoint(
|
| + net::IPAddress(reinterpret_cast<uint8_t*>(bytes), address_size), 0));
|
| + env->ReleaseByteArrayElements(bytes_array.obj(), bytes, JNI_ABORT);
|
| + }
|
| + PostTaskToNetworkThread(
|
| + FROM_HERE,
|
| + base::Bind(&CronetURLRequestContextAdapter::PutHostCacheOnNetworkThread,
|
| + base::Unretained(this),
|
| + base::android::ConvertJavaStringToUTF8(env, jhostname),
|
| + address_list, base::TimeDelta::FromSeconds(jseconds_to_live)));
|
| +}
|
| +
|
| void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
|
| std::unique_ptr<URLRequestContextConfig> config,
|
| const base::android::ScopedJavaGlobalRef<jobject>&
|
|
|