Index: net/dns/host_resolver.cc |
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc |
index abe8e49e6578714bf5216398b3450135b4798da1..de8a8785aa765a5ec0d9e9adb357dbe4e3f718f9 100644 |
--- a/net/dns/host_resolver.cc |
+++ b/net/dns/host_resolver.cc |
@@ -9,6 +9,7 @@ |
#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_split.h" |
#include "base/values.h" |
+#include "net/base/net_errors.h" |
#include "net/dns/dns_client.h" |
#include "net/dns/dns_config_service.h" |
#include "net/dns/host_cache.h" |
@@ -100,11 +101,47 @@ HostResolver::RequestInfo::RequestInfo(const HostPortPair& host_port_pair) |
HostResolver::~HostResolver() { |
} |
+int HostResolver::ResolveStaleFromCache(const RequestInfo& info, |
+ AddressList* addresses, |
+ HostCache::EntryStaleness* stale_info, |
+ const BoundNetLog& net_log) { |
+ // If a resolver doesn't know how to get potentially-stale results from the |
+ // cache, blank |*stale_info| and just get fresh results instead. |
+ stale_info->expired_by = base::TimeDelta::FromSeconds(-1); |
+ stale_info->network_changes = 0u; |
+ stale_info->stale_hits = 0u; |
+ return ResolveFromCache(info, addresses, net_log); |
+} |
+ |
+int HostResolver::ResolveStale(const RequestInfo& info, |
+ RequestPriority priority, |
+ AddressList* addresses, |
+ const CompletionCallback& callback, |
+ RequestHandle* out_req, |
+ int* stale_error, |
+ AddressList* stale_addresses, |
+ HostCache::EntryStaleness* stale_info, |
+ const BoundNetLog& net_log) { |
+ int rv = ResolveStaleFromCache(info, addresses, stale_info, net_log); |
+ // If it's a fresh cache hit, return it synchronously. |
+ if (rv != ERR_DNS_CACHE_MISS && !stale_info->is_stale()) { |
+ *stale_error = ERR_UNEXPECTED; |
+ stale_addresses->clear(); |
+ return rv; |
+ } |
+ |
+ *stale_error = rv; |
+ *stale_addresses = *addresses; |
Randy Smith (Not in Mondays)
2016/05/04 19:46:59
I wince a bit at setting *stale_addresses in the E
Julia Tuttle
2016/05/05 15:42:54
Fixed.
|
+ addresses->clear(); |
Randy Smith (Not in Mondays)
2016/05/04 19:46:59
So both this and the ResolveStaleFromCache() call
Julia Tuttle
2016/05/05 15:42:54
Fixed.
|
+ |
+ return Resolve(info, priority, addresses, callback, out_req, net_log); |
+} |
+ |
void HostResolver::SetDnsClientEnabled(bool enabled) { |
} |
HostCache* HostResolver::GetHostCache() { |
- return NULL; |
+ return nullptr; |
} |
std::unique_ptr<base::Value> HostResolver::GetDnsConfigAsValue() const { |