diff options
Diffstat (limited to 'net/dns/host_resolver_impl.cc')
-rw-r--r-- | net/dns/host_resolver_impl.cc | 44 |
1 files changed, 29 insertions, 15 deletions
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc index f294b8c..35ea2fa 100644 --- a/net/dns/host_resolver_impl.cc +++ b/net/dns/host_resolver_impl.cc @@ -2289,7 +2289,15 @@ void HostResolverImpl::OnIPAddressChanged() { // |this| may be deleted inside AbortAllInProgressJobs(). } +void HostResolverImpl::OnInitialDNSConfigRead() { + UpdateDNSConfig(false); +} + void HostResolverImpl::OnDNSChanged() { + UpdateDNSConfig(true); +} + +void HostResolverImpl::UpdateDNSConfig(bool config_changed) { DnsConfig dns_config; NetworkChangeNotifier::GetDnsConfig(&dns_config); @@ -2310,27 +2318,33 @@ void HostResolverImpl::OnDNSChanged() { // the newly started jobs use the new config. if (dns_client_.get()) { dns_client_->SetConfig(dns_config); - if (dns_client_->GetConfig()) + if (dns_client_->GetConfig()) { UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); + // If we just switched DnsClients, restart jobs using new resolver. + // TODO(pauljensen): Is this necessary? + config_changed = true; + } } - // If the DNS server has changed, existing cached info could be wrong so we - // have to drop our internal cache :( Note that OS level DNS caches, such - // as NSCD's cache should be dropped automatically by the OS when - // resolv.conf changes so we don't need to do anything to clear that cache. - if (cache_.get()) - cache_->clear(); + if (config_changed) { + // If the DNS server has changed, existing cached info could be wrong so we + // have to drop our internal cache :( Note that OS level DNS caches, such + // as NSCD's cache should be dropped automatically by the OS when + // resolv.conf changes so we don't need to do anything to clear that cache. + if (cache_.get()) + cache_->clear(); - // Life check to bail once |this| is deleted. - base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr(); + // Life check to bail once |this| is deleted. + base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr(); - // Existing jobs will have been sent to the original server so they need to - // be aborted. - AbortAllInProgressJobs(); + // Existing jobs will have been sent to the original server so they need to + // be aborted. + AbortAllInProgressJobs(); - // |this| may be deleted inside AbortAllInProgressJobs(). - if (self.get()) - TryServingAllJobsFromHosts(); + // |this| may be deleted inside AbortAllInProgressJobs(). + if (self.get()) + TryServingAllJobsFromHosts(); + } } bool HostResolverImpl::HaveDnsConfig() const { |