| OLD | NEW |
| 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_requ
est_options.h" | 5 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_requ
est_options.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 #include "net/base/load_flags.h" | 26 #include "net/base/load_flags.h" |
| 27 #include "net/proxy/proxy_server.h" | 27 #include "net/proxy/proxy_server.h" |
| 28 #include "net/url_request/url_request.h" | 28 #include "net/url_request/url_request.h" |
| 29 #include "net/url_request/url_request_context.h" | 29 #include "net/url_request/url_request_context.h" |
| 30 #include "testing/gmock/include/gmock/gmock.h" | 30 #include "testing/gmock/include/gmock/gmock.h" |
| 31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
| 32 #include "url/gurl.h" | 32 #include "url/gurl.h" |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 const char kChromeProxyHeader[] = "chrome-proxy"; | 35 const char kChromeProxyHeader[] = "chrome-proxy"; |
| 36 const char kOtherProxy[] = "testproxy:17"; | |
| 37 | 36 |
| 38 const char kVersion[] = "0.1.2.3"; | 37 const char kVersion[] = "0.1.2.3"; |
| 39 const char kExpectedBuild[] = "2"; | 38 const char kExpectedBuild[] = "2"; |
| 40 const char kExpectedPatch[] = "3"; | 39 const char kExpectedPatch[] = "3"; |
| 41 const char kExpectedCredentials[] = "96bd72ec4a050ba60981743d41787768"; | 40 const char kExpectedCredentials[] = "96bd72ec4a050ba60981743d41787768"; |
| 42 const char kExpectedSession[] = "0-1633771873-1633771873-1633771873"; | 41 const char kExpectedSession[] = "0-1633771873-1633771873-1633771873"; |
| 43 | 42 |
| 44 const char kTestKey2[] = "test-key2"; | 43 const char kTestKey2[] = "test-key2"; |
| 45 const char kExpectedCredentials2[] = "c911fdb402f578787562cf7f00eda972"; | 44 const char kExpectedCredentials2[] = "c911fdb402f578787562cf7f00eda972"; |
| 46 const char kExpectedSession2[] = "0-1633771873-1633771873-1633771873"; | 45 const char kExpectedSession2[] = "0-1633771873-1633771873-1633771873"; |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 } | 147 } |
| 149 | 148 |
| 150 TestDataReductionProxyParams* params() { | 149 TestDataReductionProxyParams* params() { |
| 151 return test_context_->config()->test_params(); | 150 return test_context_->config()->test_params(); |
| 152 } | 151 } |
| 153 | 152 |
| 154 TestDataReductionProxyRequestOptions* request_options() { | 153 TestDataReductionProxyRequestOptions* request_options() { |
| 155 return request_options_.get(); | 154 return request_options_.get(); |
| 156 } | 155 } |
| 157 | 156 |
| 158 void VerifyExpectedHeader(const std::string& proxy_uri, | 157 void VerifyExpectedHeader(const std::string& expected_header) { |
| 159 const std::string& expected_header) { | |
| 160 test_context_->RunUntilIdle(); | 158 test_context_->RunUntilIdle(); |
| 161 net::HttpRequestHeaders headers; | 159 net::HttpRequestHeaders headers; |
| 162 request_options_->MaybeAddRequestHeader( | 160 request_options_->AddRequestHeader(&headers); |
| 163 proxy_uri.empty() ? net::ProxyServer() | |
| 164 : net::ProxyServer::FromURI( | |
| 165 proxy_uri, net::ProxyServer::SCHEME_HTTP), | |
| 166 &headers); | |
| 167 if (expected_header.empty()) { | 161 if (expected_header.empty()) { |
| 168 EXPECT_FALSE(headers.HasHeader(kChromeProxyHeader)); | 162 EXPECT_FALSE(headers.HasHeader(kChromeProxyHeader)); |
| 169 return; | 163 return; |
| 170 } | 164 } |
| 171 EXPECT_TRUE(headers.HasHeader(kChromeProxyHeader)); | 165 EXPECT_TRUE(headers.HasHeader(kChromeProxyHeader)); |
| 172 std::string header_value; | 166 std::string header_value; |
| 173 headers.GetHeader(kChromeProxyHeader, &header_value); | 167 headers.GetHeader(kChromeProxyHeader, &header_value); |
| 174 EXPECT_EQ(expected_header, header_value); | 168 EXPECT_EQ(expected_header, header_value); |
| 175 } | 169 } |
| 176 | 170 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 199 "d7c1c34ef6b90303b01c48a6c1db6419", std::string(), | 193 "d7c1c34ef6b90303b01c48a6c1db6419", std::string(), |
| 200 kClientStr, kExpectedBuild, kExpectedPatch, | 194 kClientStr, kExpectedBuild, kExpectedPatch, |
| 201 std::vector<std::string>(), &expected_header2); | 195 std::vector<std::string>(), &expected_header2); |
| 202 | 196 |
| 203 CreateRequestOptions(kVersion); | 197 CreateRequestOptions(kVersion); |
| 204 test_context_->RunUntilIdle(); | 198 test_context_->RunUntilIdle(); |
| 205 | 199 |
| 206 // Now set a key. | 200 // Now set a key. |
| 207 request_options()->SetKeyOnIO(kTestKey2); | 201 request_options()->SetKeyOnIO(kTestKey2); |
| 208 | 202 |
| 209 // Don't write headers if the proxy is invalid. | 203 // Write headers. |
| 210 VerifyExpectedHeader(std::string(), std::string()); | 204 VerifyExpectedHeader(expected_header); |
| 211 | |
| 212 // Don't write headers with a valid proxy, that's not a data reduction proxy. | |
| 213 VerifyExpectedHeader(kOtherProxy, std::string()); | |
| 214 | |
| 215 // Write headers with a valid data reduction proxy. | |
| 216 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | |
| 217 | 205 |
| 218 // Fast forward 24 hours. The header should be the same. | 206 // Fast forward 24 hours. The header should be the same. |
| 219 request_options()->set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60)); | 207 request_options()->set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60)); |
| 220 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 208 VerifyExpectedHeader(expected_header); |
| 221 | 209 |
| 222 // Fast forward one more second. The header should be new. | 210 // Fast forward one more second. The header should be new. |
| 223 request_options()->set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60 + 1)); | 211 request_options()->set_offset(base::TimeDelta::FromSeconds(24 * 60 * 60 + 1)); |
| 224 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header2); | 212 VerifyExpectedHeader(expected_header2); |
| 225 } | 213 } |
| 226 | 214 |
| 227 TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationIgnoresEmptyKey) { | 215 TEST_F(DataReductionProxyRequestOptionsTest, AuthorizationIgnoresEmptyKey) { |
| 228 std::string expected_header; | 216 std::string expected_header; |
| 229 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), | 217 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), |
| 230 kClientStr, kExpectedBuild, kExpectedPatch, | 218 kClientStr, kExpectedBuild, kExpectedPatch, |
| 231 std::vector<std::string>(), &expected_header); | 219 std::vector<std::string>(), &expected_header); |
| 232 CreateRequestOptions(kVersion); | 220 CreateRequestOptions(kVersion); |
| 233 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 221 VerifyExpectedHeader(expected_header); |
| 234 | 222 |
| 235 // Now set an empty key. The auth handler should ignore that, and the key | 223 // Now set an empty key. The auth handler should ignore that, and the key |
| 236 // remains |kTestKey|. | 224 // remains |kTestKey|. |
| 237 request_options()->SetKeyOnIO(std::string()); | 225 request_options()->SetKeyOnIO(std::string()); |
| 238 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 226 VerifyExpectedHeader(expected_header); |
| 239 } | 227 } |
| 240 | 228 |
| 241 TEST_F(DataReductionProxyRequestOptionsTest, SecureSession) { | 229 TEST_F(DataReductionProxyRequestOptionsTest, SecureSession) { |
| 242 std::string expected_header; | 230 std::string expected_header; |
| 243 SetHeaderExpectations(std::string(), std::string(), kSecureSession, | 231 SetHeaderExpectations(std::string(), std::string(), kSecureSession, |
| 244 kClientStr, kExpectedBuild, kExpectedPatch, | 232 kClientStr, kExpectedBuild, kExpectedPatch, |
| 245 std::vector<std::string>(), &expected_header); | 233 std::vector<std::string>(), &expected_header); |
| 246 | 234 |
| 247 CreateRequestOptions(kVersion); | 235 CreateRequestOptions(kVersion); |
| 248 request_options()->SetSecureSession(kSecureSession); | 236 request_options()->SetSecureSession(kSecureSession); |
| 249 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 237 VerifyExpectedHeader(expected_header); |
| 250 } | 238 } |
| 251 | 239 |
| 252 TEST_F(DataReductionProxyRequestOptionsTest, ParseExperiments) { | 240 TEST_F(DataReductionProxyRequestOptionsTest, ParseExperiments) { |
| 253 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 241 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| 254 data_reduction_proxy::switches::kDataReductionProxyExperiment, | 242 data_reduction_proxy::switches::kDataReductionProxyExperiment, |
| 255 "staging,\"foo,bar\""); | 243 "staging,\"foo,bar\""); |
| 256 std::vector<std::string> expected_experiments; | 244 std::vector<std::string> expected_experiments; |
| 257 expected_experiments.push_back("staging"); | 245 expected_experiments.push_back("staging"); |
| 258 expected_experiments.push_back("\"foo,bar\""); | 246 expected_experiments.push_back("\"foo,bar\""); |
| 259 std::string expected_header; | 247 std::string expected_header; |
| 260 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), | 248 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), |
| 261 kClientStr, kExpectedBuild, kExpectedPatch, | 249 kClientStr, kExpectedBuild, kExpectedPatch, |
| 262 expected_experiments, &expected_header); | 250 expected_experiments, &expected_header); |
| 263 | 251 |
| 264 CreateRequestOptions(kVersion); | 252 CreateRequestOptions(kVersion); |
| 265 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 253 VerifyExpectedHeader(expected_header); |
| 266 } | 254 } |
| 267 | 255 |
| 268 TEST_F(DataReductionProxyRequestOptionsTest, ParseExperimentsFromFieldTrial) { | 256 TEST_F(DataReductionProxyRequestOptionsTest, ParseExperimentsFromFieldTrial) { |
| 269 const char kFieldTrialGroupFoo[] = "enabled_foo"; | 257 const char kFieldTrialGroupFoo[] = "enabled_foo"; |
| 270 const char kFieldTrialGroupBar[] = "enabled_bar"; | 258 const char kFieldTrialGroupBar[] = "enabled_bar"; |
| 271 const char kExperimentFoo[] = "foo"; | 259 const char kExperimentFoo[] = "foo"; |
| 272 const char kExperimentBar[] = "bar"; | 260 const char kExperimentBar[] = "bar"; |
| 273 const struct { | 261 const struct { |
| 274 std::string field_trial_group; | 262 std::string field_trial_group; |
| 275 std::string command_line_experiment; | 263 std::string command_line_experiment; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 params::GetServerExperimentsFieldTrialName(), test.field_trial_group); | 299 params::GetServerExperimentsFieldTrialName(), test.field_trial_group); |
| 312 | 300 |
| 313 if (!test.expected_experiment.empty()) | 301 if (!test.expected_experiment.empty()) |
| 314 expected_experiments.push_back(test.expected_experiment); | 302 expected_experiments.push_back(test.expected_experiment); |
| 315 | 303 |
| 316 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), | 304 SetHeaderExpectations(kExpectedSession, kExpectedCredentials, std::string(), |
| 317 kClientStr, kExpectedBuild, kExpectedPatch, | 305 kClientStr, kExpectedBuild, kExpectedPatch, |
| 318 expected_experiments, &expected_header); | 306 expected_experiments, &expected_header); |
| 319 | 307 |
| 320 CreateRequestOptions(kVersion); | 308 CreateRequestOptions(kVersion); |
| 321 VerifyExpectedHeader(params()->DefaultOrigin(), expected_header); | 309 VerifyExpectedHeader(expected_header); |
| 322 } | 310 } |
| 323 } | 311 } |
| 324 | 312 |
| 325 TEST_F(DataReductionProxyRequestOptionsTest, GetSessionKeyFromRequestHeaders) { | 313 TEST_F(DataReductionProxyRequestOptionsTest, GetSessionKeyFromRequestHeaders) { |
| 326 const struct { | 314 const struct { |
| 327 std::string chrome_proxy_header_key; | 315 std::string chrome_proxy_header_key; |
| 328 std::string chrome_proxy_header_value; | 316 std::string chrome_proxy_header_value; |
| 329 std::string expected_session_key; | 317 std::string expected_session_key; |
| 330 } tests[] = { | 318 } tests[] = { |
| 331 {"chrome-proxy", "something=something_else, s=123, key=value", "123"}, | 319 {"chrome-proxy", "something=something_else, s=123, key=value", "123"}, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 352 | 340 |
| 353 std::string session_key = | 341 std::string session_key = |
| 354 request_options()->GetSessionKeyFromRequestHeaders(request_headers); | 342 request_options()->GetSessionKeyFromRequestHeaders(request_headers); |
| 355 EXPECT_EQ(test.expected_session_key, session_key) | 343 EXPECT_EQ(test.expected_session_key, session_key) |
| 356 << test.chrome_proxy_header_key << ":" | 344 << test.chrome_proxy_header_key << ":" |
| 357 << test.chrome_proxy_header_value; | 345 << test.chrome_proxy_header_value; |
| 358 } | 346 } |
| 359 } | 347 } |
| 360 | 348 |
| 361 } // namespace data_reduction_proxy | 349 } // namespace data_reduction_proxy |
| OLD | NEW |