summaryrefslogtreecommitdiffstats
path: root/components/data_reduction_proxy
diff options
context:
space:
mode:
authormegjablon@chromium.org <megjablon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-01 19:01:27 +0000
committermegjablon@chromium.org <megjablon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-01 19:01:27 +0000
commitadc6eb89e31942c80eda20db6abb1391c5b0a159 (patch)
treed1952d7146f9887cf2af1d4dd15e8cc2bd5fb8fe /components/data_reduction_proxy
parent741a177f3c1c8930e84dc3ced31bb50150c0b547 (diff)
downloadchromium_src-adc6eb89e31942c80eda20db6abb1391c5b0a159.zip
chromium_src-adc6eb89e31942c80eda20db6abb1391c5b0a159.tar.gz
chromium_src-adc6eb89e31942c80eda20db6abb1391c5b0a159.tar.bz2
Update data reduction bypass UMA to reflect modern usage.
Created new UMAs DataReductionProxy.BypassType{Primary|Fallback} and DataReductionProxy.BlockType{Primary|Fallback} that add bypass types to more specifically track the bypass reason. Deprecated DataReductionProxy.BypassInfo{Primary|Fallback}. BUG=373978 Review URL: https://codereview.chromium.org/348553006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@280857 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'components/data_reduction_proxy')
-rw-r--r--components/data_reduction_proxy/browser/data_reduction_proxy_protocol.cc9
-rw-r--r--components/data_reduction_proxy/common/data_reduction_proxy_headers.cc32
-rw-r--r--components/data_reduction_proxy/common/data_reduction_proxy_headers.h5
-rw-r--r--components/data_reduction_proxy/common/data_reduction_proxy_headers_unittest.cc46
4 files changed, 63 insertions, 29 deletions
diff --git a/components/data_reduction_proxy/browser/data_reduction_proxy_protocol.cc b/components/data_reduction_proxy/browser/data_reduction_proxy_protocol.cc
index 2ec31e7..a013f72 100644
--- a/components/data_reduction_proxy/browser/data_reduction_proxy_protocol.cc
+++ b/components/data_reduction_proxy/browser/data_reduction_proxy_protocol.cc
@@ -56,8 +56,8 @@ bool MaybeBypassProxyAndPrepareToRetry(
return false;
DataReductionProxyInfo data_reduction_proxy_info;
- net::ProxyService::DataReductionProxyBypassEventType bypass_type =
- GetDataReductionProxyBypassEventType(
+ net::ProxyService::DataReductionProxyBypassType bypass_type =
+ GetDataReductionProxyBypassType(
original_response_headers, &data_reduction_proxy_info);
if (bypass_type == net::ProxyService::BYPASS_EVENT_TYPE_MAX) {
return false;
@@ -68,7 +68,10 @@ bool MaybeBypassProxyAndPrepareToRetry(
net::ProxyServer proxy_server;
SetProxyServerFromGURL(data_reduction_proxies.first, &proxy_server);
request->context()->proxy_service()->RecordDataReductionProxyBypassInfo(
- !data_reduction_proxies.second.is_empty(), proxy_server, bypass_type);
+ !data_reduction_proxies.second.is_empty(),
+ data_reduction_proxy_info.bypass_all,
+ proxy_server,
+ bypass_type);
MarkProxiesAsBadUntil(request,
data_reduction_proxy_info.bypass_duration,
diff --git a/components/data_reduction_proxy/common/data_reduction_proxy_headers.cc b/components/data_reduction_proxy/common/data_reduction_proxy_headers.cc
index 773d14c..b5c6119 100644
--- a/components/data_reduction_proxy/common/data_reduction_proxy_headers.cc
+++ b/components/data_reduction_proxy/common/data_reduction_proxy_headers.cc
@@ -103,23 +103,35 @@ bool HasDataReductionProxyViaHeader(const net::HttpResponseHeaders* headers) {
return false;
}
-net::ProxyService::DataReductionProxyBypassEventType
-GetDataReductionProxyBypassEventType(
+const int kShortBypassMaxSeconds = 59;
+const int kMediumBypassMaxSeconds = 300;
+net::ProxyService::DataReductionProxyBypassType
+GetDataReductionProxyBypassType(
const net::HttpResponseHeaders* headers,
DataReductionProxyInfo* data_reduction_proxy_info) {
DCHECK(data_reduction_proxy_info);
if (GetDataReductionProxyInfo(headers, data_reduction_proxy_info)) {
// A chrome-proxy response header is only present in a 502. For proper
// reporting, this check must come before the 5xx checks below.
- if (data_reduction_proxy_info->bypass_duration < TimeDelta::FromMinutes(30))
+ const TimeDelta& duration = data_reduction_proxy_info->bypass_duration;
+ if (duration <= TimeDelta::FromSeconds(kShortBypassMaxSeconds))
return ProxyService::SHORT_BYPASS;
+ if (duration <= TimeDelta::FromSeconds(kMediumBypassMaxSeconds))
+ return ProxyService::MEDIUM_BYPASS;
return ProxyService::LONG_BYPASS;
}
- if (headers->response_code() == net::HTTP_INTERNAL_SERVER_ERROR ||
- headers->response_code() == net::HTTP_BAD_GATEWAY ||
- headers->response_code() == net::HTTP_SERVICE_UNAVAILABLE) {
- // Fall back if a 500, 502 or 503 is returned.
- return ProxyService::INTERNAL_SERVER_ERROR_BYPASS;
+ // Fall back if a 500, 502 or 503 is returned.
+ if (headers->response_code() == net::HTTP_INTERNAL_SERVER_ERROR)
+ return ProxyService::STATUS_500_HTTP_INTERNAL_SERVER_ERROR;
+ if (headers->response_code() == net::HTTP_BAD_GATEWAY)
+ return ProxyService::STATUS_502_HTTP_BAD_GATEWAY;
+ if (headers->response_code() == net::HTTP_SERVICE_UNAVAILABLE)
+ return ProxyService::STATUS_503_HTTP_SERVICE_UNAVAILABLE;
+ // TODO(kundaji): Bypass if Proxy-Authenticate header value cannot be
+ // interpreted by data reduction proxy.
+ if (headers->response_code() == net::HTTP_PROXY_AUTHENTICATION_REQUIRED &&
+ !headers->HasHeader("Proxy-Authenticate")) {
+ return ProxyService::MALFORMED_407;
}
if (!HasDataReductionProxyViaHeader(headers) &&
(headers->response_code() != net::HTTP_NOT_MODIFIED)) {
@@ -132,9 +144,9 @@ GetDataReductionProxyBypassEventType(
// Separate this case from other responses that are missing the header.
if (headers->response_code() >= net::HTTP_BAD_REQUEST &&
headers->response_code() < net::HTTP_INTERNAL_SERVER_ERROR) {
- return ProxyService::PROXY_4XX_BYPASS;
+ return ProxyService::MISSING_VIA_HEADER_4XX;
}
- return ProxyService::MISSING_VIA_HEADER;
+ return ProxyService::MISSING_VIA_HEADER_OTHER;
}
// There is no bypass event.
return ProxyService::BYPASS_EVENT_TYPE_MAX;
diff --git a/components/data_reduction_proxy/common/data_reduction_proxy_headers.h b/components/data_reduction_proxy/common/data_reduction_proxy_headers.h
index 88b0cd0..50aea24 100644
--- a/components/data_reduction_proxy/common/data_reduction_proxy_headers.h
+++ b/components/data_reduction_proxy/common/data_reduction_proxy_headers.h
@@ -12,6 +12,8 @@
#include "net/http/http_response_headers.h"
#include "net/proxy/proxy_service.h"
+using net::ProxyService;
+
namespace data_reduction_proxy {
// Contains instructions contained in the Chrome-Proxy header.
@@ -43,8 +45,7 @@ bool HasDataReductionProxyViaHeader(const net::HttpResponseHeaders* headers);
// Returns the reason why the Chrome proxy should be bypassed or not, and
// populates |proxy_info| with information on how long to bypass if
// applicable.
-net::ProxyService::DataReductionProxyBypassEventType
-GetDataReductionProxyBypassEventType(
+ProxyService::DataReductionProxyBypassType GetDataReductionProxyBypassType(
const net::HttpResponseHeaders* headers,
DataReductionProxyInfo* proxy_info);
diff --git a/components/data_reduction_proxy/common/data_reduction_proxy_headers_unittest.cc b/components/data_reduction_proxy/common/data_reduction_proxy_headers_unittest.cc
index 871d665..250cf32 100644
--- a/components/data_reduction_proxy/common/data_reduction_proxy_headers_unittest.cc
+++ b/components/data_reduction_proxy/common/data_reduction_proxy_headers_unittest.cc
@@ -269,7 +269,7 @@ TEST_F(DataReductionProxyHeadersTest, HasDataReductionProxyViaHeader) {
TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
const struct {
const char* headers;
- net::ProxyService::DataReductionProxyBypassEventType expected_result;
+ net::ProxyService::DataReductionProxyBypassType expected_result;
} tests[] = {
{ "HTTP/1.1 200 OK\n"
"Chrome-Proxy: bypass=0\n"
@@ -277,18 +277,28 @@ TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
net::ProxyService::SHORT_BYPASS,
},
{ "HTTP/1.1 200 OK\n"
- "Chrome-Proxy: bypass=1799\n"
+ "Chrome-Proxy: bypass=59\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
net::ProxyService::SHORT_BYPASS,
},
{ "HTTP/1.1 200 OK\n"
- "Chrome-Proxy: bypass=1800\n"
+ "Chrome-Proxy: bypass=60\n"
+ "Via: 1.1 Chrome-Compression-Proxy\n",
+ net::ProxyService::MEDIUM_BYPASS,
+ },
+ { "HTTP/1.1 200 OK\n"
+ "Chrome-Proxy: bypass=300\n"
+ "Via: 1.1 Chrome-Compression-Proxy\n",
+ net::ProxyService::MEDIUM_BYPASS,
+ },
+ { "HTTP/1.1 200 OK\n"
+ "Chrome-Proxy: bypass=301\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
net::ProxyService::LONG_BYPASS,
},
{ "HTTP/1.1 500 Internal Server Error\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
- net::ProxyService::INTERNAL_SERVER_ERROR_BYPASS,
+ net::ProxyService::STATUS_500_HTTP_INTERNAL_SERVER_ERROR,
},
{ "HTTP/1.1 501 Not Implemented\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
@@ -296,11 +306,11 @@ TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
},
{ "HTTP/1.1 502 Bad Gateway\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
- net::ProxyService::INTERNAL_SERVER_ERROR_BYPASS,
+ net::ProxyService::STATUS_502_HTTP_BAD_GATEWAY,
},
{ "HTTP/1.1 503 Service Unavailable\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
- net::ProxyService::INTERNAL_SERVER_ERROR_BYPASS,
+ net::ProxyService::STATUS_503_HTTP_SERVICE_UNAVAILABLE,
},
{ "HTTP/1.1 504 Gateway Timeout\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
@@ -311,32 +321,40 @@ TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
net::ProxyService::BYPASS_EVENT_TYPE_MAX,
},
{ "HTTP/1.1 304 Not Modified\n",
- net::ProxyService::BYPASS_EVENT_TYPE_MAX,
+ net::ProxyService::BYPASS_EVENT_TYPE_MAX,
},
{ "HTTP/1.1 200 OK\n",
- net::ProxyService::MISSING_VIA_HEADER,
+ net::ProxyService::MISSING_VIA_HEADER_OTHER,
},
{ "HTTP/1.1 200 OK\n"
- "Chrome-Proxy: bypass=1799\n",
+ "Chrome-Proxy: bypass=59\n",
net::ProxyService::SHORT_BYPASS,
},
{ "HTTP/1.1 502 Bad Gateway\n",
- net::ProxyService::INTERNAL_SERVER_ERROR_BYPASS,
+ net::ProxyService::STATUS_502_HTTP_BAD_GATEWAY,
},
{ "HTTP/1.1 502 Bad Gateway\n"
- "Chrome-Proxy: bypass=1799\n",
+ "Chrome-Proxy: bypass=59\n",
net::ProxyService::SHORT_BYPASS,
},
{ "HTTP/1.1 502 Bad Gateway\n"
- "Chrome-Proxy: bypass=1799\n",
+ "Chrome-Proxy: bypass=59\n",
net::ProxyService::SHORT_BYPASS,
},
{ "HTTP/1.1 414 Request-URI Too Long\n",
- net::ProxyService::PROXY_4XX_BYPASS,
+ net::ProxyService::MISSING_VIA_HEADER_4XX,
},
{ "HTTP/1.1 414 Request-URI Too Long\n"
"Via: 1.1 Chrome-Compression-Proxy\n",
net::ProxyService::BYPASS_EVENT_TYPE_MAX,
+ },
+ { "HTTP/1.1 407 Proxy Authentication Required\n",
+ net::ProxyService::MALFORMED_407,
+ },
+ { "HTTP/1.1 407 Proxy Authentication Required\n"
+ "Proxy-Authenticate: Basic\n"
+ "Via: 1.1 Chrome-Compression-Proxy\n",
+ net::ProxyService::BYPASS_EVENT_TYPE_MAX,
}
};
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
@@ -346,7 +364,7 @@ TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) {
new net::HttpResponseHeaders(headers));
DataReductionProxyInfo chrome_proxy_info;
EXPECT_EQ(tests[i].expected_result,
- GetDataReductionProxyBypassEventType(parsed, &chrome_proxy_info));
+ GetDataReductionProxyBypassType(parsed, &chrome_proxy_info));
}
}
} // namespace data_reduction_proxy