Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 591313005: Provide a way to specify in Finch trials to disable prerender local (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix test Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_field_trial.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <deque> 5 #include <deque>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 12 matching lines...) Expand all
23 #include "chrome/browser/browsing_data/browsing_data_helper.h" 23 #include "chrome/browser/browsing_data/browsing_data_helper.h"
24 #include "chrome/browser/browsing_data/browsing_data_remover.h" 24 #include "chrome/browser/browsing_data/browsing_data_remover.h"
25 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h" 25 #include "chrome/browser/browsing_data/browsing_data_remover_test_util.h"
26 #include "chrome/browser/chrome_content_browser_client.h" 26 #include "chrome/browser/chrome_content_browser_client.h"
27 #include "chrome/browser/chrome_notification_types.h" 27 #include "chrome/browser/chrome_notification_types.h"
28 #include "chrome/browser/content_settings/host_content_settings_map.h" 28 #include "chrome/browser/content_settings/host_content_settings_map.h"
29 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h" 29 #include "chrome/browser/extensions/api/web_navigation/web_navigation_api.h"
30 #include "chrome/browser/extensions/extension_apitest.h" 30 #include "chrome/browser/extensions/extension_apitest.h"
31 #include "chrome/browser/external_protocol/external_protocol_handler.h" 31 #include "chrome/browser/external_protocol/external_protocol_handler.h"
32 #include "chrome/browser/favicon/favicon_tab_helper.h" 32 #include "chrome/browser/favicon/favicon_tab_helper.h"
33 #include "chrome/browser/net/prediction_options.h"
33 #include "chrome/browser/predictors/autocomplete_action_predictor.h" 34 #include "chrome/browser/predictors/autocomplete_action_predictor.h"
34 #include "chrome/browser/predictors/autocomplete_action_predictor_factory.h" 35 #include "chrome/browser/predictors/autocomplete_action_predictor_factory.h"
35 #include "chrome/browser/prerender/prerender_contents.h" 36 #include "chrome/browser/prerender/prerender_contents.h"
37 #include "chrome/browser/prerender/prerender_field_trial.h"
36 #include "chrome/browser/prerender/prerender_handle.h" 38 #include "chrome/browser/prerender/prerender_handle.h"
37 #include "chrome/browser/prerender/prerender_link_manager.h" 39 #include "chrome/browser/prerender/prerender_link_manager.h"
38 #include "chrome/browser/prerender/prerender_link_manager_factory.h" 40 #include "chrome/browser/prerender/prerender_link_manager_factory.h"
39 #include "chrome/browser/prerender/prerender_manager.h" 41 #include "chrome/browser/prerender/prerender_manager.h"
40 #include "chrome/browser/prerender/prerender_manager_factory.h" 42 #include "chrome/browser/prerender/prerender_manager_factory.h"
41 #include "chrome/browser/profiles/profile.h" 43 #include "chrome/browser/profiles/profile.h"
42 #include "chrome/browser/profiles/profile_io_data.h" 44 #include "chrome/browser/profiles/profile_io_data.h"
43 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h" 45 #include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate. h"
44 #include "chrome/browser/safe_browsing/database_manager.h" 46 #include "chrome/browser/safe_browsing/database_manager.h"
45 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 47 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
(...skipping 13 matching lines...) Expand all
59 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 61 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
60 #include "chrome/common/chrome_paths.h" 62 #include "chrome/common/chrome_paths.h"
61 #include "chrome/common/chrome_switches.h" 63 #include "chrome/common/chrome_switches.h"
62 #include "chrome/common/extensions/extension_constants.h" 64 #include "chrome/common/extensions/extension_constants.h"
63 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h" 65 #include "chrome/common/extensions/manifest_handlers/mime_types_handler.h"
64 #include "chrome/common/pref_names.h" 66 #include "chrome/common/pref_names.h"
65 #include "chrome/grit/generated_resources.h" 67 #include "chrome/grit/generated_resources.h"
66 #include "chrome/test/base/in_process_browser_test.h" 68 #include "chrome/test/base/in_process_browser_test.h"
67 #include "chrome/test/base/test_switches.h" 69 #include "chrome/test/base/test_switches.h"
68 #include "chrome/test/base/ui_test_utils.h" 70 #include "chrome/test/base/ui_test_utils.h"
71 #include "components/variations/entropy_provider.h"
72 #include "components/variations/variations_associated_data.h"
69 #include "content/public/browser/browser_message_filter.h" 73 #include "content/public/browser/browser_message_filter.h"
70 #include "content/public/browser/devtools_agent_host.h" 74 #include "content/public/browser/devtools_agent_host.h"
71 #include "content/public/browser/navigation_controller.h" 75 #include "content/public/browser/navigation_controller.h"
72 #include "content/public/browser/navigation_entry.h" 76 #include "content/public/browser/navigation_entry.h"
73 #include "content/public/browser/notification_service.h" 77 #include "content/public/browser/notification_service.h"
74 #include "content/public/browser/render_frame_host.h" 78 #include "content/public/browser/render_frame_host.h"
75 #include "content/public/browser/render_process_host.h" 79 #include "content/public/browser/render_process_host.h"
76 #include "content/public/browser/render_view_host.h" 80 #include "content/public/browser/render_view_host.h"
77 #include "content/public/browser/site_instance.h" 81 #include "content/public/browser/site_instance.h"
78 #include "content/public/browser/web_contents.h" 82 #include "content/public/browser/web_contents.h"
(...skipping 12 matching lines...) Expand all
91 #include "net/ssl/ssl_cert_request_info.h" 95 #include "net/ssl/ssl_cert_request_info.h"
92 #include "net/test/url_request/url_request_mock_http_job.h" 96 #include "net/test/url_request/url_request_mock_http_job.h"
93 #include "net/url_request/url_request_context.h" 97 #include "net/url_request/url_request_context.h"
94 #include "net/url_request/url_request_context_getter.h" 98 #include "net/url_request/url_request_context_getter.h"
95 #include "net/url_request/url_request_filter.h" 99 #include "net/url_request/url_request_filter.h"
96 #include "net/url_request/url_request_interceptor.h" 100 #include "net/url_request/url_request_interceptor.h"
97 #include "net/url_request/url_request_job.h" 101 #include "net/url_request/url_request_job.h"
98 #include "ui/base/l10n/l10n_util.h" 102 #include "ui/base/l10n/l10n_util.h"
99 #include "url/gurl.h" 103 #include "url/gurl.h"
100 104
105 using chrome_browser_net::NetworkPredictionOptions;
101 using content::BrowserThread; 106 using content::BrowserThread;
102 using content::DevToolsAgentHost; 107 using content::DevToolsAgentHost;
103 using content::NavigationController; 108 using content::NavigationController;
104 using content::OpenURLParams; 109 using content::OpenURLParams;
105 using content::Referrer; 110 using content::Referrer;
106 using content::RenderFrameHost; 111 using content::RenderFrameHost;
107 using content::RenderViewHost; 112 using content::RenderViewHost;
108 using content::RenderWidgetHost; 113 using content::RenderWidgetHost;
109 using content::TestNavigationObserver; 114 using content::TestNavigationObserver;
110 using content::WebContents; 115 using content::WebContents;
111 using content::WebContentsObserver; 116 using content::WebContentsObserver;
117 using net::NetworkChangeNotifier;
112 using task_manager::browsertest_util::WaitForTaskManagerRows; 118 using task_manager::browsertest_util::WaitForTaskManagerRows;
113 119
114 // Prerender tests work as follows: 120 // Prerender tests work as follows:
115 // 121 //
116 // A page with a prefetch link to the test page is loaded. Once prerendered, 122 // A page with a prefetch link to the test page is loaded. Once prerendered,
117 // its Javascript function DidPrerenderPass() is called, which returns true if 123 // its Javascript function DidPrerenderPass() is called, which returns true if
118 // the page behaves as expected when prerendered. 124 // the page behaves as expected when prerendered.
119 // 125 //
120 // The prerendered page is then displayed on a tab. The Javascript function 126 // The prerendered page is then displayed on a tab. The Javascript function
121 // DidDisplayPass() is called, and returns true if the page behaved as it 127 // DidDisplayPass() is called, and returns true if the page behaved as it
122 // should while being displayed. 128 // should while being displayed.
123 129
124 namespace prerender { 130 namespace prerender {
125 131
126 namespace { 132 namespace {
127 133
134 class MockNetworkChangeNotifierWIFI : public NetworkChangeNotifier {
135 public:
136 virtual ConnectionType GetCurrentConnectionType() const OVERRIDE {
137 return NetworkChangeNotifier::CONNECTION_WIFI;
138 }
139 };
140
141 class MockNetworkChangeNotifier4G : public NetworkChangeNotifier {
142 public:
143 virtual ConnectionType GetCurrentConnectionType() const OVERRIDE {
144 return NetworkChangeNotifier::CONNECTION_4G;
145 }
146 };
147
128 // Constants used in the test HTML files. 148 // Constants used in the test HTML files.
129 const char* kReadyTitle = "READY"; 149 const char* kReadyTitle = "READY";
130 const char* kPassTitle = "PASS"; 150 const char* kPassTitle = "PASS";
131 151
132 std::string CreateClientRedirect(const std::string& dest_url) { 152 std::string CreateClientRedirect(const std::string& dest_url) {
133 const char* const kClientRedirectBase = "client-redirect?"; 153 const char* const kClientRedirectBase = "client-redirect?";
134 return kClientRedirectBase + net::EscapeQueryParamValue(dest_url, false); 154 return kClientRedirectBase + net::EscapeQueryParamValue(dest_url, false);
135 } 155 }
136 156
137 std::string CreateServerRedirect(const std::string& dest_url) { 157 std::string CreateServerRedirect(const std::string& dest_url) {
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 // explicitly registered. 1083 // explicitly registered.
1064 base::FilePath app_dir; 1084 base::FilePath app_dir;
1065 PathService::Get(chrome::DIR_APP, &app_dir); 1085 PathService::Get(chrome::DIR_APP, &app_dir);
1066 command_line->AppendSwitchPath( 1086 command_line->AppendSwitchPath(
1067 switches::kExtraPluginDir, 1087 switches::kExtraPluginDir,
1068 app_dir.Append(FILE_PATH_LITERAL("plugins"))); 1088 app_dir.Append(FILE_PATH_LITERAL("plugins")));
1069 #endif 1089 #endif
1070 command_line->AppendSwitch(switches::kAlwaysAuthorizePlugins); 1090 command_line->AppendSwitch(switches::kAlwaysAuthorizePlugins);
1071 } 1091 }
1072 1092
1093 void SetPreference(NetworkPredictionOptions value) {
1094 browser()->profile()->GetPrefs()->SetInteger(
1095 prefs::kNetworkPredictionOptions, value);
1096 }
1097
1098 void CreateTestFieldTrial(const std::string& name,
1099 const std::string& group_name) {
1100 base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial(
1101 name, group_name);
1102 trial->group();
1103 }
1104
1105 // Verifies, for the current field trial, whether
1106 // ShouldDisableLocalPredictorDueToPreferencesAndNetwork produces the desired
1107 // output.
1108 void TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
1109 bool preference_wifi_network_wifi,
1110 bool preference_wifi_network_4g,
1111 bool preference_always_network_wifi,
1112 bool preference_always_network_4g,
1113 bool preference_never_network_wifi,
1114 bool preference_never_network_4g) {
1115 Profile* profile = browser()->profile();
1116
1117 // Set real NetworkChangeNotifier singleton aside.
1118 scoped_ptr<NetworkChangeNotifier::DisableForTest> disable_for_test(
1119 new NetworkChangeNotifier::DisableForTest);
1120
1121 // Set preference to WIFI_ONLY: prefetch when not on cellular.
1122 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_WIFI_ONLY);
1123 {
1124 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
1125 EXPECT_EQ(
1126 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1127 preference_wifi_network_wifi);
1128 }
1129 {
1130 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
1131 EXPECT_EQ(
1132 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1133 preference_wifi_network_4g);
1134 }
1135
1136 // Set preference to ALWAYS: always prefetch.
1137 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_ALWAYS);
1138 {
1139 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
1140 EXPECT_EQ(
1141 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1142 preference_always_network_wifi);
1143 }
1144 {
1145 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
1146 EXPECT_EQ(
1147 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1148 preference_always_network_4g);
1149 }
1150
1151 // Set preference to NEVER: never prefetch.
1152 SetPreference(NetworkPredictionOptions::NETWORK_PREDICTION_NEVER);
1153 {
1154 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifierWIFI);
1155 EXPECT_EQ(
1156 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1157 preference_never_network_wifi);
1158 }
1159 {
1160 scoped_ptr<NetworkChangeNotifier> mock(new MockNetworkChangeNotifier4G);
1161 EXPECT_EQ(
1162 ShouldDisableLocalPredictorDueToPreferencesAndNetwork(profile),
1163 preference_never_network_4g);
1164 }
1165 }
1166
1073 virtual void SetUpOnMainThread() OVERRIDE { 1167 virtual void SetUpOnMainThread() OVERRIDE {
1074 current_browser()->profile()->GetPrefs()->SetBoolean( 1168 current_browser()->profile()->GetPrefs()->SetBoolean(
1075 prefs::kPromptForDownload, false); 1169 prefs::kPromptForDownload, false);
1076 IncreasePrerenderMemory(); 1170 IncreasePrerenderMemory();
1077 if (autostart_test_server_) 1171 if (autostart_test_server_)
1078 ASSERT_TRUE(test_server()->Start()); 1172 ASSERT_TRUE(test_server()->Start());
1079 ChromeResourceDispatcherHostDelegate:: 1173 ChromeResourceDispatcherHostDelegate::
1080 SetExternalProtocolHandlerDelegateForTesting( 1174 SetExternalProtocolHandlerDelegateForTesting(
1081 &external_protocol_handler_delegate_); 1175 &external_protocol_handler_delegate_);
1082 1176
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
1662 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_; 1756 NeverRunsExternalProtocolHandlerDelegate external_protocol_handler_delegate_;
1663 GURL dest_url_; 1757 GURL dest_url_;
1664 scoped_ptr<net::SpawnedTestServer> https_src_server_; 1758 scoped_ptr<net::SpawnedTestServer> https_src_server_;
1665 bool call_javascript_; 1759 bool call_javascript_;
1666 bool check_load_events_; 1760 bool check_load_events_;
1667 std::string loader_host_override_; 1761 std::string loader_host_override_;
1668 std::string loader_path_; 1762 std::string loader_path_;
1669 std::string loader_query_; 1763 std::string loader_query_;
1670 Browser* explicitly_set_browser_; 1764 Browser* explicitly_set_browser_;
1671 base::HistogramTester histogram_tester_; 1765 base::HistogramTester histogram_tester_;
1766 scoped_ptr<base::FieldTrialList> field_trial_list_;
1672 }; 1767 };
1673 1768
1674 // Checks that a page is correctly prerendered in the case of a 1769 // Checks that a page is correctly prerendered in the case of a
1675 // <link rel=prerender> tag and then loaded into a tab in response to a 1770 // <link rel=prerender> tag and then loaded into a tab in response to a
1676 // navigation. 1771 // navigation.
1677 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { 1772 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) {
1678 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 1773 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
1679 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); 1774 EXPECT_EQ(1, GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
1680 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 1775 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1681 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 1776 histogram_tester().ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
(...skipping 2764 matching lines...) Expand 10 before | Expand all | Expand 10 after
4446 prerender->contents()->set_skip_final_checks(true); 4541 prerender->contents()->set_skip_final_checks(true);
4447 4542
4448 // Navigate to the URL entered. 4543 // Navigate to the URL entered.
4449 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); 4544 omnibox_view->model()->AcceptInput(CURRENT_TAB, false);
4450 4545
4451 // Prerender should be running, but abandoned. 4546 // Prerender should be running, but abandoned.
4452 EXPECT_TRUE( 4547 EXPECT_TRUE(
4453 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); 4548 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting());
4454 } 4549 }
4455 4550
4551 // Prefetch should be allowed depending on preference and network type.
4552 // This test is for the bsae case: no Finch overrides should never disable.
4553 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
4554 LocalPredictorDisableWorksBaseCase) {
4555 TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
4556 false /*preference_wifi_network_wifi*/,
4557 false /*preference_wifi_network_4g*/,
4558 false /*preference_always_network_wifi*/,
4559 false /*preference_always_network_4g*/,
4560 false /*preference_never_network_wifi*/,
4561 false /*preference_never_network_4g*/);
4562 }
4563
4564 // Prefetch should be allowed depending on preference and network type.
4565 // LocalPredictorOnCellularOnly should disable all wifi cases.
4566 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
4567 LocalPredictorDisableWorksCellularOnly) {
4568 CreateTestFieldTrial("PrerenderLocalPredictorSpec",
4569 "LocalPredictorOnCellularOnly=Enabled");
4570 TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
4571 true /*preference_wifi_network_wifi*/,
4572 false /*preference_wifi_network_4g*/,
4573 true /*preference_always_network_wifi*/,
4574 false /*preference_always_network_4g*/,
4575 true /*preference_never_network_wifi*/,
4576 false /*preference_never_network_4g*/);
4577 }
4578
4579 // Prefetch should be allowed depending on preference and network type.
4580 // LocalPredictorNetworkPredictionEnabledOnly should disable whenever
4581 // network predictions will not be exercised.
4582 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
4583 LocalPredictorDisableWorksNetworkPredictionEnableOnly) {
4584 CreateTestFieldTrial("PrerenderLocalPredictorSpec",
4585 "LocalPredictorNetworkPredictionEnabledOnly=Enabled");
4586 TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
4587 false /*preference_wifi_network_wifi*/,
4588 true /*preference_wifi_network_4g*/,
4589 false /*preference_always_network_wifi*/,
4590 false /*preference_always_network_4g*/,
4591 true /*preference_never_network_wifi*/,
4592 true /*preference_never_network_4g*/);
4593 }
4594
4595 // Prefetch should be allowed depending on preference and network type.
4596 // If LocalPredictorNetworkPredictionEnabledOnly and
4597 // LocalPredictorOnCellularOnly are both selected, we must disable whenever
4598 // network predictions are not exercised, or when we are on wifi.
4599 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
4600 LocalPredictorDisableWorksBothOptions) {
4601 CreateTestFieldTrial("PrerenderLocalPredictorSpec",
4602 "LocalPredictorOnCellularOnly=Enabled:"
4603 "LocalPredictorNetworkPredictionEnabledOnly=Enabled");
4604 TestShouldDisableLocalPredictorPreferenceNetworkMatrix(
4605 true /*preference_wifi_network_wifi*/,
4606 true /*preference_wifi_network_4g*/,
4607 true /*preference_always_network_wifi*/,
4608 false /*preference_always_network_4g*/,
4609 true /*preference_never_network_wifi*/,
4610 true /*preference_never_network_4g*/);
4611 }
4612
4456 } // namespace prerender 4613 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_field_trial.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698