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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_browsertest.cc
===================================================================
--- chrome/browser/prerender/prerender_browsertest.cc (revision 265252)
+++ chrome/browser/prerender/prerender_browsertest.cc (working copy)
@@ -1110,6 +1110,15 @@
return scoped_ptr<TestPrerender>(prerenders[0]);
}
+ // Navigates to a URL, unrelated to prerendering
+ void NavigateStraightToURL(const std::string dest_html_file) {
+ ui_test_utils::NavigateToURLWithDisposition(
+ current_browser(),
+ test_server()->GetURL(dest_html_file),
+ CURRENT_TAB,
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
+ }
+
void NavigateToDestURL() const {
NavigateToDestURLWithDisposition(CURRENT_TAB, true);
}
@@ -1470,6 +1479,22 @@
base::ASCIIToUTF16(page_title));
}
+ void RunJSReturningString(const char* js, std::string* result) {
+ ASSERT_TRUE(
+ content::ExecuteScriptAndExtractString(
+ GetActiveWebContents(),
+ base::StringPrintf("window.domAutomationController.send(%s)",
+ js).c_str(),
+ result));
+ }
+
+ void RunJS(const char* js) {
+ ASSERT_TRUE(content::ExecuteScript(
+ GetActiveWebContents(),
+ base::StringPrintf("window.domAutomationController.send(%s)",
+ js).c_str()));
+ }
+
protected:
bool autostart_test_server_;
@@ -4149,6 +4174,62 @@
histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
}
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
+ PrerenderCookieChangeConflictTest) {
+ NavigateStraightToURL(
+ "files/prerender/prerender_cookie.html?set=1&key=c&value=1");
+
+ GURL url = test_server()->GetURL(
+ "files/prerender/prerender_cookie.html?set=1&key=c&value=2");
+
+ scoped_ptr<TestPrerender> prerender =
+ ExpectPrerender(FINAL_STATUS_COOKIE_CONFLICT);
+ AddPrerender(url, 1);
+ prerender->WaitForStart();
+ prerender->WaitForLoads(1);
+
+ // The prerender has loaded. Ensure that the change is not visible
+ // to visible tabs.
+ std::string value;
+ RunJSReturningString("GetCookie('c')", &value);
+ ASSERT_EQ(value, "1");
+
+ // Make a conflicting cookie change, which should cancel the prerender.
+ RunJS("SetCookie('c', '3')");
+ prerender->WaitForStop();
+}
+
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCookieChangeUseTest) {
+ NavigateStraightToURL(
+ "files/prerender/prerender_cookie.html?set=1&key=c&value=1");
+
+ GURL url = test_server()->GetURL(
+ "files/prerender/prerender_cookie.html?set=1&key=c&value=2");
+
+ scoped_ptr<TestPrerender> prerender = ExpectPrerender(FINAL_STATUS_USED);
+ AddPrerender(url, 1);
+ prerender->WaitForStart();
+ prerender->WaitForLoads(1);
+
+ // The prerender has loaded. Ensure that the change is not visible
+ // to visible tabs.
+ std::string value;
+ RunJSReturningString("GetCookie('c')", &value);
+ ASSERT_EQ(value, "1");
+
+ // Navigate to the prerendered URL. The prerender should be swapped in,
+ // and the changes should now be visible.
+ ui_test_utils::NavigateToURLWithDisposition(
+ current_browser(),
+ url,
+ CURRENT_TAB,
+ ui_test_utils::BROWSER_TEST_NONE);
+ NavigateStraightToURL(
+ "files/prerender/prerender_cookie.html?set=1&key=c&value=2");
+ RunJSReturningString("GetCookie('c')", &value);
+ ASSERT_EQ(value, "2");
+}
+
class PrerenderIncognitoBrowserTest : public PrerenderBrowserTest {
public:
virtual void SetUpOnMainThread() OVERRIDE {

Powered by Google App Engine
This is Rietveld 408576698