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

Unified Diff: components/cronet/url_request_context_config.cc

Issue 1898873006: Cronet: Use stale DNS cache entries experimentally. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dns_stale2
Patch Set: Resolve merge conflict. Created 4 years, 4 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 927f0b0ae7b5964da7cbd9ba0104d7e67fd3acf7..0863d91442a9b636f70fc77c16e3b1f45781104b 100644
--- a/components/cronet/url_request_context_config.cc
+++ b/components/cronet/url_request_context_config.cc
@@ -14,6 +14,7 @@
#include "base/strings/string_piece.h"
#include "base/strings/string_split.h"
#include "base/values.h"
+#include "components/cronet/stale_host_resolver.h"
#include "net/cert/caching_cert_verifier.h"
#include "net/cert/cert_verifier.h"
#include "net/cert/cert_verify_proc.h"
@@ -61,6 +62,23 @@ const char kAsyncDnsFieldTrialName[] = "AsyncDNS";
// Name of boolean to enable AsyncDNS experiment.
const char kAsyncDnsEnable[] = "enable";
+// Stale DNS (StaleHostResolver) experiment dictionary name.
+const char kStaleDnsFieldTrialName[] = "StaleDNS";
+// Name of boolean to enable stale DNS experiment.
+const char kStaleDnsEnable[] = "enable";
+// Name of integer delay in milliseconds before a stale DNS result will be
+// used.
+const char kStaleDnsDelayMs[] = "delay_ms";
+// Name of integer maximum age (past expiration) in milliseconds of a stale DNS
+// result that will be used, or 0 for no limit.
+const char kStaleDnsMaxExpiredTimeMs[] = "max_expired_time_ms";
+// Name of integer maximum times each stale DNS result can be used, or 0 for no
+// limit.
+const char kStaleDnsMaxStaleUses[] = "max_stale_uses";
+// Name of boolean to allow stale DNS results from other networks to be used on
+// the current network.
+const char kStaleDnsAllowOtherNetwork[] = "allow_other_network";
+
// Rules to override DNS resolution. Intended for testing.
// See explanation of format in net/dns/mapped_host_resolver.h.
const char kHostResolverRulesFieldTrialName[] = "HostResolverRules";
@@ -205,33 +223,71 @@ void ParseAndSetExperimentalOptions(
}
}
- std::unique_ptr<net::HostResolver> host_resolver =
- net::HostResolver::CreateDefaultResolver(net_log);
+ bool async_dns_enable = false;
+ bool stale_dns_enable = false;
+ bool host_resolver_rules_enable = false;
+ StaleHostResolver::StaleOptions stale_dns_options;
+ std::string host_resolver_rules_string;
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) {
- host_resolver->SetDnsClientEnabled(true);
+ if (dict->GetDictionary(kAsyncDnsFieldTrialName, &async_dns_args))
+ async_dns_args->GetBoolean(kAsyncDnsEnable, &async_dns_enable);
+
+ const base::DictionaryValue* stale_dns_args = nullptr;
+ if (dict->GetDictionary(kStaleDnsFieldTrialName, &stale_dns_args)) {
+ if (stale_dns_args->GetBoolean(kStaleDnsEnable, &stale_dns_enable) &&
+ stale_dns_enable) {
+ int delay;
+ if (stale_dns_args->GetInteger(kStaleDnsDelayMs, &delay))
+ stale_dns_options.delay = base::TimeDelta::FromMilliseconds(delay);
+ int max_expired_time_ms;
+ if (stale_dns_args->GetInteger(kStaleDnsMaxExpiredTimeMs,
+ &max_expired_time_ms)) {
+ stale_dns_options.max_expired_time =
+ base::TimeDelta::FromMilliseconds(max_expired_time_ms);
+ }
+ int max_stale_uses;
+ if (stale_dns_args->GetInteger(kStaleDnsMaxStaleUses, &max_stale_uses))
+ stale_dns_options.max_stale_uses = max_stale_uses;
+ bool allow_other_network;
+ if (stale_dns_args->GetBoolean(kStaleDnsAllowOtherNetwork,
+ &allow_other_network)) {
+ stale_dns_options.allow_other_network = allow_other_network;
+ }
}
}
- const base::DictionaryValue* host_resolver_args = nullptr;
+ const base::DictionaryValue* host_resolver_rules_args = nullptr;
if (dict->GetDictionary(kHostResolverRulesFieldTrialName,
- &host_resolver_args)) {
- std::string host_resolver_rules;
- if (host_resolver_args->GetString(kHostResolverRules,
- &host_resolver_rules)) {
+ &host_resolver_rules_args)) {
+ host_resolver_rules_enable = host_resolver_rules_args->GetString(
+ kHostResolverRules, &host_resolver_rules_string);
+ }
+
+ if (async_dns_enable || stale_dns_enable || host_resolver_rules_enable) {
+ if (net_log == nullptr) {
+ CHECK(false) << "AsyncDNS, StaleDNS, and HostResolverRules experiments "
+ << "require NetLog.";
+ }
+ std::unique_ptr<net::HostResolver> host_resolver;
+ if (stale_dns_enable) {
+ host_resolver.reset(new StaleHostResolver(
+ net::HostResolver::CreateDefaultResolverImpl(net_log),
+ stale_dns_options));
+ } else {
+ host_resolver = net::HostResolver::CreateDefaultResolver(net_log);
+ }
+ if (async_dns_enable)
+ host_resolver->SetDnsClientEnabled(true);
+ if (host_resolver_rules_enable) {
std::unique_ptr<net::MappedHostResolver> remapped_resolver(
new net::MappedHostResolver(std::move(host_resolver)));
- remapped_resolver->SetRulesFromString(host_resolver_rules);
+ remapped_resolver->SetRulesFromString(host_resolver_rules_string);
host_resolver = std::move(remapped_resolver);
}
+ context_builder->set_host_resolver(std::move(host_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);
« no previous file with comments | « components/cronet/stale_host_resolver_unittest.cc ('k') | components/cronet/url_request_context_config_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698