| 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 "chrome/browser/net/dns_probe_service.h" | 5 #include "chrome/browser/net/dns_probe_service.h" |
| 6 | 6 |
| 7 #include "base/metrics/field_trial.h" | 7 #include "base/metrics/field_trial.h" |
| 8 #include "base/metrics/histogram.h" | 8 #include "base/metrics/histogram.h" |
| 9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
| 10 #include "net/base/ip_endpoint.h" | 10 #include "net/base/ip_endpoint.h" |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 | 69 |
| 70 // Otherwise: the system DNS is not working and another public server is | 70 // Otherwise: the system DNS is not working and another public server is |
| 71 // responding but with errors or incorrect results. This is an awkward case; | 71 // responding but with errors or incorrect results. This is an awkward case; |
| 72 // an invasive captive portal or a restrictive firewall may be intercepting | 72 // an invasive captive portal or a restrictive firewall may be intercepting |
| 73 // or rewriting DNS traffic, or the public server may itself be failing or | 73 // or rewriting DNS traffic, or the public server may itself be failing or |
| 74 // down. | 74 // down. |
| 75 return chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE; | 75 return chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE; |
| 76 } | 76 } |
| 77 | 77 |
| 78 void HistogramProbe(DnsProbeStatus status, base::TimeDelta elapsed) { | 78 void HistogramProbe(DnsProbeStatus status, base::TimeDelta elapsed) { |
| 79 DCHECK(chrome_common_net::DnsProbeStatusIsFinished(status)); | 79 DCHECK(error_page::DnsProbeStatusIsFinished(status)); |
| 80 | 80 |
| 81 UMA_HISTOGRAM_ENUMERATION("DnsProbe.ProbeResult", status, | 81 UMA_HISTOGRAM_ENUMERATION("DnsProbe.ProbeResult", status, |
| 82 chrome_common_net::DNS_PROBE_MAX); | 82 chrome_common_net::DNS_PROBE_MAX); |
| 83 UMA_HISTOGRAM_MEDIUM_TIMES("DnsProbe.ProbeDuration", elapsed); | 83 UMA_HISTOGRAM_MEDIUM_TIMES("DnsProbe.ProbeDuration", elapsed); |
| 84 } | 84 } |
| 85 | 85 |
| 86 } // namespace | 86 } // namespace |
| 87 | 87 |
| 88 DnsProbeService::DnsProbeService() | 88 DnsProbeService::DnsProbeService() |
| 89 : state_(STATE_NO_RESULT) { | 89 : state_(STATE_NO_RESULT) { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 public_runner_.result()); | 191 public_runner_.result()); |
| 192 state_ = STATE_RESULT_CACHED; | 192 state_ = STATE_RESULT_CACHED; |
| 193 | 193 |
| 194 HistogramProbe(cached_result_, base::Time::Now() - probe_start_time_); | 194 HistogramProbe(cached_result_, base::Time::Now() - probe_start_time_); |
| 195 | 195 |
| 196 CallCallbacks(); | 196 CallCallbacks(); |
| 197 } | 197 } |
| 198 | 198 |
| 199 void DnsProbeService::CallCallbacks() { | 199 void DnsProbeService::CallCallbacks() { |
| 200 DCHECK_EQ(STATE_RESULT_CACHED, state_); | 200 DCHECK_EQ(STATE_RESULT_CACHED, state_); |
| 201 DCHECK(chrome_common_net::DnsProbeStatusIsFinished(cached_result_)); | 201 DCHECK(error_page::DnsProbeStatusIsFinished(cached_result_)); |
| 202 DCHECK(!pending_callbacks_.empty()); | 202 DCHECK(!pending_callbacks_.empty()); |
| 203 | 203 |
| 204 std::vector<ProbeCallback> callbacks; | 204 std::vector<ProbeCallback> callbacks; |
| 205 callbacks.swap(pending_callbacks_); | 205 callbacks.swap(pending_callbacks_); |
| 206 | 206 |
| 207 for (std::vector<ProbeCallback>::const_iterator i = callbacks.begin(); | 207 for (std::vector<ProbeCallback>::const_iterator i = callbacks.begin(); |
| 208 i != callbacks.end(); ++i) { | 208 i != callbacks.end(); ++i) { |
| 209 i->Run(cached_result_); | 209 i->Run(cached_result_); |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 | 212 |
| 213 void DnsProbeService::ClearCachedResult() { | 213 void DnsProbeService::ClearCachedResult() { |
| 214 if (state_ == STATE_RESULT_CACHED) { | 214 if (state_ == STATE_RESULT_CACHED) { |
| 215 state_ = STATE_NO_RESULT; | 215 state_ = STATE_NO_RESULT; |
| 216 cached_result_ = chrome_common_net::DNS_PROBE_MAX; | 216 cached_result_ = chrome_common_net::DNS_PROBE_MAX; |
| 217 } | 217 } |
| 218 } | 218 } |
| 219 | 219 |
| 220 bool DnsProbeService::CachedResultIsExpired() const { | 220 bool DnsProbeService::CachedResultIsExpired() const { |
| 221 if (state_ != STATE_RESULT_CACHED) | 221 if (state_ != STATE_RESULT_CACHED) |
| 222 return false; | 222 return false; |
| 223 | 223 |
| 224 const base::TimeDelta kMaxResultAge = | 224 const base::TimeDelta kMaxResultAge = |
| 225 base::TimeDelta::FromMilliseconds(kMaxResultAgeMs); | 225 base::TimeDelta::FromMilliseconds(kMaxResultAgeMs); |
| 226 return base::Time::Now() - probe_start_time_ > kMaxResultAge; | 226 return base::Time::Now() - probe_start_time_ > kMaxResultAge; |
| 227 } | 227 } |
| 228 | 228 |
| 229 } // namespace chrome_browser_net | 229 } // namespace chrome_browser_net |
| OLD | NEW |