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

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

Issue 10873018: [net] Move DnsConfigService to NetworkChangeNotifier. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add comment Created 8 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « net/base/host_resolver_impl.h ('k') | net/base/host_resolver_impl_unittest.cc » ('j') | 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/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 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 RequestPriority highest_priority_; 401 RequestPriority highest_priority_;
402 size_t total_count_; 402 size_t total_count_;
403 size_t counts_[NUM_PRIORITIES]; 403 size_t counts_[NUM_PRIORITIES];
404 }; 404 };
405 405
406 //----------------------------------------------------------------------------- 406 //-----------------------------------------------------------------------------
407 407
408 HostResolver* CreateHostResolver(size_t max_concurrent_resolves, 408 HostResolver* CreateHostResolver(size_t max_concurrent_resolves,
409 size_t max_retry_attempts, 409 size_t max_retry_attempts,
410 HostCache* cache, 410 HostCache* cache,
411 scoped_ptr<DnsConfigService> config_service,
412 scoped_ptr<DnsClient> dns_client, 411 scoped_ptr<DnsClient> dns_client,
413 NetLog* net_log) { 412 NetLog* net_log) {
414 if (max_concurrent_resolves == HostResolver::kDefaultParallelism) 413 if (max_concurrent_resolves == HostResolver::kDefaultParallelism)
415 max_concurrent_resolves = kDefaultMaxProcTasks; 414 max_concurrent_resolves = kDefaultMaxProcTasks;
416 415
417 // TODO(szym): Add experiments with reserved slots for higher priority 416 // TODO(szym): Add experiments with reserved slots for higher priority
418 // requests. 417 // requests.
419 418
420 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, max_concurrent_resolves); 419 PrioritizedDispatcher::Limits limits(NUM_PRIORITIES, max_concurrent_resolves);
421 420
422 HostResolverImpl* resolver = new HostResolverImpl( 421 HostResolverImpl* resolver = new HostResolverImpl(
423 cache, 422 cache,
424 limits, 423 limits,
425 HostResolverImpl::ProcTaskParams(NULL, max_retry_attempts), 424 HostResolverImpl::ProcTaskParams(NULL, max_retry_attempts),
426 config_service.Pass(),
427 dns_client.Pass(), 425 dns_client.Pass(),
428 net_log); 426 net_log);
429 427
430 return resolver; 428 return resolver;
431 } 429 }
432 430
433 } // anonymous namespace 431 } // anonymous namespace
434 432
435 //----------------------------------------------------------------------------- 433 //-----------------------------------------------------------------------------
436 434
437 HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves, 435 HostResolver* CreateSystemHostResolver(size_t max_concurrent_resolves,
438 size_t max_retry_attempts, 436 size_t max_retry_attempts,
439 NetLog* net_log) { 437 NetLog* net_log) {
440 return CreateHostResolver(max_concurrent_resolves, 438 return CreateHostResolver(max_concurrent_resolves,
441 max_retry_attempts, 439 max_retry_attempts,
442 HostCache::CreateDefaultCache(), 440 HostCache::CreateDefaultCache(),
443 DnsConfigService::CreateSystemService(),
444 scoped_ptr<DnsClient>(NULL), 441 scoped_ptr<DnsClient>(NULL),
445 net_log); 442 net_log);
446 } 443 }
447 444
448 HostResolver* CreateNonCachingSystemHostResolver(size_t max_concurrent_resolves, 445 HostResolver* CreateNonCachingSystemHostResolver(size_t max_concurrent_resolves,
449 size_t max_retry_attempts, 446 size_t max_retry_attempts,
450 NetLog* net_log) { 447 NetLog* net_log) {
451 return CreateHostResolver(max_concurrent_resolves, 448 return CreateHostResolver(max_concurrent_resolves,
452 max_retry_attempts, 449 max_retry_attempts,
453 NULL, 450 NULL,
454 scoped_ptr<DnsConfigService>(NULL),
455 scoped_ptr<DnsClient>(NULL), 451 scoped_ptr<DnsClient>(NULL),
456 net_log); 452 net_log);
457 } 453 }
458 454
459 HostResolver* CreateAsyncHostResolver(size_t max_concurrent_resolves, 455 HostResolver* CreateAsyncHostResolver(size_t max_concurrent_resolves,
460 size_t max_retry_attempts, 456 size_t max_retry_attempts,
461 NetLog* net_log) { 457 NetLog* net_log) {
462 return CreateHostResolver(max_concurrent_resolves, 458 return CreateHostResolver(max_concurrent_resolves,
463 max_retry_attempts, 459 max_retry_attempts,
464 HostCache::CreateDefaultCache(), 460 HostCache::CreateDefaultCache(),
465 DnsConfigService::CreateSystemService(),
466 DnsClient::CreateClient(net_log), 461 DnsClient::CreateClient(net_log),
467 net_log); 462 net_log);
468 } 463 }
469 464
470 //----------------------------------------------------------------------------- 465 //-----------------------------------------------------------------------------
471 466
472 // Holds the data for a request that could not be completed synchronously. 467 // Holds the data for a request that could not be completed synchronously.
473 // It is owned by a Job. Canceled Requests are only marked as canceled rather 468 // It is owned by a Job. Canceled Requests are only marked as canceled rather
474 // than removed from the Job's |requests_| list. 469 // than removed from the Job's |requests_| list.
475 class HostResolverImpl::Request { 470 class HostResolverImpl::Request {
(...skipping 1180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1656 unresponsive_delay(base::TimeDelta::FromMilliseconds(6000)), 1651 unresponsive_delay(base::TimeDelta::FromMilliseconds(6000)),
1657 retry_factor(2) { 1652 retry_factor(2) {
1658 } 1653 }
1659 1654
1660 HostResolverImpl::ProcTaskParams::~ProcTaskParams() {} 1655 HostResolverImpl::ProcTaskParams::~ProcTaskParams() {}
1661 1656
1662 HostResolverImpl::HostResolverImpl( 1657 HostResolverImpl::HostResolverImpl(
1663 HostCache* cache, 1658 HostCache* cache,
1664 const PrioritizedDispatcher::Limits& job_limits, 1659 const PrioritizedDispatcher::Limits& job_limits,
1665 const ProcTaskParams& proc_params, 1660 const ProcTaskParams& proc_params,
1666 scoped_ptr<DnsConfigService> dns_config_service,
1667 scoped_ptr<DnsClient> dns_client, 1661 scoped_ptr<DnsClient> dns_client,
1668 NetLog* net_log) 1662 NetLog* net_log)
1669 : cache_(cache), 1663 : cache_(cache),
1670 dispatcher_(job_limits), 1664 dispatcher_(job_limits),
1671 max_queued_jobs_(job_limits.total_jobs * 100u), 1665 max_queued_jobs_(job_limits.total_jobs * 100u),
1672 proc_params_(proc_params), 1666 proc_params_(proc_params),
1673 default_address_family_(ADDRESS_FAMILY_UNSPECIFIED), 1667 default_address_family_(ADDRESS_FAMILY_UNSPECIFIED),
1674 dns_config_service_(dns_config_service.Pass()),
1675 dns_client_(dns_client.Pass()), 1668 dns_client_(dns_client.Pass()),
1676 received_dns_config_(false), 1669 received_dns_config_(false),
1677 ipv6_probe_monitoring_(false), 1670 ipv6_probe_monitoring_(false),
1678 additional_resolver_flags_(0), 1671 additional_resolver_flags_(0),
1679 net_log_(net_log) { 1672 net_log_(net_log) {
1680 1673
1681 DCHECK_GE(dispatcher_.num_priorities(), static_cast<size_t>(NUM_PRIORITIES)); 1674 DCHECK_GE(dispatcher_.num_priorities(), static_cast<size_t>(NUM_PRIORITIES));
1682 1675
1683 // Maximum of 4 retry attempts for host resolution. 1676 // Maximum of 4 retry attempts for host resolution.
1684 static const size_t kDefaultMaxRetryAttempts = 4u; 1677 static const size_t kDefaultMaxRetryAttempts = 4u;
1685 1678
1686 if (proc_params_.max_retry_attempts == HostResolver::kDefaultRetryAttempts) 1679 if (proc_params_.max_retry_attempts == HostResolver::kDefaultRetryAttempts)
1687 proc_params_.max_retry_attempts = kDefaultMaxRetryAttempts; 1680 proc_params_.max_retry_attempts = kDefaultMaxRetryAttempts;
1688 1681
1689 #if defined(OS_WIN) 1682 #if defined(OS_WIN)
1690 EnsureWinsockInit(); 1683 EnsureWinsockInit();
1691 #endif 1684 #endif
1692 #if defined(OS_POSIX) && !defined(OS_MACOSX) 1685 #if defined(OS_POSIX) && !defined(OS_MACOSX)
1693 if (HaveOnlyLoopbackAddresses()) 1686 if (HaveOnlyLoopbackAddresses())
1694 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; 1687 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY;
1695 #endif 1688 #endif
1696 NetworkChangeNotifier::AddIPAddressObserver(this); 1689 NetworkChangeNotifier::AddIPAddressObserver(this);
1690 NetworkChangeNotifier::AddDNSObserver(this);
1691 OnDNSChanged();
1697 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \ 1692 #if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_OPENBSD) && \
1698 !defined(OS_ANDROID) 1693 !defined(OS_ANDROID)
1699 EnsureDnsReloaderInit(); 1694 EnsureDnsReloaderInit();
1700 #endif 1695 #endif
1701
1702 if (dns_config_service_.get()) {
1703 dns_config_service_->Watch(
1704 base::Bind(&HostResolverImpl::OnDnsConfigChanged,
1705 base::Unretained(this)));
1706 }
1707 } 1696 }
1708 1697
1709 HostResolverImpl::~HostResolverImpl() { 1698 HostResolverImpl::~HostResolverImpl() {
1710 DiscardIPv6ProbeJob(); 1699 DiscardIPv6ProbeJob();
1711 1700
1712 // This will also cancel all outstanding requests. 1701 // This will also cancel all outstanding requests.
1713 STLDeleteValues(&jobs_); 1702 STLDeleteValues(&jobs_);
1714 1703
1715 NetworkChangeNotifier::RemoveIPAddressObserver(this); 1704 NetworkChangeNotifier::RemoveIPAddressObserver(this);
1705 NetworkChangeNotifier::RemoveDNSObserver(this);
1716 } 1706 }
1717 1707
1718 void HostResolverImpl::SetMaxQueuedJobs(size_t value) { 1708 void HostResolverImpl::SetMaxQueuedJobs(size_t value) {
1719 DCHECK_EQ(0u, dispatcher_.num_queued_jobs()); 1709 DCHECK_EQ(0u, dispatcher_.num_queued_jobs());
1720 DCHECK_GT(value, 0u); 1710 DCHECK_GT(value, 0u);
1721 max_queued_jobs_ = value; 1711 max_queued_jobs_ = value;
1722 } 1712 }
1723 1713
1724 int HostResolverImpl::Resolve(const RequestInfo& info, 1714 int HostResolverImpl::Resolve(const RequestInfo& info,
1725 AddressList* addresses, 1715 AddressList* addresses,
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
2107 if (HaveOnlyLoopbackAddresses()) { 2097 if (HaveOnlyLoopbackAddresses()) {
2108 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY; 2098 additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY;
2109 } else { 2099 } else {
2110 additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY; 2100 additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY;
2111 } 2101 }
2112 #endif 2102 #endif
2113 AbortAllInProgressJobs(); 2103 AbortAllInProgressJobs();
2114 // |this| may be deleted inside AbortAllInProgressJobs(). 2104 // |this| may be deleted inside AbortAllInProgressJobs().
2115 } 2105 }
2116 2106
2117 void HostResolverImpl::OnDnsConfigChanged(const DnsConfig& dns_config) { 2107 void HostResolverImpl::OnDNSChanged() {
2108 DnsConfig dns_config;
2109 NetworkChangeNotifier::GetDnsConfig(&dns_config);
2118 if (net_log_) { 2110 if (net_log_) {
2119 net_log_->AddGlobalEntry( 2111 net_log_->AddGlobalEntry(
2120 NetLog::TYPE_DNS_CONFIG_CHANGED, 2112 NetLog::TYPE_DNS_CONFIG_CHANGED,
2121 base::Bind(&NetLogDnsConfigCallback, &dns_config)); 2113 base::Bind(&NetLogDnsConfigCallback, &dns_config));
2122 } 2114 }
2123 2115
2124 // TODO(szym): Remove once http://crbug.com/137914 is resolved. 2116 // TODO(szym): Remove once http://crbug.com/137914 is resolved.
2125 received_dns_config_ = dns_config.IsValid(); 2117 received_dns_config_ = dns_config.IsValid();
2126 2118
2127 // Life check to bail once |this| is deleted. 2119 // Life check to bail once |this| is deleted.
(...skipping 18 matching lines...) Expand all
2146 // |this| may be deleted inside AbortAllInProgressJobs(). 2138 // |this| may be deleted inside AbortAllInProgressJobs().
2147 if (self) 2139 if (self)
2148 TryServingAllJobsFromHosts(); 2140 TryServingAllJobsFromHosts();
2149 } 2141 }
2150 2142
2151 bool HostResolverImpl::HaveDnsConfig() const { 2143 bool HostResolverImpl::HaveDnsConfig() const {
2152 return (dns_client_.get() != NULL) && (dns_client_->GetConfig() != NULL); 2144 return (dns_client_.get() != NULL) && (dns_client_->GetConfig() != NULL);
2153 } 2145 }
2154 2146
2155 } // namespace net 2147 } // namespace net
OLDNEW
« no previous file with comments | « net/base/host_resolver_impl.h ('k') | net/base/host_resolver_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698