OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/content/browser/content_lofi_decider.h " | 5 #include "components/data_reduction_proxy/content/browser/content_lofi_decider.h " |
6 | 6 |
megjablon
2016/04/12 21:55:35
#include <memory>
dcheng
2016/04/12 22:38:34
Done.
| |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <string> | 8 #include <string> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
14 #include "base/metrics/field_trial.h" | 14 #include "base/metrics/field_trial.h" |
15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
16 #include "build/build_config.h" | 16 #include "build/build_config.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
68 context_.Init(); | 68 context_.Init(); |
69 | 69 |
70 test_context_ = DataReductionProxyTestContext::Builder() | 70 test_context_ = DataReductionProxyTestContext::Builder() |
71 .WithClient(kClient) | 71 .WithClient(kClient) |
72 .WithMockClientSocketFactory(&mock_socket_factory_) | 72 .WithMockClientSocketFactory(&mock_socket_factory_) |
73 .WithURLRequestContext(&context_) | 73 .WithURLRequestContext(&context_) |
74 .Build(); | 74 .Build(); |
75 | 75 |
76 data_reduction_proxy_network_delegate_.reset( | 76 data_reduction_proxy_network_delegate_.reset( |
77 new DataReductionProxyNetworkDelegate( | 77 new DataReductionProxyNetworkDelegate( |
78 scoped_ptr<net::NetworkDelegate>(new net::NetworkDelegateImpl()), | 78 std::unique_ptr<net::NetworkDelegate>( |
79 new net::NetworkDelegateImpl()), | |
79 test_context_->config(), | 80 test_context_->config(), |
80 test_context_->io_data()->request_options(), | 81 test_context_->io_data()->request_options(), |
81 test_context_->configurator())); | 82 test_context_->configurator())); |
82 | 83 |
83 data_reduction_proxy_network_delegate_->InitIODataAndUMA( | 84 data_reduction_proxy_network_delegate_->InitIODataAndUMA( |
84 test_context_->io_data(), test_context_->io_data()->bypass_stats()); | 85 test_context_->io_data(), test_context_->io_data()->bypass_stats()); |
85 | 86 |
86 context_.set_network_delegate(data_reduction_proxy_network_delegate_.get()); | 87 context_.set_network_delegate(data_reduction_proxy_network_delegate_.get()); |
87 | 88 |
88 scoped_ptr<data_reduction_proxy::ContentLoFiDecider> | 89 std::unique_ptr<data_reduction_proxy::ContentLoFiDecider> |
89 data_reduction_proxy_lofi_decider( | 90 data_reduction_proxy_lofi_decider( |
90 new data_reduction_proxy::ContentLoFiDecider()); | 91 new data_reduction_proxy::ContentLoFiDecider()); |
91 test_context_->io_data()->set_lofi_decider( | 92 test_context_->io_data()->set_lofi_decider( |
92 std::move(data_reduction_proxy_lofi_decider)); | 93 std::move(data_reduction_proxy_lofi_decider)); |
93 } | 94 } |
94 | 95 |
95 scoped_ptr<net::URLRequest> CreateRequest(bool is_using_lofi) { | 96 std::unique_ptr<net::URLRequest> CreateRequest(bool is_using_lofi) { |
96 scoped_ptr<net::URLRequest> request = context_.CreateRequest( | 97 std::unique_ptr<net::URLRequest> request = context_.CreateRequest( |
97 GURL("http://www.google.com/"), net::IDLE, &delegate_); | 98 GURL("http://www.google.com/"), net::IDLE, &delegate_); |
98 | 99 |
99 content::ResourceRequestInfo::AllocateForTesting( | 100 content::ResourceRequestInfo::AllocateForTesting( |
100 request.get(), content::RESOURCE_TYPE_SUB_FRAME, NULL, -1, -1, -1, | 101 request.get(), content::RESOURCE_TYPE_SUB_FRAME, NULL, -1, -1, -1, |
101 false, // is_main_frame | 102 false, // is_main_frame |
102 false, // parent_is_main_frame | 103 false, // parent_is_main_frame |
103 false, // allow_download | 104 false, // allow_download |
104 false, // is_async | 105 false, // is_async |
105 is_using_lofi); | 106 is_using_lofi); |
106 | 107 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
155 header_value.find( | 156 header_value.find( |
156 chrome_proxy_lo_fi_ignore_preview_blacklist_directive()) != | 157 chrome_proxy_lo_fi_ignore_preview_blacklist_directive()) != |
157 std::string::npos); | 158 std::string::npos); |
158 } | 159 } |
159 | 160 |
160 protected: | 161 protected: |
161 base::MessageLoopForIO message_loop_; | 162 base::MessageLoopForIO message_loop_; |
162 net::MockClientSocketFactory mock_socket_factory_; | 163 net::MockClientSocketFactory mock_socket_factory_; |
163 net::TestURLRequestContext context_; | 164 net::TestURLRequestContext context_; |
164 net::TestDelegate delegate_; | 165 net::TestDelegate delegate_; |
165 scoped_ptr<DataReductionProxyTestContext> test_context_; | 166 std::unique_ptr<DataReductionProxyTestContext> test_context_; |
166 scoped_ptr<DataReductionProxyNetworkDelegate> | 167 std::unique_ptr<DataReductionProxyNetworkDelegate> |
167 data_reduction_proxy_network_delegate_; | 168 data_reduction_proxy_network_delegate_; |
168 }; | 169 }; |
169 | 170 |
170 TEST_F(ContentLoFiDeciderTest, LoFiFlags) { | 171 TEST_F(ContentLoFiDeciderTest, LoFiFlags) { |
171 // Enable Lo-Fi. | 172 // Enable Lo-Fi. |
172 const struct { | 173 const struct { |
173 bool is_using_lofi; | 174 bool is_using_lofi; |
174 bool is_using_previews; | 175 bool is_using_previews; |
175 } tests[] = { | 176 } tests[] = { |
176 {false, false}, {true, false}, {false, true}, {true, true}, | 177 {false, false}, {true, false}, {false, true}, {true, true}, |
177 }; | 178 }; |
178 | 179 |
179 for (size_t i = 0; i < arraysize(tests); ++i) { | 180 for (size_t i = 0; i < arraysize(tests); ++i) { |
180 scoped_ptr<net::URLRequest> request = CreateRequest(tests[i].is_using_lofi); | 181 std::unique_ptr<net::URLRequest> request = |
182 CreateRequest(tests[i].is_using_lofi); | |
181 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 183 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
182 command_line->InitFromArgv(command_line->argv()); | 184 command_line->InitFromArgv(command_line->argv()); |
183 if (tests[i].is_using_previews) { | 185 if (tests[i].is_using_previews) { |
184 command_line->AppendSwitch( | 186 command_line->AppendSwitch( |
185 switches::kEnableDataReductionProxyLoFiPreview); | 187 switches::kEnableDataReductionProxyLoFiPreview); |
186 } | 188 } |
187 | 189 |
188 // No flags or field trials. The Lo-Fi header should not be added. | 190 // No flags or field trials. The Lo-Fi header should not be added. |
189 net::HttpRequestHeaders headers; | 191 net::HttpRequestHeaders headers; |
190 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 192 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
248 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 250 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
249 "Enabled"); | 251 "Enabled"); |
250 // Enable Lo-Fi. | 252 // Enable Lo-Fi. |
251 const struct { | 253 const struct { |
252 bool is_using_lofi; | 254 bool is_using_lofi; |
253 } tests[] = { | 255 } tests[] = { |
254 {false}, {true}, | 256 {false}, {true}, |
255 }; | 257 }; |
256 | 258 |
257 for (size_t i = 0; i < arraysize(tests); ++i) { | 259 for (size_t i = 0; i < arraysize(tests); ++i) { |
258 scoped_ptr<net::URLRequest> request = CreateRequest(tests[i].is_using_lofi); | 260 std::unique_ptr<net::URLRequest> request = |
261 CreateRequest(tests[i].is_using_lofi); | |
259 net::HttpRequestHeaders headers; | 262 net::HttpRequestHeaders headers; |
260 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 263 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
261 VerifyLoFiHeader(tests[i].is_using_lofi, headers); | 264 VerifyLoFiHeader(tests[i].is_using_lofi, headers); |
262 VerifyLoFiPreviewHeader(false, headers); | 265 VerifyLoFiPreviewHeader(false, headers); |
263 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); | 266 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); |
264 } | 267 } |
265 } | 268 } |
266 | 269 |
267 TEST_F(ContentLoFiDeciderTest, LoFiControlFieldTrial) { | 270 TEST_F(ContentLoFiDeciderTest, LoFiControlFieldTrial) { |
268 base::FieldTrialList field_trial_list(nullptr); | 271 base::FieldTrialList field_trial_list(nullptr); |
269 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 272 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
270 "Control"); | 273 "Control"); |
271 // Enable Lo-Fi. | 274 // Enable Lo-Fi. |
272 const struct { | 275 const struct { |
273 bool is_using_lofi; | 276 bool is_using_lofi; |
274 } tests[] = { | 277 } tests[] = { |
275 {false}, {true}, | 278 {false}, {true}, |
276 }; | 279 }; |
277 | 280 |
278 for (size_t i = 0; i < arraysize(tests); ++i) { | 281 for (size_t i = 0; i < arraysize(tests); ++i) { |
279 scoped_ptr<net::URLRequest> request = CreateRequest(tests[i].is_using_lofi); | 282 std::unique_ptr<net::URLRequest> request = |
283 CreateRequest(tests[i].is_using_lofi); | |
280 net::HttpRequestHeaders headers; | 284 net::HttpRequestHeaders headers; |
281 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 285 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
282 VerifyLoFiHeader(false, headers); | 286 VerifyLoFiHeader(false, headers); |
283 VerifyLoFiPreviewHeader(false, headers); | 287 VerifyLoFiPreviewHeader(false, headers); |
284 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); | 288 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); |
285 } | 289 } |
286 } | 290 } |
287 | 291 |
288 TEST_F(ContentLoFiDeciderTest, LoFiPreviewFieldTrial) { | 292 TEST_F(ContentLoFiDeciderTest, LoFiPreviewFieldTrial) { |
289 base::FieldTrialList field_trial_list(nullptr); | 293 base::FieldTrialList field_trial_list(nullptr); |
290 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 294 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
291 "Enabled_Preview"); | 295 "Enabled_Preview"); |
292 // Enable Lo-Fi. | 296 // Enable Lo-Fi. |
293 const struct { | 297 const struct { |
294 bool is_using_lofi; | 298 bool is_using_lofi; |
295 bool is_main_frame; | 299 bool is_main_frame; |
296 } tests[] = { | 300 } tests[] = { |
297 {false, false}, {true, false}, {false, true}, {true, true}, | 301 {false, false}, {true, false}, {false, true}, {true, true}, |
298 }; | 302 }; |
299 | 303 |
300 for (size_t i = 0; i < arraysize(tests); ++i) { | 304 for (size_t i = 0; i < arraysize(tests); ++i) { |
301 scoped_ptr<net::URLRequest> request = CreateRequest(tests[i].is_using_lofi); | 305 std::unique_ptr<net::URLRequest> request = |
306 CreateRequest(tests[i].is_using_lofi); | |
302 if (tests[i].is_main_frame) | 307 if (tests[i].is_main_frame) |
303 request->SetLoadFlags(request->load_flags() | net::LOAD_MAIN_FRAME); | 308 request->SetLoadFlags(request->load_flags() | net::LOAD_MAIN_FRAME); |
304 net::HttpRequestHeaders headers; | 309 net::HttpRequestHeaders headers; |
305 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 310 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
306 VerifyLoFiHeader(false, headers); | 311 VerifyLoFiHeader(false, headers); |
307 VerifyLoFiPreviewHeader(tests[i].is_using_lofi && tests[i].is_main_frame, | 312 VerifyLoFiPreviewHeader(tests[i].is_using_lofi && tests[i].is_main_frame, |
308 headers); | 313 headers); |
309 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); | 314 VerifyLoFiIgnorePreviewBlacklistHeader(false, headers); |
310 } | 315 } |
311 } | 316 } |
(...skipping 29 matching lines...) Expand all Loading... | |
341 } | 346 } |
342 | 347 |
343 if (tests[i].auto_lofi_control_group) { | 348 if (tests[i].auto_lofi_control_group) { |
344 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 349 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
345 "Control"); | 350 "Control"); |
346 } | 351 } |
347 | 352 |
348 test_context_->config()->SetNetworkProhibitivelySlow( | 353 test_context_->config()->SetNetworkProhibitivelySlow( |
349 tests[i].network_prohibitively_slow); | 354 tests[i].network_prohibitively_slow); |
350 | 355 |
351 scoped_ptr<net::URLRequest> request = | 356 std::unique_ptr<net::URLRequest> request = |
352 CreateRequest(tests[i].network_prohibitively_slow); | 357 CreateRequest(tests[i].network_prohibitively_slow); |
353 net::HttpRequestHeaders headers; | 358 net::HttpRequestHeaders headers; |
354 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 359 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
355 | 360 |
356 VerifyLoFiHeader(expect_lofi_header, headers); | 361 VerifyLoFiHeader(expect_lofi_header, headers); |
357 } | 362 } |
358 } | 363 } |
359 | 364 |
360 TEST_F(ContentLoFiDeciderTest, SlowConnectionsFlag) { | 365 TEST_F(ContentLoFiDeciderTest, SlowConnectionsFlag) { |
361 const struct { | 366 const struct { |
(...skipping 29 matching lines...) Expand all Loading... | |
391 | 396 |
392 base::FieldTrialList field_trial_list(nullptr); | 397 base::FieldTrialList field_trial_list(nullptr); |
393 if (tests[i].auto_lofi_enabled_group) { | 398 if (tests[i].auto_lofi_enabled_group) { |
394 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 399 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
395 "Enabled"); | 400 "Enabled"); |
396 } | 401 } |
397 | 402 |
398 test_context_->config()->SetNetworkProhibitivelySlow( | 403 test_context_->config()->SetNetworkProhibitivelySlow( |
399 tests[i].network_prohibitively_slow); | 404 tests[i].network_prohibitively_slow); |
400 | 405 |
401 scoped_ptr<net::URLRequest> request = | 406 std::unique_ptr<net::URLRequest> request = |
402 CreateRequest(tests[i].network_prohibitively_slow); | 407 CreateRequest(tests[i].network_prohibitively_slow); |
403 net::HttpRequestHeaders headers; | 408 net::HttpRequestHeaders headers; |
404 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); | 409 NotifyBeforeSendProxyHeaders(&headers, request.get(), true); |
405 | 410 |
406 VerifyLoFiHeader(expect_lofi_header, headers); | 411 VerifyLoFiHeader(expect_lofi_header, headers); |
407 } | 412 } |
408 } | 413 } |
409 | 414 |
410 TEST_F(ContentLoFiDeciderTest, ProxyIsNotDataReductionProxy) { | 415 TEST_F(ContentLoFiDeciderTest, ProxyIsNotDataReductionProxy) { |
411 base::FieldTrialList field_trial_list(nullptr); | 416 base::FieldTrialList field_trial_list(nullptr); |
412 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 417 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
413 "Enabled"); | 418 "Enabled"); |
414 // Enable Lo-Fi. | 419 // Enable Lo-Fi. |
415 const struct { | 420 const struct { |
416 bool is_using_lofi; | 421 bool is_using_lofi; |
417 } tests[] = { | 422 } tests[] = { |
418 {false}, {true}, | 423 {false}, {true}, |
419 }; | 424 }; |
420 | 425 |
421 for (size_t i = 0; i < arraysize(tests); ++i) { | 426 for (size_t i = 0; i < arraysize(tests); ++i) { |
422 scoped_ptr<net::URLRequest> request = CreateRequest(tests[i].is_using_lofi); | 427 std::unique_ptr<net::URLRequest> request = |
428 CreateRequest(tests[i].is_using_lofi); | |
423 net::HttpRequestHeaders headers; | 429 net::HttpRequestHeaders headers; |
424 NotifyBeforeSendProxyHeaders(&headers, request.get(), false); | 430 NotifyBeforeSendProxyHeaders(&headers, request.get(), false); |
425 std::string header_value; | 431 std::string header_value; |
426 headers.GetHeader(chrome_proxy_header(), &header_value); | 432 headers.GetHeader(chrome_proxy_header(), &header_value); |
427 EXPECT_EQ(std::string::npos, | 433 EXPECT_EQ(std::string::npos, |
428 header_value.find(chrome_proxy_lo_fi_directive())); | 434 header_value.find(chrome_proxy_lo_fi_directive())); |
429 } | 435 } |
430 } | 436 } |
431 | 437 |
432 } // namespace data_reduction_roxy | 438 } // namespace data_reduction_roxy |
OLD | NEW |