Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(875)

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc

Issue 1135153002: Make DRP bypass logic apply to any proxies that send the DRP via header. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
index d6f2da67b680226b262e8d784ce596f44b8a609e..d84886a59173a7d3343357781354c71d3b372f99 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_protocol_unittest.cc
@@ -8,8 +8,10 @@
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/message_loop/message_loop.h"
#include "base/metrics/field_trial.h"
#include "base/run_loop.h"
+#include "base/stl_util.h"
#include "base/strings/stringprintf.h"
#include "base/test/mock_entropy_provider.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_bypass_stats.h"
@@ -31,6 +33,7 @@
#include "net/url_request/static_http_user_agent_settings.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
+#include "net/url_request/url_request_context_storage.h"
#include "net/url_request/url_request_filter.h"
#include "net/url_request/url_request_http_job.h"
#include "net/url_request/url_request_intercepting_job_factory.h"
@@ -771,6 +774,111 @@ TEST_F(DataReductionProxyProtocolTest, BypassLogic) {
}
}
+TEST(DataReductionProxyProtocolStandaloneTest,
+ BypassLogicAlwaysAppliesWhenViaHeaderPresent) {
+ base::MessageLoopForIO message_loop;
+
+ const struct {
+ const char* first_response;
+ bool expected_retry;
+ bool expected_bad_proxy;
+ DataReductionProxyBypassType expected_bypass_type;
+ } test_cases[] = {
+ {"HTTP/1.1 200 OK\r\n"
+ "Server: proxy\r\n"
+ "Chrome-Proxy: block=0\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+ true,
+ true,
+ BYPASS_EVENT_TYPE_MEDIUM},
+ {"HTTP/1.1 200 OK\r\n"
+ "Server: proxy\r\n"
+ "Chrome-Proxy: bypass=0\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+ true,
+ true,
+ BYPASS_EVENT_TYPE_MEDIUM},
+ {"HTTP/1.1 502 Bad Gateway\r\n"
+ "Server: proxy\r\n"
+ "Via: 1.1 Chrome-Compression-Proxy\r\n\r\n",
+ true,
+ true,
+ BYPASS_EVENT_TYPE_STATUS_502_HTTP_BAD_GATEWAY},
+ {"HTTP/1.1 200 OK\r\n"
+ "Server: proxy\r\n"
+ "Chrome-Proxy: block=0\r\n\r\n",
+ false,
+ false,
+ BYPASS_EVENT_TYPE_MAX},
+ {"HTTP/1.1 502 Bad Gateway\r\n"
+ "Server: proxy\r\n\r\n",
+ false,
+ false,
+ BYPASS_EVENT_TYPE_MAX},
+ };
+
+ for (const auto& test : test_cases) {
+ const std::string kPrimary = "https://unrecognized-drp.net:443";
+
+ net::TestURLRequestContext context(true);
+ net::URLRequestContextStorage storage(&context);
+
+ net::MockClientSocketFactory mock_socket_factory;
+ context.set_client_socket_factory(&mock_socket_factory);
+
+ storage.set_proxy_service(
+ ProxyService::CreateFixed(kPrimary + ",direct://"));
+
+ scoped_ptr<DataReductionProxyTestContext> drp_test_context(
+ DataReductionProxyTestContext::Builder()
+ .WithParamsFlags(DataReductionProxyParams::kAllowed |
+ DataReductionProxyParams::kFallbackAllowed)
+ .WithParamsDefinitions(
+ TestDataReductionProxyParams::HAS_EVERYTHING &
+ ~TestDataReductionProxyParams::HAS_DEV_ORIGIN &
+ ~TestDataReductionProxyParams::HAS_DEV_FALLBACK_ORIGIN)
+ .WithMockClientSocketFactory(&mock_socket_factory)
+ .WithURLRequestContext(&context)
+ .Build());
+ drp_test_context->AttachToURLRequestContext(&storage);
+ context.Init();
+
+ drp_test_context->EnableDataReductionProxyWithSecureProxyCheckSuccess();
+
+ // The proxy is an HTTPS proxy, so set up the fake SSL socket data.
+ net::SSLSocketDataProvider ssl_socket(net::ASYNC, net::OK);
+ mock_socket_factory.AddSSLSocketDataProvider(&ssl_socket);
+
+ MockRead first_reads[] = {MockRead(test.first_response),
+ MockRead(""),
+ MockRead(net::SYNCHRONOUS, net::OK)};
+ net::StaticSocketDataProvider first_socket(
+ first_reads, arraysize(first_reads), nullptr, 0);
+ mock_socket_factory.AddSocketDataProvider(&first_socket);
+
+ MockRead retry_reads[] = {MockRead("HTTP/1.1 200 OK\n\r\n\r"),
+ MockRead(""),
+ MockRead(net::SYNCHRONOUS, net::OK)};
+ net::StaticSocketDataProvider retry_socket(
+ retry_reads, arraysize(retry_reads), nullptr, 0);
+ if (test.expected_retry)
+ mock_socket_factory.AddSocketDataProvider(&retry_socket);
+
+ net::TestDelegate delegate;
+ scoped_ptr<net::URLRequest> url_request(context.CreateRequest(
+ GURL("http://www.google.com"), net::IDLE, &delegate));
+ url_request->Start();
+ drp_test_context->RunUntilIdle();
+
+ EXPECT_EQ(test.expected_bypass_type,
+ drp_test_context->io_data()->bypass_stats()->GetBypassType());
+ // Check the bad proxy list.
+ EXPECT_EQ(
+ test.expected_bad_proxy,
+ ContainsKey(context.proxy_service()->proxy_retry_info(), kPrimary));
+ }
+}
+
TEST_F(DataReductionProxyProtocolTest,
RelaxedMissingViaHeaderOtherBypassLogic) {
std::string primary = test_context_->config()->test_params()->DefaultOrigin();

Powered by Google App Engine
This is Rietveld 408576698