OLD | NEW |
---|---|
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/socket/ssl_host_info.h" | 5 #include "net/socket/ssl_host_info.h" |
6 | 6 |
7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
9 #include "base/string_piece.h" | 9 #include "base/string_piece.h" |
10 #include "net/base/dns_util.h" | |
11 #include "net/base/dnsrr_resolver.h" | |
10 #include "net/base/ssl_config_service.h" | 12 #include "net/base/ssl_config_service.h" |
11 #include "net/base/x509_certificate.h" | 13 #include "net/base/x509_certificate.h" |
12 #include "net/socket/ssl_client_socket.h" | 14 #include "net/socket/ssl_client_socket.h" |
13 | 15 |
14 namespace net { | 16 namespace net { |
15 | 17 |
16 SSLHostInfo::State::State() | 18 SSLHostInfo::State::State() |
17 : npn_valid(false), | 19 : npn_valid(false), |
18 npn_status(SSLClientSocket::kNextProtoUnsupported) { | 20 npn_status(SSLClientSocket::kNextProtoUnsupported) { |
19 } | 21 } |
(...skipping 13 matching lines...) Expand all Loading... | |
33 : cert_verification_complete_(false), | 35 : cert_verification_complete_(false), |
34 cert_verification_error_(ERR_CERT_INVALID), | 36 cert_verification_error_(ERR_CERT_INVALID), |
35 hostname_(hostname), | 37 hostname_(hostname), |
36 cert_parsing_failed_(false), | 38 cert_parsing_failed_(false), |
37 cert_verification_callback_(NULL), | 39 cert_verification_callback_(NULL), |
38 rev_checking_enabled_(ssl_config.rev_checking_enabled), | 40 rev_checking_enabled_(ssl_config.rev_checking_enabled), |
39 verify_ev_cert_(ssl_config.verify_ev_cert), | 41 verify_ev_cert_(ssl_config.verify_ev_cert), |
40 verifier_(cert_verifier), | 42 verifier_(cert_verifier), |
41 callback_(new CancelableCompletionCallback<SSLHostInfo>( | 43 callback_(new CancelableCompletionCallback<SSLHostInfo>( |
42 ALLOW_THIS_IN_INITIALIZER_LIST(this), | 44 ALLOW_THIS_IN_INITIALIZER_LIST(this), |
43 &SSLHostInfo::VerifyCallback)) { | 45 &SSLHostInfo::VerifyCallback)), |
46 dnsrr_resolver_(NULL), | |
47 dns_callback_(NULL), | |
48 dns_handle_(DnsRRResolver::kInvalidHandle) { | |
44 state_.npn_valid = false; | 49 state_.npn_valid = false; |
45 } | 50 } |
46 | 51 |
47 SSLHostInfo::~SSLHostInfo() {} | 52 SSLHostInfo::~SSLHostInfo() { |
53 if (dns_handle_ != DnsRRResolver::kInvalidHandle) { | |
54 dnsrr_resolver_->CancelResolve(dns_handle_); | |
55 delete dns_callback_; | |
56 } | |
57 } | |
58 | |
59 void SSLHostInfo::StartDnsLookup(DnsRRResolver* dnsrr_resolver) { | |
60 #if defined(OS_LINUX) | |
61 dnsrr_resolver_ = dnsrr_resolver; | |
62 dns_callback_ = NewCallback(this, &SSLHostInfo::DnsComplete); | |
63 dns_lookup_start_time_ = base::TimeTicks::Now(); | |
64 | |
65 dns_handle_ = dnsrr_resolver->Resolve( | |
66 hostname_, kDNS_CAA, DnsRRResolver::FLAG_WANT_DNSSEC, dns_callback_, | |
67 &dns_response_, 0, BoundNetLog()); | |
68 #endif | |
69 } | |
48 | 70 |
49 const SSLHostInfo::State& SSLHostInfo::state() const { | 71 const SSLHostInfo::State& SSLHostInfo::state() const { |
50 return state_; | 72 return state_; |
51 } | 73 } |
52 | 74 |
53 SSLHostInfo::State* SSLHostInfo::mutable_state() { | 75 SSLHostInfo::State* SSLHostInfo::mutable_state() { |
54 return &state_; | 76 return &state_; |
55 } | 77 } |
56 | 78 |
57 bool SSLHostInfo::Parse(const std::string& data) { | 79 bool SSLHostInfo::Parse(const std::string& data) { |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 verification_end_time_ = now; | 211 verification_end_time_ = now; |
190 cert_verification_complete_ = true; | 212 cert_verification_complete_ = true; |
191 cert_verification_error_ = rv; | 213 cert_verification_error_ = rv; |
192 if (cert_verification_callback_) { | 214 if (cert_verification_callback_) { |
193 CompletionCallback* callback = cert_verification_callback_; | 215 CompletionCallback* callback = cert_verification_callback_; |
194 cert_verification_callback_ = NULL; | 216 cert_verification_callback_ = NULL; |
195 callback->Run(rv); | 217 callback->Run(rv); |
196 } | 218 } |
197 } | 219 } |
198 | 220 |
221 void SSLHostInfo::DnsComplete(int rv) { | |
222 dns_handle_ = DnsRRResolver::kInvalidHandle; | |
223 dns_callback_ = NULL; | |
224 | |
225 const base::TimeTicks now = base::TimeTicks::Now(); | |
226 const base::TimeDelta elapsed = now - dns_lookup_start_time_; | |
227 HISTOGRAM_TIMES("Net.SSLHostInfoDNSLookup", elapsed); | |
Mike Belshe
2011/01/06 17:51:06
Do you want this to be UMA_HISTOGRAM_TIMES? (I th
agl
2011/01/06 18:12:09
Opps, yes, thanks.
| |
228 } | |
229 | |
199 SSLHostInfoFactory::~SSLHostInfoFactory() {} | 230 SSLHostInfoFactory::~SSLHostInfoFactory() {} |
200 | 231 |
201 } // namespace net | 232 } // namespace net |
OLD | NEW |