1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/data_reduction_proxy/common/data_reduction_proxy_headers.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <vector> 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/data_reduction_proxy/common/data_reduction_proxy_headers_test_utils.h" 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/http/http_response_headers.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "net/proxy/proxy_service.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace data_reduction_proxy { 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class DataReductionProxyHeadersTest : public testing::Test {}; 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyActionValue) { 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string action_key; 226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_result; 236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_action_value; 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } tests[] = { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "a", 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "a", 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=86400\n" 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "bypass", 436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "86400", 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass86400\n" 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "bypass", 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=0\n" 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "bypass", 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "0", 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=1500\n" 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=86400\n" 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "bypass", 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "1500", 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block=1500, block=3600\n" 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "block", 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "1500", 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: proxy-bypass\n" 816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: key=123 \n" 826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "key", 846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "123", 866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: proxy-bypass\n" 896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once\n" 906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "block-once", 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(tests[i].headers); 986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string action_value; 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool has_action_key = GetDataReductionProxyActionValue( 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parsed.get(), tests[i].action_key, &action_value); 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_result, has_action_key); 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (has_action_key) { 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_action_value, action_value); 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, GetProxyBypassInfo) { 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const struct { 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* headers; 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool expected_result; 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int64 expected_retry_delay; 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool expected_bypass_all; 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_mark_proxies_as_bad; 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } tests[] = { 120f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 121f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 122f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 123f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 124f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 126f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 127f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 128f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 129f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 130f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 132f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 134f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 135f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 136f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 137f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=86400\n" 138f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 139f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 140f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 141f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 143f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 144f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 145f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=-1\n" 147f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 148f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 149f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 150f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 152f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 153f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 154f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 155f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=xyz\n" 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 157f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 158f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 159f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 161f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 162f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 163f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 164f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass\n" 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: foo=abc, bypass=86400\n" 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=86400, bar=abc\n" 183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 184f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 185f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 189f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=3600\n" 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=86400\n" 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 194f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 195f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3600, 196f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=3600, bypass=86400\n" 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3600, 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=, bypass=86400\n" 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 216f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 218f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 219f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass\n" 220f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=86400\n" 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 223f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 224f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 227f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: block=, block=3600\n" 230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 232f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3600, 233f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 2346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 235f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 236f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: keep-alive\n" 238f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=86400, block=3600\n" 239f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 240f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 241f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3600, 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 2436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 244f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 245f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 246f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: proxy-bypass\n" 247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: block=, bypass=86400\n" 248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 249f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 250f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 86400, 251f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 253f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 255f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: proxy-bypass\n" 256f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: block=-1\n" 257f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 258f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 259f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 260f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 262f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 263f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 264f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "connection: proxy-bypass\n" 265f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: block=99999999999999999999\n" 266f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Content-Length: 999\n", 267f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 268f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0, 269f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 2706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 2726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 2736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 2746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once\n" 2756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 2766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 2776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 0, 2786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 2796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 2816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 2826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 2836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once=\n" 2846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 2856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 0, 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 2906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 2916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 2926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once=10\n" 2936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 2946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 0, 2966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 2986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 2996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 3006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 3016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once, bypass=86400, block=3600\n" 3026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 3036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3600, 3056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 3086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 3096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 3106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once\n" 3116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=86400, block=3600\n" 3126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 3136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3600, 3156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 3186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 3196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 3206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once, bypass=86400\n" 3216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 3226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 86400, 3246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 3256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 3276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 3286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 3296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once, block=3600\n" 3306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 3316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 3600, 3336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 3366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 3376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "connection: keep-alive\n" 3386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=, block=, block-once\n" 3396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Content-Length: 999\n", 3406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 0, 3426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 3436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string headers(tests[i].headers); 348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) HeadersToRaw(&headers); 349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DataReductionProxyInfo data_reduction_proxy_info; 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tests[i].expected_result, 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ParseHeadersAndSetProxyInfo(parsed.get(), &data_reduction_proxy_info)); 356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(tests[i].expected_retry_delay, 357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) data_reduction_proxy_info.bypass_duration.InSeconds()); 358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_EQ(tests[i].expected_bypass_all, 359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) data_reduction_proxy_info.bypass_all); 3606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_mark_proxies_as_bad, 3616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) data_reduction_proxy_info.mark_proxies_as_bad); 362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, ParseHeadersAndSetProxyInfo) { 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string headers = 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "HTTP/1.1 200 OK\n" 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "connection: keep-alive\n" 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chrome-Proxy: bypass=0\n" 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Content-Length: 999\n"; 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HeadersToRaw(&headers); 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new net::HttpResponseHeaders(headers)); 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DataReductionProxyInfo data_reduction_proxy_info; 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE( 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ParseHeadersAndSetProxyInfo(parsed.get(), &data_reduction_proxy_info)); 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_LE(60, data_reduction_proxy_info.bypass_duration.InSeconds()); 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_GE(5 * 60, data_reduction_proxy_info.bypass_duration.InSeconds()); 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(data_reduction_proxy_info.bypass_all); 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, HasDataReductionProxyViaHeader) { 384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const struct { 3856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 3866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_result; 3876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_has_intermediary; 3886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool ignore_intermediary; 389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } tests[] = { 390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 391f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Proxy\n", 392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 3936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 3946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 396f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 397f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1\n", 398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 3996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 401f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 402f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 403f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 404f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 407f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 408f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 409f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.0 Chrome-Compression-Proxy\n", 410f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 413f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 414f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 415f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Foo-Bar, 1.1 Chrome-Compression-Proxy\n", 416f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 419f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 420f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 421f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy, 1.1 Bar-Foo\n", 422f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 425f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 426f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 427f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 chrome-compression-proxy\n", 428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 4296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 431f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 432f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 433f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Foo-Bar\n" 434f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 435f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 4396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 4406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n" 4416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Foo-Bar\n", 4426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 445f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 446f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 447f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Proxy\n", 448f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 451f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 452f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 453f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome Compression Proxy\n", 454f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 457f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 458f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 459f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Foo-Bar, 1.1 Chrome Compression Proxy\n", 460f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 463f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 464f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 465f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome Compression Proxy, 1.1 Bar-Foo\n", 466f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 469f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 471f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 chrome compression proxy\n", 472f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false, 4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 475f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 476f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 477f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Foo-Bar\n" 478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome Compression Proxy\n", 479f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true, 4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 4836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 4846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Chrome Compression Proxy\n" 4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Foo-Bar\n", 4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 4906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 4916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Chrome Compression Proxy\n" 4926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Foo-Bar\n", 4936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 4946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 4956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 496f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 497f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 498f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 499f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string headers(tests[i].headers); 500f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) HeadersToRaw(&headers); 501f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 502f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 503f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool has_chrome_proxy_via_header, has_intermediary; 5056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (tests[i].ignore_intermediary) { 5066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) has_chrome_proxy_via_header = 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HasDataReductionProxyViaHeader(parsed.get(), NULL); 5086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 5096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) else { 5106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) has_chrome_proxy_via_header = 5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HasDataReductionProxyViaHeader(parsed.get(), &has_intermediary); 5126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 5136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_result, has_chrome_proxy_via_header); 5146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (has_chrome_proxy_via_header && !tests[i].ignore_intermediary) { 5156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_has_intermediary, has_intermediary); 5166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 517f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 518f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 519f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 520f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, GetDataReductionProxyBypassEventType) { 521f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const struct { 522f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const char* headers; 5236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DataReductionProxyBypassType expected_result; 524f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } tests[] = { 525f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 526f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Chrome-Proxy: bypass=0\n" 527f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MEDIUM, 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }, 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) { "HTTP/1.1 200 OK\n" 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Chrome-Proxy: bypass=1\n" 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_SHORT, 534f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 535f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=59\n" 537f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_SHORT, 539f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 540f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=60\n" 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Via: 1.1 Chrome-Compression-Proxy\n", 5436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MEDIUM, 544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }, 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "HTTP/1.1 200 OK\n" 546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=300\n" 547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Via: 1.1 Chrome-Compression-Proxy\n", 5486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MEDIUM, 549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }, 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "HTTP/1.1 200 OK\n" 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=301\n" 552f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_LONG, 5546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 5556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 5566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: block-once\n" 5576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_CURRENT, 559f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 560f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 500 Internal Server Error\n" 561f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_STATUS_500_HTTP_INTERNAL_SERVER_ERROR, 563f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 564f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 501 Not Implemented\n" 565f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 567f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 568f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 502 Bad Gateway\n" 569f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_STATUS_502_HTTP_BAD_GATEWAY, 571f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 572f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 503 Service Unavailable\n" 573f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_STATUS_503_HTTP_SERVICE_UNAVAILABLE, 575f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 576f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 504 Gateway Timeout\n" 577f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 579f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 580f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 505 HTTP Version Not Supported\n" 581f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 5826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 583f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 584f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 304 Not Modified\n", 5856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 587f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n", 5886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MISSING_VIA_HEADER_OTHER, 589f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 200 OK\n" 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=59\n", 5926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_SHORT, 593f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 594f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 502 Bad Gateway\n", 5956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_STATUS_502_HTTP_BAD_GATEWAY, 596f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 597f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 502 Bad Gateway\n" 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=59\n", 5996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_SHORT, 600f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 601f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 502 Bad Gateway\n" 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "Chrome-Proxy: bypass=59\n", 6036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_SHORT, 604f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 605f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 414 Request-URI Too Long\n", 6066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MISSING_VIA_HEADER_4XX, 607f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 608f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 414 Request-URI Too Long\n" 609f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 6106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 611f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 612f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 407 Proxy Authentication Required\n", 6136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MALFORMED_407, 614f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }, 615f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) { "HTTP/1.1 407 Proxy Authentication Required\n" 616f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Proxy-Authenticate: Basic\n" 617f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) "Via: 1.1 Chrome-Compression-Proxy\n", 6186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) BYPASS_EVENT_TYPE_MAX, 619f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 620f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) }; 621f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 622f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::string headers(tests[i].headers); 623f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) HeadersToRaw(&headers); 624f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 625f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 626f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DataReductionProxyInfo chrome_proxy_info; 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ( 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tests[i].expected_result, 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDataReductionProxyBypassType(parsed.get(), &chrome_proxy_info)); 630f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 631f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 6326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, 6346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDataReductionProxyActionFingerprintChromeProxy) { 6356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 6366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string label; 6376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 6386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_fingerprint_exist; 6396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_fingerprint; 6406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } tests[] = { 6416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint doesn't exist", 6426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=0\n", 6446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 6456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 6466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 6476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs once", 6486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=1, fcp=fp\n", 6506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 6516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fp", 6526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 6536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs twice", 6546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=2, fcp=fp1, fcp=fp2\n", 6566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 6576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fp1", 6586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 6596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 6606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 6616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(tests[i].headers); 6626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 6636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 6646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 6656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string fingerprint; 6676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool fingerprint_exist = GetDataReductionProxyActionFingerprintChromeProxy( 6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parsed.get(), &fingerprint); 6696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint_exist, fingerprint_exist) 6706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) << tests[i].label; 6716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (fingerprint_exist) 6736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint, fingerprint) << tests[i].label; 6746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 6756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 6766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 6776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, 6786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDataReductionProxyActionFingerprintVia) { 6796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 6806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string label; 6816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 6826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_fingerprint_exist; 6836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_fingerprint; 6846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } tests[] = { 6856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint doesn't exist", 6866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=0\n", 6886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 6896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 6906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 6916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs once", 6926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=1, fvia=fvia\n", 6946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 6956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fvia", 6966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 6976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs twice", 6986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 6996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=2, fvia=fvia1, fvia=fvia2\n", 7006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 7016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fvia1", 7026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 7046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 7056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(tests[i].headers); 7066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 7076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 7086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 7096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string fingerprint; 7116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool fingerprint_exist = 7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDataReductionProxyActionFingerprintVia(parsed.get(), &fingerprint); 7136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint_exist, fingerprint_exist) 7146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) << tests[i].label; 7156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (fingerprint_exist) 7176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint, fingerprint) << tests[i].label; 7186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 7196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 7206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, 7226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDataReductionProxyActionFingerprintOtherHeaders) { 7236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 7246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string label; 7256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 7266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_fingerprint_exist; 7276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_fingerprint; 7286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } tests[] = { 7296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint doesn't exist", 7306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=0\n", 7326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 7336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 7346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs once", 7366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=1, foh=foh\n", 7386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 7396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "foh", 7406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs twice", 7426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=2, foh=foh1, foh=foh2\n", 7446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 7456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "foh1", 7466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 7486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 7496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(tests[i].headers); 7506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 7516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 7526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 7536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string fingerprint; 7551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool fingerprint_exist = GetDataReductionProxyActionFingerprintOtherHeaders( 7561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parsed.get(), &fingerprint); 7576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint_exist, fingerprint_exist) 7586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) << tests[i].label; 7596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (fingerprint_exist) 7616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint, fingerprint) << tests[i].label; 7626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 7636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 7646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, 7666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDataReductionProxyActionFingerprintContentLength) { 7676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 7686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string label; 7696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 7706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool expected_fingerprint_exist; 7716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_fingerprint; 7726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } tests[] = { 7736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint doesn't exist", 7746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=0\n", 7766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) false, 7776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "", 7786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs once", 7806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=1, fcl=fcl\n", 7826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 7836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fcl", 7846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { "fingerprint occurs twice", 7866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 7876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: bypass=2, fcl=fcl1, fcl=fcl2\n", 7886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) true, 7896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fcl1", 7906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 7916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 7926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { 7936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(tests[i].headers); 7946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 7956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 7966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 7976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string fingerprint; 7996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool fingerprint_exist = 8001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDataReductionProxyActionFingerprintContentLength(parsed.get(), 8011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &fingerprint); 8026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint_exist, fingerprint_exist) 8036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) << tests[i].label; 8046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (fingerprint_exist) 8066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(tests[i].expected_fingerprint, fingerprint) << tests[i].label; 8076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 8086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 8096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(DataReductionProxyHeadersTest, 8116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) GetDataReductionProxyHeaderWithFingerprintRemoved) { 8126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const struct { 8136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string label; 8146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const char* headers; 8156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string expected_output_values_string; 8166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } test[] = { 8176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that there is no Chrome-Proxy header's fingerprint.", 8196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: 1,2,3,5\n", 8216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "1,2,3,5,", 8226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that there is Chrome-Proxy header's fingerprint.", 8256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: 1,2,3,fcp=4,5\n", 8276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "1,2,3,5,", 8286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that there is Chrome-Proxy header's fingerprint, and it" 8316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "occurs at the end.", 8326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: 1,2,3,fcp=4,", 8346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "1,2,3,", 8356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that there is Chrome-Proxy header's fingerprint, and it" 8386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "occurs at the beginning.", 8396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: fcp=1,2,3,", 8416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "2,3,", 8426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that value is longer than prefix.", 8456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: fcp=1,fcp!=1,fcp!=2,fcpfcp=3", 8476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fcp!=1,fcp!=2,fcpfcp=3,", 8486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { 8506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Checks the case that value is shorter than prefix but similar.", 8516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "HTTP/1.1 200 OK\n" 8526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "Chrome-Proxy: fcp=1,fcp,fcp=", 8536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) "fcp,fcp=,", 8546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }, 8556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }; 8566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test); ++i) { 8586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string headers(test[i].headers); 8596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) HeadersToRaw(&headers); 8606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<net::HttpResponseHeaders> parsed( 8616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) new net::HttpResponseHeaders(headers)); 8626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::vector<std::string> output_values; 8641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetDataReductionProxyHeaderWithFingerprintRemoved(parsed.get(), 8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &output_values); 8666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string output_values_string; 8686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) for (size_t j = 0; j < output_values.size(); ++j) 8696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) output_values_string += output_values[j] + ","; 8706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(test[i].expected_output_values_string, output_values_string) 8726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) << test[i].label; 8736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 8746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 8756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 876f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace data_reduction_proxy 877