// found in the LICENSE file.
#include "base/command_line.h"
+#include "base/prefs/pref_service.h"
#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/test/browser_test_utils.h"
class PrefetchBrowserTestBase : public InProcessBrowserTest {
public:
- explicit PrefetchBrowserTestBase(bool do_prefetching)
- : do_prefetching_(do_prefetching) {}
+ explicit PrefetchBrowserTestBase(bool do_predictive_networking,
+ bool do_prefetch_field_trial)
+ : do_predictive_networking_(do_predictive_networking),
+ do_prefetch_field_trial_(do_prefetch_field_trial) {}
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
- if (do_prefetching_) {
+ if (do_prefetch_field_trial_) {
command_line->AppendSwitchASCII(
switches::kForceFieldTrials,
"Prefetch/ExperimentYes/");
}
}
+ virtual void SetUpOnMainThread() OVERRIDE {
+ browser()->profile()->GetPrefs()->SetBoolean(
+ prefs::kNetworkPredictionEnabled, do_predictive_networking_);
+ }
+
+ bool RunPrefetchExperiment(bool expect_success, Browser* browser) {
+ CHECK(test_server()->Start());
+ GURL url = test_server()->GetURL(kPrefetchPage);
+
+ const base::string16 expected_title =
+ expect_success ? base::ASCIIToUTF16("link onload")
+ : base::ASCIIToUTF16("link onerror");
+ content::TitleWatcher title_watcher(
+ browser->tab_strip_model()->GetActiveWebContents(), expected_title);
+ ui_test_utils::NavigateToURL(browser, url);
+ return expected_title == title_watcher.WaitAndGetTitle();
+ }
+
private:
- bool do_prefetching_;
+ bool do_predictive_networking_;
+ bool do_prefetch_field_trial_;
+};
+
+class PrefetchBrowserTestPredictionOnExpOn : public PrefetchBrowserTestBase {
+ public:
+ PrefetchBrowserTestPredictionOnExpOn()
+ : PrefetchBrowserTestBase(true, true) {}
};
-class PrefetchBrowserTest : public PrefetchBrowserTestBase {
+class PrefetchBrowserTestPredictionOnExpOff : public PrefetchBrowserTestBase {
public:
- PrefetchBrowserTest()
- : PrefetchBrowserTestBase(true) {}
+ PrefetchBrowserTestPredictionOnExpOff()
+ : PrefetchBrowserTestBase(true, false) {}
};
-class PrefetchBrowserTestNoPrefetching : public PrefetchBrowserTestBase {
+class PrefetchBrowserTestPredictionOffExpOn : public PrefetchBrowserTestBase {
public:
- PrefetchBrowserTestNoPrefetching()
- : PrefetchBrowserTestBase(false) {}
+ PrefetchBrowserTestPredictionOffExpOn()
+ : PrefetchBrowserTestBase(false, true) {}
};
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTest, PrefetchOn) {
- ASSERT_TRUE(test_server()->Start());
- GURL url = test_server()->GetURL(kPrefetchPage);
+class PrefetchBrowserTestPredictionOffExpOff : public PrefetchBrowserTestBase {
+ public:
+ PrefetchBrowserTestPredictionOffExpOff()
+ : PrefetchBrowserTestBase(false, false) {}
+};
+
+// Privacy option is on, experiment is on. Prefetch should succeed.
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOn, PredOnExpOn) {
+ EXPECT_TRUE(RunPrefetchExperiment(true, browser()));
+}
- const base::string16 expected_title = base::ASCIIToUTF16("link onload");
- content::TitleWatcher title_watcher(
- browser()->tab_strip_model()->GetActiveWebContents(),
- expected_title);
- ui_test_utils::NavigateToURL(browser(), url);
+// Privacy option is on, experiment is off. Prefetch should be dropped.
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, PredOnExpOff) {
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser()));
+}
+
+// Privacy option is off, experiment is on. Prefetch should be dropped.
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOffExpOn, PredOffExpOn) {
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser()));
+}
- EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+// Privacy option is off, experiment is off. Prefetch should be dropped.
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOffExpOff, PredOffExpOff) {
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser()));
}
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestNoPrefetching, PrefetchOff) {
- ASSERT_TRUE(test_server()->Start());
- GURL url = test_server()->GetURL(kPrefetchPage);
+// Bug 339909: When in incognito mode the browser crashed due to an
+// uninitialized preference member. Verify that it no longer does.
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOn, IncognitoTest) {
+ Profile* incognito_profile = browser()->profile()->GetOffTheRecordProfile();
+ Browser* incognito_browser = new Browser(
+ Browser::CreateParams(incognito_profile, browser()->host_desktop_type()));
- const base::string16 expected_title = base::ASCIIToUTF16("link onerror");
- content::TitleWatcher title_watcher(
- browser()->tab_strip_model()->GetActiveWebContents(),
- expected_title);
- ui_test_utils::NavigateToURL(browser(), url);
+ // Navigate just to have a tab in this window, otherwise there is no
+ // WebContents for the incognito browser.
+ ui_test_utils::OpenURLOffTheRecord(browser()->profile(), GURL("about:blank"));
- EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+ EXPECT_TRUE(RunPrefetchExperiment(true, incognito_browser));
}
} // namespace