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

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

Issue 233353003: Only commit cookie changes in prerenders after a prerender is shown (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add browser tests, fix a bug in what was changed yesterday. Created 6 years, 7 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 | Annotate | Revision Log
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 1092 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698