OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/format_macros.h" | 12 #include "base/format_macros.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "base/memory/ptr_util.h" | 14 #include "base/memory/ptr_util.h" |
15 #include "base/message_loop/message_loop.h" | 15 #include "base/message_loop/message_loop.h" |
16 #include "base/metrics/field_trial.h" | 16 #include "base/metrics/field_trial.h" |
| 17 #include "base/metrics/field_trial_param_associator.h" |
17 #include "base/strings/stringprintf.h" | 18 #include "base/strings/stringprintf.h" |
| 19 #include "base/test/scoped_feature_list.h" |
18 #include "base/test/simple_test_clock.h" | 20 #include "base/test/simple_test_clock.h" |
19 #include "base/test/simple_test_tick_clock.h" | 21 #include "base/test/simple_test_tick_clock.h" |
20 #include "base/time/time.h" | 22 #include "base/time/time.h" |
21 #include "chrome/browser/net/prediction_options.h" | 23 #include "chrome/browser/net/prediction_options.h" |
22 #include "chrome/browser/prerender/prerender_contents.h" | 24 #include "chrome/browser/prerender/prerender_contents.h" |
23 #include "chrome/browser/prerender/prerender_field_trial.h" | 25 #include "chrome/browser/prerender/prerender_field_trial.h" |
24 #include "chrome/browser/prerender/prerender_handle.h" | 26 #include "chrome/browser/prerender/prerender_handle.h" |
25 #include "chrome/browser/prerender/prerender_link_manager.h" | 27 #include "chrome/browser/prerender/prerender_link_manager.h" |
26 #include "chrome/browser/prerender/prerender_manager.h" | 28 #include "chrome/browser/prerender/prerender_manager.h" |
27 #include "chrome/browser/prerender/prerender_origin.h" | 29 #include "chrome/browser/prerender/prerender_origin.h" |
28 #include "chrome/common/chrome_switches.h" | 30 #include "chrome/common/chrome_switches.h" |
29 #include "chrome/common/pref_names.h" | 31 #include "chrome/common/pref_names.h" |
30 #include "chrome/common/prerender_types.h" | 32 #include "chrome/common/prerender_types.h" |
31 #include "chrome/test/base/testing_browser_process.h" | 33 #include "chrome/test/base/testing_browser_process.h" |
32 #include "chrome/test/base/testing_profile.h" | 34 #include "chrome/test/base/testing_profile.h" |
33 #include "components/content_settings/core/common/pref_names.h" | 35 #include "components/content_settings/core/common/pref_names.h" |
34 #include "components/prefs/pref_service.h" | 36 #include "components/prefs/pref_service.h" |
| 37 #include "components/variations/variations_associated_data.h" |
35 #include "content/public/browser/render_view_host.h" | 38 #include "content/public/browser/render_view_host.h" |
36 #include "content/public/test/test_browser_thread.h" | 39 #include "content/public/test/test_browser_thread.h" |
37 #include "net/base/network_change_notifier.h" | 40 #include "net/base/network_change_notifier.h" |
38 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
39 #include "ui/gfx/geometry/rect.h" | 42 #include "ui/gfx/geometry/rect.h" |
40 #include "ui/gfx/geometry/size.h" | 43 #include "ui/gfx/geometry/size.h" |
41 #include "url/gurl.h" | 44 #include "url/gurl.h" |
42 | 45 |
43 using base::Time; | 46 using base::Time; |
44 using base::TimeDelta; | 47 using base::TimeDelta; |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 TestingProfile profile_; | 407 TestingProfile profile_; |
405 std::unique_ptr<UnitTestPrerenderManager> prerender_manager_; | 408 std::unique_ptr<UnitTestPrerenderManager> prerender_manager_; |
406 std::unique_ptr<PrerenderLinkManager> prerender_link_manager_; | 409 std::unique_ptr<PrerenderLinkManager> prerender_link_manager_; |
407 int last_prerender_id_; | 410 int last_prerender_id_; |
408 base::FieldTrialList field_trial_list_; | 411 base::FieldTrialList field_trial_list_; |
409 }; | 412 }; |
410 | 413 |
411 TEST_F(PrerenderTest, PrerenderRespectsDisableFlag) { | 414 TEST_F(PrerenderTest, PrerenderRespectsDisableFlag) { |
412 RestorePrerenderMode restore_prerender_mode; | 415 RestorePrerenderMode restore_prerender_mode; |
413 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); | 416 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); |
414 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 417 ASSERT_EQ(PrerenderManager::PRERENDER_MODE_ENABLED, |
415 command_line->AppendSwitchASCII( | 418 PrerenderManager::GetMode()); |
416 switches::kPrerenderMode, | 419 |
417 switches::kPrerenderModeSwitchValueDisabled); | 420 { |
418 prerender::ConfigurePrerender(*command_line); | 421 base::test::ScopedFeatureList scoped_feature_list; |
419 ASSERT_FALSE(PrerenderManager::IsPrerenderingPossible()); | 422 scoped_feature_list.InitAndDisableFeature(kNoStatePrefetchFeature); |
| 423 prerender::ConfigurePrerender(); |
| 424 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_DISABLED, |
| 425 PrerenderManager::GetMode()); |
| 426 EXPECT_FALSE(PrerenderManager::IsPrerenderingPossible()); |
| 427 } |
| 428 } |
| 429 |
| 430 TEST_F(PrerenderTest, PrerenderRespectsFieldTrialParameters) { |
| 431 RestorePrerenderMode restore_prerender_mode; |
| 432 |
| 433 // Set up the prerender mode through a field trial. |
| 434 std::string kTrialName = "name"; |
| 435 std::string kTrialGroup = "group"; |
| 436 base::FieldTrial* trial = |
| 437 base::FieldTrialList::CreateFieldTrial(kTrialName, kTrialGroup); |
| 438 std::map<std::string, std::string> params = { |
| 439 {kNoStatePrefetchFeatureModeParameterName, |
| 440 kNoStatePrefetchFeatureModeParameterSimpleLoad}}; |
| 441 ASSERT_TRUE( |
| 442 variations::AssociateVariationParams(kTrialName, kTrialGroup, params)); |
| 443 |
| 444 std::unique_ptr<base::FeatureList> feature_list = |
| 445 base::MakeUnique<base::FeatureList>(); |
| 446 feature_list->RegisterFieldTrialOverride( |
| 447 kNoStatePrefetchFeature.name, base::FeatureList::OVERRIDE_ENABLE_FEATURE, |
| 448 trial); |
| 449 |
| 450 base::test::ScopedFeatureList scoped_feature_list; |
| 451 scoped_feature_list.InitWithFeatureList(std::move(feature_list)); |
| 452 |
| 453 EXPECT_EQ(base::FeatureList::GetFieldTrial(kNoStatePrefetchFeature), trial); |
| 454 |
| 455 std::map<std::string, std::string> actual_params; |
| 456 EXPECT_TRUE(variations::GetVariationParamsByFeature(kNoStatePrefetchFeature, |
| 457 &actual_params)); |
| 458 EXPECT_EQ(params, actual_params); |
| 459 |
| 460 prerender::ConfigurePrerender(); |
| 461 EXPECT_TRUE(PrerenderManager::IsPrerenderingPossible()); |
| 462 EXPECT_EQ(PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT, |
| 463 PrerenderManager::GetMode()); |
420 } | 464 } |
421 | 465 |
422 TEST_F(PrerenderTest, PrerenderRespectsThirdPartyCookiesPref) { | 466 TEST_F(PrerenderTest, PrerenderRespectsThirdPartyCookiesPref) { |
423 GURL url("http://www.google.com/"); | 467 GURL url("http://www.google.com/"); |
424 RestorePrerenderMode restore_prerender_mode; | 468 RestorePrerenderMode restore_prerender_mode; |
425 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); | 469 ASSERT_TRUE(PrerenderManager::IsPrerenderingPossible()); |
426 | 470 |
427 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); | 471 profile()->GetPrefs()->SetBoolean(prefs::kBlockThirdPartyCookies, true); |
428 EXPECT_FALSE(AddSimplePrerender(url)); | 472 EXPECT_FALSE(AddSimplePrerender(url)); |
429 } | 473 } |
(...skipping 1334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1764 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); | 1808 prerender_contents->SetPrerenderMode(PREFETCH_ONLY); |
1765 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); | 1809 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("GET")); |
1766 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); | 1810 EXPECT_TRUE(prerender_contents->IsValidHttpMethod("HEAD")); |
1767 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); | 1811 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("OPTIONS")); |
1768 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); | 1812 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("POST")); |
1769 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); | 1813 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("TRACE")); |
1770 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); | 1814 EXPECT_FALSE(prerender_contents->IsValidHttpMethod("WHATEVER")); |
1771 } | 1815 } |
1772 | 1816 |
1773 } // namespace prerender | 1817 } // namespace prerender |
OLD | NEW |