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

Unified Diff: components/cronet/android/cronet_url_request_context_adapter.cc

Issue 2909663002: [Cronet] Add API to set DNS cache entry
Patch Set: Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
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>&

Powered by Google App Engine
This is Rietveld 408576698