| Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc
|
| diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc
|
| index 70390e396ac918ecea755a85650f212686a612d9..4d8f08897a217ff1563328cb2ef847cd04774909 100644
|
| --- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc
|
| +++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/memory/ref_counted.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| +#include "base/test/histogram_tester.h"
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator.h"
|
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_data.h"
|
| @@ -399,6 +400,64 @@ TEST_F(DataReductionProxyInterceptorEndToEndTest, RedirectWithoutRetry) {
|
| EXPECT_EQ(1, delegate().received_redirect_count());
|
| }
|
|
|
| +// Test that data reduction proxy is byppassed if there is a URL redirect cycle.
|
| +TEST_F(DataReductionProxyInterceptorEndToEndTest, URLRedirectCycle) {
|
| + base::HistogramTester histogram_tester;
|
| + MockRead redirect_mock_reads_1[] = {
|
| + MockRead("HTTP/1.1 302 Found\r\n"
|
| + "Via: 1.1 Chrome-Compression-Proxy\r\n"
|
| + "Location: http://bar.com/\r\n\r\n"),
|
| + MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
|
| + };
|
| + net::StaticSocketDataProvider redirect_socket_data_provider_1(
|
| + redirect_mock_reads_1, arraysize(redirect_mock_reads_1), nullptr, 0);
|
| + mock_socket_factory()->AddSocketDataProvider(
|
| + &redirect_socket_data_provider_1);
|
| +
|
| + MockRead redirect_mock_reads_2[] = {
|
| + MockRead("HTTP/1.1 302 Found\r\n"
|
| + "Via: 1.1 Chrome-Compression-Proxy\r\n"
|
| + "Location: http://foo.com/\r\n\r\n"),
|
| + MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
|
| + };
|
| + net::StaticSocketDataProvider redirect_socket_data_provider_2(
|
| + redirect_mock_reads_2, arraysize(redirect_mock_reads_2), nullptr, 0);
|
| + mock_socket_factory()->AddSocketDataProvider(
|
| + &redirect_socket_data_provider_2);
|
| +
|
| + // Redirect cycle.
|
| + MockRead redirect_mock_reads_3[] = {
|
| + MockRead("HTTP/1.1 302 Found\r\n"
|
| + "Via: 1.1 Chrome-Compression-Proxy\r\n"
|
| + "Location: http://bar.com/\r\n\r\n"),
|
| + MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
|
| + };
|
| + net::StaticSocketDataProvider redirect_socket_data_provider_3(
|
| + redirect_mock_reads_3, arraysize(redirect_mock_reads_3), nullptr, 0);
|
| + mock_socket_factory()->AddSocketDataProvider(
|
| + &redirect_socket_data_provider_3);
|
| +
|
| + // Data reduction proxy should be bypassed.
|
| + MockRead redirect_mock_reads_4[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead(kBody.c_str()),
|
| + MockRead(net::SYNCHRONOUS, net::OK),
|
| + };
|
| + net::StaticSocketDataProvider redirect_socket_data_provider_4(
|
| + redirect_mock_reads_4, arraysize(redirect_mock_reads_4), nullptr, 0);
|
| + mock_socket_factory()->AddSocketDataProvider(
|
| + &redirect_socket_data_provider_4);
|
| +
|
| + std::unique_ptr<net::URLRequest> request =
|
| + CreateAndExecuteRequest(GURL("http://foo.com"));
|
| +
|
| + EXPECT_EQ(net::OK, delegate().request_status());
|
| + EXPECT_EQ(200, request->GetResponseCode());
|
| + EXPECT_EQ(kBody, delegate().data_received());
|
| + EXPECT_FALSE(request->was_fetched_via_proxy());
|
| + histogram_tester.ExpectTotalCount(
|
| + "DataReductionProxy.BypassedBytes.URLRedirectCycle", 1);
|
| +}
|
| +
|
| TEST_F(DataReductionProxyInterceptorEndToEndTest, ResponseWithBypassAndRetry) {
|
| // The first try gives a bypass.
|
| MockRead initial_mock_reads[] = {
|
|
|