| 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 UMA_HISTOGRAM_TIMES("Net.SSLHostInfoDNSLookup", elapsed); |
| 228 } |
| 229 |
| 199 SSLHostInfoFactory::~SSLHostInfoFactory() {} | 230 SSLHostInfoFactory::~SSLHostInfoFactory() {} |
| 200 | 231 |
| 201 } // namespace net | 232 } // namespace net |
| OLD | NEW |