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 |