Chromium Code Reviews| Index: net/base/host_resolver_impl.cc |
| =================================================================== |
| --- net/base/host_resolver_impl.cc (revision 141407) |
| +++ net/base/host_resolver_impl.cc (working copy) |
| @@ -32,7 +32,6 @@ |
| #include "base/values.h" |
| #include "net/base/address_family.h" |
| #include "net/base/address_list.h" |
| -#include "net/base/address_list_net_log_param.h" |
| #include "net/base/dns_reloader.h" |
| #include "net/base/host_port_pair.h" |
| #include "net/base/host_resolver_proc.h" |
| @@ -177,178 +176,94 @@ |
| SetPortOnAddressList(port, list); |
| } |
| -// Extra parameters to attach to the NetLog when the resolve failed. |
| -class ProcTaskFailedParams : public NetLog::EventParameters { |
| - public: |
| - ProcTaskFailedParams(uint32 attempt_number, int net_error, int os_error) |
| - : attempt_number_(attempt_number), |
| - net_error_(net_error), |
| - os_error_(os_error) { |
| - } |
| +// Creates NetLog parameters when the resolve failed. |
| +base::Value* NetLogProcTaskFailedCallback(uint32 attempt_number, |
| + int net_error, |
| + int os_error, |
| + NetLog::LogLevel /* log_level */) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + if (attempt_number) |
| + dict->SetInteger("attempt_number", attempt_number); |
| - virtual Value* ToValue() const OVERRIDE { |
| - DictionaryValue* dict = new DictionaryValue(); |
| - if (attempt_number_) |
| - dict->SetInteger("attempt_number", attempt_number_); |
| + dict->SetInteger("net_error", net_error); |
| - dict->SetInteger("net_error", net_error_); |
| - |
| - if (os_error_) { |
| - dict->SetInteger("os_error", os_error_); |
| + if (os_error) { |
| + dict->SetInteger("os_error", os_error); |
| #if defined(OS_POSIX) |
| - dict->SetString("os_error_string", gai_strerror(os_error_)); |
| + dict->SetString("os_error_string", gai_strerror(os_error)); |
| #elif defined(OS_WIN) |
| - // Map the error code to a human-readable string. |
| - LPWSTR error_string = NULL; |
| - int size = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | |
| - FORMAT_MESSAGE_FROM_SYSTEM, |
| - 0, // Use the internal message table. |
| - os_error_, |
| - 0, // Use default language. |
| - (LPWSTR)&error_string, |
| - 0, // Buffer size. |
| - 0); // Arguments (unused). |
| - dict->SetString("os_error_string", WideToUTF8(error_string)); |
| - LocalFree(error_string); |
| + // Map the error code to a human-readable string. |
| + LPWSTR error_string = NULL; |
| + int size = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | |
| + FORMAT_MESSAGE_FROM_SYSTEM, |
| + 0, // Use the internal message table. |
| + os_error, |
| + 0, // Use default language. |
| + (LPWSTR)&error_string, |
| + 0, // Buffer size. |
| + 0); // Arguments (unused). |
| + dict->SetString("os_error_string", WideToUTF8(error_string)); |
| + LocalFree(error_string); |
| #endif |
| - } |
| - |
| - return dict; |
| } |
| - protected: |
| - virtual ~ProcTaskFailedParams() {} |
| + return dict; |
| +} |
| - private: |
| - const uint32 attempt_number_; |
| - const int net_error_; |
| - const int os_error_; |
| +// Creates NetLog parameters when the DnsTask failed. |
| +base::Value* NetLogDnsTaskFailedCallback(int net_error, |
| + int dns_error, |
| + NetLog::LogLevel /* log_level */) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + dict->SetInteger("net_error", net_error); |
| + if (dns_error) |
| + dict->SetInteger("dns_error", dns_error); |
| + return dict; |
| }; |
| -// Extra parameters to attach to the NetLog when the DnsTask failed. |
| -class DnsTaskFailedParams : public NetLog::EventParameters { |
| - public: |
| - DnsTaskFailedParams(int net_error, int dns_error) |
| - : net_error_(net_error), dns_error_(dns_error) { |
| - } |
| +// Creates NetLog parameters containing the information in a RequestInfo object, |
| +// along with the associated NetLog::Source. |
| +base::Value* NetLogRequestInfoCallback(const NetLog::Source& source, |
| + const HostResolver::RequestInfo* info, |
| + NetLog::LogLevel /* log_level */) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + source.AddToEventParameters(dict); |
| - virtual Value* ToValue() const OVERRIDE { |
| - DictionaryValue* dict = new DictionaryValue(); |
| - dict->SetInteger("net_error", net_error_); |
| - if (dns_error_) |
| - dict->SetInteger("dns_error", dns_error_); |
| - return dict; |
| - } |
| + dict->SetString("host", info->host_port_pair().ToString()); |
| + dict->SetInteger("address_family", |
| + static_cast<int>(info->address_family())); |
| + dict->SetBoolean("allow_cached_response", info->allow_cached_response()); |
| + dict->SetBoolean("is_speculative", info->is_speculative()); |
| + dict->SetInteger("priority", info->priority()); |
| + return dict; |
| +} |
| - protected: |
| - virtual ~DnsTaskFailedParams() {} |
| +// Creates NetLog parameters for the creation of a HostResolverImpl::Job. |
| +base::Value* NetLogJobCreationCallback(const NetLog::Source& source, |
| + const std::string* host, |
| + NetLog::LogLevel /* log_level */) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + source.AddToEventParameters(dict); |
| + dict->SetString("host", *host); |
| + return dict; |
| +} |
| - private: |
| - const int net_error_; |
| - const int dns_error_; |
| -}; |
| +// Creates NetLog parameters for HOST_RESOLVER_IMPL_JOB_ATTACH/DETACH events. |
| +base::Value* NetLogJobAttachCallback(const NetLog::Source& source, |
| + RequestPriority priority, |
| + NetLog::LogLevel /* log_level */) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + source.AddToEventParameters(dict); |
| + dict->SetInteger("priority", priority); |
| + return dict; |
| +} |
| -// Parameters representing the information in a RequestInfo object, along with |
| -// the associated NetLog::Source. |
| -class RequestInfoParameters : public NetLog::EventParameters { |
| - public: |
| - RequestInfoParameters(const HostResolver::RequestInfo& info, |
| - const NetLog::Source& source) |
| - : info_(info), source_(source) {} |
| +// Creates NetLog parameters for the DNS_CONFIG_CHANGED event. |
| +base::Value* NetLogDnsConfigCallback(const DnsConfig* config, |
| + NetLog::LogLevel /* log_level */) { |
| + return config->ToValue(); |
|
eroman
2012/06/11 23:42:25
I didn't look in detail, but the original also set
mmenke
2012/06/12 00:42:19
In the original, we made a copy of the config, exc
|
| +} |
| - virtual Value* ToValue() const OVERRIDE { |
| - DictionaryValue* dict = new DictionaryValue(); |
| - dict->SetString("host", info_.host_port_pair().ToString()); |
| - dict->SetInteger("address_family", |
| - static_cast<int>(info_.address_family())); |
| - dict->SetBoolean("allow_cached_response", info_.allow_cached_response()); |
| - dict->SetBoolean("is_speculative", info_.is_speculative()); |
| - dict->SetInteger("priority", info_.priority()); |
| - |
| - if (source_.is_valid()) |
| - dict->Set("source_dependency", source_.ToValue()); |
| - |
| - return dict; |
| - } |
| - |
| - protected: |
| - virtual ~RequestInfoParameters() {} |
| - |
| - private: |
| - const HostResolver::RequestInfo info_; |
| - const NetLog::Source source_; |
| -}; |
| - |
| -// Parameters associated with the creation of a HostResolverImpl::Job. |
| -class JobCreationParameters : public NetLog::EventParameters { |
| - public: |
| - JobCreationParameters(const std::string& host, |
| - const NetLog::Source& source) |
| - : host_(host), source_(source) {} |
| - |
| - virtual Value* ToValue() const OVERRIDE { |
| - DictionaryValue* dict = new DictionaryValue(); |
| - dict->SetString("host", host_); |
| - dict->Set("source_dependency", source_.ToValue()); |
| - return dict; |
| - } |
| - |
| - protected: |
| - virtual ~JobCreationParameters() {} |
| - |
| - private: |
| - const std::string host_; |
| - const NetLog::Source source_; |
| -}; |
| - |
| -// Parameters of the HOST_RESOLVER_IMPL_JOB_ATTACH/DETACH event. |
| -class JobAttachParameters : public NetLog::EventParameters { |
| - public: |
| - JobAttachParameters(const NetLog::Source& source, |
| - RequestPriority priority) |
| - : source_(source), priority_(priority) {} |
| - |
| - virtual Value* ToValue() const OVERRIDE { |
| - DictionaryValue* dict = new DictionaryValue(); |
| - dict->Set("source_dependency", source_.ToValue()); |
| - dict->SetInteger("priority", priority_); |
| - return dict; |
| - } |
| - |
| - protected: |
| - virtual ~JobAttachParameters() {} |
| - |
| - private: |
| - const NetLog::Source source_; |
| - const RequestPriority priority_; |
| -}; |
| - |
| -// Parameters of the DNS_CONFIG_CHANGED event. |
| -class DnsConfigParameters : public NetLog::EventParameters { |
| - public: |
| - explicit DnsConfigParameters(const DnsConfig& config) |
| - : num_hosts_(config.hosts.size()) { |
| - config_.CopyIgnoreHosts(config); |
| - } |
| - |
| - virtual Value* ToValue() const OVERRIDE { |
| - Value* value = config_.ToValue(); |
| - if (!value) |
| - return NULL; |
| - DictionaryValue* dict; |
| - if (value->GetAsDictionary(&dict)) |
| - dict->SetInteger("num_hosts", num_hosts_); |
| - return value; |
| - } |
| - |
| - protected: |
| - virtual ~DnsConfigParameters() {} |
| - |
| - private: |
| - DnsConfig config_; // Does not include DnsHosts to save memory and work. |
| - const size_t num_hosts_; |
| -}; |
| - |
| // The logging routines are defined here because some requests are resolved |
| // without a Request object. |
| @@ -358,13 +273,11 @@ |
| const HostResolver::RequestInfo& info) { |
| source_net_log.BeginEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL, |
| - make_scoped_refptr(new NetLogSourceParameter( |
| - "source_dependency", request_net_log.source()))); |
| + request_net_log.source().ToEventParametersCallback()); |
| request_net_log.BeginEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_REQUEST, |
| - make_scoped_refptr(new RequestInfoParameters( |
| - info, source_net_log.source()))); |
| + base::Bind(&NetLogRequestInfoCallback, source_net_log.source(), &info)); |
| } |
| // Logs when a request has just completed (before its callback is run). |
| @@ -684,8 +597,7 @@ |
| net_log_.AddEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_ATTEMPT_STARTED, |
| - make_scoped_refptr(new NetLogIntegerParameter( |
| - "attempt_number", attempt_number_))); |
| + NetLog::IntegerCallback("attempt_number", attempt_number_)); |
| // If we don't get the results within a given time, RetryIfNotComplete |
| // will start a new attempt on a different worker thread if none of our |
| @@ -758,13 +670,17 @@ |
| if (was_canceled()) |
| return; |
| - scoped_refptr<NetLog::EventParameters> params; |
| + NetLog::ParametersCallback callback; |
|
eroman
2012/06/11 23:42:25
optional nit: I suggest calling this "netlog_callb
mmenke
2012/06/12 00:42:19
Done.
|
| if (error != OK) { |
| - params = new ProcTaskFailedParams(attempt_number, error, os_error); |
| + callback = base::Bind(&NetLogProcTaskFailedCallback, |
| + attempt_number, |
| + error, |
| + os_error); |
| } else { |
| - params = new NetLogIntegerParameter("attempt_number", attempt_number); |
| + callback = NetLog::IntegerCallback("attempt_number", attempt_number); |
| } |
| - net_log_.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_ATTEMPT_FINISHED, params); |
| + net_log_.AddEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_ATTEMPT_FINISHED, |
| + callback); |
| if (was_completed()) |
| return; |
| @@ -781,11 +697,12 @@ |
| } |
| if (error != OK) { |
| - params = new ProcTaskFailedParams(0, error, os_error); |
| + callback = base::Bind(&NetLogProcTaskFailedCallback, 0, error, os_error); |
| } else { |
| - params = new AddressListNetLogParam(results_); |
| + callback = base::Bind(&AddressList::NetLogCallback, |
| + base::Unretained(&results_)); |
| } |
| - net_log_.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_PROC_TASK, params); |
| + net_log_.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_PROC_TASK, callback); |
| callback_.Run(error, results_); |
| } |
| @@ -1098,8 +1015,10 @@ |
| result, |
| DnsResponse::DNS_PARSE_RESULT_MAX); |
| if (result == DnsResponse::DNS_SUCCESS) { |
| - net_log_.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_DNS_TASK, |
| - new AddressListNetLogParam(addr_list)); |
| + net_log_.EndEvent( |
| + NetLog::TYPE_HOST_RESOLVER_IMPL_DNS_TASK, |
| + base::Bind(&AddressList::NetLogCallback, |
| + base::Unretained(&addr_list))); |
| callback_.Run(net_error, addr_list, ttl); |
| return; |
| } |
| @@ -1108,8 +1027,9 @@ |
| DNS_HISTOGRAM("AsyncDNS.TransactionFailure", |
| base::TimeTicks::Now() - start_time); |
| } |
| - net_log_.EndEvent(NetLog::TYPE_HOST_RESOLVER_IMPL_DNS_TASK, |
| - new DnsTaskFailedParams(net_error, result)); |
| + net_log_.EndEvent( |
| + NetLog::TYPE_HOST_RESOLVER_IMPL_DNS_TASK, |
| + base::Bind(&NetLogDnsTaskFailedCallback, net_error, result)); |
| callback_.Run(net_error, AddressList(), base::TimeDelta()); |
| } |
| @@ -1142,8 +1062,9 @@ |
| net_log_.BeginEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_JOB, |
| - make_scoped_refptr(new JobCreationParameters( |
| - key_.hostname, request_net_log.source()))); |
| + base::Bind(&NetLogJobCreationCallback, |
| + request_net_log.source(), |
| + &key_.hostname)); |
| } |
| virtual ~Job() { |
| @@ -1191,13 +1112,13 @@ |
| req->request_net_log().AddEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_JOB_ATTACH, |
| - make_scoped_refptr(new NetLogSourceParameter( |
| - "source_dependency", net_log_.source()))); |
| + net_log_.source().ToEventParametersCallback()); |
| net_log_.AddEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_JOB_REQUEST_ATTACH, |
| - make_scoped_refptr(new JobAttachParameters( |
| - req->request_net_log().source(), priority()))); |
| + base::Bind(&NetLogJobAttachCallback, |
| + req->request_net_log().source(), |
| + priority())); |
| // TODO(szym): Check if this is still needed. |
| if (!req->info().is_speculative()) { |
| @@ -1226,8 +1147,9 @@ |
| priority_tracker_.Remove(req->info().priority()); |
| net_log_.AddEvent( |
| NetLog::TYPE_HOST_RESOLVER_IMPL_JOB_REQUEST_DETACH, |
| - make_scoped_refptr(new JobAttachParameters( |
| - req->request_net_log().source(), priority()))); |
| + base::Bind(&NetLogJobAttachCallback, |
| + req->request_net_log().source(), |
| + priority())); |
| if (num_active_requests() > 0) { |
| if (is_queued()) |
| @@ -1962,7 +1884,7 @@ |
| if (net_log_) { |
| net_log_->AddGlobalEntry( |
| NetLog::TYPE_DNS_CONFIG_CHANGED, |
| - make_scoped_refptr(new DnsConfigParameters(dns_config))); |
| + base::Bind(&NetLogDnsConfigCallback, &dns_config)); |
| } |
| // TODO(szym): Remove once http://crbug.com/125599 is resolved. |