Chromium Code Reviews| Index: chrome/browser/prerender/prerender_browsertest.cc |
| diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
| index f86eb4aab43fbcde7c8b693ddbf50fa771894906..8afea88cb1f9f22191b6ba8e5fd3d6d4598ea644 100644 |
| --- a/chrome/browser/prerender/prerender_browsertest.cc |
| +++ b/chrome/browser/prerender/prerender_browsertest.cc |
| @@ -861,6 +861,19 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
| return received_prerender_started; |
| } |
| + bool DidReceivePrerenderLoadEventForLinkNumber(int index) const { |
| + bool received_prerender_loaded; |
| + std::wstring expression = base::StringPrintf( |
| + L"window.domAutomationController.send(Boolean(" |
| + L"receivedPrerenderLoadEvents[%d]))", index); |
| + |
| + CHECK(content::ExecuteJavaScriptAndExtractBool( |
| + chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(), |
| + L"", expression, |
| + &received_prerender_loaded)); |
| + return received_prerender_loaded; |
| + } |
| + |
| bool DidReceivePrerenderStopEventForLinkNumber(int index) const { |
| bool received_prerender_stopped; |
| std::wstring expression = base::StringPrintf( |
| @@ -874,6 +887,15 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
| return received_prerender_stopped; |
| } |
| + bool HadPrerenderEventErrors() const { |
| + bool had_prerender_event_errors; |
| + CHECK(content::ExecuteJavaScriptAndExtractBool( |
| + chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(), |
| + L"", L"window.domAutomationController.send(Boolean(" |
| + L"hadPrerenderEventErrors))", &had_prerender_event_errors)); |
| + return had_prerender_event_errors; |
| + } |
| + |
| // Asserting on this can result in flaky tests. PrerenderHandles are |
| // removed from the PrerenderLinkManager when the prerender is canceled from |
| // the browser, when the prerenders are cancelled from the renderer process, |
| @@ -1176,6 +1198,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPagePending) { |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| const GURL prerender_page_url = |
| test_server()->GetURL("files/prerender/prerender_page.html"); |
| @@ -1209,6 +1232,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { |
| EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| // calls did a thread/process hop to the renderer which insured pending |
| // renderer events have arrived. |
| @@ -1231,6 +1255,7 @@ IN_PROC_BROWSER_TEST_F( |
| RemoveLinkElement(0); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| // calls did a thread/process hop to the renderer which insured pending |
| // renderer events have arrived. |
| @@ -1258,6 +1283,7 @@ IN_PROC_BROWSER_TEST_F( |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| // calls did a thread/process hop to the renderer which insured pending |
| // renderer events have arrived. |
| @@ -1291,6 +1317,7 @@ IN_PROC_BROWSER_TEST_F( |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
| // calls did a thread/process hop to the renderer which insured pending |
| // renderer events have arrived. |
| @@ -2401,6 +2428,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { |
| PrerenderTestURL("files/prerender/prerender_page.html", |
| FINAL_STATUS_CANCELLED, 1); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| + EXPECT_TRUE(DidReceivePrerenderLoadEventForLinkNumber(0)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| MessageLoop::current()->PostTask( |
| @@ -2409,6 +2437,20 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| +} |
| + |
| +// PrerenderBrowserTest.PrerenderEventsNoLoad may pass flakily on regression, |
| +// so plesae be aggressive about filing bugs when this test is failing. |
|
mmenke
2012/12/28 18:48:36
nit: please
gavinp
2012/12/28 20:13:16
Done.
|
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEventsNoLoad) { |
| + // This should be canceled. |
| + PrerenderTestURL("files/prerender/prerender_http_auth_container.html", |
| + FINAL_STATUS_AUTH_NEEDED, |
| + 1); |
| + EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| + EXPECT_FALSE(DidReceivePrerenderLoadEventForLinkNumber(0)); |
| + EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| + EXPECT_FALSE(HadPrerenderEventErrors()); |
| } |
| // Prerendering and history tests. |