Index: net/proxy/proxy_service.cc |
=================================================================== |
--- net/proxy/proxy_service.cc (revision 41560) |
+++ net/proxy/proxy_service.cc (working copy) |
@@ -11,7 +11,7 @@ |
#include "base/message_loop.h" |
#include "base/string_util.h" |
#include "googleurl/src/gurl.h" |
-#include "net/base/load_log.h" |
+#include "net/base/net_log.h" |
#include "net/base/net_errors.h" |
#include "net/base/net_util.h" |
#include "net/proxy/init_proxy_resolver.h" |
@@ -37,7 +37,7 @@ |
namespace net { |
-static const size_t kMaxNumLoadLogEntries = 100; |
+static const size_t kMaxNumNetLogEntries = 100; |
// Config getter that fails every time. |
class ProxyConfigServiceNull : public ProxyConfigService { |
@@ -58,7 +58,7 @@ |
ProxyInfo* results, |
CompletionCallback* callback, |
RequestHandle* request, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
return ERR_NOT_IMPLEMENTED; |
} |
@@ -83,7 +83,7 @@ |
const GURL& url, |
ProxyInfo* results, |
CompletionCallback* user_callback, |
- LoadLog* load_log) |
+ const BoundNetLog& net_log) |
: service_(service), |
user_callback_(user_callback), |
ALLOW_THIS_IN_INITIALIZER_LIST(io_callback_( |
@@ -92,7 +92,7 @@ |
url_(url), |
resolve_job_(NULL), |
config_id_(ProxyConfig::INVALID_ID), |
- load_log_(load_log) { |
+ net_log_(net_log) { |
DCHECK(user_callback); |
} |
@@ -104,7 +104,7 @@ |
config_id_ = service_->config_.id(); |
return resolver()->GetProxyForURL( |
- url_, results_, &io_callback_, &resolve_job_, load_log_); |
+ url_, results_, &io_callback_, &resolve_job_, net_log_); |
} |
bool is_started() const { |
@@ -129,7 +129,7 @@ |
} |
void Cancel() { |
- LoadLog::AddEvent(load_log_, LoadLog::TYPE_CANCELLED); |
+ net_log_.AddEvent(NetLog::TYPE_CANCELLED); |
if (is_started()) |
CancelResolveJob(); |
@@ -139,7 +139,7 @@ |
user_callback_ = NULL; |
results_ = NULL; |
- LoadLog::EndEvent(load_log_, LoadLog::TYPE_PROXY_SERVICE); |
+ net_log_.EndEvent(NetLog::TYPE_PROXY_SERVICE); |
} |
// Returns true if Cancel() has been called. |
@@ -158,10 +158,10 @@ |
resolve_job_ = NULL; |
config_id_ = ProxyConfig::INVALID_ID; |
- return service_->DidFinishResolvingProxy(results_, result_code, load_log_); |
+ return service_->DidFinishResolvingProxy(results_, result_code, net_log_); |
} |
- LoadLog* load_log() const { return load_log_; } |
+ BoundNetLog* net_log() { return &net_log_; } |
private: |
friend class base::RefCounted<ProxyService::PacRequest>; |
@@ -192,7 +192,7 @@ |
GURL url_; |
ProxyResolver::RequestHandle resolve_job_; |
ProxyConfig::ID config_id_; // The config id when the resolve was started. |
- scoped_refptr<LoadLog> load_log_; |
+ BoundNetLog net_log_; |
}; |
// ProxyService --------------------------------------------------------------- |
@@ -206,6 +206,7 @@ |
should_use_proxy_resolver_(false), |
ALLOW_THIS_IN_INITIALIZER_LIST(init_proxy_resolver_callback_( |
this, &ProxyService::OnInitProxyResolverComplete)), |
+ init_proxy_resolver_log_(kMaxNumNetLogEntries), |
network_change_notifier_(network_change_notifier) { |
// Register to receive network change notifications. |
if (network_change_notifier_) |
@@ -266,10 +267,10 @@ |
ProxyInfo* result, |
CompletionCallback* callback, |
PacRequest** pac_request, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
DCHECK(callback); |
- LoadLog::BeginEvent(load_log, LoadLog::TYPE_PROXY_SERVICE); |
+ net_log.BeginEvent(NetLog::TYPE_PROXY_SERVICE); |
// Strip away any reference fragments and the username/password, as they |
// are not relevant to proxy resolution. |
@@ -277,13 +278,13 @@ |
// Check if the request can be completed right away. This is the case when |
// using a direct connection, or when the config is bad. |
- UpdateConfigIfOld(load_log); |
+ UpdateConfigIfOld(net_log); |
int rv = TryToCompleteSynchronously(url, result); |
if (rv != ERR_IO_PENDING) |
- return DidFinishResolvingProxy(result, rv, load_log); |
+ return DidFinishResolvingProxy(result, rv, net_log); |
scoped_refptr<PacRequest> req = |
- new PacRequest(this, url, result, callback, load_log); |
+ new PacRequest(this, url, result, callback, net_log); |
bool resolver_is_ready = !IsInitializingProxyResolver(); |
@@ -293,8 +294,7 @@ |
if (rv != ERR_IO_PENDING) |
return req->QueryDidComplete(rv); |
} else { |
- LoadLog::BeginEvent(req->load_log(), |
- LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
+ req->net_log()->BeginEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
} |
DCHECK_EQ(ERR_IO_PENDING, rv); |
@@ -335,6 +335,10 @@ |
++it) { |
(*it)->Cancel(); |
} |
+ |
+ // Make sure that InitProxyResolver gets destroyed BEFORE the |
+ // CapturingNetLog it is using is deleted. |
+ init_proxy_resolver_.reset(); |
} |
void ProxyService::SuspendAllPendingRequests() { |
@@ -345,8 +349,8 @@ |
if (req->is_started()) { |
req->CancelResolveJob(); |
- LoadLog::BeginEvent(req->load_log(), |
- LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
+ req->net_log()->BeginEvent( |
+ NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
} |
} |
} |
@@ -364,8 +368,7 @@ |
++it) { |
PacRequest* req = it->get(); |
if (!req->is_started() && !req->was_cancelled()) { |
- LoadLog::EndEvent(req->load_log(), |
- LoadLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
+ req->net_log()->EndEvent(NetLog::TYPE_PROXY_SERVICE_WAITING_FOR_INIT_PAC); |
// Note that we re-check for synchronous completion, in case we are |
// no longer using a ProxyResolver (can happen if we fell-back to manual). |
@@ -396,14 +399,14 @@ |
ProxyInfo* result, |
CompletionCallback* callback, |
PacRequest** pac_request, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
// Check to see if we have a new config since ResolveProxy was called. We |
// want to re-run ResolveProxy in two cases: 1) we have a new config, or 2) a |
// direct connection failed and we never tried the current config. |
bool re_resolve = result->config_id_ != config_.id(); |
if (!re_resolve) { |
- UpdateConfig(load_log); |
+ UpdateConfig(net_log); |
if (result->config_id_ != config_.id()) { |
// A new configuration! |
re_resolve = true; |
@@ -413,7 +416,7 @@ |
// If we have a new config or the config was never tried, we delete the |
// list of bad proxies and we try again. |
proxy_retry_info_.clear(); |
- return ResolveProxy(url, result, callback, pac_request, load_log); |
+ return ResolveProxy(url, result, callback, pac_request, net_log); |
} |
// We don't have new proxy settings to try, try to fallback to the next proxy |
@@ -446,21 +449,19 @@ |
int ProxyService::DidFinishResolvingProxy(ProxyInfo* result, |
int result_code, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
// Log the result of the proxy resolution. |
if (result_code == OK) { |
// When full logging is enabled, dump the proxy list. |
- if (LoadLog::IsUnbounded(load_log)) { |
- LoadLog::AddString( |
- load_log, |
+ if (net_log.HasListener()) { |
+ net_log.AddString( |
std::string("Resolved proxy list: ") + result->ToPacString()); |
} |
result->DeprioritizeBadProxies(proxy_retry_info_); |
} else { |
- LoadLog::AddStringLiteral( |
- load_log, |
+ net_log.AddStringLiteral( |
"Got an error from proxy resolver, falling-back to DIRECT."); |
- LoadLog::AddErrorCode(load_log, result_code); |
+ net_log.AddErrorCode(result_code); |
// Fall-back to direct when the proxy resolver fails. This corresponds |
// with a javascript runtime error in the PAC script. |
@@ -473,7 +474,7 @@ |
result_code = OK; |
} |
- LoadLog::EndEvent(load_log, LoadLog::TYPE_PROXY_SERVICE); |
+ net_log.EndEvent(NetLog::TYPE_PROXY_SERVICE); |
return result_code; |
} |
@@ -564,18 +565,17 @@ |
#endif |
} |
-void ProxyService::UpdateConfig(LoadLog* load_log) { |
+void ProxyService::UpdateConfig(const BoundNetLog& net_log) { |
bool is_first_update = !config_has_been_initialized(); |
ProxyConfig latest; |
// Fetch the proxy settings. |
TimeTicks start_time = TimeTicks::Now(); |
- LoadLog::BeginEvent(load_log, |
- LoadLog::TYPE_PROXY_SERVICE_POLL_CONFIG_SERVICE_FOR_CHANGES); |
+ net_log.BeginEvent( |
+ NetLog::TYPE_PROXY_SERVICE_POLL_CONFIG_SERVICE_FOR_CHANGES); |
int rv = config_service_->GetProxyConfig(&latest); |
- LoadLog::EndEvent(load_log, |
- LoadLog::TYPE_PROXY_SERVICE_POLL_CONFIG_SERVICE_FOR_CHANGES); |
+ net_log.EndEvent(NetLog::TYPE_PROXY_SERVICE_POLL_CONFIG_SERVICE_FOR_CHANGES); |
TimeTicks end_time = TimeTicks::Now(); |
// Record how long the call to config_service_->GetConfig() above took. |
@@ -636,23 +636,24 @@ |
init_proxy_resolver_.reset( |
new InitProxyResolver(resolver_.get(), proxy_script_fetcher_.get())); |
- init_proxy_resolver_log_ = new LoadLog(kMaxNumLoadLogEntries); |
+ init_proxy_resolver_log_.Clear(); |
int rv = init_proxy_resolver_->Init( |
- config_, &init_proxy_resolver_callback_, init_proxy_resolver_log_); |
+ config_, &init_proxy_resolver_callback_, |
+ init_proxy_resolver_log_.bound()); |
if (rv != ERR_IO_PENDING) |
OnInitProxyResolverComplete(rv); |
} |
-void ProxyService::UpdateConfigIfOld(LoadLog* load_log) { |
+void ProxyService::UpdateConfigIfOld(const BoundNetLog& net_log) { |
// The overhead of calling ProxyConfigService::GetProxyConfig is very low. |
const TimeDelta kProxyConfigMaxAge = TimeDelta::FromSeconds(5); |
// Periodically check for a new config. |
if (!config_has_been_initialized() || |
(TimeTicks::Now() - config_last_update_time_) > kProxyConfigMaxAge) |
- UpdateConfig(load_log); |
+ UpdateConfig(net_log); |
} |
@@ -679,11 +680,11 @@ |
int SyncProxyServiceHelper::ResolveProxy(const GURL& url, |
ProxyInfo* proxy_info, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
DCHECK(io_message_loop_ != MessageLoop::current()); |
io_message_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &SyncProxyServiceHelper::StartAsyncResolve, url, load_log)); |
+ this, &SyncProxyServiceHelper::StartAsyncResolve, url, net_log)); |
event_.Wait(); |
@@ -694,11 +695,11 @@ |
} |
int SyncProxyServiceHelper::ReconsiderProxyAfterError( |
- const GURL& url, ProxyInfo* proxy_info, LoadLog* load_log) { |
+ const GURL& url, ProxyInfo* proxy_info, const BoundNetLog& net_log) { |
DCHECK(io_message_loop_ != MessageLoop::current()); |
io_message_loop_->PostTask(FROM_HERE, NewRunnableMethod( |
- this, &SyncProxyServiceHelper::StartAsyncReconsider, url, load_log)); |
+ this, &SyncProxyServiceHelper::StartAsyncReconsider, url, net_log)); |
event_.Wait(); |
@@ -709,18 +710,18 @@ |
} |
void SyncProxyServiceHelper::StartAsyncResolve(const GURL& url, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
result_ = proxy_service_->ResolveProxy( |
- url, &proxy_info_, &callback_, NULL, load_log); |
+ url, &proxy_info_, &callback_, NULL, net_log); |
if (result_ != net::ERR_IO_PENDING) { |
OnCompletion(result_); |
} |
} |
void SyncProxyServiceHelper::StartAsyncReconsider(const GURL& url, |
- LoadLog* load_log) { |
+ const BoundNetLog& net_log) { |
result_ = proxy_service_->ReconsiderProxyAfterError( |
- url, &proxy_info_, &callback_, NULL, load_log); |
+ url, &proxy_info_, &callback_, NULL, net_log); |
if (result_ != net::ERR_IO_PENDING) { |
OnCompletion(result_); |
} |