#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
+#include "base/test/histogram_tester.h"
#include "base/test/test_timeouts.h"
#include "base/values.h"
#include "chrome/browser/browsing_data/browsing_data_helper.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/external_protocol/external_protocol_handler.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
+#include "chrome/browser/net/prediction_options.h"
#include "chrome/browser/predictors/autocomplete_action_predictor.h"
#include "chrome/browser/predictors/autocomplete_action_predictor_factory.h"
#include "chrome/browser/prerender/prerender_contents.h"
+#include "chrome/browser/prerender/prerender_field_trial.h"
#include "chrome/browser/prerender/prerender_handle.h"
#include "chrome/browser/prerender/prerender_link_manager.h"
#include "chrome/browser/prerender/prerender_link_manager_factory.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/manifest_handlers/mime_types_handler.h"
#include "chrome/common/pref_names.h"
+#include "chrome/grit/generated_resources.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/test_switches.h"
#include "chrome/test/base/ui_test_utils.h"
-#include "chrome/test/base/uma_histogram_helper.h"
+#include "components/variations/entropy_provider.h"
+#include "components/variations/variations_associated_data.h"
#include "content/public/browser/browser_message_filter.h"
#include "content/public/browser/devtools_agent_host.h"
-#include "content/public/browser/devtools_client_host.h"
-#include "content/public/browser/devtools_manager.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/notification_service.h"
#include "content/public/test/browser_test_utils.h"
#include "content/public/test/test_navigation_observer.h"
#include "content/public/test/test_utils.h"
-#include "content/test/net/url_request_mock_http_job.h"
+#include "extensions/common/extension_urls.h"
#include "extensions/common/switches.h"
-#include "grit/generated_resources.h"
+#include "extensions/test/result_catcher.h"
#include "net/base/escape.h"
#include "net/cert/x509_certificate.h"
#include "net/dns/mock_host_resolver.h"
#include "net/ssl/client_cert_store.h"
#include "net/ssl/ssl_cert_request_info.h"
+#include "net/test/url_request/url_request_mock_http_job.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#include "net/url_request/url_request_filter.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/gurl.h"
+using chrome_browser_net::NetworkPredictionOptions;
using content::BrowserThread;
using content::DevToolsAgentHost;
-using content::DevToolsClientHost;
-using content::DevToolsManager;
using content::NavigationController;
using content::OpenURLParams;
using content::Referrer;
using content::TestNavigationObserver;
using content::WebContents;
using content::WebContentsObserver;
+using net::NetworkChangeNotifier;
using task_manager::browsertest_util::WaitForTaskManagerRows;
// Prerender tests work as follows:
namespace {
+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;
+ }
+};
+
// Constants used in the test HTML files.
const char* kReadyTitle = "READY";
const char* kPassTitle = "PASS";
};
#endif
-class FakeDevToolsClientHost : public DevToolsClientHost {
+class FakeDevToolsClient : public content::DevToolsAgentHostClient {
public:
- FakeDevToolsClientHost() {}
- virtual ~FakeDevToolsClientHost() {}
- virtual void InspectedContentsClosing() OVERRIDE {}
- virtual void DispatchOnInspectorFrontend(const std::string& msg) OVERRIDE {}
- virtual void ReplacedWithAnotherClient() OVERRIDE {}
+ FakeDevToolsClient() {}
+ virtual ~FakeDevToolsClient() {}
+ virtual void DispatchProtocolMessage(
+ DevToolsAgentHost* agent_host, const std::string& message) OVERRIDE {}
+ virtual void AgentHostClosed(
+ DevToolsAgentHost* agent_host, bool replaced) OVERRIDE {}
};
class RestorePrerenderMode {
}
return new HangingURLRequestJob(request, network_delegate);
}
- return new content::URLRequestMockHTTPJob(request, network_delegate, file_);
+ return new net::URLRequestMockHTTPJob(
+ request,
+ network_delegate,
+ file_,
+ BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
}
private:
}
// Wrapper over URLRequestMockHTTPJob that exposes extra callbacks.
-class MockHTTPJob : public content::URLRequestMockHTTPJob {
+class MockHTTPJob : public net::URLRequestMockHTTPJob {
public:
MockHTTPJob(net::URLRequest* request,
net::NetworkDelegate* delegate,
const base::FilePath& file)
- : content::URLRequestMockHTTPJob(request, delegate, file) {
- }
+ : net::URLRequestMockHTTPJob(
+ request,
+ delegate,
+ file,
+ BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
+ base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)) {}
void set_start_callback(const base::Closure& start_callback) {
start_callback_ = start_callback;
virtual void Start() OVERRIDE {
if (!start_callback_.is_null())
start_callback_.Run();
- content::URLRequestMockHTTPJob::Start();
+ net::URLRequestMockHTTPJob::Start();
}
private:
CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
net::URLRequestFilter::GetInstance()->AddUrlInterceptor(
url,
- content::URLRequestMockHTTPJob::CreateInterceptorForSingleFile(file));
+ net::URLRequestMockHTTPJob::CreateInterceptorForSingleFile(
+ file, BrowserThread::GetBlockingPool()));
}
// A ContentBrowserClient that cancels all prerenderers on OpenURL.
command_line->AppendSwitch(switches::kAlwaysAuthorizePlugins);
}
+ void SetPreference(NetworkPredictionOptions value) {
+ browser()->profile()->GetPrefs()->SetInteger(
+ prefs::kNetworkPredictionOptions, value);
+ }
+
+ void CreateTestFieldTrial(const std::string& name,
+ const std::string& group_name) {
+ base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial(
+ name, group_name);
+ trial->group();
+ }
+
+ // Verifies, for the current field trial, whether
+ // ShouldDisableLocalPredictorDueToPreferencesAndNetwork produces the desired
+ // output.
+ void TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
+ bool preference_wifi_network_wifi,
+ bool preference_wifi_network_4g,
+ bool preference_always_network_wifi,
+ bool preference_always_network_4g,
+ bool preference_never_network_wifi,
+ bool preference_never_network_4g) {
+ Profile* profile = browser()->profile();
+
+ // Set real NetworkChangeNotifier singleton aside.
+ scoped_ptr<NetworkChangeNotifier::DisableForTest> disable_for_test(
+ new NetworkChangeNotifier::DisableForTest);
+
+ // Set preference to WIFI_ONLY: prefetch when not on cellular.
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_WIFI_ONLY);
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_wifi_network_wifi);
+ }
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_wifi_network_4g);
+ }
+
+ // Set preference to ALWAYS: always prefetch.
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_ALWAYS);
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_always_network_wifi);
+ }
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_always_network_4g);
+ }
+
+ // Set preference to NEVER: never prefetch.
+ SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_NEVER);
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_never_network_wifi);
+ }
+ {
+ scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
+ EXPECT_EQ(
+ ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
+ preference_never_network_4g);
+ }
+ }
+
virtual void SetUpOnMainThread() OVERRIDE {
current_browser()->profile()->GetPrefs()->SetBoolean(
prefs::kPromptForDownload, false);
bool expect_swap_to_succeed) const {
NavigateToURLWithParams(
content::OpenURLParams(dest_url_, Referrer(), disposition,
- content::PAGE_TRANSITION_TYPED, false),
+ ui::PAGE_TRANSITION_TYPED, false),
expect_swap_to_succeed);
}
bool expect_swap_to_succeed) const {
NavigateToURLWithParams(
content::OpenURLParams(dest_url, Referrer(), disposition,
- content::PAGE_TRANSITION_TYPED, false),
+ ui::PAGE_TRANSITION_TYPED, false),
expect_swap_to_succeed);
}
js).c_str()));
}
+ const base::HistogramTester& histogram_tester() { return histogram_tester_; }
+
protected:
bool autostart_test_server_;
if (new_web_contents) {
NewTabNavigationOrSwapObserver observer;
- render_frame_host->ExecuteJavaScript(base::ASCIIToUTF16(javascript));
+ render_frame_host->
+ ExecuteJavaScriptForTests(base::ASCIIToUTF16(javascript));
observer.Wait();
} else {
NavigationOrSwapObserver observer(current_browser()->tab_strip_model(),
std::string loader_path_;
std::string loader_query_;
Browser* explicitly_set_browser_;
+ base::HistogramTester histogram_tester_;
+ scoped_ptr<base::FieldTrialList> field_trial_list_;
};
// Checks that a page is correctly prerendered in the case of a
// <link rel=prerender> tag and then loaded into a tab in response to a
// navigation.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) {
- UMAHistogramHelper histograms;
-
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.websame_PrerenderNotSwappedInPLT", 1);
ChannelDestructionWatcher channel_close_watcher;
channel_close_watcher.WatchChannel(
NavigateToDestURL();
channel_close_watcher.WaitForChannelClose();
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched",
+ 1);
+ histogram_tester().ExpectTotalCount(
"Prerender.websame_PerceivedPLTMatchedComplete", 1);
ASSERT_TRUE(IsEmptyPrerenderLinkManager());
// Checks that cross-domain prerenders emit the correct histograms.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageCrossDomain) {
- UMAHistogramHelper histograms;
-
PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
FINAL_STATUS_USED, 1);
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.webcross_PrerenderNotSwappedInPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.webcross_PrerenderNotSwappedInPLT", 1);
NavigateToDestURL();
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched", 1);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.webcross_PerceivedPLTMatched",
+ 1);
+ histogram_tester().ExpectTotalCount(
"Prerender.webcross_PerceivedPLTMatchedComplete", 1);
}
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
PrerenderLocationReplaceGWSHistograms) {
DisableJavascriptCalls();
- UMAHistogramHelper histograms;
// The loader page should look like Google.
const std::string kGoogleDotCom("www.google.com");
EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
EXPECT_EQ(1, prerender->number_of_loads());
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
// Although there is a client redirect, it is dropped from histograms because
// it is a Google URL. The target page itself does not load until after the
// swap.
- histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0);
+ histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT",
+ 0);
GURL navigate_url = test_server()->GetURL(
"files/prerender/prerender_location_replace.html?" +
GetActiveWebContents(), 2);
current_browser()->OpenURL(OpenURLParams(
navigate_url, Referrer(), CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED, false));
+ ui::PAGE_TRANSITION_TYPED, false));
swap_observer.Wait();
EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", 0);
- histograms.ExpectTotalCount("Prerender.gws_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT",
+ 0);
+ histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1);
+ histogram_tester().ExpectTotalCount(
"Prerender.gws_PerceivedPLTMatchedComplete", 1);
// The client redirect does /not/ count as a miss because it's a Google URL.
- histograms.ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss", 0);
+ histogram_tester().ExpectTotalCount("Prerender.PerceivedPLTFirstAfterMiss",
+ 0);
}
// Checks that client-issued redirects work with prerendering.
LoadURL(
GURL(content::kChromeUICrashURL),
content::Referrer(),
- content::PAGE_TRANSITION_TYPED,
+ ui::PAGE_TRANSITION_TYPED,
std::string());
prerender->WaitForStop();
}
current_browser()->tab_strip_model()->GetActiveWebContents();
scoped_refptr<DevToolsAgentHost> agent(
DevToolsAgentHost::GetOrCreateFor(web_contents));
- DevToolsManager* manager = DevToolsManager::GetInstance();
- FakeDevToolsClientHost client_host;
- manager->RegisterDevToolsClientHostFor(agent.get(), &client_host);
+ FakeDevToolsClient client;
+ agent->AttachClient(&client);
const char* url = "files/prerender/prerender_page.html";
PrerenderTestURL(url, FINAL_STATUS_DEVTOOLS_ATTACHED, 1);
NavigateToURLWithDisposition(url, CURRENT_TAB, false);
- manager->ClientHostClosing(&client_host);
+ agent->DetachClient();
}
// Validate that the sessionStorage namespace remains the same when swapping
// account for the MatchComplete case, and it must have a final status of
// FINAL_STATUS_WOULD_HAVE_BEEN_USED.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MatchCompleteDummy) {
- UMAHistogramHelper histograms;
+ RestorePrerenderMode restore_prerender_mode;
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
std::vector<FinalStatus> expected_final_status_queue;
expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD);
expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED);
PrerenderTestURL("files/prerender/prerender_xhr_put.html",
expected_final_status_queue, 1);
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.websame_PrerenderNotSwappedInPLT", 1);
NavigateToDestURL();
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched",
+ 0);
+ histogram_tester().ExpectTotalCount(
"Prerender.websame_PerceivedPLTMatchedComplete", 1);
}
// progress does not also classify the previous navigation as a MatchComplete.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
MatchCompleteDummyCancelNavigation) {
- UMAHistogramHelper histograms;
+ RestorePrerenderMode restore_prerender_mode;
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
// Arrange for a URL to hang.
const GURL kNoCommitUrl("http://never-respond.example.com");
expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED);
PrerenderTestURL("files/prerender/prerender_xhr_put.html",
expected_final_status_queue, 1);
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.websame_PrerenderNotSwappedInPLT", 1);
// Open the hanging URL in a new tab. Wait for both the new tab to open and
// the hanging request to be scheduled.
// should forcibly complete the previous navigation and also complete a
// WOULD_HAVE_BEEN_PRERENDERED navigation.
NavigateToDestURL();
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 2);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 2);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched",
+ 0);
+ histogram_tester().ExpectTotalCount(
"Prerender.websame_PerceivedPLTMatchedComplete", 1);
}
// Wait for the extension to set itself up and return control to us.
ASSERT_TRUE(RunExtensionTest("webnavigation/prerender")) << message_;
- ResultCatcher catcher;
+ extensions::ResultCatcher catcher;
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
// Wait for the extension to set itself up and return control to us.
ASSERT_TRUE(RunExtensionTest("tabs/on_replaced")) << message_;
- ResultCatcher catcher;
+ extensions::ResultCatcher catcher;
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
// Test that prerenders abort when navigating to a stream.
// See chrome/browser/extensions/api/streams_private/streams_private_apitest.cc
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithExtensions, StreamsTest) {
+ RestorePrerenderMode restore_prerender_mode;
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
+
ASSERT_TRUE(StartSpawnedTestServer());
const extensions::Extension* extension = LoadExtension(
// navigation had prerender not intercepted it.
// streams_private/handle_mime_type reports success if it has handled the
// application/msword type.
- ResultCatcher catcher;
+ extensions::ResultCatcher catcher;
NavigateToDestURL();
EXPECT_TRUE(catcher.GetNextResult());
}
// Checks that canceling a MatchComplete dummy doesn't result in two
// stop events.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) {
+ RestorePrerenderMode restore_prerender_mode;
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
+
std::vector<FinalStatus> expected_final_status_queue;
expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT);
expected_final_status_queue.push_back(FINAL_STATUS_CANCELLED);
// visible. Also test the right histogram events are emitted in this case.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) {
DisableJavascriptCalls();
- UMAHistogramHelper histograms;
// The prerender will not completely load until after the swap, so wait for a
// title change before calling DidPrerenderPass.
EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
EXPECT_EQ(0, prerender->number_of_loads());
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
- histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.websame_PrerenderNotSwappedInPLT", 0);
// Swap.
NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
// Now check DidDisplayPass.
EXPECT_TRUE(DidDisplayPass(GetActiveWebContents()));
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.websame_PerceivedPLTMatched", 1);
- histograms.ExpectTotalCount(
+ histogram_tester().ExpectTotalCount(
+ "Prerender.websame_PrerenderNotSwappedInPLT", 0);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.websame_PerceivedPLTMatched",
+ 1);
+ histogram_tester().ExpectTotalCount(
"Prerender.websame_PerceivedPLTMatchedComplete", 1);
}
// Checks that deferred redirects in a synchronous XHR abort the
// prerender.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredSynchronousXHR) {
+ RestorePrerenderMode restore_prerender_mode;
+ PrerenderManager::SetMode(
+ PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP);
PrerenderTestURL("files/prerender/prerender_deferred_sync_xhr.html",
FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0);
NavigateToDestURL();
FINAL_STATUS_APP_TERMINATING, 1);
content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED, false);
+ ui::PAGE_TRANSITION_TYPED, false);
params.extra_headers = "X-Custom-Header: 42\r\n";
NavigateToURLWithParams(params, false);
}
std::string post_data = "DATA";
content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED, false);
+ ui::PAGE_TRANSITION_TYPED, false);
params.uses_post = true;
params.browser_initiated_post_data =
base::RefCountedString::TakeString(&post_data);
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED, false);
+ ui::PAGE_TRANSITION_TYPED, false);
params.should_replace_current_entry = true;
NavigateToURLWithParams(params, false);
current_browser()->tab_strip_model(),
GetActiveWebContents(), 2);
current_browser()->OpenURL(OpenURLParams(
- url1, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false));
+ url1, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false));
current_browser()->OpenURL(OpenURLParams(
- url2, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false));
+ url2, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false));
swap_observer.Wait();
// The WebContents should be on url2. There may be 2 or 3 entries, depending
&GetActiveWebContents()->GetController()));
current_browser()->OpenURL(OpenURLParams(
dest_url(), Referrer(), CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED, false));
+ ui::PAGE_TRANSITION_TYPED, false));
page_load_observer.Wait();
// Navigate somewhere else. This should succeed and abort the pending swap.
current_browser()->OpenURL(OpenURLParams(GURL(url::kAboutBlankURL),
Referrer(),
CURRENT_TAB,
- content::PAGE_TRANSITION_TYPED,
+ ui::PAGE_TRANSITION_TYPED,
false));
nav_observer.Wait();
}
}
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) {
- UMAHistogramHelper histograms;
-
GURL url = test_server()->GetURL("files/prerender/prerender_page.html");
ui_test_utils::NavigateToURL(current_browser(), url);
- histograms.Fetch();
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
- histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
+ histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
+ histogram_tester().ExpectTotalCount(
+ "Prerender.none_PerceivedPLTMatchedComplete", 0);
}
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting());
}
+// Prefetch should be allowed depending on preference and network type.
+// This test is for the bsae case: no Finch overrides should never disable.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+ LocalPredictorDisableWorksBaseCase) {
+ TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
+ false /*preference_wifi_network_wifi*/,
+ false /*preference_wifi_network_4g*/,
+ false /*preference_always_network_wifi*/,
+ false /*preference_always_network_4g*/,
+ false /*preference_never_network_wifi*/,
+ false /*preference_never_network_4g*/);
+}
+
+// Prefetch should be allowed depending on preference and network type.
+// LocalPredictorOnCellularOnly should disable all wifi cases.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+ LocalPredictorDisableWorksCellularOnly) {
+ CreateTestFieldTrial("PrerenderLocalPredictorSpec",
+ "LocalPredictorOnCellularOnly=Enabled");
+ TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
+ true /*preference_wifi_network_wifi*/,
+ false /*preference_wifi_network_4g*/,
+ true /*preference_always_network_wifi*/,
+ false /*preference_always_network_4g*/,
+ true /*preference_never_network_wifi*/,
+ false /*preference_never_network_4g*/);
+}
+
+// Prefetch should be allowed depending on preference and network type.
+// LocalPredictorNetworkPredictionEnabledOnly should disable whenever
+// network predictions will not be exercised.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+ LocalPredictorDisableWorksNetworkPredictionEnableOnly) {
+ CreateTestFieldTrial("PrerenderLocalPredictorSpec",
+ "LocalPredictorNetworkPredictionEnabledOnly=Enabled");
+ TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
+ false /*preference_wifi_network_wifi*/,
+ true /*preference_wifi_network_4g*/,
+ false /*preference_always_network_wifi*/,
+ false /*preference_always_network_4g*/,
+ true /*preference_never_network_wifi*/,
+ true /*preference_never_network_4g*/);
+}
+
+// Prefetch should be allowed depending on preference and network type.
+// If LocalPredictorNetworkPredictionEnabledOnly and
+// LocalPredictorOnCellularOnly are both selected, we must disable whenever
+// network predictions are not exercised, or when we are on wifi.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+ LocalPredictorDisableWorksBothOptions) {
+ CreateTestFieldTrial("PrerenderLocalPredictorSpec",
+ "LocalPredictorOnCellularOnly=Enabled:"
+ "LocalPredictorNetworkPredictionEnabledOnly=Enabled");
+ TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
+ true /*preference_wifi_network_wifi*/,
+ true /*preference_wifi_network_4g*/,
+ true /*preference_always_network_wifi*/,
+ false /*preference_always_network_4g*/,
+ true /*preference_never_network_wifi*/,
+ true /*preference_never_network_4g*/);
+}
+
} // namespace prerender