Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / prefetch / prefetch_browsertest.cc
index 658ffba..a870be6 100644 (file)
@@ -3,10 +3,13 @@
 // 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"
@@ -17,11 +20,13 @@ const char kPrefetchPage[] = "files/prerender/simple_prefetch.html";
 
 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/");
@@ -32,46 +37,85 @@ class PrefetchBrowserTestBase : public InProcessBrowserTest {
     }
   }
 
+  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