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

Unified Diff: net/dns/host_resolver.cc

Issue 1903263002: DNS: Expose stale results through HostResolverImpl. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dns_stale1
Patch Set: rebase Created 4 years, 8 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: 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 {

Powered by Google App Engine
This is Rietveld 408576698