| Index: net/socket/ssl_host_info.cc
|
| diff --git a/net/socket/ssl_host_info.cc b/net/socket/ssl_host_info.cc
|
| index ccfe7a5354b3489160301e6e18dae36df3f0302e..7a8209ae575a860121463217964608a31d22c7e8 100644
|
| --- a/net/socket/ssl_host_info.cc
|
| +++ b/net/socket/ssl_host_info.cc
|
| @@ -7,6 +7,8 @@
|
| #include "base/metrics/histogram.h"
|
| #include "base/pickle.h"
|
| #include "base/string_piece.h"
|
| +#include "net/base/dns_util.h"
|
| +#include "net/base/dnsrr_resolver.h"
|
| #include "net/base/ssl_config_service.h"
|
| #include "net/base/x509_certificate.h"
|
| #include "net/socket/ssl_client_socket.h"
|
| @@ -40,11 +42,31 @@ SSLHostInfo::SSLHostInfo(
|
| verifier_(cert_verifier),
|
| callback_(new CancelableCompletionCallback<SSLHostInfo>(
|
| ALLOW_THIS_IN_INITIALIZER_LIST(this),
|
| - &SSLHostInfo::VerifyCallback)) {
|
| + &SSLHostInfo::VerifyCallback)),
|
| + dnsrr_resolver_(NULL),
|
| + dns_callback_(NULL),
|
| + dns_handle_(DnsRRResolver::kInvalidHandle) {
|
| state_.npn_valid = false;
|
| }
|
|
|
| -SSLHostInfo::~SSLHostInfo() {}
|
| +SSLHostInfo::~SSLHostInfo() {
|
| + if (dns_handle_ != DnsRRResolver::kInvalidHandle) {
|
| + dnsrr_resolver_->CancelResolve(dns_handle_);
|
| + delete dns_callback_;
|
| + }
|
| +}
|
| +
|
| +void SSLHostInfo::StartDnsLookup(DnsRRResolver* dnsrr_resolver) {
|
| +#if defined(OS_LINUX)
|
| + dnsrr_resolver_ = dnsrr_resolver;
|
| + dns_callback_ = NewCallback(this, &SSLHostInfo::DnsComplete);
|
| + dns_lookup_start_time_ = base::TimeTicks::Now();
|
| +
|
| + dns_handle_ = dnsrr_resolver->Resolve(
|
| + hostname_, kDNS_CAA, DnsRRResolver::FLAG_WANT_DNSSEC, dns_callback_,
|
| + &dns_response_, 0, BoundNetLog());
|
| +#endif
|
| +}
|
|
|
| const SSLHostInfo::State& SSLHostInfo::state() const {
|
| return state_;
|
| @@ -196,6 +218,15 @@ void SSLHostInfo::VerifyCallback(int rv) {
|
| }
|
| }
|
|
|
| +void SSLHostInfo::DnsComplete(int rv) {
|
| + dns_handle_ = DnsRRResolver::kInvalidHandle;
|
| + dns_callback_ = NULL;
|
| +
|
| + const base::TimeTicks now = base::TimeTicks::Now();
|
| + const base::TimeDelta elapsed = now - dns_lookup_start_time_;
|
| + UMA_HISTOGRAM_TIMES("Net.SSLHostInfoDNSLookup", elapsed);
|
| +}
|
| +
|
| SSLHostInfoFactory::~SSLHostInfoFactory() {}
|
|
|
| } // namespace net
|
|
|