OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 #include "net/base/net_log.h" | 6 #include "net/base/net_log.h" |
7 | 7 |
8 #include <cmath> | 8 #include <cmath> |
9 #include <deque> | 9 #include <deque> |
10 | 10 |
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 ipv6_probe_monitoring_(false) { | 672 ipv6_probe_monitoring_(false) { |
673 DCHECK_GT(max_jobs, 0u); | 673 DCHECK_GT(max_jobs, 0u); |
674 | 674 |
675 // It is cumbersome to expose all of the constraints in the constructor, | 675 // It is cumbersome to expose all of the constraints in the constructor, |
676 // so we choose some defaults, which users can override later. | 676 // so we choose some defaults, which users can override later. |
677 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs); | 677 job_pools_[POOL_NORMAL] = new JobPool(max_jobs, 100u * max_jobs); |
678 | 678 |
679 #if defined(OS_WIN) | 679 #if defined(OS_WIN) |
680 EnsureWinsockInit(); | 680 EnsureWinsockInit(); |
681 #endif | 681 #endif |
682 if (network_change_notifier_) | |
683 network_change_notifier_->AddObserver(this); | |
684 } | 682 } |
685 | 683 |
686 HostResolverImpl::~HostResolverImpl() { | 684 HostResolverImpl::~HostResolverImpl() { |
687 // Cancel the outstanding jobs. Those jobs may contain several attached | 685 // Cancel the outstanding jobs. Those jobs may contain several attached |
688 // requests, which will also be cancelled. | 686 // requests, which will also be cancelled. |
689 DiscardIPv6ProbeJob(); | 687 DiscardIPv6ProbeJob(); |
690 | 688 |
691 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it) | 689 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it) |
692 it->second->Cancel(); | 690 it->second->Cancel(); |
693 | 691 |
694 // In case we are being deleted during the processing of a callback. | 692 // In case we are being deleted during the processing of a callback. |
695 if (cur_completing_job_) | 693 if (cur_completing_job_) |
696 cur_completing_job_->Cancel(); | 694 cur_completing_job_->Cancel(); |
697 | 695 |
698 if (network_change_notifier_) | |
699 network_change_notifier_->RemoveObserver(this); | |
700 | |
701 // Delete the job pools. | 696 // Delete the job pools. |
702 for (size_t i = 0u; i < arraysize(job_pools_); ++i) | 697 for (size_t i = 0u; i < arraysize(job_pools_); ++i) |
703 delete job_pools_[i]; | 698 delete job_pools_[i]; |
704 } | 699 } |
705 | 700 |
706 // TODO(eroman): Don't create cache entries for hostnames which are simply IP | 701 // TODO(eroman): Don't create cache entries for hostnames which are simply IP |
707 // address literals. | 702 // address literals. |
708 int HostResolverImpl::Resolve(const RequestInfo& info, | 703 int HostResolverImpl::Resolve(const RequestInfo& info, |
709 AddressList* addresses, | 704 AddressList* addresses, |
710 CompletionCallback* callback, | 705 CompletionCallback* callback, |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 | 829 |
835 void HostResolverImpl::SetDefaultAddressFamily(AddressFamily address_family) { | 830 void HostResolverImpl::SetDefaultAddressFamily(AddressFamily address_family) { |
836 ipv6_probe_monitoring_ = false; | 831 ipv6_probe_monitoring_ = false; |
837 DiscardIPv6ProbeJob(); | 832 DiscardIPv6ProbeJob(); |
838 default_address_family_ = address_family; | 833 default_address_family_ = address_family; |
839 } | 834 } |
840 | 835 |
841 void HostResolverImpl::ProbeIPv6Support() { | 836 void HostResolverImpl::ProbeIPv6Support() { |
842 DCHECK(!ipv6_probe_monitoring_); | 837 DCHECK(!ipv6_probe_monitoring_); |
843 ipv6_probe_monitoring_ = true; | 838 ipv6_probe_monitoring_ = true; |
844 OnIPAddressChanged(); // Give initial setup call. | 839 Flush(); // Give initial setup call. |
845 } | 840 } |
846 | 841 |
847 void HostResolverImpl::Shutdown() { | 842 void HostResolverImpl::Shutdown() { |
848 shutdown_ = true; | 843 shutdown_ = true; |
849 | 844 |
850 // Cancel the outstanding jobs. | 845 // Cancel the outstanding jobs. |
851 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it) | 846 for (JobMap::iterator it = jobs_.begin(); it != jobs_.end(); ++it) |
852 it->second->Cancel(); | 847 it->second->Cancel(); |
853 jobs_.clear(); | 848 jobs_.clear(); |
854 } | 849 } |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1067 it != observers_.end(); ++it) { | 1062 it != observers_.end(); ++it) { |
1068 (*it)->OnCancelResolution(request_id, info); | 1063 (*it)->OnCancelResolution(request_id, info); |
1069 } | 1064 } |
1070 | 1065 |
1071 net_log.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONCANCEL); | 1066 net_log.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_OBSERVER_ONCANCEL); |
1072 } | 1067 } |
1073 | 1068 |
1074 net_log.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL); | 1069 net_log.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL); |
1075 } | 1070 } |
1076 | 1071 |
1077 void HostResolverImpl::OnIPAddressChanged() { | 1072 void HostResolverImpl::Flush() { |
1078 if (cache_.get()) | 1073 if (cache_.get()) |
1079 cache_->clear(); | 1074 cache_->clear(); |
1080 if (ipv6_probe_monitoring_) { | 1075 if (ipv6_probe_monitoring_) { |
1081 DiscardIPv6ProbeJob(); | 1076 DiscardIPv6ProbeJob(); |
1082 ipv6_probe_job_ = new IPv6ProbeJob(this); | 1077 ipv6_probe_job_ = new IPv6ProbeJob(this); |
1083 ipv6_probe_job_->Start(); | 1078 ipv6_probe_job_->Start(); |
1084 } | 1079 } |
1085 } | 1080 } |
1086 | 1081 |
1087 void HostResolverImpl::DiscardIPv6ProbeJob() { | 1082 void HostResolverImpl::DiscardIPv6ProbeJob() { |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1184 if (r == req) | 1179 if (r == req) |
1185 return error; | 1180 return error; |
1186 | 1181 |
1187 r->OnComplete(error, AddressList()); | 1182 r->OnComplete(error, AddressList()); |
1188 } | 1183 } |
1189 | 1184 |
1190 return ERR_IO_PENDING; | 1185 return ERR_IO_PENDING; |
1191 } | 1186 } |
1192 | 1187 |
1193 } // namespace net | 1188 } // namespace net |
OLD | NEW |