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

Unified Diff: components/cronet/url_request_context_config.cc

Issue 1817553002: Add host resolver rules experimental flag for Cronet (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: more comments Created 4 years, 6 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/url_request_context_config.cc
diff --git a/components/cronet/url_request_context_config.cc b/components/cronet/url_request_context_config.cc
index 570173b1504c03507f148c1f5881e6b660566222..6e8b81604bb79e20bf807edf1aea6ad41c011b82 100644
--- a/components/cronet/url_request_context_config.cc
+++ b/components/cronet/url_request_context_config.cc
@@ -15,6 +15,7 @@
#include "base/values.h"
#include "net/cert/cert_verifier.h"
#include "net/dns/host_resolver.h"
+#include "net/dns/mapped_host_resolver.h"
#include "net/http/http_server_properties.h"
#include "net/quic/quic_protocol.h"
#include "net/quic/quic_utils.h"
@@ -55,6 +56,11 @@ const char kAsyncDnsFieldTrialName[] = "AsyncDNS";
// Name of boolean to enable AsyncDNS experiment.
const char kAsyncDnsEnable[] = "enable";
+// Rules to override DNS resolution. Intended for testing.
+// See explanation of format in net/dns/mapped_host_resolver.h.
+const char kHostResolverRulesFieldTrialName[] = "HostResolverRules";
+const char kHostResolverRules[] = "host_resolver_rules";
+
const char kSSLKeyLogFile[] = "ssl_key_log_file";
void ParseAndSetExperimentalOptions(
@@ -65,6 +71,8 @@ void ParseAndSetExperimentalOptions(
if (experimental_options.empty())
return;
+ DCHECK(net_log);
+
DVLOG(1) << "Experimental Options:" << experimental_options;
std::unique_ptr<base::Value> options =
base::JSONReader::Read(experimental_options);
@@ -185,22 +193,33 @@ void ParseAndSetExperimentalOptions(
}
}
+ std::unique_ptr<net::HostResolver> host_resolver =
+ net::HostResolver::CreateDefaultResolver(net_log);
+
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 {
- std::unique_ptr<net::HostResolver> host_resolver(
- net::HostResolver::CreateDefaultResolver(net_log));
- host_resolver->SetDnsClientEnabled(true);
- context_builder->set_host_resolver(std::move(host_resolver));
- }
+ host_resolver->SetDnsClientEnabled(true);
}
}
+ const base::DictionaryValue* host_resolver_args = nullptr;
+ if (dict->GetDictionary(kHostResolverRulesFieldTrialName,
+ &host_resolver_args)) {
+ std::string host_resolver_rules;
+ if (host_resolver_args->GetString(kHostResolverRules,
+ &host_resolver_rules)) {
+ std::unique_ptr<net::MappedHostResolver> remapped_resolver(
+ new net::MappedHostResolver(std::move(host_resolver)));
+ remapped_resolver->SetRulesFromString(host_resolver_rules);
+ host_resolver = std::move(remapped_resolver);
+ }
+ }
+
+ context_builder->set_host_resolver(std::move(host_resolver));
+
std::string ssl_key_log_file_string;
if (dict->GetString(kSSLKeyLogFile, &ssl_key_log_file_string)) {
DCHECK(file_task_runner);
@@ -273,6 +292,8 @@ void URLRequestContextConfig::ConfigureURLRequestContextBuilder(
net::URLRequestContextBuilder* context_builder,
net::NetLog* net_log,
const scoped_refptr<base::SequencedTaskRunner>& file_task_runner) {
+ DCHECK(net_log);
+
std::string config_cache;
if (http_cache != DISABLED) {
net::URLRequestContextBuilder::HttpCacheParams cache_params;

Powered by Google App Engine
This is Rietveld 408576698