Index: net/dns/host_resolver.cc |
diff --git a/net/dns/host_resolver.cc b/net/dns/host_resolver.cc |
index abe8e49e6578714bf5216398b3450135b4798da1..ecd3ff9c825908c1cddfc86dd960580337a1669f 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,44 @@ HostResolver::RequestInfo::RequestInfo(const HostPortPair& host_port_pair) |
HostResolver::~HostResolver() { |
} |
+int HostResolver::ResolveStaleFromCache(const RequestInfo& info, |
+ AddressList* addresses, |
+ HostCache::StaleEntryInfo* stale_info, |
+ const BoundNetLog& net_log) { |
+ // If a resolver doesn't know how to get potentially-stale results from the |
+ // cache, just get fresh results instead. |
+ 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::StaleEntryInfo* 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; |
+ addresses->clear(); |
+ |
+ 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 { |