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/dns/dns_config_service.h" | 5 #include "net/dns/dns_config_service.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram.h" | |
| 8 #include "base/values.h" | 9 #include "base/values.h" |
| 9 #include "net/base/ip_endpoint.h" | 10 #include "net/base/ip_endpoint.h" |
| 10 | 11 |
| 11 namespace net { | 12 namespace net { |
| 12 | 13 |
| 13 // Default values are taken from glibc resolv.h. | 14 // Default values are taken from glibc resolv.h. |
| 14 DnsConfig::DnsConfig() | 15 DnsConfig::DnsConfig() |
| 15 : append_to_multi_label_name(true), | 16 : append_to_multi_label_name(true), |
| 16 ndots(1), | 17 ndots(1), |
| 17 timeout(base::TimeDelta::FromSeconds(5)), | 18 timeout(base::TimeDelta::FromSeconds(5)), |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 97 DCHECK(callback_.is_null()); | 98 DCHECK(callback_.is_null()); |
| 98 NetworkChangeNotifier::AddDNSObserver(this); | 99 NetworkChangeNotifier::AddDNSObserver(this); |
| 99 callback_ = callback; | 100 callback_ = callback; |
| 100 if (NetworkChangeNotifier::IsWatchingDNS()) | 101 if (NetworkChangeNotifier::IsWatchingDNS()) |
| 101 OnDNSChanged(NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED); | 102 OnDNSChanged(NetworkChangeNotifier::CHANGE_DNS_WATCH_STARTED); |
| 102 // else: Wait until signal before reading. | 103 // else: Wait until signal before reading. |
| 103 } | 104 } |
| 104 | 105 |
| 105 void DnsConfigService::InvalidateConfig() { | 106 void DnsConfigService::InvalidateConfig() { |
| 106 DCHECK(CalledOnValidThread()); | 107 DCHECK(CalledOnValidThread()); |
| 108 base::TimeTicks now = base::TimeTicks::Now(); | |
| 109 if (!last_invalidate_config_time_.is_null()) { | |
| 110 UMA_HISTOGRAM_LONG_TIMES("AsyncDNS.ConfigNotifyPeriod", | |
|
cbentzel
2012/06/15 20:29:36
ConfigNotifyIntervval perhaps?
szym
2012/06/15 21:22:19
Done.
| |
| 111 now - last_invalidate_config_time_); | |
| 112 } | |
| 113 last_invalidate_config_time_ = now; | |
| 107 if (!have_config_) | 114 if (!have_config_) |
| 108 return; | 115 return; |
| 109 have_config_ = false; | 116 have_config_ = false; |
| 110 StartTimer(); | 117 StartTimer(); |
| 111 } | 118 } |
| 112 | 119 |
| 113 void DnsConfigService::InvalidateHosts() { | 120 void DnsConfigService::InvalidateHosts() { |
| 114 DCHECK(CalledOnValidThread()); | 121 DCHECK(CalledOnValidThread()); |
| 122 base::TimeTicks now = base::TimeTicks::Now(); | |
| 123 if (!last_invalidate_hosts_time_.is_null()) { | |
| 124 UMA_HISTOGRAM_LONG_TIMES("AsyncDNS.HostsNotifyPeriod", | |
| 125 now - last_invalidate_hosts_time_); | |
| 126 } | |
| 127 last_invalidate_hosts_time_ = now; | |
| 115 if (!have_hosts_) | 128 if (!have_hosts_) |
| 116 return; | 129 return; |
| 117 have_hosts_ = false; | 130 have_hosts_ = false; |
| 118 StartTimer(); | 131 StartTimer(); |
| 119 } | 132 } |
| 120 | 133 |
| 121 void DnsConfigService::OnConfigRead(const DnsConfig& config) { | 134 void DnsConfigService::OnConfigRead(const DnsConfig& config) { |
| 122 DCHECK(CalledOnValidThread()); | 135 DCHECK(CalledOnValidThread()); |
| 123 DCHECK(config.IsValid()); | 136 DCHECK(config.IsValid()); |
| 124 | 137 |
| 138 bool changed = false; | |
| 125 if (!config.EqualsIgnoreHosts(dns_config_)) { | 139 if (!config.EqualsIgnoreHosts(dns_config_)) { |
| 126 dns_config_.CopyIgnoreHosts(config); | 140 dns_config_.CopyIgnoreHosts(config); |
| 127 need_update_ = true; | 141 need_update_ = true; |
| 142 changed = true; | |
| 128 } | 143 } |
| 144 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.ConfigChange", changed); | |
| 129 | 145 |
| 130 have_config_ = true; | 146 have_config_ = true; |
| 131 if (have_hosts_) | 147 if (have_hosts_) |
| 132 OnCompleteConfig(); | 148 OnCompleteConfig(); |
| 133 } | 149 } |
| 134 | 150 |
| 135 void DnsConfigService::OnHostsRead(const DnsHosts& hosts) { | 151 void DnsConfigService::OnHostsRead(const DnsHosts& hosts) { |
| 136 DCHECK(CalledOnValidThread()); | 152 DCHECK(CalledOnValidThread()); |
| 137 | 153 |
| 154 bool changed = false; | |
| 138 if (hosts != dns_config_.hosts) { | 155 if (hosts != dns_config_.hosts) { |
| 139 dns_config_.hosts = hosts; | 156 dns_config_.hosts = hosts; |
| 140 need_update_ = true; | 157 need_update_ = true; |
| 158 changed = true; | |
| 141 } | 159 } |
| 160 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.HostsChange", changed); | |
| 142 | 161 |
| 143 have_hosts_ = true; | 162 have_hosts_ = true; |
| 144 if (have_config_) | 163 if (have_config_) |
| 145 OnCompleteConfig(); | 164 OnCompleteConfig(); |
| 146 } | 165 } |
| 147 | 166 |
| 148 void DnsConfigService::StartTimer() { | 167 void DnsConfigService::StartTimer() { |
| 149 DCHECK(CalledOnValidThread()); | 168 DCHECK(CalledOnValidThread()); |
| 150 if (last_sent_empty_) { | 169 if (last_sent_empty_) { |
| 151 DCHECK(!timer_.IsRunning()); | 170 DCHECK(!timer_.IsRunning()); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 185 timer_.Stop(); | 204 timer_.Stop(); |
| 186 if (!need_update_) | 205 if (!need_update_) |
| 187 return; | 206 return; |
| 188 need_update_ = false; | 207 need_update_ = false; |
| 189 last_sent_empty_ = false; | 208 last_sent_empty_ = false; |
| 190 callback_.Run(dns_config_); | 209 callback_.Run(dns_config_); |
| 191 } | 210 } |
| 192 | 211 |
| 193 } // namespace net | 212 } // namespace net |
| 194 | 213 |
| OLD | NEW |