| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/prefs/pref_service.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/profiles/profile.h" |
| 7 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 8 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 9 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" |
| 12 #include "chrome/common/pref_names.h" |
| 10 #include "chrome/test/base/in_process_browser_test.h" | 13 #include "chrome/test/base/in_process_browser_test.h" |
| 11 #include "chrome/test/base/ui_test_utils.h" | 14 #include "chrome/test/base/ui_test_utils.h" |
| 12 #include "content/public/test/browser_test_utils.h" | 15 #include "content/public/test/browser_test_utils.h" |
| 13 | 16 |
| 14 namespace { | 17 namespace { |
| 15 | 18 |
| 16 const char kPrefetchPage[] = "files/prerender/simple_prefetch.html"; | 19 const char kPrefetchPage[] = "files/prerender/simple_prefetch.html"; |
| 17 | 20 |
| 18 class PrefetchBrowserTestBase : public InProcessBrowserTest { | 21 class PrefetchBrowserTestBase : public InProcessBrowserTest { |
| 19 public: | 22 public: |
| 20 explicit PrefetchBrowserTestBase(bool do_prefetching) | 23 explicit PrefetchBrowserTestBase(bool do_predictive_networking, |
| 21 : do_prefetching_(do_prefetching) {} | 24 bool do_prefetch_field_trial) |
| 25 : do_predictive_networking_(do_predictive_networking), |
| 26 do_prefetch_field_trial_(do_prefetch_field_trial) {} |
| 22 | 27 |
| 23 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | 28 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| 24 if (do_prefetching_) { | 29 if (do_prefetch_field_trial_) { |
| 25 command_line->AppendSwitchASCII( | 30 command_line->AppendSwitchASCII( |
| 26 switches::kForceFieldTrials, | 31 switches::kForceFieldTrials, |
| 27 "Prefetch/ExperimentYes/"); | 32 "Prefetch/ExperimentYes/"); |
| 28 } else { | 33 } else { |
| 29 command_line->AppendSwitchASCII( | 34 command_line->AppendSwitchASCII( |
| 30 switches::kForceFieldTrials, | 35 switches::kForceFieldTrials, |
| 31 "Prefetch/ExperimentNo/"); | 36 "Prefetch/ExperimentNo/"); |
| 32 } | 37 } |
| 33 } | 38 } |
| 34 | 39 |
| 40 virtual void SetUpOnMainThread() OVERRIDE { |
| 41 browser()->profile()->GetPrefs()->SetBoolean( |
| 42 prefs::kNetworkPredictionEnabled, do_predictive_networking_); |
| 43 } |
| 44 |
| 45 bool RunPrefetchExperiment(bool expect_success) { |
| 46 CHECK(test_server()->Start()); |
| 47 GURL url = test_server()->GetURL(kPrefetchPage); |
| 48 |
| 49 const base::string16 expected_title = |
| 50 expect_success ? base::ASCIIToUTF16("link onload") |
| 51 : base::ASCIIToUTF16("link onerror"); |
| 52 content::TitleWatcher title_watcher( |
| 53 browser()->tab_strip_model()->GetActiveWebContents(), expected_title); |
| 54 ui_test_utils::NavigateToURL(browser(), url); |
| 55 |
| 56 return expected_title == title_watcher.WaitAndGetTitle(); |
| 57 } |
| 58 |
| 35 private: | 59 private: |
| 36 bool do_prefetching_; | 60 bool do_predictive_networking_; |
| 61 bool do_prefetch_field_trial_; |
| 37 }; | 62 }; |
| 38 | 63 |
| 39 class PrefetchBrowserTest : public PrefetchBrowserTestBase { | 64 class PrefetchBrowserTestPredictionOnExpOn : public PrefetchBrowserTestBase { |
| 40 public: | 65 public: |
| 41 PrefetchBrowserTest() | 66 PrefetchBrowserTestPredictionOnExpOn() |
| 42 : PrefetchBrowserTestBase(true) {} | 67 : PrefetchBrowserTestBase(true, true) {} |
| 43 }; | 68 }; |
| 44 | 69 |
| 45 class PrefetchBrowserTestNoPrefetching : public PrefetchBrowserTestBase { | 70 class PrefetchBrowserTestPredictionOnExpOff : public PrefetchBrowserTestBase { |
| 46 public: | 71 public: |
| 47 PrefetchBrowserTestNoPrefetching() | 72 PrefetchBrowserTestPredictionOnExpOff() |
| 48 : PrefetchBrowserTestBase(false) {} | 73 : PrefetchBrowserTestBase(true, false) {} |
| 49 }; | 74 }; |
| 50 | 75 |
| 51 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTest, PrefetchOn) { | 76 class PrefetchBrowserTestPredictionOffExpOn : public PrefetchBrowserTestBase { |
| 52 ASSERT_TRUE(test_server()->Start()); | 77 public: |
| 53 GURL url = test_server()->GetURL(kPrefetchPage); | 78 PrefetchBrowserTestPredictionOffExpOn() |
| 79 : PrefetchBrowserTestBase(false, true) {} |
| 80 }; |
| 54 | 81 |
| 55 const base::string16 expected_title = base::ASCIIToUTF16("link onload"); | 82 class PrefetchBrowserTestPredictionOffExpOff : public PrefetchBrowserTestBase { |
| 56 content::TitleWatcher title_watcher( | 83 public: |
| 57 browser()->tab_strip_model()->GetActiveWebContents(), | 84 PrefetchBrowserTestPredictionOffExpOff() |
| 58 expected_title); | 85 : PrefetchBrowserTestBase(false, false) {} |
| 59 ui_test_utils::NavigateToURL(browser(), url); | 86 }; |
| 60 | 87 |
| 61 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 88 // Privacy option is on, experiment is on. Prefetch should succeed. |
| 89 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOn, PredOnExpOn) { |
| 90 EXPECT_TRUE(RunPrefetchExperiment(true)); |
| 62 } | 91 } |
| 63 | 92 |
| 64 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestNoPrefetching, PrefetchOff) { | 93 // Privacy option is on, experiment is off. Prefetch should be dropped. |
| 65 ASSERT_TRUE(test_server()->Start()); | 94 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, PredOnExpOff) { |
| 66 GURL url = test_server()->GetURL(kPrefetchPage); | 95 EXPECT_TRUE(RunPrefetchExperiment(false)); |
| 96 } |
| 67 | 97 |
| 68 const base::string16 expected_title = base::ASCIIToUTF16("link onerror"); | 98 // Privacy option is off, experiment is on. Prefetch should be dropped. |
| 69 content::TitleWatcher title_watcher( | 99 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOffExpOn, PredOffExpOn) { |
| 70 browser()->tab_strip_model()->GetActiveWebContents(), | 100 EXPECT_TRUE(RunPrefetchExperiment(false)); |
| 71 expected_title); | 101 } |
| 72 ui_test_utils::NavigateToURL(browser(), url); | |
| 73 | 102 |
| 74 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle()); | 103 // Privacy option is off, experiment is off. Prefetch should be dropped. |
| 104 IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOffExpOff, PredOffExpOff) { |
| 105 EXPECT_TRUE(RunPrefetchExperiment(false)); |
| 75 } | 106 } |
| 76 | 107 |
| 77 } // namespace | 108 } // namespace |
| 78 | 109 |
| OLD | NEW |