| Index: net/dns/async_host_resolver.cc
|
| diff --git a/net/dns/async_host_resolver.cc b/net/dns/async_host_resolver.cc
|
| index 6f6552bcfa684a7c680c9076ef19733c45e9918c..00ecf5e566e490550a977d1df78acd9da7cf7d3b 100644
|
| --- a/net/dns/async_host_resolver.cc
|
| +++ b/net/dns/async_host_resolver.cc
|
| @@ -349,8 +349,9 @@ void AsyncHostResolver::OnDnsRequestComplete(
|
| RequestList& requests = rit->second;
|
| int port = requests.empty() ? 80 : requests.front()->info().port();
|
|
|
| - // Extract AddressList out of DnsResponse.
|
| + // Extract AddressList and TTL out of DnsResponse.
|
| AddressList addr_list;
|
| + uint32 ttl = kuint32max;
|
| if (result == OK) {
|
| IPAddressList ip_addresses;
|
| DnsRecordParser parser = response->Parser();
|
| @@ -362,6 +363,7 @@ void AsyncHostResolver::OnDnsRequestComplete(
|
| record.rdata.size() == kIPv6AddressSize)) {
|
| ip_addresses.push_back(IPAddressNumber(record.rdata.begin(),
|
| record.rdata.end()));
|
| + ttl = std::min(ttl, record.ttl);
|
| }
|
| }
|
| if (!ip_addresses.empty())
|
| @@ -389,7 +391,11 @@ void AsyncHostResolver::OnDnsRequestComplete(
|
| HostResolver::RequestInfo info = request->info();
|
| HostCache::Key key(
|
| info.hostname(), info.address_family(), info.host_resolver_flags());
|
| - cache_->Set(key, result, addr_list, base::TimeTicks::Now());
|
| + cache_->Set(key,
|
| + result,
|
| + addr_list,
|
| + base::TimeDelta::FromSeconds(ttl),
|
| + base::TimeTicks::Now());
|
| }
|
|
|
| // Cleanup requests.
|
|
|