Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <Winsock2.h> | 8 #include <Winsock2.h> |
| 9 #elif defined(OS_POSIX) | 9 #elif defined(OS_POSIX) |
| 10 #include <netdb.h> | 10 #include <netdb.h> |
| (...skipping 1664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1675 | 1675 |
| 1676 if (proc_params_.max_retry_attempts == HostResolver::kDefaultRetryAttempts) | 1676 if (proc_params_.max_retry_attempts == HostResolver::kDefaultRetryAttempts) |
| 1677 proc_params_.max_retry_attempts = kDefaultMaxRetryAttempts; | 1677 proc_params_.max_retry_attempts = kDefaultMaxRetryAttempts; |
| 1678 | 1678 |
| 1679 #if defined(OS_WIN) | 1679 #if defined(OS_WIN) |
| 1680 EnsureWinsockInit(); | 1680 EnsureWinsockInit(); |
| 1681 #endif | 1681 #endif |
| 1682 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 1682 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 1683 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr()); | 1683 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr()); |
| 1684 #endif | 1684 #endif |
| 1685 NetworkChangeNotifier::AddIPAddressObserver(this); | 1685 NetworkChangeNotifier::AddNetworkChangeObserver(this); |
| 1686 NetworkChangeNotifier::AddDNSObserver(this); | 1686 NetworkChangeNotifier::AddDNSObserver(this); |
| 1687 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ | 1687 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ |
| 1688 !defined(OS_ANDROID) | 1688 !defined(OS_ANDROID) |
| 1689 EnsureDnsReloaderInit(); | 1689 EnsureDnsReloaderInit(); |
| 1690 #endif | 1690 #endif |
| 1691 | 1691 |
| 1692 // TODO(szym): Remove when received_dns_config_ is removed, once | 1692 // TODO(szym): Remove when received_dns_config_ is removed, once |
| 1693 // http://crbug.com/137914 is resolved. | 1693 // http://crbug.com/137914 is resolved. |
| 1694 { | 1694 { |
| 1695 DnsConfig dns_config; | 1695 DnsConfig dns_config; |
| 1696 NetworkChangeNotifier::GetDnsConfig(&dns_config); | 1696 NetworkChangeNotifier::GetDnsConfig(&dns_config); |
| 1697 received_dns_config_ = dns_config.IsValid(); | 1697 received_dns_config_ = dns_config.IsValid(); |
| 1698 } | 1698 } |
| 1699 } | 1699 } |
| 1700 | 1700 |
| 1701 HostResolverImpl::~HostResolverImpl() { | 1701 HostResolverImpl::~HostResolverImpl() { |
| 1702 // This will also cancel all outstanding requests. | 1702 // This will also cancel all outstanding requests. |
| 1703 STLDeleteValues(&jobs_); | 1703 STLDeleteValues(&jobs_); |
| 1704 | 1704 |
| 1705 NetworkChangeNotifier::RemoveIPAddressObserver(this); | 1705 NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
| 1706 NetworkChangeNotifier::RemoveDNSObserver(this); | 1706 NetworkChangeNotifier::RemoveDNSObserver(this); |
| 1707 } | 1707 } |
| 1708 | 1708 |
| 1709 void HostResolverImpl::SetMaxQueuedJobs(size_t value) { | 1709 void HostResolverImpl::SetMaxQueuedJobs(size_t value) { |
| 1710 DCHECK_EQ(0u, dispatcher_.num_queued_jobs()); | 1710 DCHECK_EQ(0u, dispatcher_.num_queued_jobs()); |
| 1711 DCHECK_GT(value, 0u); | 1711 DCHECK_GT(value, 0u); |
| 1712 max_queued_jobs_ = value; | 1712 max_queued_jobs_ = value; |
| 1713 } | 1713 } |
| 1714 | 1714 |
| 1715 int HostResolverImpl::Resolve(const RequestInfo& info, | 1715 int HostResolverImpl::Resolve(const RequestInfo& info, |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1840 } | 1840 } |
| 1841 | 1841 |
| 1842 AddressFamily HostResolverImpl::GetDefaultAddressFamily() const { | 1842 AddressFamily HostResolverImpl::GetDefaultAddressFamily() const { |
| 1843 return default_address_family_; | 1843 return default_address_family_; |
| 1844 } | 1844 } |
| 1845 | 1845 |
| 1846 void HostResolverImpl::ProbeIPv6Support() { | 1846 void HostResolverImpl::ProbeIPv6Support() { |
| 1847 DCHECK(CalledOnValidThread()); | 1847 DCHECK(CalledOnValidThread()); |
| 1848 DCHECK(!ipv6_probe_monitoring_); | 1848 DCHECK(!ipv6_probe_monitoring_); |
| 1849 ipv6_probe_monitoring_ = true; | 1849 ipv6_probe_monitoring_ = true; |
| 1850 OnIPAddressChanged(); | 1850 OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 1851 } | 1851 } |
| 1852 | 1852 |
| 1853 void HostResolverImpl::SetDnsClientEnabled(bool enabled) { | 1853 void HostResolverImpl::SetDnsClientEnabled(bool enabled) { |
| 1854 DCHECK(CalledOnValidThread()); | 1854 DCHECK(CalledOnValidThread()); |
| 1855 #if defined(ENABLE_BUILT_IN_DNS) | 1855 #if defined(ENABLE_BUILT_IN_DNS) |
| 1856 if (enabled && !dns_client_) { | 1856 if (enabled && !dns_client_) { |
| 1857 SetDnsClient(DnsClient::CreateClient(net_log_)); | 1857 SetDnsClient(DnsClient::CreateClient(net_log_)); |
| 1858 } else if (!enabled && dns_client_) { | 1858 } else if (!enabled && dns_client_) { |
| 1859 SetDnsClient(scoped_ptr<DnsClient>()); | 1859 SetDnsClient(scoped_ptr<DnsClient>()); |
| 1860 } | 1860 } |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2051 base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr(); | 2051 base::WeakPtr<HostResolverImpl> self = weak_ptr_factory_.GetWeakPtr(); |
| 2052 | 2052 |
| 2053 for (JobMap::iterator it = jobs_.begin(); self && it != jobs_.end(); ) { | 2053 for (JobMap::iterator it = jobs_.begin(); self && it != jobs_.end(); ) { |
| 2054 Job* job = it->second; | 2054 Job* job = it->second; |
| 2055 ++it; | 2055 ++it; |
| 2056 // This could remove |job| from |jobs_|, but iterator will remain valid. | 2056 // This could remove |job| from |jobs_|, but iterator will remain valid. |
| 2057 job->ServeFromHosts(); | 2057 job->ServeFromHosts(); |
| 2058 } | 2058 } |
| 2059 } | 2059 } |
| 2060 | 2060 |
| 2061 void HostResolverImpl::OnIPAddressChanged() { | 2061 void HostResolverImpl::OnNetworkChanged( |
| 2062 net::NetworkChangeNotifier::ConnectionType type) { | |
| 2063 if (type != net::NetworkChangeNotifier::CONNECTION_NONE) | |
| 2064 return; | |
| 2062 // Abandon all ProbeJobs. | 2065 // Abandon all ProbeJobs. |
| 2063 probe_weak_ptr_factory_.InvalidateWeakPtrs(); | 2066 probe_weak_ptr_factory_.InvalidateWeakPtrs(); |
| 2064 if (cache_.get()) | 2067 if (cache_.get()) |
| 2065 cache_->clear(); | 2068 cache_->clear(); |
| 2066 if (ipv6_probe_monitoring_) | 2069 if (ipv6_probe_monitoring_) |
| 2067 new IPv6ProbeJob(probe_weak_ptr_factory_.GetWeakPtr(), net_log_); | 2070 new IPv6ProbeJob(probe_weak_ptr_factory_.GetWeakPtr(), net_log_); |
|
szym
2013/01/20 06:52:08
This code would read more intuitively if it separa
| |
| 2068 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 2071 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 2069 new LoopbackProbeJob(probe_weak_ptr_factory_.GetWeakPtr()); | 2072 new LoopbackProbeJob(probe_weak_ptr_factory_.GetWeakPtr()); |
| 2070 #endif | 2073 #endif |
| 2071 AbortAllInProgressJobs(); | 2074 AbortAllInProgressJobs(); |
| 2072 // |this| may be deleted inside AbortAllInProgressJobs(). | 2075 // |this| may be deleted inside AbortAllInProgressJobs(). |
| 2073 } | 2076 } |
| 2074 | 2077 |
| 2075 void HostResolverImpl::OnDNSChanged() { | 2078 void HostResolverImpl::OnDNSChanged() { |
| 2076 DnsConfig dns_config; | 2079 DnsConfig dns_config; |
| 2077 NetworkChangeNotifier::GetDnsConfig(&dns_config); | 2080 NetworkChangeNotifier::GetDnsConfig(&dns_config); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2148 } | 2151 } |
| 2149 DnsConfig dns_config; | 2152 DnsConfig dns_config; |
| 2150 NetworkChangeNotifier::GetDnsConfig(&dns_config); | 2153 NetworkChangeNotifier::GetDnsConfig(&dns_config); |
| 2151 dns_client_->SetConfig(dns_config); | 2154 dns_client_->SetConfig(dns_config); |
| 2152 num_dns_failures_ = 0; | 2155 num_dns_failures_ = 0; |
| 2153 if (dns_config.IsValid()) | 2156 if (dns_config.IsValid()) |
| 2154 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); | 2157 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); |
| 2155 } | 2158 } |
| 2156 | 2159 |
| 2157 } // namespace net | 2160 } // namespace net |
| OLD | NEW |