diff options
Diffstat (limited to 'chrome/browser/prerender')
-rw-r--r-- | chrome/browser/prerender/prerender_browsertest.cc | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc index 8f1a9ac..a692751 100644 --- a/chrome/browser/prerender/prerender_browsertest.cc +++ b/chrome/browser/prerender/prerender_browsertest.cc @@ -473,6 +473,26 @@ class PrerenderBrowserTest : public InProcessBrowserTest { } } + void OpenDestUrlViaClick() const { + // Make sure in navigating we have a URL to use in the PrerenderManager. + TestPrerenderContents* prerender_contents = GetPrerenderContents(); + ASSERT_TRUE(prerender_contents != NULL); + prerender_contents->set_quit_message_loop_on_destruction(false); + + bool click_prerendered_link_result = false; + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( + browser()->GetSelectedTabContents()->render_view_host(), L"", + L"window.domAutomationController.send(ClickOpenLink())", + &click_prerendered_link_result)); + EXPECT_TRUE(click_prerendered_link_result); + + // If the prerender contents has not been destroyed, run message loop. + if (GetPrerenderContents() != NULL) { + prerender_contents->set_quit_message_loop_on_destruction(true); + ui_test_utils::RunMessageLoop(); + } + } + // 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); @@ -1612,4 +1632,41 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { EXPECT_TRUE(GetPrerenderContents() == NULL); } +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, BackToPrerenderedPage) { + PrerenderTestURL("files/prerender/prerender_page_with_link.html", + FINAL_STATUS_USED, + 1); + + OpenDestUrlViaClick(); + + // Click on the link in the page and wait for it to commit + { + ui_test_utils::WindowedNotificationObserver new_page_observer( + content::NOTIFICATION_NAV_ENTRY_COMMITTED, + NotificationService::AllSources()); + bool click_link_result = false; + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( + browser()->GetSelectedTabContents()->render_view_host(), L"", + L"window.domAutomationController.send(ClickOpenLink())", + &click_link_result)); + EXPECT_TRUE(click_link_result); + new_page_observer.Wait(); + } + + // Now, go back to the prerendered page. + { + ui_test_utils::WindowedNotificationObserver back_nav_observer( + content::NOTIFICATION_NAV_ENTRY_COMMITTED, + NotificationService::AllSources()); + browser()->GoBack(CURRENT_TAB); + back_nav_observer.Wait(); + bool original_prerender_page = false; + ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( + browser()->GetSelectedTabContents()->render_view_host(), L"", + L"window.domAutomationController.send(IsOriginalPrerenderPage())", + &original_prerender_page)); + EXPECT_TRUE(original_prerender_page); + } +} + } // namespace prerender |