summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-19 02:06:00 +0000
committercbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-19 02:06:00 +0000
commitdb8dc22b1f97dbff5aabdaec3b84f823bc456958 (patch)
treedc00b6cc532b41cda77b36fb849c7649025bba25
parent9492576871b293e428cd60ae737b8ba7a09639c5 (diff)
downloadchromium_src-db8dc22b1f97dbff5aabdaec3b84f823bc456958.zip
chromium_src-db8dc22b1f97dbff5aabdaec3b84f823bc456958.tar.gz
chromium_src-db8dc22b1f97dbff5aabdaec3b84f823bc456958.tar.bz2
Deflake PrerenderBrowserTest.PrerenderRedirectToHttps
The root of the problem was that DidStopLoading and OnDidStartProvisionalLoadForFrame were both executed before the message loop quit. This CL fixes it by calling JS in the page each time the message loop quits, and defers doing the client side redirect until then. BUG=73580 TEST=PrerenderBrowserTest.RedirectToHttps Review URL: http://codereview.chromium.org/6711041 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78800 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/prerender/prerender_browsertest.cc22
-rw-r--r--chrome/test/data/prerender/prerender_download_location.html11
-rw-r--r--chrome/test/data/prerender/prerender_redirect.html12
3 files changed, 28 insertions, 17 deletions
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 261827a..544b130 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -101,7 +101,8 @@ class WaitForLoadPrerenderContentsFactory : public PrerenderContents::Factory {
class PrerenderBrowserTest : public InProcessBrowserTest {
public:
- PrerenderBrowserTest() : use_https_src_server_(false) {
+ PrerenderBrowserTest() : use_https_src_server_(false),
+ on_iteration_succeeded_(true) {
EnableDOMAutomation();
}
@@ -167,6 +168,7 @@ class PrerenderBrowserTest : public InProcessBrowserTest {
while (true) {
ui_test_utils::RunMessageLoop();
++navigations;
+ EXPECT_TRUE(on_iteration_succeeded_);
prerender_contents =
static_cast<TestPrerenderContents*>(
@@ -178,6 +180,11 @@ class PrerenderBrowserTest : public InProcessBrowserTest {
break;
}
prerender_contents->set_did_finish_loading(false);
+ MessageLoopForUI::current()->PostTask(
+ FROM_HERE,
+ NewRunnableMethod(this,
+ &PrerenderBrowserTest::CallOnIteration,
+ prerender_contents->render_view_host()));
}
switch (expected_final_status) {
@@ -226,8 +233,16 @@ class PrerenderBrowserTest : public InProcessBrowserTest {
}
private:
+ void CallOnIteration(RenderViewHost* rvh) {
+ on_iteration_succeeded_ = ui_test_utils::ExecuteJavaScript(
+ rvh,
+ L"",
+ L"if (typeof(OnIteration) != 'undefined') {OnIteration();}");
+ }
+
GURL dest_url_;
bool use_https_src_server_;
+ bool on_iteration_succeeded_;
};
// Checks that a page is correctly prerendered in the case of a
@@ -300,8 +315,9 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIFrame) {
// Javascript changing the window.location. This should not prerender
// successfully.
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadLocation) {
- PrerenderTestURL("prerender_download_location.html",
- FINAL_STATUS_DOWNLOAD, 2);
+ std::string redirect_path;
+ ASSERT_TRUE(CreateRedirect("../download-test1.lib", &redirect_path));
+ PrerenderTestURL(redirect_path, FINAL_STATUS_DOWNLOAD, 2);
}
// Prerenders a page that contains an automatic download triggered through a
diff --git a/chrome/test/data/prerender/prerender_download_location.html b/chrome/test/data/prerender/prerender_download_location.html
deleted file mode 100644
index ff6d2ae..0000000
--- a/chrome/test/data/prerender/prerender_download_location.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
- <head><title>Prerender download test - location</title>
- <script>
- setTimeout(
- function() {
- window.location = '../download-test1.lib';
- }, 1000);
- </script>
- </head>
- <body></body>
-</html>
diff --git a/chrome/test/data/prerender/prerender_redirect.html b/chrome/test/data/prerender/prerender_redirect.html
index 6813de4..3cd14e4 100644
--- a/chrome/test/data/prerender/prerender_redirect.html
+++ b/chrome/test/data/prerender/prerender_redirect.html
@@ -3,8 +3,14 @@
This is used to test prerendering in the case of HTML redirection.
-->
<head>
-<title>Prerender Redirect</title>
-<meta http-equiv="REFRESH" content="0;REPLACE_WITH_URL">
+ <title>Prerender Redirect</title>
</head>
-<body></body>
+<body>
+ <script>
+ function OnIteration() {
+ document.location = 'REPLACE_WITH_URL';
+ return true;
+ }
+ </script>
+</body>
</html>