| 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/dns/host_resolver_impl.h" | 5 #include "net/dns/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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 return false; | 305 return false; |
| 306 default: | 306 default: |
| 307 NOTREACHED(); | 307 NOTREACHED(); |
| 308 return false; | 308 return false; |
| 309 } | 309 } |
| 310 } | 310 } |
| 311 return true; | 311 return true; |
| 312 } | 312 } |
| 313 | 313 |
| 314 // Creates NetLog parameters when the resolve failed. | 314 // Creates NetLog parameters when the resolve failed. |
| 315 base::Value* NetLogProcTaskFailedCallback( | 315 scoped_ptr<base::Value> NetLogProcTaskFailedCallback( |
| 316 uint32 attempt_number, | 316 uint32 attempt_number, |
| 317 int net_error, | 317 int net_error, |
| 318 int os_error, | 318 int os_error, |
| 319 NetLogCaptureMode /* capture_mode */) { | 319 NetLogCaptureMode /* capture_mode */) { |
| 320 base::DictionaryValue* dict = new base::DictionaryValue(); | 320 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 321 if (attempt_number) | 321 if (attempt_number) |
| 322 dict->SetInteger("attempt_number", attempt_number); | 322 dict->SetInteger("attempt_number", attempt_number); |
| 323 | 323 |
| 324 dict->SetInteger("net_error", net_error); | 324 dict->SetInteger("net_error", net_error); |
| 325 | 325 |
| 326 if (os_error) { | 326 if (os_error) { |
| 327 dict->SetInteger("os_error", os_error); | 327 dict->SetInteger("os_error", os_error); |
| 328 #if defined(OS_POSIX) | 328 #if defined(OS_POSIX) |
| 329 dict->SetString("os_error_string", gai_strerror(os_error)); | 329 dict->SetString("os_error_string", gai_strerror(os_error)); |
| 330 #elif defined(OS_WIN) | 330 #elif defined(OS_WIN) |
| 331 // Map the error code to a human-readable string. | 331 // Map the error code to a human-readable string. |
| 332 LPWSTR error_string = NULL; | 332 LPWSTR error_string = NULL; |
| 333 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, | 333 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, |
| 334 0, // Use the internal message table. | 334 0, // Use the internal message table. |
| 335 os_error, | 335 os_error, |
| 336 0, // Use default language. | 336 0, // Use default language. |
| 337 (LPWSTR)&error_string, | 337 (LPWSTR)&error_string, |
| 338 0, // Buffer size. | 338 0, // Buffer size. |
| 339 0); // Arguments (unused). | 339 0); // Arguments (unused). |
| 340 dict->SetString("os_error_string", base::WideToUTF8(error_string)); | 340 dict->SetString("os_error_string", base::WideToUTF8(error_string)); |
| 341 LocalFree(error_string); | 341 LocalFree(error_string); |
| 342 #endif | 342 #endif |
| 343 } | 343 } |
| 344 | 344 |
| 345 return dict; | 345 return dict.Pass(); |
| 346 } | 346 } |
| 347 | 347 |
| 348 // Creates NetLog parameters when the DnsTask failed. | 348 // Creates NetLog parameters when the DnsTask failed. |
| 349 base::Value* NetLogDnsTaskFailedCallback(int net_error, | 349 scoped_ptr<base::Value> NetLogDnsTaskFailedCallback( |
| 350 int dns_error, | 350 int net_error, |
| 351 NetLogCaptureMode /* capture_mode */) { | 351 int dns_error, |
| 352 base::DictionaryValue* dict = new base::DictionaryValue(); | 352 NetLogCaptureMode /* capture_mode */) { |
| 353 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 353 dict->SetInteger("net_error", net_error); | 354 dict->SetInteger("net_error", net_error); |
| 354 if (dns_error) | 355 if (dns_error) |
| 355 dict->SetInteger("dns_error", dns_error); | 356 dict->SetInteger("dns_error", dns_error); |
| 356 return dict; | 357 return dict.Pass(); |
| 357 }; | 358 }; |
| 358 | 359 |
| 359 // Creates NetLog parameters containing the information in a RequestInfo object, | 360 // Creates NetLog parameters containing the information in a RequestInfo object, |
| 360 // along with the associated NetLog::Source. | 361 // along with the associated NetLog::Source. |
| 361 base::Value* NetLogRequestInfoCallback(const HostResolver::RequestInfo* info, | 362 scoped_ptr<base::Value> NetLogRequestInfoCallback( |
| 362 NetLogCaptureMode /* capture_mode */) { | 363 const HostResolver::RequestInfo* info, |
| 363 base::DictionaryValue* dict = new base::DictionaryValue(); | 364 NetLogCaptureMode /* capture_mode */) { |
| 365 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 364 | 366 |
| 365 dict->SetString("host", info->host_port_pair().ToString()); | 367 dict->SetString("host", info->host_port_pair().ToString()); |
| 366 dict->SetInteger("address_family", | 368 dict->SetInteger("address_family", |
| 367 static_cast<int>(info->address_family())); | 369 static_cast<int>(info->address_family())); |
| 368 dict->SetBoolean("allow_cached_response", info->allow_cached_response()); | 370 dict->SetBoolean("allow_cached_response", info->allow_cached_response()); |
| 369 dict->SetBoolean("is_speculative", info->is_speculative()); | 371 dict->SetBoolean("is_speculative", info->is_speculative()); |
| 370 return dict; | 372 return dict.Pass(); |
| 371 } | 373 } |
| 372 | 374 |
| 373 // Creates NetLog parameters for the creation of a HostResolverImpl::Job. | 375 // Creates NetLog parameters for the creation of a HostResolverImpl::Job. |
| 374 base::Value* NetLogJobCreationCallback(const NetLog::Source& source, | 376 scoped_ptr<base::Value> NetLogJobCreationCallback( |
| 375 const std::string* host, | 377 const NetLog::Source& source, |
| 376 NetLogCaptureMode /* capture_mode */) { | 378 const std::string* host, |
| 377 base::DictionaryValue* dict = new base::DictionaryValue(); | 379 NetLogCaptureMode /* capture_mode */) { |
| 378 source.AddToEventParameters(dict); | 380 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 381 source.AddToEventParameters(dict.get()); |
| 379 dict->SetString("host", *host); | 382 dict->SetString("host", *host); |
| 380 return dict; | 383 return dict.Pass(); |
| 381 } | 384 } |
| 382 | 385 |
| 383 // Creates NetLog parameters for HOST_RESOLVER_IMPL_JOB_ATTACH/DETACH events. | 386 // Creates NetLog parameters for HOST_RESOLVER_IMPL_JOB_ATTACH/DETACH events. |
| 384 base::Value* NetLogJobAttachCallback(const NetLog::Source& source, | 387 scoped_ptr<base::Value> NetLogJobAttachCallback( |
| 385 RequestPriority priority, | 388 const NetLog::Source& source, |
| 386 NetLogCaptureMode /* capture_mode */) { | 389 RequestPriority priority, |
| 387 base::DictionaryValue* dict = new base::DictionaryValue(); | 390 NetLogCaptureMode /* capture_mode */) { |
| 388 source.AddToEventParameters(dict); | 391 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 392 source.AddToEventParameters(dict.get()); |
| 389 dict->SetString("priority", RequestPriorityToString(priority)); | 393 dict->SetString("priority", RequestPriorityToString(priority)); |
| 390 return dict; | 394 return dict.Pass(); |
| 391 } | 395 } |
| 392 | 396 |
| 393 // Creates NetLog parameters for the DNS_CONFIG_CHANGED event. | 397 // Creates NetLog parameters for the DNS_CONFIG_CHANGED event. |
| 394 base::Value* NetLogDnsConfigCallback(const DnsConfig* config, | 398 scoped_ptr<base::Value> NetLogDnsConfigCallback( |
| 395 NetLogCaptureMode /* capture_mode */) { | 399 const DnsConfig* config, |
| 396 return config->ToValue(); | 400 NetLogCaptureMode /* capture_mode */) { |
| 401 return make_scoped_ptr(config->ToValue()); |
| 397 } | 402 } |
| 398 | 403 |
| 399 base::Value* NetLogIPv6AvailableCallback(bool ipv6_available, | 404 scoped_ptr<base::Value> NetLogIPv6AvailableCallback( |
| 400 bool cached, | 405 bool ipv6_available, |
| 401 NetLogCaptureMode /* capture_mode */) { | 406 bool cached, |
| 402 base::DictionaryValue* dict = new base::DictionaryValue(); | 407 NetLogCaptureMode /* capture_mode */) { |
| 408 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); |
| 403 dict->SetBoolean("ipv6_available", ipv6_available); | 409 dict->SetBoolean("ipv6_available", ipv6_available); |
| 404 dict->SetBoolean("cached", cached); | 410 dict->SetBoolean("cached", cached); |
| 405 return dict; | 411 return dict.Pass(); |
| 406 } | 412 } |
| 407 | 413 |
| 408 // The logging routines are defined here because some requests are resolved | 414 // The logging routines are defined here because some requests are resolved |
| 409 // without a Request object. | 415 // without a Request object. |
| 410 | 416 |
| 411 // Logs when a request has just been started. | 417 // Logs when a request has just been started. |
| 412 void LogStartRequest(const BoundNetLog& source_net_log, | 418 void LogStartRequest(const BoundNetLog& source_net_log, |
| 413 const HostResolver::RequestInfo& info) { | 419 const HostResolver::RequestInfo& info) { |
| 414 source_net_log.BeginEvent( | 420 source_net_log.BeginEvent( |
| 415 NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, | 421 NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, |
| (...skipping 2002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2418 dns_client_->SetConfig(dns_config); | 2424 dns_client_->SetConfig(dns_config); |
| 2419 num_dns_failures_ = 0; | 2425 num_dns_failures_ = 0; |
| 2420 if (dns_client_->GetConfig()) | 2426 if (dns_client_->GetConfig()) |
| 2421 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); | 2427 UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true); |
| 2422 } | 2428 } |
| 2423 | 2429 |
| 2424 AbortDnsTasks(); | 2430 AbortDnsTasks(); |
| 2425 } | 2431 } |
| 2426 | 2432 |
| 2427 } // namespace net | 2433 } // namespace net |
| OLD | NEW |