OLD | NEW |
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 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1103 std::vector<FinalStatus> expected_final_status_queue( | 1103 std::vector<FinalStatus> expected_final_status_queue( |
1104 1, expected_final_status); | 1104 1, expected_final_status); |
1105 std::vector<TestPrerender*> prerenders; | 1105 std::vector<TestPrerender*> prerenders; |
1106 PrerenderTestURLImpl(url, | 1106 PrerenderTestURLImpl(url, |
1107 expected_final_status_queue, | 1107 expected_final_status_queue, |
1108 expected_number_of_loads).release(&prerenders); | 1108 expected_number_of_loads).release(&prerenders); |
1109 CHECK_EQ(1u, prerenders.size()); | 1109 CHECK_EQ(1u, prerenders.size()); |
1110 return scoped_ptr<TestPrerender>(prerenders[0]); | 1110 return scoped_ptr<TestPrerender>(prerenders[0]); |
1111 } | 1111 } |
1112 | 1112 |
| 1113 // Navigates to a URL, unrelated to prerendering |
| 1114 void NavigateStraightToURL(const std::string dest_html_file) { |
| 1115 ui_test_utils::NavigateToURLWithDisposition( |
| 1116 current_browser(), |
| 1117 test_server()->GetURL(dest_html_file), |
| 1118 CURRENT_TAB, |
| 1119 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 1120 } |
| 1121 |
1113 void NavigateToDestURL() const { | 1122 void NavigateToDestURL() const { |
1114 NavigateToDestURLWithDisposition(CURRENT_TAB, true); | 1123 NavigateToDestURLWithDisposition(CURRENT_TAB, true); |
1115 } | 1124 } |
1116 | 1125 |
1117 // Opens the url in a new tab, with no opener. | 1126 // Opens the url in a new tab, with no opener. |
1118 void NavigateToDestURLWithDisposition( | 1127 void NavigateToDestURLWithDisposition( |
1119 WindowOpenDisposition disposition, | 1128 WindowOpenDisposition disposition, |
1120 bool expect_swap_to_succeed) const { | 1129 bool expect_swap_to_succeed) const { |
1121 NavigateToURLWithParams( | 1130 NavigateToURLWithParams( |
1122 content::OpenURLParams(dest_url_, Referrer(), disposition, | 1131 content::OpenURLParams(dest_url_, Referrer(), disposition, |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1463 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX, | 1472 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX, |
1464 base::ASCIIToUTF16(page_title)); | 1473 base::ASCIIToUTF16(page_title)); |
1465 } | 1474 } |
1466 | 1475 |
1467 // Returns a string for pattern-matching TaskManager prerender entries. | 1476 // Returns a string for pattern-matching TaskManager prerender entries. |
1468 base::string16 MatchTaskManagerPrerender(const char* page_title) { | 1477 base::string16 MatchTaskManagerPrerender(const char* page_title) { |
1469 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX, | 1478 return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX, |
1470 base::ASCIIToUTF16(page_title)); | 1479 base::ASCIIToUTF16(page_title)); |
1471 } | 1480 } |
1472 | 1481 |
| 1482 void RunJSReturningString(const char* js, std::string* result) { |
| 1483 ASSERT_TRUE( |
| 1484 content::ExecuteScriptAndExtractString( |
| 1485 GetActiveWebContents(), |
| 1486 base::StringPrintf("window.domAutomationController.send(%s)", |
| 1487 js).c_str(), |
| 1488 result)); |
| 1489 } |
| 1490 |
| 1491 void RunJS(const char* js) { |
| 1492 ASSERT_TRUE(content::ExecuteScript( |
| 1493 GetActiveWebContents(), |
| 1494 base::StringPrintf("window.domAutomationController.send(%s)", |
| 1495 js).c_str())); |
| 1496 } |
| 1497 |
1473 protected: | 1498 protected: |
1474 bool autostart_test_server_; | 1499 bool autostart_test_server_; |
1475 | 1500 |
1476 private: | 1501 private: |
1477 // TODO(davidben): Remove this altogether so the tests don't globally assume | 1502 // TODO(davidben): Remove this altogether so the tests don't globally assume |
1478 // only one prerender. | 1503 // only one prerender. |
1479 TestPrerenderContents* GetPrerenderContents() const { | 1504 TestPrerenderContents* GetPrerenderContents() const { |
1480 return GetPrerenderContentsFor(dest_url_); | 1505 return GetPrerenderContentsFor(dest_url_); |
1481 } | 1506 } |
1482 | 1507 |
(...skipping 2659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4142 UMAHistogramHelper histograms; | 4167 UMAHistogramHelper histograms; |
4143 | 4168 |
4144 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 4169 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
4145 ui_test_utils::NavigateToURL(current_browser(), url); | 4170 ui_test_utils::NavigateToURL(current_browser(), url); |
4146 histograms.Fetch(); | 4171 histograms.Fetch(); |
4147 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 4172 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
4148 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 4173 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
4149 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); | 4174 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); |
4150 } | 4175 } |
4151 | 4176 |
| 4177 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 4178 PrerenderCookieChangeConflictTest) { |
| 4179 NavigateStraightToURL( |
| 4180 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); |
| 4181 |
| 4182 GURL url = test_server()->GetURL( |
| 4183 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); |
| 4184 |
| 4185 scoped_ptr<TestPrerender> prerender = |
| 4186 ExpectPrerender(FINAL_STATUS_COOKIE_CONFLICT); |
| 4187 AddPrerender(url, 1); |
| 4188 prerender->WaitForStart(); |
| 4189 prerender->WaitForLoads(1); |
| 4190 |
| 4191 // The prerender has loaded. Ensure that the change is not visible |
| 4192 // to visible tabs. |
| 4193 std::string value; |
| 4194 RunJSReturningString("GetCookie('c')", &value); |
| 4195 ASSERT_EQ(value, "1"); |
| 4196 |
| 4197 // Make a conflicting cookie change, which should cancel the prerender. |
| 4198 RunJS("SetCookie('c', '3')"); |
| 4199 prerender->WaitForStop(); |
| 4200 } |
| 4201 |
| 4202 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCookieChangeUseTest) { |
| 4203 NavigateStraightToURL( |
| 4204 "files/prerender/prerender_cookie.html?set=1&key=c&value=1"); |
| 4205 |
| 4206 GURL url = test_server()->GetURL( |
| 4207 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); |
| 4208 |
| 4209 scoped_ptr<TestPrerender> prerender = ExpectPrerender(FINAL_STATUS_USED); |
| 4210 AddPrerender(url, 1); |
| 4211 prerender->WaitForStart(); |
| 4212 prerender->WaitForLoads(1); |
| 4213 |
| 4214 // The prerender has loaded. Ensure that the change is not visible |
| 4215 // to visible tabs. |
| 4216 std::string value; |
| 4217 RunJSReturningString("GetCookie('c')", &value); |
| 4218 ASSERT_EQ(value, "1"); |
| 4219 |
| 4220 // Navigate to the prerendered URL. The prerender should be swapped in, |
| 4221 // and the changes should now be visible. |
| 4222 ui_test_utils::NavigateToURLWithDisposition( |
| 4223 current_browser(), |
| 4224 url, |
| 4225 CURRENT_TAB, |
| 4226 ui_test_utils::BROWSER_TEST_NONE); |
| 4227 NavigateStraightToURL( |
| 4228 "files/prerender/prerender_cookie.html?set=1&key=c&value=2"); |
| 4229 RunJSReturningString("GetCookie('c')", &value); |
| 4230 ASSERT_EQ(value, "2"); |
| 4231 } |
| 4232 |
4152 class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest { | 4233 class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest { |
4153 public: | 4234 public: |
4154 virtual void SetUpOnMainThread() OVERRIDE { | 4235 virtual void SetUpOnMainThread() OVERRIDE { |
4155 Profile* normal_profile = current_browser()->profile(); | 4236 Profile* normal_profile = current_browser()->profile(); |
4156 set_browser(ui_test_utils::OpenURLOffTheRecord( | 4237 set_browser(ui_test_utils::OpenURLOffTheRecord( |
4157 normal_profile, GURL("about:blank"))); | 4238 normal_profile, GURL("about:blank"))); |
4158 PrerenderBrowserTest::SetUpOnMainThread(); | 4239 PrerenderBrowserTest::SetUpOnMainThread(); |
4159 } | 4240 } |
4160 }; | 4241 }; |
4161 | 4242 |
4162 // Checks that prerendering works in incognito mode. | 4243 // Checks that prerendering works in incognito mode. |
4163 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { | 4244 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { |
4164 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4245 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
4165 NavigateToDestURL(); | 4246 NavigateToDestURL(); |
4166 } | 4247 } |
4167 | 4248 |
4168 // Checks that prerenders are aborted when an incognito profile is closed. | 4249 // Checks that prerenders are aborted when an incognito profile is closed. |
4169 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, | 4250 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, |
4170 PrerenderIncognitoClosed) { | 4251 PrerenderIncognitoClosed) { |
4171 scoped_ptr<TestPrerender> prerender = | 4252 scoped_ptr<TestPrerender> prerender = |
4172 PrerenderTestURL("files/prerender/prerender_page.html", | 4253 PrerenderTestURL("files/prerender/prerender_page.html", |
4173 FINAL_STATUS_PROFILE_DESTROYED, 1); | 4254 FINAL_STATUS_PROFILE_DESTROYED, 1); |
4174 current_browser()->window()->Close(); | 4255 current_browser()->window()->Close(); |
4175 prerender->WaitForStop(); | 4256 prerender->WaitForStop(); |
4176 } | 4257 } |
4177 | 4258 |
4178 } // namespace prerender | 4259 } // namespace prerender |
OLD | NEW |