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

Unified Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 8392041: Prerendered tabs use the same SessionStorage namespace as the tab that triggered the prerender. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix NetInternals browser test Created 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 2d412288ab02b42a4b174cf7d86a89c62d5aebfe..621f07ef8b553e32d15ce62f6a6413163670e7d1 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -95,6 +95,7 @@ bool ShouldRenderPrerenderedPageCorrectly(FinalStatus status) {
case FINAL_STATUS_RENDERER_CRASHED:
case FINAL_STATUS_CANCELLED:
case FINAL_STATUS_DEVTOOLS_ATTACHED:
+ case FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH:
return true;
default:
return false;
@@ -107,12 +108,14 @@ class TestPrerenderContents : public PrerenderContents {
TestPrerenderContents(
PrerenderManager* prerender_manager,
PrerenderTracker* prerender_tracker,
+ SessionStorageNamespace* session_storage_namespace,
Profile* profile,
const GURL& url,
const GURL& referrer,
int expected_number_of_loads,
FinalStatus expected_final_status)
- : PrerenderContents(prerender_manager, prerender_tracker, profile,
+ : PrerenderContents(prerender_manager, prerender_tracker,
+ session_storage_namespace, profile,
url, referrer, ORIGIN_LINK_REL_PRERENDER,
PrerenderManager::kNoExperiment),
number_of_loads_(0),
@@ -295,6 +298,7 @@ class WaitForLoadPrerenderContentsFactory : public PrerenderContents::Factory {
virtual PrerenderContents* CreatePrerenderContents(
PrerenderManager* prerender_manager,
PrerenderTracker* prerender_tracker,
+ SessionStorageNamespace* session_storage_namespace,
Profile* profile,
const GURL& url,
const GURL& referrer,
@@ -309,6 +313,7 @@ class WaitForLoadPrerenderContentsFactory : public PrerenderContents::Factory {
" with expected final status " << expected_final_status;
VLOG(1) << expected_final_status_queue_.size() << " left in the queue.";
return new TestPrerenderContents(prerender_manager, prerender_tracker,
+ session_storage_namespace,
profile, url,
referrer, expected_number_of_loads_,
expected_final_status);
@@ -559,6 +564,23 @@ class PrerenderBrowserTest : public InProcessBrowserTest {
EXPECT_TRUE(original_prerender_page);
}
+ // Goes back to the page that was active before the prerender was swapped
+ // in. This must be called when the prerendered page is the current page
+ // in the active tab.
+ void GoBackToPageBeforePrerender(Browser* browser) {
+ ui_test_utils::WindowedNotificationObserver back_nav_observer(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+ content::NotificationService::AllSources());
+ browser->GoBack(CURRENT_TAB);
+ back_nav_observer.Wait();
+ bool js_result;
+ ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
+ browser->GetSelectedTabContents()->render_view_host(), L"",
+ L"window.domAutomationController.send(DidBackToOriginalPagePass())",
+ &js_result));
+ EXPECT_TRUE(js_result);
+ }
+
// Should be const but test_server()->GetURL(...) is not const.
void NavigateToURL(const std::string& dest_html_file) {
GURL dest_url = test_server()->GetURL(dest_html_file);
@@ -808,42 +830,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityQuickSwitch) {
NavigateToDestURL();
}
-// Checks that the visibility API works when opening a page in a new hidden
-// tab.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityBackgroundTab) {
- PrerenderTestURL("files/prerender/prerender_visibility_hidden.html",
mmenke 2011/11/02 02:27:55 nit: The file this references is no longer needed
cbentzel 2011/11/02 15:57:08 Done.
- FINAL_STATUS_USED,
- 1);
- NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB);
-}
-
-// Checks that the visibility API works when opening a page in a new hidden
-// tab, which is switched to before it stops loading.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderVisibilityBackgroundTabQuickSwitch) {
- PrerenderTestURL("files/prerender/prerender_visibility_hidden_quick.html",
mmenke 2011/11/02 02:27:55 nit: The file this references is no longer needed
cbentzel 2011/11/02 15:57:08 Done.
- FINAL_STATUS_USED, 0);
- NavigateToDestURLWithDisposition(NEW_BACKGROUND_TAB);
-}
-
-// Checks that the visibility API works when opening a page in a new foreground
-// tab.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderVisibilityForegroundTab) {
- PrerenderTestURL("files/prerender/prerender_visibility.html",
- FINAL_STATUS_USED,
- 1);
- NavigateToDestURLWithDisposition(NEW_FOREGROUND_TAB);
-}
-
-// Checks that the visibility API works when the prerender is quickly opened
-// in a new tab foreground before it stops loading.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderVisibilityForegroundTabQuickSwitch) {
- PrerenderTestURL("files/prerender/prerender_visibility_quick.html",
- FINAL_STATUS_USED, 0);
- NavigateToDestURL();
-}
-
// Checks that the prerendering of a page is canceled correctly when a
// Javascript alert is called.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAlertBeforeOnload) {
@@ -1548,31 +1534,6 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
OpenDestURLViaClickTarget();
}
-// Checks that if a page is opened in a new window by javascript and both the
-// pages are in different domains, the prerendered page is used.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderCrossDomainWindowOpenerWindowOpen) {
- PrerenderTestURL(
- GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
- FINAL_STATUS_USED,
- 1);
- OpenDestURLViaWindowOpen();
-}
-
-// Checks that if a page is opened due to click on a href with target="_blank"
-// and both pages are in different domains, the prerendered page is used.
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderCrossDomainWindowOpenerClickTarget) {
- PrerenderTestURL(
- GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
- FINAL_STATUS_USED,
- 1);
- OpenDestURLViaClickTarget();
-}
-
-// TODO(shishir): Add a test for the case when the page having the
-// prerendering link already has an opener set.
-
// Checks that a top-level page which would normally request an SSL client
// certificate will never be seen since it's an https top-level resource.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertTopLevel) {
@@ -1839,72 +1800,25 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) {
GoBackToPrerender(browser());
}
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewWindowClickGoBack) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewWindow) {
PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
+ FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1);
OpenDestURLViaClickNewWindow();
- Browser* new_browser = BrowserList::GetLastActive();
- NavigateToNextPageAfterPrerender(new_browser);
- GoBackToPrerender(new_browser);
}
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewWindowNavigateGoBack) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewForegroundTab) {
PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
- 1);
- OpenDestURLViaClickNewWindow();
- Browser* new_browser = BrowserList::GetLastActive();
- ClickToNextPageAfterPrerender(new_browser);
- GoBackToPrerender(new_browser);
-}
-
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewForegroundTabClickGoBack) {
- PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
+ FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1);
OpenDestURLViaClickNewForegroundTab();
- NavigateToNextPageAfterPrerender(browser());
- GoBackToPrerender(browser());
}
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewForegroundTabNavigateGoBack) {
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNewBackgroundTab) {
PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
- 1);
- OpenDestURLViaClickNewForegroundTab();
- ClickToNextPageAfterPrerender(browser());
- GoBackToPrerender(browser());
-}
-
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewBackgroundTabClickGoBack) {
- PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
- 1);
- OpenDestURLViaClickNewBackgroundTab();
- // SelectNextTab completes synchronously, in terms of
- // updating the active index.
- browser()->SelectNextTab();
- NavigateToNextPageAfterPrerender(browser());
- GoBackToPrerender(browser());
-}
-
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
- PrerenderClickNewBackgroundTabNavigateGoBack) {
- PrerenderTestURL("files/prerender/prerender_page_with_link.html",
- FINAL_STATUS_USED,
+ FINAL_STATUS_SESSION_STORAGE_NAMESPACE_MISMATCH,
1);
OpenDestURLViaClickNewBackgroundTab();
- // SelectNextTab completes synchronously, in terms of
- // updating the active index.
- browser()->SelectNextTab();
- ClickToNextPageAfterPrerender(browser());
- GoBackToPrerender(browser());
}
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
@@ -1920,4 +1834,15 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
NavigateToURL(url);
}
+// Validate that the sessionStorage namespace remains the same when swapping
+// in a prerendered page.
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) {
+ set_loader_path("files/prerender/prerender_loader_with_session_storage.html");
+ PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"),
+ FINAL_STATUS_USED,
+ 1);
+ NavigateToDestURL();
+ GoBackToPageBeforePrerender(browser());
+}
+
} // namespace prerender

Powered by Google App Engine
This is Rietveld 408576698