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

Side by Side Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor_unittest.cc

Issue 2777823002: Bypass DRP if a redirect cycle is detected (Closed)
Patch Set: ryansturm comments Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_inte rceptor.h" 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_inte rceptor.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/memory/ref_counted.h" 14 #include "base/memory/ref_counted.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/test/histogram_tester.h"
17 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf ig_test_utils.h" 18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf ig_test_utils.h"
18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf igurator.h" 19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf igurator.h"
19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d ata.h" 20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_io_d ata.h"
20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test _utils.h" 21 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test _utils.h"
21 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h" 22 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h"
22 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s_test_utils.h" 23 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s_test_utils.h"
23 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_ names.h" 24 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_ names.h"
24 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_serve r.h" 25 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_serve r.h"
25 #include "components/data_reduction_proxy/proto/client_config.pb.h" 26 #include "components/data_reduction_proxy/proto/client_config.pb.h"
26 #include "components/prefs/pref_service.h" 27 #include "components/prefs/pref_service.h"
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 CreateAndExecuteRequest(GURL("http://foo.com")); 393 CreateAndExecuteRequest(GURL("http://foo.com"));
393 394
394 EXPECT_EQ(net::OK, delegate().request_status()); 395 EXPECT_EQ(net::OK, delegate().request_status());
395 EXPECT_EQ(200, request->GetResponseCode()); 396 EXPECT_EQ(200, request->GetResponseCode());
396 EXPECT_EQ(kBody, delegate().data_received()); 397 EXPECT_EQ(kBody, delegate().data_received());
397 EXPECT_EQ(origin(), request->proxy_server()); 398 EXPECT_EQ(origin(), request->proxy_server());
398 // The redirect should have been processed and followed normally. 399 // The redirect should have been processed and followed normally.
399 EXPECT_EQ(1, delegate().received_redirect_count()); 400 EXPECT_EQ(1, delegate().received_redirect_count());
400 } 401 }
401 402
403 // Test that data reduction proxy is byppassed if there is a URL redirect cycle.
404 TEST_F(DataReductionProxyInterceptorEndToEndTest, URLRedirectCycle) {
405 base::HistogramTester histogram_tester;
406 MockRead redirect_mock_reads_1[] = {
407 MockRead("HTTP/1.1 302 Found\r\n"
408 "Via: 1.1 Chrome-Compression-Proxy\r\n"
409 "Location: http://bar.com/\r\n\r\n"),
410 MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
411 };
412 net::StaticSocketDataProvider redirect_socket_data_provider_1(
413 redirect_mock_reads_1, arraysize(redirect_mock_reads_1), nullptr, 0);
414 mock_socket_factory()->AddSocketDataProvider(
415 &redirect_socket_data_provider_1);
416
417 MockRead redirect_mock_reads_2[] = {
418 MockRead("HTTP/1.1 302 Found\r\n"
419 "Via: 1.1 Chrome-Compression-Proxy\r\n"
420 "Location: http://foo.com/\r\n\r\n"),
421 MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
422 };
423 net::StaticSocketDataProvider redirect_socket_data_provider_2(
424 redirect_mock_reads_2, arraysize(redirect_mock_reads_2), nullptr, 0);
425 mock_socket_factory()->AddSocketDataProvider(
426 &redirect_socket_data_provider_2);
427
428 // Redirect cycle.
429 MockRead redirect_mock_reads_3[] = {
430 MockRead("HTTP/1.1 302 Found\r\n"
431 "Via: 1.1 Chrome-Compression-Proxy\r\n"
432 "Location: http://bar.com/\r\n\r\n"),
433 MockRead(""), MockRead(net::SYNCHRONOUS, net::OK),
434 };
435 net::StaticSocketDataProvider redirect_socket_data_provider_3(
436 redirect_mock_reads_3, arraysize(redirect_mock_reads_3), nullptr, 0);
437 mock_socket_factory()->AddSocketDataProvider(
438 &redirect_socket_data_provider_3);
439
440 // Data reduction proxy should be bypassed.
441 MockRead redirect_mock_reads_4[] = {
442 MockRead("HTTP/1.1 200 OK\r\n\r\n"), MockRead(kBody.c_str()),
443 MockRead(net::SYNCHRONOUS, net::OK),
444 };
445 net::StaticSocketDataProvider redirect_socket_data_provider_4(
446 redirect_mock_reads_4, arraysize(redirect_mock_reads_4), nullptr, 0);
447 mock_socket_factory()->AddSocketDataProvider(
448 &redirect_socket_data_provider_4);
449
450 std::unique_ptr<net::URLRequest> request =
451 CreateAndExecuteRequest(GURL("http://foo.com"));
452
453 EXPECT_EQ(net::OK, delegate().request_status());
454 EXPECT_EQ(200, request->GetResponseCode());
455 EXPECT_EQ(kBody, delegate().data_received());
456 EXPECT_FALSE(request->was_fetched_via_proxy());
457 histogram_tester.ExpectTotalCount(
458 "DataReductionProxy.BypassedBytes.URLRedirectCycle", 1);
459 }
460
402 TEST_F(DataReductionProxyInterceptorEndToEndTest, ResponseWithBypassAndRetry) { 461 TEST_F(DataReductionProxyInterceptorEndToEndTest, ResponseWithBypassAndRetry) {
403 // The first try gives a bypass. 462 // The first try gives a bypass.
404 MockRead initial_mock_reads[] = { 463 MockRead initial_mock_reads[] = {
405 MockRead("HTTP/1.1 502 Bad Gateway\r\n" 464 MockRead("HTTP/1.1 502 Bad Gateway\r\n"
406 "Via: 1.1 Chrome-Compression-Proxy\r\n" 465 "Via: 1.1 Chrome-Compression-Proxy\r\n"
407 "Chrome-Proxy: block-once\r\n\r\n"), 466 "Chrome-Proxy: block-once\r\n\r\n"),
408 MockRead(""), 467 MockRead(""),
409 MockRead(net::SYNCHRONOUS, net::OK), 468 MockRead(net::SYNCHRONOUS, net::OK),
410 }; 469 };
411 net::StaticSocketDataProvider initial_socket_data_provider( 470 net::StaticSocketDataProvider initial_socket_data_provider(
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 std::vector<GURL> expected_url_chain; 585 std::vector<GURL> expected_url_chain;
527 expected_url_chain.push_back(GURL("http://music.google.com")); 586 expected_url_chain.push_back(GURL("http://music.google.com"));
528 expected_url_chain.push_back(GURL("http://play.google.com")); 587 expected_url_chain.push_back(GURL("http://play.google.com"));
529 expected_url_chain.push_back(GURL("https://play.google.com")); 588 expected_url_chain.push_back(GURL("https://play.google.com"));
530 EXPECT_EQ(expected_url_chain, request->url_chain()); 589 EXPECT_EQ(expected_url_chain, request->url_chain());
531 } 590 }
532 591
533 } // namespace 592 } // namespace
534 593
535 } // namespace data_reduction_proxy 594 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698