| Index: chrome/browser/prerender/prerender_browsertest.cc
|
| ===================================================================
|
| --- chrome/browser/prerender/prerender_browsertest.cc (revision 98079)
|
| +++ chrome/browser/prerender/prerender_browsertest.cc (working copy)
|
| @@ -21,6 +21,7 @@
|
| #include "chrome/browser/task_manager/task_manager.h"
|
| #include "chrome/browser/task_manager/task_manager_browsertest_util.h"
|
| #include "chrome/browser/ui/browser.h"
|
| +#include "chrome/browser/ui/browser_list.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
|
| #include "chrome/common/chrome_notification_types.h"
|
| @@ -438,64 +439,70 @@
|
| NavigateToURLImpl(dest_url_, disposition);
|
| }
|
|
|
| - void OpenDestUrlInNewWindowViaJs() 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);
|
| + void OpenDestURLViaClick() const {
|
| + OpenDestURLWithJSImpl("Click()", true);
|
| + }
|
|
|
| - bool open_window_result = false;
|
| - ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
|
| - browser()->GetSelectedTabContents()->render_view_host(), L"",
|
| - L"window.domAutomationController.send(JsOpenLinkInNewWindow())",
|
| - &open_window_result));
|
| - EXPECT_TRUE(open_window_result);
|
| + void OpenDestURLViaClickTarget() const {
|
| + OpenDestURLWithJSImpl("ClickTarget()", false);
|
| + }
|
|
|
| - // 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();
|
| - }
|
| + void OpenDestURLViaClickNewWindow() const {
|
| + OpenDestURLWithJSImpl("ShiftClick()", true);
|
| }
|
|
|
| - void OpenDestUrlInNewWindowViaClick() 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);
|
| + void OpenDestURLViaClickNewForegroundTab() const {
|
| +#if defined(OS_MACOSX)
|
| + OpenDestURLWithJSImpl("MetaShiftClick()", true);
|
| +#else
|
| + OpenDestURLWithJSImpl("CtrlShiftClick()", true);
|
| +#endif
|
| + }
|
|
|
| - bool click_prerendered_link_result = false;
|
| - ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
|
| - browser()->GetSelectedTabContents()->render_view_host(), L"",
|
| - L"window.domAutomationController.send(ClickOpenLinkInNewWindow())",
|
| - &click_prerendered_link_result));
|
| - EXPECT_TRUE(click_prerendered_link_result);
|
| + void OpenDestURLViaClickNewBackgroundTab() const {
|
| +#if defined(OS_MACOSX)
|
| + OpenDestURLWithJSImpl("MetaClick()", false);
|
| +#else
|
| + OpenDestURLWithJSImpl("CtrlClick()", false);
|
| +#endif
|
| + }
|
|
|
| - // 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();
|
| - }
|
| + void OpenDestURLViaWindowOpen() const {
|
| + OpenDestURLWithJSImpl("WindowOpen()", false);
|
| }
|
|
|
| - 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);
|
| + void ClickToNextPageAfterPrerender(Browser* browser) {
|
| + ui_test_utils::WindowedNotificationObserver new_page_observer(
|
| + content::NOTIFICATION_NAV_ENTRY_COMMITTED,
|
| + NotificationService::AllSources());
|
| + RenderViewHost* render_view_host =
|
| + browser->GetSelectedTabContents()->render_view_host();
|
| + render_view_host->ExecuteJavascriptInWebFrame(
|
| + string16(),
|
| + ASCIIToUTF16("ClickOpenLink()"));
|
| + new_page_observer.Wait();
|
| + }
|
|
|
| - bool click_prerendered_link_result = false;
|
| + void NavigateToNextPageAfterPrerender(Browser* browser) {
|
| + ui_test_utils::NavigateToURL(
|
| + browser,
|
| + test_server()->GetURL("files/prerender/prerender_page.html"));
|
| + }
|
| +
|
| + // Called after the prerendered page has been navigated to and then away from.
|
| + // Navigates back through the history to the prerendered page.
|
| + void GoBackToPrerender(Browser* browser) {
|
| + 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(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();
|
| - }
|
| + browser->GetSelectedTabContents()->render_view_host(), L"",
|
| + L"window.domAutomationController.send(IsOriginalPrerenderPage())",
|
| + &original_prerender_page));
|
| + EXPECT_TRUE(original_prerender_page);
|
| }
|
|
|
| // Should be const but test_server()->GetURL(...) is not const.
|
| @@ -684,6 +691,26 @@
|
| }
|
| }
|
|
|
| + // Opens the prerendered page using javascript functions in the
|
| + // loader page. |javascript_function_name| should be a 0 argument function
|
| + // which is invoked. |contents_should_be_shown| indicates whether the
|
| + // prerendered page expects to become visible or stay hidden.
|
| + void OpenDestURLWithJSImpl(const std::string& javascript_function_name,
|
| + bool contents_should_be_shown) const {
|
| + TestPrerenderContents* prerender_contents = GetPrerenderContents();
|
| + ASSERT_TRUE(prerender_contents != NULL);
|
| + prerender_contents->set_should_be_shown(contents_should_be_shown);
|
| +
|
| + RenderViewHost* render_view_host =
|
| + browser()->GetSelectedTabContents()->render_view_host();
|
| + render_view_host->ExecuteJavascriptInWebFrame(
|
| + string16(),
|
| + ASCIIToUTF16(javascript_function_name));
|
| +
|
| + // Run message loop until the prerender contents is destroyed.
|
| + ui_test_utils::RunMessageLoop();
|
| + }
|
| +
|
| WaitForLoadPrerenderContentsFactory* prerender_contents_factory_;
|
| #if defined(ENABLE_SAFE_BROWSING)
|
| scoped_ptr<TestSafeBrowsingServiceFactory> safe_browsing_factory_;
|
| @@ -1393,22 +1420,20 @@
|
|
|
| // Checks that if a page is opened in a new window by javascript the
|
| // prerendered page is not used.
|
| -IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| - PrerenderWindowOpenerJsOpenInNewPageTest) {
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowOpenerWindowOpen) {
|
| PrerenderTestURL("files/prerender/prerender_page.html",
|
| FINAL_STATUS_WINDOW_OPENER,
|
| 1);
|
| - OpenDestUrlInNewWindowViaJs();
|
| + OpenDestURLViaWindowOpen();
|
| }
|
|
|
| // Checks that if a page is opened due to click on a href with target="_blank"
|
| // the prerendered page is not used.
|
| -IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| - PrerenderWindowOpenerClickOpenInNewPageTest) {
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderWindowOpenerClickTarget) {
|
| PrerenderTestURL("files/prerender/prerender_page.html",
|
| FINAL_STATUS_WINDOW_OPENER,
|
| 1);
|
| - OpenDestUrlInNewWindowViaClick();
|
| + OpenDestURLViaClickTarget();
|
| }
|
|
|
| // TODO(shishir): Add a test for the case when the page having the
|
| @@ -1637,48 +1662,115 @@
|
| EXPECT_TRUE(GetPrerenderContents() == NULL);
|
| }
|
|
|
| -// Flaky on windows: http://crbug.com/92478
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_BackToPrerenderedPage DISABLED_BackToPrerenderedPage
|
| -#else
|
| -#define MAYBE_BackToPrerenderedPage BackToPrerenderedPage
|
| -#endif
|
| +// Prerendering and history tests.
|
| +// The prerendered page is navigated to in several ways [navigate via
|
| +// omnibox, click on link, key-modified click to open in background tab, etc],
|
| +// followed by a navigation to another page from the prerendered page, followed
|
| +// by a back navigation.
|
|
|
| -IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_BackToPrerenderedPage) {
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) {
|
| PrerenderTestURL("files/prerender/prerender_page_with_link.html",
|
| FINAL_STATUS_USED,
|
| 1);
|
| + NavigateToDestURL();
|
| + ClickToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| +}
|
|
|
| - OpenDestUrlViaClick();
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| + PrerenderNavigateNavigateGoBack) {
|
| + PrerenderTestURL("files/prerender/prerender_page_with_link.html",
|
| + FINAL_STATUS_USED,
|
| + 1);
|
| + NavigateToDestURL();
|
| + NavigateToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| +}
|
|
|
| - // 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();
|
| - }
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickClickGoBack) {
|
| + PrerenderTestURL("files/prerender/prerender_page_with_link.html",
|
| + FINAL_STATUS_USED,
|
| + 1);
|
| + OpenDestURLViaClick();
|
| + ClickToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| +}
|
|
|
| - // 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);
|
| - }
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClickNavigateGoBack) {
|
| + PrerenderTestURL("files/prerender/prerender_page_with_link.html",
|
| + FINAL_STATUS_USED,
|
| + 1);
|
| + OpenDestURLViaClick();
|
| + NavigateToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| }
|
|
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| + PrerenderClickNewWindowClickGoBack) {
|
| + PrerenderTestURL("files/prerender/prerender_page_with_link.html",
|
| + FINAL_STATUS_USED,
|
| + 1);
|
| + OpenDestURLViaClickNewWindow();
|
| + Browser* new_browser = BrowserList::GetLastActive();
|
| + NavigateToNextPageAfterPrerender(new_browser);
|
| + GoBackToPrerender(new_browser);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| + PrerenderClickNewWindowNavigateGoBack) {
|
| + 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,
|
| + 1);
|
| + OpenDestURLViaClickNewForegroundTab();
|
| + NavigateToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
|
| + PrerenderClickNewForegroundTabNavigateGoBack) {
|
| + 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,
|
| + 1);
|
| + OpenDestURLViaClickNewBackgroundTab();
|
| + // SelectNextTab completes synchronously, in terms of
|
| + // updating the active index.
|
| + browser()->SelectNextTab();
|
| + ClickToNextPageAfterPrerender(browser());
|
| + GoBackToPrerender(browser());
|
| +}
|
| +
|
| } // namespace prerender
|
|
|