Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index 922d81796e2542b94963c98bea923d5ee8ae2b16..8b5ac6200d2c48b431901baf5915ff073d70a3b7 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -864,6 +864,19 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
return received_prerender_started; |
} |
+ bool DidReceivePrerenderLoadEventForLinkNumber(int index) const { |
+ bool received_prerender_loaded; |
+ std::string expression = base::StringPrintf( |
+ "window.domAutomationController.send(Boolean(" |
+ "receivedPrerenderLoadEvents[%d]))", index); |
+ |
+ CHECK(content::ExecuteJavaScriptAndExtractBool( |
+ chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(), |
+ "", expression, |
+ &received_prerender_loaded)); |
+ return received_prerender_loaded; |
+ } |
+ |
bool DidReceivePrerenderStopEventForLinkNumber(int index) const { |
bool received_prerender_stopped; |
std::string expression = base::StringPrintf( |
@@ -878,6 +891,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(), |
+ "", "window.domAutomationController.send(Boolean(" |
+ "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, |
@@ -1183,6 +1205,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_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"); |
@@ -1216,6 +1239,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. |
@@ -1238,6 +1262,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. |
@@ -1265,6 +1290,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. |
@@ -1298,6 +1324,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. |
@@ -2409,6 +2436,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( |
@@ -2417,6 +2445,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 please be aggressive about filing bugs when this test is failing. |
+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. |