| Index: net/proxy/proxy_service.cc
|
| ===================================================================
|
| --- net/proxy/proxy_service.cc (revision 274257)
|
| +++ net/proxy/proxy_service.cc (working copy)
|
| @@ -47,6 +47,7 @@
|
|
|
| #if defined(SPDY_PROXY_AUTH_ORIGIN)
|
| #include "base/metrics/histogram.h"
|
| +#include "base/metrics/sparse_histogram.h"
|
| #endif
|
|
|
| using base::TimeDelta;
|
| @@ -1168,6 +1169,7 @@
|
| }
|
|
|
| int ProxyService::ReconsiderProxyAfterError(const GURL& url,
|
| + int net_error,
|
| ProxyInfo* result,
|
| const CompletionCallback& callback,
|
| PacRequest** pac_request,
|
| @@ -1191,9 +1193,13 @@
|
| if (result->proxy_server().isDataReductionProxy()) {
|
| RecordDataReductionProxyBypassInfo(
|
| true, result->proxy_server(), ERROR_BYPASS);
|
| + RecordDataReductionProxyBypassOnNetworkError(
|
| + true, result->proxy_server(), net_error);
|
| } else if (result->proxy_server().isDataReductionProxyFallback()) {
|
| RecordDataReductionProxyBypassInfo(
|
| false, result->proxy_server(), ERROR_BYPASS);
|
| + RecordDataReductionProxyBypassOnNetworkError(
|
| + false, result->proxy_server(), net_error);
|
| }
|
| #endif
|
|
|
| @@ -1439,6 +1445,25 @@
|
| bypass_type, BYPASS_EVENT_TYPE_MAX);
|
| }
|
| }
|
| +
|
| +void ProxyService::RecordDataReductionProxyBypassOnNetworkError(
|
| + bool is_primary,
|
| + const ProxyServer& proxy_server,
|
| + int net_error) {
|
| + // Only record UMA if the proxy isn't already on the retry list.
|
| + if (proxy_retry_info_.find(proxy_server.ToURI()) != proxy_retry_info_.end())
|
| + return;
|
| +
|
| + if (is_primary) {
|
| + UMA_HISTOGRAM_SPARSE_SLOWLY(
|
| + "DataReductionProxy.BypassOnNetworkErrorPrimary",
|
| + std::abs(net_error));
|
| + return;
|
| + }
|
| + UMA_HISTOGRAM_SPARSE_SLOWLY(
|
| + "DataReductionProxy.BypassOnNetworkErrorFallback",
|
| + std::abs(net_error));
|
| +}
|
| #endif // defined(SPDY_PROXY_AUTH_ORIGIN)
|
|
|
| void ProxyService::OnProxyConfigChanged(
|
| @@ -1581,13 +1606,14 @@
|
| }
|
|
|
| int SyncProxyServiceHelper::ReconsiderProxyAfterError(
|
| - const GURL& url, ProxyInfo* proxy_info, const BoundNetLog& net_log) {
|
| + const GURL& url, int net_error, ProxyInfo* proxy_info,
|
| + const BoundNetLog& net_log) {
|
| DCHECK(io_message_loop_ != base::MessageLoop::current());
|
|
|
| io_message_loop_->PostTask(
|
| FROM_HERE,
|
| base::Bind(&SyncProxyServiceHelper::StartAsyncReconsider, this, url,
|
| - net_log));
|
| + net_error, net_log));
|
|
|
| event_.Wait();
|
|
|
| @@ -1609,9 +1635,10 @@
|
| }
|
|
|
| void SyncProxyServiceHelper::StartAsyncReconsider(const GURL& url,
|
| + int net_error,
|
| const BoundNetLog& net_log) {
|
| result_ = proxy_service_->ReconsiderProxyAfterError(
|
| - url, &proxy_info_, callback_, NULL, net_log);
|
| + url, net_error, &proxy_info_, callback_, NULL, net_log);
|
| if (result_ != net::ERR_IO_PENDING) {
|
| OnCompletion(result_);
|
| }
|
|
|