| 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/base/host_resolver_impl.h" | 5 #include "net/base/host_resolver_impl.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <Winsock2.h> | 8 #include <Winsock2.h> |
| 9 #elif defined(OS_POSIX) | 9 #elif defined(OS_POSIX) |
| 10 #include <netdb.h> | 10 #include <netdb.h> |
| (...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1009 return transaction_->Start(); | 1009 return transaction_->Start(); |
| 1010 } | 1010 } |
| 1011 | 1011 |
| 1012 private: | 1012 private: |
| 1013 void OnTransactionComplete(bool first_query, | 1013 void OnTransactionComplete(bool first_query, |
| 1014 const base::TimeTicks& start_time, | 1014 const base::TimeTicks& start_time, |
| 1015 DnsTransaction* transaction, | 1015 DnsTransaction* transaction, |
| 1016 int net_error, | 1016 int net_error, |
| 1017 const DnsResponse* response) { | 1017 const DnsResponse* response) { |
| 1018 DCHECK(transaction); | 1018 DCHECK(transaction); |
| 1019 base::TimeDelta duration = base::TimeTicks::Now() - start_time; |
| 1019 // Run |callback_| last since the owning Job will then delete this DnsTask. | 1020 // Run |callback_| last since the owning Job will then delete this DnsTask. |
| 1020 if (net_error != OK) { | 1021 if (net_error != OK) { |
| 1021 DNS_HISTOGRAM("AsyncDNS.TransactionFailure", | 1022 DNS_HISTOGRAM("AsyncDNS.TransactionFailure", duration); |
| 1022 base::TimeTicks::Now() - start_time); | |
| 1023 OnFailure(net_error, DnsResponse::DNS_PARSE_OK); | 1023 OnFailure(net_error, DnsResponse::DNS_PARSE_OK); |
| 1024 return; | 1024 return; |
| 1025 } | 1025 } |
| 1026 | 1026 |
| 1027 CHECK(response); | 1027 CHECK(response); |
| 1028 DNS_HISTOGRAM("AsyncDNS.TransactionSuccess", | 1028 DNS_HISTOGRAM("AsyncDNS.TransactionSuccess", duration); |
| 1029 base::TimeTicks::Now() - start_time); | 1029 switch (transaction->GetType()) { |
| 1030 case dns_protocol::kTypeA: |
| 1031 DNS_HISTOGRAM("AsyncDNS.TransactionSuccess_A", duration); |
| 1032 break; |
| 1033 case dns_protocol::kTypeAAAA: |
| 1034 DNS_HISTOGRAM("AsyncDNS.TransactionSuccess_AAAA", duration); |
| 1035 break; |
| 1036 } |
| 1030 AddressList addr_list; | 1037 AddressList addr_list; |
| 1031 base::TimeDelta ttl; | 1038 base::TimeDelta ttl; |
| 1032 DnsResponse::Result result = response->ParseToAddressList(&addr_list, &ttl); | 1039 DnsResponse::Result result = response->ParseToAddressList(&addr_list, &ttl); |
| 1033 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.ParseToAddressList", | 1040 UMA_HISTOGRAM_ENUMERATION("AsyncDNS.ParseToAddressList", |
| 1034 result, | 1041 result, |
| 1035 DnsResponse::DNS_PARSE_RESULT_MAX); | 1042 DnsResponse::DNS_PARSE_RESULT_MAX); |
| 1036 if (result != DnsResponse::DNS_PARSE_OK) { | 1043 if (result != DnsResponse::DNS_PARSE_OK) { |
| 1037 // Fail even if the other query succeeds. | 1044 // Fail even if the other query succeeds. |
| 1038 OnFailure(ERR_DNS_MALFORMED_RESPONSE, result); | 1045 OnFailure(ERR_DNS_MALFORMED_RESPONSE, result); |
| 1039 return; | 1046 return; |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1463 | 1470 |
| 1464 // TODO(szym): Run ServeFromHosts now if nsswitch.conf says so. | 1471 // TODO(szym): Run ServeFromHosts now if nsswitch.conf says so. |
| 1465 // http://crbug.com/117655 | 1472 // http://crbug.com/117655 |
| 1466 | 1473 |
| 1467 // TODO(szym): Some net errors indicate lack of connectivity. Starting | 1474 // TODO(szym): Some net errors indicate lack of connectivity. Starting |
| 1468 // ProcTask in that case is a waste of time. | 1475 // ProcTask in that case is a waste of time. |
| 1469 StartProcTask(); | 1476 StartProcTask(); |
| 1470 return; | 1477 return; |
| 1471 } | 1478 } |
| 1472 DNS_HISTOGRAM("AsyncDNS.ResolveSuccess", duration); | 1479 DNS_HISTOGRAM("AsyncDNS.ResolveSuccess", duration); |
| 1480 // Log DNS lookups based on |address_family|. |
| 1481 switch(key_.address_family) { |
| 1482 case ADDRESS_FAMILY_IPV4: |
| 1483 DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_IPV4", duration); |
| 1484 break; |
| 1485 case ADDRESS_FAMILY_IPV6: |
| 1486 DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_IPV6", duration); |
| 1487 break; |
| 1488 case ADDRESS_FAMILY_UNSPECIFIED: |
| 1489 DNS_HISTOGRAM("AsyncDNS.ResolveSuccess_FAMILY_UNSPEC", duration); |
| 1490 break; |
| 1491 } |
| 1473 | 1492 |
| 1474 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_DNS_SUCCESS); | 1493 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_DNS_SUCCESS); |
| 1475 RecordTTL(ttl); | 1494 RecordTTL(ttl); |
| 1476 | 1495 |
| 1477 resolver_->OnDnsTaskResolve(OK); | 1496 resolver_->OnDnsTaskResolve(OK); |
| 1478 | 1497 |
| 1479 base::TimeDelta bounded_ttl = | 1498 base::TimeDelta bounded_ttl = |
| 1480 std::max(ttl, base::TimeDelta::FromSeconds(kMinimumTTLSeconds)); | 1499 std::max(ttl, base::TimeDelta::FromSeconds(kMinimumTTLSeconds)); |
| 1481 | 1500 |
| 1482 CompleteRequests( | 1501 CompleteRequests( |
| (...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2129 } | 2148 } |
| 2130 DnsConfig dns_config; | 2149 DnsConfig dns_config; |
| 2131 NetworkChangeNotifier::GetDnsConfig(&dns_config); | 2150 NetworkChangeNotifier::GetDnsConfig(&dns_config); |
| 2132 dns_client_->SetConfig(dns_config); | 2151 dns_client_->SetConfig(dns_config); |
| 2133 num_dns_failures_ = 0; | 2152 num_dns_failures_ = 0; |
| 2134 if (dns_config.IsValid()) | 2153 if (dns_config.IsValid()) |
| 2135 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); | 2154 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); |
| 2136 } | 2155 } |
| 2137 | 2156 |
| 2138 } // namespace net | 2157 } // namespace net |
| OLD | NEW |