Chromium Code Reviews| 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 66f9fb06e053ac65bbd6bd6244bb171a4529129a..504bae7224bbb6e38ccad9d3dddbbdcbbed64f45 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" |
| @@ -53,6 +54,9 @@ const char kAsyncDnsFieldTrialName[] = "AsyncDNS"; |
| // Name of boolean to enable AsyncDNS experiment. |
| const char kAsyncDnsEnable[] = "enable"; |
| +const char kHostResolverRulesFieldTrialName[] = "HostResolverRules"; |
|
pauljensen
2016/04/07 16:29:15
can we add a comment above here documenting what t
mgersh
2016/06/08 18:31:14
Done.
|
| +const char kHostResolverRules[] = "host_resolver_rules"; |
| + |
| const char kSSLKeyLogFile[] = "ssl_key_log_file"; |
| void ParseAndSetExperimentalOptions( |
| @@ -183,6 +187,8 @@ void ParseAndSetExperimentalOptions( |
| } |
| } |
| + scoped_ptr<net::HostResolver> host_resolver; |
| + |
| const base::DictionaryValue* async_dns_args = nullptr; |
| if (dict->GetDictionary(kAsyncDnsFieldTrialName, &async_dns_args)) { |
| bool async_dns_enable = false; |
| @@ -191,14 +197,36 @@ void ParseAndSetExperimentalOptions( |
| if (net_log == nullptr) { |
| DCHECK(false) << "AsyncDNS experiment requires NetLog."; |
| } else { |
| - scoped_ptr<net::HostResolver> host_resolver( |
| - net::HostResolver::CreateDefaultResolver(net_log)); |
| + host_resolver = net::HostResolver::CreateDefaultResolver(net_log); |
| host_resolver->SetDnsClientEnabled(true); |
| - context_builder->set_host_resolver(std::move(host_resolver)); |
| } |
| } |
| } |
| + 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)) { |
| + if (net_log == nullptr) { |
| + DCHECK(false) << "HostResolver experiment requires NetLog."; |
| + } else { |
| + if (!host_resolver) { // Host resolver rules enabled, no AsyncDNS |
| + host_resolver = net::HostResolver::CreateDefaultResolver(net_log); |
| + } |
|
pauljensen
2016/04/07 16:29:15
I think we need to simplify some things in this fu
mgersh
2016/06/08 18:31:14
Done.
|
| + scoped_ptr<net::MappedHostResolver> remapped_resolver( |
| + new net::MappedHostResolver(std::move(host_resolver))); |
| + remapped_resolver->SetRulesFromString(host_resolver_rules); |
| + context_builder->set_host_resolver(std::move(remapped_resolver)); |
| + } |
| + } |
| + } |
| + |
| + if (host_resolver) { // AsyncDNS enabled, no host resolver rules |
| + 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); |