Chromium Code Reviews| 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 |