| 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 {
|
|
|