diff options
author | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-19 02:06:00 +0000 |
---|---|---|
committer | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-19 02:06:00 +0000 |
commit | db8dc22b1f97dbff5aabdaec3b84f823bc456958 (patch) | |
tree | dc00b6cc532b41cda77b36fb849c7649025bba25 | |
parent | 9492576871b293e428cd60ae737b8ba7a09639c5 (diff) | |
download | chromium_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.cc | 22 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_download_location.html | 11 | ||||
-rw-r--r-- | chrome/test/data/prerender/prerender_redirect.html | 12 |
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> |