diff options
author | megjablon@chromium.org <megjablon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-01 19:01:27 +0000 |
---|---|---|
committer | megjablon@chromium.org <megjablon@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-01 19:01:27 +0000 |
commit | adc6eb89e31942c80eda20db6abb1391c5b0a159 (patch) | |
tree | d1952d7146f9887cf2af1d4dd15e8cc2bd5fb8fe /components/data_reduction_proxy | |
parent | 741a177f3c1c8930e84dc3ced31bb50150c0b547 (diff) | |
download | chromium_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')
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 |