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

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

Issue 7729006: Deflake and add more prerender_browsertests focused on back navigation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Add comment Created 9 years, 4 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
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_loader.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_loader.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698