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

Side by Side Diff: net/dns/host_resolver_impl.cc

Issue 1778933002: DNS: Per-network-type and Finch-variable timeouts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove change to gdig. Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « net/dns/host_resolver_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/dns/host_resolver_impl.h" 5 #include "net/dns/host_resolver_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <Winsock2.h> 10 #include <Winsock2.h>
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 #include "url/url_canon_ip.h" 58 #include "url/url_canon_ip.h"
59 59
60 #if defined(OS_WIN) 60 #if defined(OS_WIN)
61 #include "net/base/winsock_init.h" 61 #include "net/base/winsock_init.h"
62 #endif 62 #endif
63 63
64 namespace net { 64 namespace net {
65 65
66 namespace { 66 namespace {
67 67
68 // Default delay between calls to the system resolver for the same hostname.
69 // (Can be overridden by field trial.)
70 const int64_t kDnsDefaultUnresponsiveDelayMs = 6000;
71
68 // Limit the size of hostnames that will be resolved to combat issues in 72 // Limit the size of hostnames that will be resolved to combat issues in
69 // some platform's resolvers. 73 // some platform's resolvers.
70 const size_t kMaxHostLength = 4096; 74 const size_t kMaxHostLength = 4096;
71 75
72 // Default TTL for successful resolutions with ProcTask. 76 // Default TTL for successful resolutions with ProcTask.
73 const unsigned kCacheEntryTTLSeconds = 60; 77 const unsigned kCacheEntryTTLSeconds = 60;
74 78
75 // Default TTL for unsuccessful resolutions with ProcTask. 79 // Default TTL for unsuccessful resolutions with ProcTask.
76 const unsigned kNegativeCacheEntryTTLSeconds = 0; 80 const unsigned kNegativeCacheEntryTTLSeconds = 0;
77 81
(...skipping 1751 matching lines...) Expand 10 before | Expand all | Expand 10 after
1829 PrioritizedDispatcher::Handle handle_; 1833 PrioritizedDispatcher::Handle handle_;
1830 }; 1834 };
1831 1835
1832 //----------------------------------------------------------------------------- 1836 //-----------------------------------------------------------------------------
1833 1837
1834 HostResolverImpl::ProcTaskParams::ProcTaskParams( 1838 HostResolverImpl::ProcTaskParams::ProcTaskParams(
1835 HostResolverProc* resolver_proc, 1839 HostResolverProc* resolver_proc,
1836 size_t max_retry_attempts) 1840 size_t max_retry_attempts)
1837 : resolver_proc(resolver_proc), 1841 : resolver_proc(resolver_proc),
1838 max_retry_attempts(max_retry_attempts), 1842 max_retry_attempts(max_retry_attempts),
1839 unresponsive_delay(base::TimeDelta::FromMilliseconds(6000)), 1843 unresponsive_delay(
1844 base::TimeDelta::FromMilliseconds(kDnsDefaultUnresponsiveDelayMs)),
1840 retry_factor(2) { 1845 retry_factor(2) {
1841 // Maximum of 4 retry attempts for host resolution. 1846 // Maximum of 4 retry attempts for host resolution.
1842 static const size_t kDefaultMaxRetryAttempts = 4u; 1847 static const size_t kDefaultMaxRetryAttempts = 4u;
1843 if (max_retry_attempts == HostResolver::kDefaultRetryAttempts) 1848 if (max_retry_attempts == HostResolver::kDefaultRetryAttempts)
1844 max_retry_attempts = kDefaultMaxRetryAttempts; 1849 max_retry_attempts = kDefaultMaxRetryAttempts;
1845 } 1850 }
1846 1851
1847 HostResolverImpl::ProcTaskParams::ProcTaskParams(const ProcTaskParams& other) = 1852 HostResolverImpl::ProcTaskParams::ProcTaskParams(const ProcTaskParams& other) =
1848 default; 1853 default;
1849 1854
(...skipping 21 matching lines...) Expand all
1871 1876
1872 DCHECK_GE(dispatcher_->num_priorities(), static_cast<size_t>(NUM_PRIORITIES)); 1877 DCHECK_GE(dispatcher_->num_priorities(), static_cast<size_t>(NUM_PRIORITIES));
1873 1878
1874 #if defined(OS_WIN) 1879 #if defined(OS_WIN)
1875 EnsureWinsockInit(); 1880 EnsureWinsockInit();
1876 #endif 1881 #endif
1877 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 1882 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
1878 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr()); 1883 new LoopbackProbeJob(weak_ptr_factory_.GetWeakPtr());
1879 #endif 1884 #endif
1880 NetworkChangeNotifier::AddIPAddressObserver(this); 1885 NetworkChangeNotifier::AddIPAddressObserver(this);
1886 NetworkChangeNotifier::AddConnectionTypeObserver(this);
1881 NetworkChangeNotifier::AddDNSObserver(this); 1887 NetworkChangeNotifier::AddDNSObserver(this);
1882 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ 1888 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
1883 !defined(OS_ANDROID) 1889 !defined(OS_ANDROID)
1884 EnsureDnsReloaderInit(); 1890 EnsureDnsReloaderInit();
1885 #endif 1891 #endif
1886 1892
1893 OnConnectionTypeChanged(NetworkChangeNotifier::GetConnectionType());
1894
1887 { 1895 {
1888 DnsConfig dns_config; 1896 DnsConfig dns_config;
1889 NetworkChangeNotifier::GetDnsConfig(&dns_config); 1897 NetworkChangeNotifier::GetDnsConfig(&dns_config);
1890 received_dns_config_ = dns_config.IsValid(); 1898 received_dns_config_ = dns_config.IsValid();
1891 // Conservatively assume local IPv6 is needed when DnsConfig is not valid. 1899 // Conservatively assume local IPv6 is needed when DnsConfig is not valid.
1892 use_local_ipv6_ = !dns_config.IsValid() || dns_config.use_local_ipv6; 1900 use_local_ipv6_ = !dns_config.IsValid() || dns_config.use_local_ipv6;
1893 } 1901 }
1894 1902
1895 fallback_to_proctask_ = !ConfigureAsyncDnsNoFallbackFieldTrial(); 1903 fallback_to_proctask_ = !ConfigureAsyncDnsNoFallbackFieldTrial();
1896 } 1904 }
1897 1905
1898 HostResolverImpl::~HostResolverImpl() { 1906 HostResolverImpl::~HostResolverImpl() {
1899 // Prevent the dispatcher from starting new jobs. 1907 // Prevent the dispatcher from starting new jobs.
1900 dispatcher_->SetLimitsToZero(); 1908 dispatcher_->SetLimitsToZero();
1901 // It's now safe for Jobs to call KillDsnTask on destruction, because 1909 // It's now safe for Jobs to call KillDsnTask on destruction, because
1902 // OnJobComplete will not start any new jobs. 1910 // OnJobComplete will not start any new jobs.
1903 STLDeleteValues(&jobs_); 1911 STLDeleteValues(&jobs_);
1904 1912
1905 NetworkChangeNotifier::RemoveIPAddressObserver(this); 1913 NetworkChangeNotifier::RemoveIPAddressObserver(this);
1914 NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
1906 NetworkChangeNotifier::RemoveDNSObserver(this); 1915 NetworkChangeNotifier::RemoveDNSObserver(this);
1907 } 1916 }
1908 1917
1909 void HostResolverImpl::SetMaxQueuedJobs(size_t value) { 1918 void HostResolverImpl::SetMaxQueuedJobs(size_t value) {
1910 DCHECK_EQ(0u, dispatcher_->num_queued_jobs()); 1919 DCHECK_EQ(0u, dispatcher_->num_queued_jobs());
1911 DCHECK_GT(value, 0u); 1920 DCHECK_GT(value, 0u);
1912 max_queued_jobs_ = value; 1921 max_queued_jobs_ = value;
1913 } 1922 }
1914 1923
1915 int HostResolverImpl::Resolve(const RequestInfo& info, 1924 int HostResolverImpl::Resolve(const RequestInfo& info,
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
2334 probe_weak_ptr_factory_.InvalidateWeakPtrs(); 2343 probe_weak_ptr_factory_.InvalidateWeakPtrs();
2335 if (cache_.get()) 2344 if (cache_.get())
2336 cache_->clear(); 2345 cache_->clear();
2337 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID) 2346 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
2338 new LoopbackProbeJob(probe_weak_ptr_factory_.GetWeakPtr()); 2347 new LoopbackProbeJob(probe_weak_ptr_factory_.GetWeakPtr());
2339 #endif 2348 #endif
2340 AbortAllInProgressJobs(); 2349 AbortAllInProgressJobs();
2341 // |this| may be deleted inside AbortAllInProgressJobs(). 2350 // |this| may be deleted inside AbortAllInProgressJobs().
2342 } 2351 }
2343 2352
2353 void HostResolverImpl::OnConnectionTypeChanged(
2354 NetworkChangeNotifier::ConnectionType type) {
2355 proc_params_.unresponsive_delay =
2356 GetTimeDeltaForConnectionTypeFromFieldTrialOrDefault(
2357 "DnsUnresponsiveDelayMsByConnectionType",
2358 base::TimeDelta::FromMilliseconds(kDnsDefaultUnresponsiveDelayMs),
2359 type);
2360 }
2361
2344 void HostResolverImpl::OnInitialDNSConfigRead() { 2362 void HostResolverImpl::OnInitialDNSConfigRead() {
2345 UpdateDNSConfig(false); 2363 UpdateDNSConfig(false);
2346 } 2364 }
2347 2365
2348 void HostResolverImpl::OnDNSChanged() { 2366 void HostResolverImpl::OnDNSChanged() {
2349 UpdateDNSConfig(true); 2367 UpdateDNSConfig(true);
2350 } 2368 }
2351 2369
2352 void HostResolverImpl::UpdateDNSConfig(bool config_changed) { 2370 void HostResolverImpl::UpdateDNSConfig(bool config_changed) {
2353 DnsConfig dns_config; 2371 DnsConfig dns_config;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
2442 dns_client_->SetConfig(dns_config); 2460 dns_client_->SetConfig(dns_config);
2443 num_dns_failures_ = 0; 2461 num_dns_failures_ = 0;
2444 if (dns_client_->GetConfig()) 2462 if (dns_client_->GetConfig())
2445 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); 2463 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true);
2446 } 2464 }
2447 2465
2448 AbortDnsTasks(); 2466 AbortDnsTasks();
2449 } 2467 }
2450 2468
2451 } // namespace net 2469 } // namespace net
OLDNEW
« no previous file with comments | « net/dns/host_resolver_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698