Index: chrome/browser/prefetch/prefetch_browsertest.cc |
diff --git a/chrome/browser/prefetch/prefetch_browsertest.cc b/chrome/browser/prefetch/prefetch_browsertest.cc |
index bd8ba5b0a89f37e40af0e911094ae62e55b4807c..0f371fc86a5b18472eefa26966780cf50b3ad3f3 100644 |
--- a/chrome/browser/prefetch/prefetch_browsertest.cc |
+++ b/chrome/browser/prefetch/prefetch_browsertest.cc |
@@ -6,6 +6,7 @@ |
#include "base/prefs/pref_service.h" |
#include "base/run_loop.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "chrome/browser/net/prediction_options.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
@@ -17,39 +18,50 @@ |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/test/browser_test_utils.h" |
+#include "net/base/network_change_notifier.h" |
#include "net/url_request/url_request_filter.h" |
#include "net/url_request/url_request_job.h" |
+using chrome_browser_net::NetworkPredictionOptions; |
using content::BrowserThread; |
+using net::NetworkChangeNotifier; |
namespace { |
const char kPrefetchPage[] = "files/prerender/simple_prefetch.html"; |
+class MockNetworkChangeNotifierWIFI : public NetworkChangeNotifier { |
+ public: |
+ virtual ConnectionType GetCurrentConnectionType() const OVERRIDE { |
+ return NetworkChangeNotifier::CONNECTION_WIFI; |
+ } |
+}; |
+ |
+class MockNetworkChangeNotifier4G : public NetworkChangeNotifier { |
+ public: |
+ virtual ConnectionType GetCurrentConnectionType() const OVERRIDE { |
+ return NetworkChangeNotifier::CONNECTION_4G; |
+ } |
+}; |
+ |
class PrefetchBrowserTestBase : public InProcessBrowserTest { |
public: |
- 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) {} |
+ explicit PrefetchBrowserTestBase(bool disabled_via_field_trial) |
+ : disabled_via_field_trial_(disabled_via_field_trial) {} |
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
- if (do_prefetch_field_trial_) { |
+ if (disabled_via_field_trial_) { |
command_line->AppendSwitchASCII(switches::kForceFieldTrials, |
"Prefetch/ExperimentDisabled/"); |
- } else { |
- command_line->AppendSwitchASCII(switches::kForceFieldTrials, |
- "Prefetch/ExperimentEnabled/"); |
} |
} |
- virtual void SetUpOnMainThread() OVERRIDE { |
- browser()->profile()->GetPrefs()->SetBoolean( |
- prefs::kNetworkPredictionEnabled, do_predictive_networking_); |
+ void SetPreference(NetworkPredictionOptions value) { |
+ browser()->profile()->GetPrefs()->SetInteger( |
+ prefs::kNetworkPredictionOptions, value); |
} |
bool RunPrefetchExperiment(bool expect_success, Browser* browser) { |
- CHECK(test_server()->Start()); |
GURL url = test_server()->GetURL(kPrefetchPage); |
const base::string16 expected_title = |
@@ -62,32 +74,17 @@ class PrefetchBrowserTestBase : public InProcessBrowserTest { |
} |
private: |
- bool do_predictive_networking_; |
- bool do_prefetch_field_trial_; |
-}; |
- |
-class PrefetchBrowserTestPredictionOnExpOn : public PrefetchBrowserTestBase { |
- public: |
- PrefetchBrowserTestPredictionOnExpOn() |
- : PrefetchBrowserTestBase(true, true) {} |
-}; |
- |
-class PrefetchBrowserTestPredictionOnExpOff : public PrefetchBrowserTestBase { |
- public: |
- PrefetchBrowserTestPredictionOnExpOff() |
- : PrefetchBrowserTestBase(true, false) {} |
+ bool disabled_via_field_trial_; |
}; |
-class PrefetchBrowserTestPredictionOffExpOn : public PrefetchBrowserTestBase { |
+class PrefetchBrowserTestPrediction : public PrefetchBrowserTestBase { |
public: |
- PrefetchBrowserTestPredictionOffExpOn() |
- : PrefetchBrowserTestBase(false, true) {} |
+ PrefetchBrowserTestPrediction() : PrefetchBrowserTestBase(false) {} |
}; |
-class PrefetchBrowserTestPredictionOffExpOff : public PrefetchBrowserTestBase { |
+class PrefetchBrowserTestPredictionDisabled : public PrefetchBrowserTestBase { |
public: |
- PrefetchBrowserTestPredictionOffExpOff() |
- : PrefetchBrowserTestBase(false, false) {} |
+ PrefetchBrowserTestPredictionDisabled() : PrefetchBrowserTestBase(true) {} |
}; |
// URLRequestJob (and associated handler) which hangs. |
@@ -134,29 +131,59 @@ void CreateHangingRequestInterceptorOnIO(const GURL& url, |
url, never_respond_handler.Pass()); |
} |
-// Privacy option is on, experiment is on. Prefetch should succeed. |
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOn, PredOnExpOn) { |
+// Prefetch is disabled via field experiment. Prefetch should be dropped. |
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionDisabled, |
+ ExperimentDisabled) { |
+ CHECK(test_server()->Start()); |
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser())); |
+ // Should not prefetch even if preference is ALWAYS. |
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_ALWAYS); |
EXPECT_TRUE(RunPrefetchExperiment(false, browser())); |
} |
-// Privacy option is on, experiment is off. Prefetch should be dropped. |
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, PredOnExpOff) { |
- EXPECT_TRUE(RunPrefetchExperiment(true, browser())); |
-} |
+// Prefetch should be allowed depending on preference and network type. |
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPrediction, PreferenceWorks) { |
+ CHECK(test_server()->Start()); |
+ // Set real NetworkChangeNotifier singleton aside. |
+ scoped_ptr<NetworkChangeNotifier::DisableForTest> disable_for_test( |
+ new NetworkChangeNotifier::DisableForTest); |
+ |
+ // Preference defaults to WIFI_ONLY: prefetch when not on cellular. |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI); |
+ EXPECT_TRUE(RunPrefetchExperiment(true, browser())); |
+ } |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G); |
+ 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())); |
-} |
+ // Set preference to ALWAYS: always prefetch. |
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_ALWAYS); |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI); |
+ EXPECT_TRUE(RunPrefetchExperiment(true, browser())); |
+ } |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G); |
+ EXPECT_TRUE(RunPrefetchExperiment(true, browser())); |
+ } |
-// Privacy option is off, experiment is off. Prefetch should be dropped. |
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOffExpOff, PredOffExpOff) { |
- EXPECT_TRUE(RunPrefetchExperiment(false, browser())); |
+ // Set preference to NEVER: never prefetch. |
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_NEVER); |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI); |
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser())); |
+ } |
+ { |
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G); |
+ EXPECT_TRUE(RunPrefetchExperiment(false, browser())); |
+ } |
} |
// 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(PrefetchBrowserTestPredictionOnExpOff, IncognitoTest) { |
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPrediction, IncognitoTest) { |
Profile* incognito_profile = browser()->profile()->GetOffTheRecordProfile(); |
Browser* incognito_browser = new Browser( |
Browser::CreateParams(incognito_profile, browser()->host_desktop_type())); |
@@ -165,6 +192,7 @@ IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, IncognitoTest) { |
// WebContents for the incognito browser. |
ui_test_utils::OpenURLOffTheRecord(browser()->profile(), GURL("about:blank")); |
+ CHECK(test_server()->Start()); |
EXPECT_TRUE(RunPrefetchExperiment(true, incognito_browser)); |
} |
@@ -173,8 +201,7 @@ IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, IncognitoTest) { |
// - if a prefetch is in progress, but the originating renderer is destroyed, |
// that the pending prefetch request is cleaned up cleanly and does not |
// result in a crash. |
-IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPredictionOnExpOff, |
- PrefetchFromBrowser) { |
+IN_PROC_BROWSER_TEST_F(PrefetchBrowserTestPrediction, PrefetchFromBrowser) { |
const GURL kHangingUrl("http://hanging-url.com"); |
base::RunLoop loop_; |
BrowserThread::PostTask(BrowserThread::IO, |