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 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
11 | 11 |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
15 #include "base/metrics/field_trial.h" | 15 #include "base/metrics/field_trial.h" |
16 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
| 17 #include "base/strings/stringprintf.h" |
17 #include "build/build_config.h" | 18 #include "build/build_config.h" |
18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig_test_utils.h" | 19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_conf
ig_test_utils.h" |
19 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data
.h" | 20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data
.h" |
20 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw
ork_delegate.h" | 21 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_netw
ork_delegate.h" |
21 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test
_utils.h" | 22 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test
_utils.h" |
22 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade
rs.h" | 23 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_heade
rs.h" |
23 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s.h" | 24 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s.h" |
24 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s_test_utils.h" | 25 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param
s_test_utils.h" |
25 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switc
hes.h" | 26 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switc
hes.h" |
26 #include "content/public/browser/resource_request_info.h" | 27 #include "content/public/browser/resource_request_info.h" |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 const net::HttpRequestHeaders& headers) { | 161 const net::HttpRequestHeaders& headers) { |
161 if (expected_lite_page_used) | 162 if (expected_lite_page_used) |
162 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); | 163 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); |
163 std::string header_value; | 164 std::string header_value; |
164 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); | 165 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); |
165 EXPECT_EQ(expected_lite_page_used, | 166 EXPECT_EQ(expected_lite_page_used, |
166 header_value.find(lite_page_directive()) != std::string::npos); | 167 header_value.find(lite_page_directive()) != std::string::npos); |
167 } | 168 } |
168 | 169 |
169 static void VerifyLoFiHeader(bool expected_lofi_used, | 170 static void VerifyLoFiHeader(bool expected_lofi_used, |
| 171 bool expected_if_heavy, |
170 const net::HttpRequestHeaders& headers) { | 172 const net::HttpRequestHeaders& headers) { |
171 if (expected_lofi_used) | 173 if (expected_lofi_used) |
172 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); | 174 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); |
173 std::string header_value; | 175 std::string header_value; |
174 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); | 176 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); |
175 EXPECT_EQ(expected_lofi_used, | 177 if (expected_if_heavy) { |
176 header_value.find(empty_image_directive()) != std::string::npos); | 178 std::string empty_image_if_heavy = base::StringPrintf( |
| 179 "%s;%s", empty_image_directive(), if_heavy_qualifier()); |
| 180 EXPECT_EQ(expected_lofi_used, empty_image_if_heavy == header_value); |
| 181 } else { |
| 182 EXPECT_EQ(expected_lofi_used, header_value == empty_image_directive()); |
| 183 } |
177 } | 184 } |
178 | 185 |
179 static void VerifyLoFiPreviewHeader(bool expected_lofi_preview_used, | 186 static void VerifyLitePageHeader(bool expected_lofi_preview_used, |
180 const net::HttpRequestHeaders& headers) { | 187 bool expected_if_heavy, |
| 188 const net::HttpRequestHeaders& headers) { |
181 if (expected_lofi_preview_used) | 189 if (expected_lofi_preview_used) |
182 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); | 190 EXPECT_TRUE(headers.HasHeader(chrome_proxy_accept_transform_header())); |
183 std::string header_value; | 191 std::string header_value; |
184 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); | 192 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); |
185 EXPECT_EQ(expected_lofi_preview_used, | 193 if (expected_if_heavy) { |
186 header_value.find(lite_page_directive()) != std::string::npos); | 194 std::string lite_page_if_heavy = base::StringPrintf( |
| 195 "%s;%s", lite_page_directive(), if_heavy_qualifier()); |
| 196 EXPECT_EQ(expected_lofi_preview_used, lite_page_if_heavy == header_value); |
| 197 } else { |
| 198 EXPECT_EQ(expected_lofi_preview_used, |
| 199 header_value == lite_page_directive()); |
| 200 } |
187 } | 201 } |
188 | 202 |
189 static void VerifyVideoHeader(bool expected_compressed_video_used, | 203 static void VerifyVideoHeader(bool expected_compressed_video_used, |
190 const net::HttpRequestHeaders& headers) { | 204 const net::HttpRequestHeaders& headers) { |
191 EXPECT_EQ(expected_compressed_video_used, | 205 EXPECT_EQ(expected_compressed_video_used, |
192 headers.HasHeader(chrome_proxy_accept_transform_header())); | 206 headers.HasHeader(chrome_proxy_accept_transform_header())); |
193 std::string header_value; | 207 std::string header_value; |
194 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); | 208 headers.GetHeader(chrome_proxy_accept_transform_header(), &header_value); |
195 EXPECT_EQ( | 209 EXPECT_EQ( |
196 expected_compressed_video_used, | 210 expected_compressed_video_used, |
197 header_value.find(compressed_video_directive()) != std::string::npos); | 211 header_value.find(compressed_video_directive()) != std::string::npos); |
198 } | 212 } |
199 | 213 |
200 static void VerifyLitePageIgnoreBlacklistHeader( | 214 static void VerifyLitePageIgnoreBlacklistHeader( |
201 bool expected_lite_page_used, | 215 bool expected_blacklist_directive_added, |
202 const net::HttpRequestHeaders& headers) { | 216 const net::HttpRequestHeaders& headers) { |
203 EXPECT_TRUE(headers.HasHeader(chrome_proxy_header())); | 217 EXPECT_TRUE(headers.HasHeader(chrome_proxy_header())); |
204 std::string header_value; | 218 std::string header_value; |
205 headers.GetHeader(chrome_proxy_header(), &header_value); | 219 headers.GetHeader(chrome_proxy_header(), &header_value); |
206 EXPECT_EQ(expected_lite_page_used, | 220 EXPECT_EQ(expected_blacklist_directive_added, |
207 header_value.find( | 221 header_value.find( |
208 chrome_proxy_lite_page_ignore_blacklist_directive()) != | 222 chrome_proxy_lite_page_ignore_blacklist_directive()) != |
209 std::string::npos); | 223 std::string::npos); |
210 } | 224 } |
211 | 225 |
212 protected: | 226 protected: |
213 base::MessageLoopForIO message_loop_; | 227 base::MessageLoopForIO message_loop_; |
214 net::MockClientSocketFactory mock_socket_factory_; | 228 net::MockClientSocketFactory mock_socket_factory_; |
215 net::TestURLRequestContext context_; | 229 net::TestURLRequestContext context_; |
216 net::TestDelegate delegate_; | 230 net::TestDelegate delegate_; |
(...skipping 19 matching lines...) Expand all Loading... |
236 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); | 250 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); |
237 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 251 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
238 command_line->InitFromArgv(command_line->argv()); | 252 command_line->InitFromArgv(command_line->argv()); |
239 if (tests[i].is_using_lite_page) { | 253 if (tests[i].is_using_lite_page) { |
240 command_line->AppendSwitch(switches::kEnableDataReductionProxyLitePage); | 254 command_line->AppendSwitch(switches::kEnableDataReductionProxyLitePage); |
241 } | 255 } |
242 | 256 |
243 // No flags or field trials. The Lo-Fi header should not be added. | 257 // No flags or field trials. The Lo-Fi header should not be added. |
244 net::HttpRequestHeaders headers; | 258 net::HttpRequestHeaders headers; |
245 NotifyBeforeSendHeaders(&headers, request.get(), true); | 259 NotifyBeforeSendHeaders(&headers, request.get(), true); |
246 VerifyLoFiHeader(false, headers); | 260 VerifyLoFiHeader(false, false, headers); |
247 VerifyLitePageHeader(false, headers); | 261 VerifyLitePageHeader(false, false, headers); |
248 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 262 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
249 | 263 |
250 // The Lo-Fi flag is "always-on", Lo-Fi is being used, and it's a main frame | 264 // The Lo-Fi flag is "always-on", Lo-Fi is being used, and it's a main frame |
251 // request. Lo-Fi or lite page header should be added. | 265 // request. Lo-Fi or lite page header should be added. |
252 command_line->AppendSwitchASCII( | 266 command_line->AppendSwitchASCII( |
253 switches::kDataReductionProxyLoFi, | 267 switches::kDataReductionProxyLoFi, |
254 switches::kDataReductionProxyLoFiValueAlwaysOn); | 268 switches::kDataReductionProxyLoFiValueAlwaysOn); |
255 headers.Clear(); | 269 headers.Clear(); |
256 NotifyBeforeSendHeaders(&headers, request.get(), true); | 270 NotifyBeforeSendHeaders(&headers, request.get(), true); |
257 VerifyLoFiHeader(tests[i].is_using_lofi && !tests[i].is_using_lite_page && | 271 VerifyLoFiHeader(!tests[i].is_using_lite_page && !tests[i].is_main_frame, |
258 !tests[i].is_main_frame, | 272 !tests[i].is_using_lofi, headers); |
259 headers); | 273 VerifyLitePageHeader(tests[i].is_using_lite_page && tests[i].is_main_frame, |
260 VerifyLitePageHeader(tests[i].is_using_lofi && | 274 !tests[i].is_using_lofi, headers); |
261 tests[i].is_using_lite_page && | 275 VerifyLitePageIgnoreBlacklistHeader( |
262 tests[i].is_main_frame, | 276 tests[i].is_using_lite_page && tests[i].is_main_frame, headers); |
263 headers); | |
264 VerifyLitePageIgnoreBlacklistHeader(tests[i].is_using_lofi && | |
265 tests[i].is_using_lite_page && | |
266 tests[i].is_main_frame, | |
267 headers); | |
268 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); | 277 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); |
269 // |lofi_requested| should be set to false when Lo-Fi is enabled using | 278 // |lofi_requested| should be set to false when Lo-Fi is enabled using |
270 // flags. | 279 // flags. |
271 EXPECT_FALSE(data->lofi_requested()); | 280 EXPECT_FALSE(data->lofi_requested()); |
272 | 281 |
273 // The Lo-Fi flag is "always-on" and Lo-Fi is being used. Lo-Fi header | 282 // The Lo-Fi flag is "always-on" and Lo-Fi is being used. Lo-Fi header |
274 // should be added. | 283 // should be added. |
275 AllocateRequestInfoForTesting(request.get(), | 284 AllocateRequestInfoForTesting(request.get(), |
276 content::RESOURCE_TYPE_SUB_FRAME, | 285 content::RESOURCE_TYPE_SUB_FRAME, |
277 tests[i].is_using_lofi); | 286 tests[i].is_using_lofi); |
278 headers.Clear(); | 287 headers.Clear(); |
279 NotifyBeforeSendHeaders(&headers, request.get(), true); | 288 NotifyBeforeSendHeaders(&headers, request.get(), true); |
280 VerifyLoFiHeader(tests[i].is_using_lofi && !tests[i].is_using_lite_page, | 289 VerifyLoFiHeader(!tests[i].is_using_lite_page, !tests[i].is_using_lofi, |
281 headers); | 290 headers); |
282 VerifyLitePageHeader(false, headers); | 291 VerifyLitePageHeader(false, false, headers); |
283 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 292 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
284 | 293 |
285 // The Lo-Fi flag is "cellular-only" and Lo-Fi is being used. Lo-Fi header | 294 // The Lo-Fi flag is "cellular-only" and Lo-Fi is being used. Lo-Fi header |
286 // should be added. | 295 // should be added. |
287 command_line->AppendSwitchASCII( | 296 command_line->AppendSwitchASCII( |
288 switches::kDataReductionProxyLoFi, | 297 switches::kDataReductionProxyLoFi, |
289 switches::kDataReductionProxyLoFiValueCellularOnly); | 298 switches::kDataReductionProxyLoFiValueCellularOnly); |
290 headers.Clear(); | 299 headers.Clear(); |
291 NotifyBeforeSendHeaders(&headers, request.get(), true); | 300 NotifyBeforeSendHeaders(&headers, request.get(), true); |
292 VerifyLoFiHeader(tests[i].is_using_lofi && !tests[i].is_using_lite_page, | 301 VerifyLoFiHeader(!tests[i].is_using_lite_page, !tests[i].is_using_lofi, |
293 headers); | 302 headers); |
294 VerifyLitePageHeader(false, headers); | 303 VerifyLitePageHeader(false, false, headers); |
295 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 304 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
296 data = DataReductionProxyData::GetData(*request); | 305 data = DataReductionProxyData::GetData(*request); |
297 // |lofi_requested| should be set to false when Lo-Fi is enabled using | 306 // |lofi_requested| should be set to false when Lo-Fi is enabled using |
298 // flags. | 307 // flags. |
299 EXPECT_FALSE(data->lofi_requested()); | 308 EXPECT_FALSE(data->lofi_requested()); |
300 | 309 |
301 // The Lo-Fi flag is "slow-connections-only" and Lo-Fi is being used. Lo-Fi | 310 // The Lo-Fi flag is "slow-connections-only" and Lo-Fi is being used. Lo-Fi |
302 // header should be added. | 311 // header should be added. |
303 command_line->AppendSwitchASCII( | 312 command_line->AppendSwitchASCII( |
304 switches::kDataReductionProxyLoFi, | 313 switches::kDataReductionProxyLoFi, |
305 switches::kDataReductionProxyLoFiValueSlowConnectionsOnly); | 314 switches::kDataReductionProxyLoFiValueSlowConnectionsOnly); |
306 headers.Clear(); | 315 headers.Clear(); |
307 NotifyBeforeSendHeaders(&headers, request.get(), true); | 316 NotifyBeforeSendHeaders(&headers, request.get(), true); |
308 VerifyLoFiHeader(tests[i].is_using_lofi && !tests[i].is_using_lite_page, | 317 VerifyLoFiHeader(!tests[i].is_using_lite_page, !tests[i].is_using_lofi, |
309 headers); | 318 headers); |
310 VerifyLitePageHeader(false, headers); | 319 VerifyLitePageHeader(false, false, headers); |
311 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 320 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
312 data = DataReductionProxyData::GetData(*request); | 321 data = DataReductionProxyData::GetData(*request); |
313 // |lofi_requested| should be set to false when Lo-Fi is enabled using | 322 // |lofi_requested| should be set to false when Lo-Fi is enabled using |
314 // flags. | 323 // flags. |
315 EXPECT_FALSE(data->lofi_requested()); | 324 EXPECT_FALSE(data->lofi_requested()); |
316 } | 325 } |
317 } | 326 } |
318 | 327 |
319 TEST_F(ContentLoFiDeciderTest, LoFiEnabledFieldTrial) { | 328 TEST_F(ContentLoFiDeciderTest, LoFiEnabledFieldTrial) { |
320 base::FieldTrialList field_trial_list(nullptr); | 329 base::FieldTrialList field_trial_list(nullptr); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 net::HttpRequestHeaders headers; | 377 net::HttpRequestHeaders headers; |
369 NotifyBeforeSendHeaders(&headers, request.get(), true); | 378 NotifyBeforeSendHeaders(&headers, request.get(), true); |
370 bool is_lofi_resource_type = | 379 bool is_lofi_resource_type = |
371 !(tests[i].resource_type == content::RESOURCE_TYPE_MAIN_FRAME || | 380 !(tests[i].resource_type == content::RESOURCE_TYPE_MAIN_FRAME || |
372 tests[i].resource_type == content::RESOURCE_TYPE_STYLESHEET || | 381 tests[i].resource_type == content::RESOURCE_TYPE_STYLESHEET || |
373 tests[i].resource_type == content::RESOURCE_TYPE_SCRIPT || | 382 tests[i].resource_type == content::RESOURCE_TYPE_SCRIPT || |
374 tests[i].resource_type == content::RESOURCE_TYPE_FONT_RESOURCE || | 383 tests[i].resource_type == content::RESOURCE_TYPE_FONT_RESOURCE || |
375 tests[i].resource_type == content::RESOURCE_TYPE_MEDIA || | 384 tests[i].resource_type == content::RESOURCE_TYPE_MEDIA || |
376 tests[i].resource_type == content::RESOURCE_TYPE_CSP_REPORT); | 385 tests[i].resource_type == content::RESOURCE_TYPE_CSP_REPORT); |
377 | 386 |
378 VerifyLoFiHeader(tests[i].is_using_lofi && is_lofi_resource_type, headers); | 387 VerifyLoFiHeader(is_lofi_resource_type, !tests[i].is_using_lofi, headers); |
379 VerifyLoFiPreviewHeader(false, headers); | 388 VerifyLitePageHeader(false, false, headers); |
380 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 389 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
381 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); | 390 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); |
382 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; | 391 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; |
383 } | 392 } |
384 } | 393 } |
385 | 394 |
386 TEST_F(ContentLoFiDeciderTest, LoFiControlFieldTrial) { | 395 TEST_F(ContentLoFiDeciderTest, LoFiControlFieldTrial) { |
387 base::FieldTrialList field_trial_list(nullptr); | 396 base::FieldTrialList field_trial_list(nullptr); |
388 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 397 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
389 "Control"); | 398 "Control"); |
390 // Enable Lo-Fi. | 399 // Enable Lo-Fi. |
391 const struct { | 400 const struct { |
392 bool is_using_lofi; | 401 bool is_using_lofi; |
393 bool is_main_frame; | 402 bool is_main_frame; |
394 } tests[] = {{false, false}, {false, true}, {true, false}, {true, true}}; | 403 } tests[] = {{false, false}, {false, true}, {true, false}, {true, true}}; |
395 | 404 |
396 for (size_t i = 0; i < arraysize(tests); ++i) { | 405 for (size_t i = 0; i < arraysize(tests); ++i) { |
397 std::unique_ptr<net::URLRequest> request = | 406 std::unique_ptr<net::URLRequest> request = |
398 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); | 407 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); |
399 net::HttpRequestHeaders headers; | 408 net::HttpRequestHeaders headers; |
400 NotifyBeforeSendHeaders(&headers, request.get(), true); | 409 NotifyBeforeSendHeaders(&headers, request.get(), true); |
401 VerifyLoFiHeader(false, headers); | 410 VerifyLoFiHeader(false, false, headers); |
402 VerifyLitePageHeader(false, headers); | 411 VerifyLitePageHeader(false, false, headers); |
403 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 412 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
404 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); | 413 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); |
405 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; | 414 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; |
406 } | 415 } |
407 } | 416 } |
408 | 417 |
409 TEST_F(ContentLoFiDeciderTest, LitePageFieldTrial) { | 418 TEST_F(ContentLoFiDeciderTest, LitePageFieldTrial) { |
410 base::FieldTrialList field_trial_list(nullptr); | 419 base::FieldTrialList field_trial_list(nullptr); |
411 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 420 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
412 "Enabled_Preview"); | 421 "Enabled_Preview"); |
413 // Enable Lo-Fi. | 422 // Enable Lo-Fi. |
414 const struct { | 423 const struct { |
415 bool is_using_lofi; | 424 bool is_using_lofi; |
416 bool is_main_frame; | 425 bool is_main_frame; |
417 } tests[] = { | 426 } tests[] = { |
418 {false, false}, {true, false}, {false, true}, {true, true}, | 427 {false, false}, {true, false}, {false, true}, {true, true}, |
419 }; | 428 }; |
420 | 429 |
421 for (size_t i = 0; i < arraysize(tests); ++i) { | 430 for (size_t i = 0; i < arraysize(tests); ++i) { |
422 std::unique_ptr<net::URLRequest> request = | 431 std::unique_ptr<net::URLRequest> request = |
423 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); | 432 CreateRequest(tests[i].is_main_frame, tests[i].is_using_lofi); |
424 net::HttpRequestHeaders headers; | 433 net::HttpRequestHeaders headers; |
425 NotifyBeforeSendHeaders(&headers, request.get(), true); | 434 NotifyBeforeSendHeaders(&headers, request.get(), true); |
426 VerifyLoFiHeader(false, headers); | 435 VerifyLoFiHeader(false, false, headers); |
427 VerifyLitePageHeader(tests[i].is_using_lofi && tests[i].is_main_frame, | 436 VerifyLitePageHeader(tests[i].is_main_frame, !tests[i].is_using_lofi, |
428 headers); | 437 headers); |
429 VerifyLitePageIgnoreBlacklistHeader(false, headers); | 438 VerifyLitePageIgnoreBlacklistHeader(false, headers); |
430 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); | 439 DataReductionProxyData* data = DataReductionProxyData::GetData(*request); |
431 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; | 440 EXPECT_EQ(tests[i].is_using_lofi, data->lofi_requested()) << i; |
432 } | 441 } |
433 } | 442 } |
434 | 443 |
435 TEST_F(ContentLoFiDeciderTest, AutoLoFi) { | 444 TEST_F(ContentLoFiDeciderTest, AutoLoFi) { |
436 const struct { | 445 const struct { |
437 bool auto_lofi_enabled_group; | 446 bool auto_lofi_enabled_group; |
438 bool auto_lofi_control_group; | 447 bool auto_lofi_control_group; |
439 bool network_prohibitively_slow; | 448 bool network_prohibitively_slow; |
440 bool is_main_frame; | 449 bool is_main_frame; |
441 } tests[] = { | 450 } tests[] = { |
442 {false, false, false, false}, | 451 {false, false, false, false}, |
443 {false, false, true, false}, | 452 {false, false, true, false}, |
444 {true, false, false, false}, | 453 {true, false, false, false}, |
445 {true, false, true, false}, | 454 {true, false, true, false}, |
446 {true, false, true, true}, | 455 {true, false, true, true}, |
447 {false, true, false, false}, | 456 {false, true, false, false}, |
448 {false, true, true, false}, | 457 {false, true, true, false}, |
449 // Repeat this test data to simulate user moving out of Lo-Fi control | 458 // Repeat this test data to simulate user moving out of Lo-Fi control |
450 // experiment. | 459 // experiment. |
451 {false, true, false, false}, | 460 {false, true, false, false}, |
452 }; | 461 }; |
453 | 462 |
454 for (size_t i = 0; i < arraysize(tests); ++i) { | 463 for (size_t i = 0; i < arraysize(tests); ++i) { |
455 test_context_->config()->ResetLoFiStatusForTest(); | 464 test_context_->config()->ResetLoFiStatusForTest(); |
456 const bool expect_lofi_header = tests[i].auto_lofi_enabled_group && | 465 const bool expect_lofi_header = tests[i].auto_lofi_enabled_group && |
457 tests[i].network_prohibitively_slow && | |
458 !tests[i].is_main_frame; | 466 !tests[i].is_main_frame; |
459 | 467 |
460 base::FieldTrialList field_trial_list(nullptr); | 468 base::FieldTrialList field_trial_list(nullptr); |
461 if (tests[i].auto_lofi_enabled_group) { | 469 if (tests[i].auto_lofi_enabled_group) { |
462 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 470 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
463 "Enabled"); | 471 "Enabled"); |
464 } | 472 } |
465 | 473 |
466 if (tests[i].auto_lofi_control_group) { | 474 if (tests[i].auto_lofi_control_group) { |
467 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 475 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
468 "Control"); | 476 "Control"); |
469 } | 477 } |
470 | 478 |
471 test_context_->config()->SetNetworkProhibitivelySlow( | 479 test_context_->config()->SetNetworkProhibitivelySlow( |
472 tests[i].network_prohibitively_slow); | 480 tests[i].network_prohibitively_slow); |
473 | 481 |
474 std::unique_ptr<net::URLRequest> request = CreateRequest( | 482 std::unique_ptr<net::URLRequest> request = CreateRequest( |
475 tests[i].is_main_frame, tests[i].network_prohibitively_slow); | 483 tests[i].is_main_frame, tests[i].network_prohibitively_slow); |
476 net::HttpRequestHeaders headers; | 484 net::HttpRequestHeaders headers; |
477 NotifyBeforeSendHeaders(&headers, request.get(), true); | 485 NotifyBeforeSendHeaders(&headers, request.get(), true); |
478 | 486 |
479 VerifyLoFiHeader(expect_lofi_header, headers); | 487 VerifyLoFiHeader(expect_lofi_header, !tests[i].network_prohibitively_slow, |
| 488 headers); |
480 } | 489 } |
481 } | 490 } |
482 | 491 |
483 TEST_F(ContentLoFiDeciderTest, SlowConnectionsFlag) { | 492 TEST_F(ContentLoFiDeciderTest, SlowConnectionsFlag) { |
484 const struct { | 493 const struct { |
485 bool slow_connections_flag_enabled; | 494 bool slow_connections_flag_enabled; |
486 bool network_prohibitively_slow; | 495 bool network_prohibitively_slow; |
487 bool auto_lofi_enabled_group; | 496 bool auto_lofi_enabled_group; |
488 bool is_main_frame; | 497 bool is_main_frame; |
489 } tests[] = { | 498 } tests[] = { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 } | 531 } |
523 | 532 |
524 test_context_->config()->SetNetworkProhibitivelySlow( | 533 test_context_->config()->SetNetworkProhibitivelySlow( |
525 tests[i].network_prohibitively_slow); | 534 tests[i].network_prohibitively_slow); |
526 | 535 |
527 std::unique_ptr<net::URLRequest> request = CreateRequest( | 536 std::unique_ptr<net::URLRequest> request = CreateRequest( |
528 tests[i].is_main_frame, tests[i].network_prohibitively_slow); | 537 tests[i].is_main_frame, tests[i].network_prohibitively_slow); |
529 net::HttpRequestHeaders headers; | 538 net::HttpRequestHeaders headers; |
530 NotifyBeforeSendHeaders(&headers, request.get(), true); | 539 NotifyBeforeSendHeaders(&headers, request.get(), true); |
531 | 540 |
532 VerifyLoFiHeader(expect_lofi_header, headers); | 541 VerifyLoFiHeader(expect_lofi_header, false, headers); |
533 } | 542 } |
534 } | 543 } |
535 | 544 |
536 TEST_F(ContentLoFiDeciderTest, ProxyIsNotDataReductionProxy) { | 545 TEST_F(ContentLoFiDeciderTest, ProxyIsNotDataReductionProxy) { |
537 base::FieldTrialList field_trial_list(nullptr); | 546 base::FieldTrialList field_trial_list(nullptr); |
538 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), | 547 base::FieldTrialList::CreateFieldTrial(params::GetLoFiFieldTrialName(), |
539 "Enabled"); | 548 "Enabled"); |
540 // Enable Lo-Fi. | 549 // Enable Lo-Fi. |
541 const struct { | 550 const struct { |
542 bool is_using_lofi; | 551 bool is_using_lofi; |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 EXPECT_EQ("exp=ignore_preview_blacklist", header_value); | 681 EXPECT_EQ("exp=ignore_preview_blacklist", header_value); |
673 | 682 |
674 headers.SetHeader(chrome_proxy_header(), "Foo"); | 683 headers.SetHeader(chrome_proxy_header(), "Foo"); |
675 lofi_decider->MaybeSetIgnorePreviewsBlacklistDirective(&headers); | 684 lofi_decider->MaybeSetIgnorePreviewsBlacklistDirective(&headers); |
676 EXPECT_TRUE(headers.HasHeader(chrome_proxy_header())); | 685 EXPECT_TRUE(headers.HasHeader(chrome_proxy_header())); |
677 headers.GetHeader(chrome_proxy_header(), &header_value); | 686 headers.GetHeader(chrome_proxy_header(), &header_value); |
678 EXPECT_EQ("Foo, exp=ignore_preview_blacklist", header_value); | 687 EXPECT_EQ("Foo, exp=ignore_preview_blacklist", header_value); |
679 } | 688 } |
680 | 689 |
681 } // namespace data_reduction_roxy | 690 } // namespace data_reduction_roxy |
OLD | NEW |