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

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

Issue 2802015: Massively simplify the NetworkChangeNotifier infrastructure:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 11 matching lines...) Expand all
22 #include "base/stl_util-inl.h" 22 #include "base/stl_util-inl.h"
23 #include "base/string_util.h" 23 #include "base/string_util.h"
24 #include "base/time.h" 24 #include "base/time.h"
25 #include "base/values.h" 25 #include "base/values.h"
26 #include "base/worker_pool.h" 26 #include "base/worker_pool.h"
27 #include "net/base/address_list.h" 27 #include "net/base/address_list.h"
28 #include "net/base/host_resolver_proc.h" 28 #include "net/base/host_resolver_proc.h"
29 #include "net/base/net_log.h" 29 #include "net/base/net_log.h"
30 #include "net/base/net_errors.h" 30 #include "net/base/net_errors.h"
31 #include "net/base/net_util.h" 31 #include "net/base/net_util.h"
32 #include "net/base/network_change_notifier.h"
33 32
34 #if defined(OS_WIN) 33 #if defined(OS_WIN)
35 #include "net/base/winsock_init.h" 34 #include "net/base/winsock_init.h"
36 #endif 35 #endif
37 36
38 namespace net { 37 namespace net {
39 38
40 namespace { 39 namespace {
41 40
42 HostCache* CreateDefaultCache() { 41 HostCache* CreateDefaultCache() {
43 static const size_t kMaxHostCacheEntries = 100; 42 static const size_t kMaxHostCacheEntries = 100;
44 43
45 HostCache* cache = new HostCache( 44 HostCache* cache = new HostCache(
46 kMaxHostCacheEntries, 45 kMaxHostCacheEntries,
47 base::TimeDelta::FromMinutes(1), 46 base::TimeDelta::FromMinutes(1),
48 base::TimeDelta::FromSeconds(0)); // Disable caching of failed DNS. 47 base::TimeDelta::FromSeconds(0)); // Disable caching of failed DNS.
49 48
50 return cache; 49 return cache;
51 } 50 }
52 51
53 } // anonymous namespace 52 } // anonymous namespace
54 53
55 HostResolver* CreateSystemHostResolver( 54 HostResolver* CreateSystemHostResolver() {
56 NetworkChangeNotifier* network_change_notifier) {
57 // Maximum of 50 concurrent threads. 55 // Maximum of 50 concurrent threads.
58 // TODO(eroman): Adjust this, do some A/B experiments. 56 // TODO(eroman): Adjust this, do some A/B experiments.
59 static const size_t kMaxJobs = 50u; 57 static const size_t kMaxJobs = 50u;
60 58
61 HostResolverImpl* resolver = new HostResolverImpl( 59 HostResolverImpl* resolver =
62 NULL, CreateDefaultCache(), network_change_notifier, kMaxJobs); 60 new HostResolverImpl(NULL, CreateDefaultCache(), kMaxJobs);
63 61
64 return resolver; 62 return resolver;
65 } 63 }
66 64
67 static int ResolveAddrInfo(HostResolverProc* resolver_proc, 65 static int ResolveAddrInfo(HostResolverProc* resolver_proc,
68 const std::string& host, 66 const std::string& host,
69 AddressFamily address_family, 67 AddressFamily address_family,
70 HostResolverFlags host_resolver_flags, 68 HostResolverFlags host_resolver_flags,
71 AddressList* out, 69 AddressList* out,
72 int* os_error) { 70 int* os_error) {
(...skipping 624 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 695
698 // The requests which are waiting to be started for this pool. 696 // The requests which are waiting to be started for this pool.
699 PendingRequestsQueue pending_requests_[NUM_PRIORITIES]; 697 PendingRequestsQueue pending_requests_[NUM_PRIORITIES];
700 }; 698 };
701 699
702 //----------------------------------------------------------------------------- 700 //-----------------------------------------------------------------------------
703 701
704 HostResolverImpl::HostResolverImpl( 702 HostResolverImpl::HostResolverImpl(
705 HostResolverProc* resolver_proc, 703 HostResolverProc* resolver_proc,
706 HostCache* cache, 704 HostCache* cache,
707 NetworkChangeNotifier* network_change_notifier,
708 size_t max_jobs) 705 size_t max_jobs)
709 : cache_(cache), 706 : cache_(cache),
710 max_jobs_(max_jobs), 707 max_jobs_(max_jobs),
711 next_request_id_(0), 708 next_request_id_(0),
712 next_job_id_(0), 709 next_job_id_(0),
713 resolver_proc_(resolver_proc), 710 resolver_proc_(resolver_proc),
714 default_address_family_(ADDRESS_FAMILY_UNSPECIFIED), 711 default_address_family_(ADDRESS_FAMILY_UNSPECIFIED),
715 shutdown_(false), 712 shutdown_(false),
716 network_change_notifier_(network_change_notifier),
717 ipv6_probe_monitoring_(false) { 713 ipv6_probe_monitoring_(false) {
718 DCHECK_GT(max_jobs, 0u); 714 DCHECK_GT(max_jobs, 0u);
719 715
720 // It is cumbersome to expose all of the constraints in the constructor, 716 // It is cumbersome to expose all of the constraints in the constructor,
721 // so we choose some defaults, which users can override later. 717 // so we choose some defaults, which users can override later.
722 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs); 718 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs);
723 719
724 #if defined(OS_WIN) 720 #if defined(OS_WIN)
725 EnsureWinsockInit(); 721 EnsureWinsockInit();
726 #endif 722 #endif
727 if (network_change_notifier_) 723 NetworkChangeNotifier::AddObserver(this);
728 network_change_notifier_->AddObserver(this);
729 } 724 }
730 725
731 HostResolverImpl::~HostResolverImpl() { 726 HostResolverImpl::~HostResolverImpl() {
732 // Cancel the outstanding jobs. Those jobs may contain several attached 727 // Cancel the outstanding jobs. Those jobs may contain several attached
733 // requests, which will also be cancelled. 728 // requests, which will also be cancelled.
734 DiscardIPv6ProbeJob(); 729 DiscardIPv6ProbeJob();
735 730
736 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it) 731 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it)
737 it->second->Cancel(); 732 it->second->Cancel();
738 733
739 // In case we are being deleted during the processing of a callback. 734 // In case we are being deleted during the processing of a callback.
740 if (cur_completing_job_) 735 if (cur_completing_job_)
741 cur_completing_job_->Cancel(); 736 cur_completing_job_->Cancel();
742 737
743 if (network_change_notifier_) 738 NetworkChangeNotifier::RemoveObserver(this);
744 network_change_notifier_->RemoveObserver(this);
745 739
746 // Delete the job pools. 740 // Delete the job pools.
747 for (size_t i = 0u; i < arraysize(job_pools_); ++i) 741 for (size_t i = 0u; i < arraysize(job_pools_); ++i)
748 delete job_pools_[i]; 742 delete job_pools_[i];
749 } 743 }
750 744
751 // TODO(eroman): Don't create cache entries for hostnames which are simply IP 745 // TODO(eroman): Don't create cache entries for hostnames which are simply IP
752 // address literals. 746 // address literals.
753 int HostResolverImpl::Resolve(const RequestInfo& info, 747 int HostResolverImpl::Resolve(const RequestInfo& info,
754 AddressList* addresses, 748 AddressList* addresses,
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 if (r == req) 1148 if (r == req)
1155 return error; 1149 return error;
1156 1150
1157 r->OnComplete(error, AddressList()); 1151 r->OnComplete(error, AddressList());
1158 } 1152 }
1159 1153
1160 return ERR_IO_PENDING; 1154 return ERR_IO_PENDING;
1161 } 1155 }
1162 1156
1163 } // namespace net 1157 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698