Index: components/cronet/url_request_context_config.cc |
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc |
index 90312a36522074a5fb32131bd7ac24d88851b1f7..63c25a40670446742bd28d776ce11762b1c4684a 100644 |
--- a/components/cronet/url_request_context_config.cc |
+++ b/components/cronet/url_request_context_config.cc |
@@ -4,13 +4,14 @@ |
#include "components/cronet/url_request_context_config.h" |
-#include "base/basictypes.h" |
#include "base/json/json_reader.h" |
+#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_piece.h" |
#include "base/values.h" |
#include "net/cert/cert_verifier.h" |
+#include "net/dns/host_resolver.h" |
#include "net/quic/quic_protocol.h" |
#include "net/quic/quic_utils.h" |
#include "net/url_request/url_request_context_builder.h" |
@@ -29,9 +30,15 @@ const char kQuicMaxNumberOfLossyConnections[] = |
"max_number_of_lossy_connections"; |
const char kQuicPacketLossThreshold[] = "packet_loss_threshold"; |
+// AsyncDNS experiment dictionary name. |
+const char kAsyncDnsFieldTrialName[] = "AsyncDNS"; |
+// Name of boolean to enable AsyncDNS experiment. |
+const char kAsyncDnsEnable[] = "enable"; |
+ |
void ParseAndSetExperimentalOptions( |
const std::string& experimental_options, |
- net::URLRequestContextBuilder* context_builder) { |
+ net::URLRequestContextBuilder* context_builder, |
+ net::NetLog* net_log) { |
if (experimental_options.empty()) |
return; |
@@ -89,6 +96,22 @@ void ParseAndSetExperimentalOptions( |
quic_packet_loss_threshold); |
} |
} |
+ |
+ const base::DictionaryValue* async_dns_args = nullptr; |
+ if (dict->GetDictionary(kAsyncDnsFieldTrialName, &async_dns_args)) { |
+ bool async_dns_enable = false; |
+ if (async_dns_args->GetBoolean(kAsyncDnsEnable, &async_dns_enable) && |
+ async_dns_enable) { |
+ if (net_log == nullptr) { |
+ DCHECK(false) << "AsyncDNS experiment requires NetLog."; |
+ } else { |
+ scoped_ptr<net::HostResolver> host_resolver( |
+ net::HostResolver::CreateDefaultResolver(net_log)); |
+ host_resolver->SetDnsClientEnabled(true); |
+ context_builder->set_host_resolver(std::move(host_resolver)); |
+ } |
+ } |
+ } |
} |
} // namespace |
@@ -143,7 +166,8 @@ URLRequestContextConfig::URLRequestContextConfig( |
URLRequestContextConfig::~URLRequestContextConfig() {} |
void URLRequestContextConfig::ConfigureURLRequestContextBuilder( |
- net::URLRequestContextBuilder* context_builder) { |
+ net::URLRequestContextBuilder* context_builder, |
+ net::NetLog* net_log) { |
std::string config_cache; |
if (http_cache != DISABLED) { |
net::URLRequestContextBuilder::HttpCacheParams cache_params; |
@@ -163,7 +187,8 @@ void URLRequestContextConfig::ConfigureURLRequestContextBuilder( |
context_builder->SetSpdyAndQuicEnabled(enable_spdy, enable_quic); |
context_builder->set_sdch_enabled(enable_sdch); |
- ParseAndSetExperimentalOptions(experimental_options, context_builder); |
+ ParseAndSetExperimentalOptions(experimental_options, context_builder, |
+ net_log); |
if (mock_cert_verifier) |
context_builder->SetCertVerifier(mock_cert_verifier.Pass()); |