Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index 326c26ff8fa90e27c4e987b1c4dde75a9aca413c..99adf508f6c9b3c5c09008f527eb7939aaf46528 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -1279,46 +1279,56 @@ |
return prerender_link_manager; |
} |
- int GetPrerenderEventCount(int index, const std::string& type) const { |
- int event_count; |
+ bool DidReceivePrerenderStartEventForLinkNumber(int index) const { |
+ bool received_prerender_started; |
+ std::string expression = base::StringPrintf( |
+ "window.domAutomationController.send(Boolean(" |
+ "receivedPrerenderStartEvents[%d]))", index); |
+ |
+ CHECK(content::ExecuteScriptAndExtractBool( |
+ GetActiveWebContents(), |
+ expression, |
+ &received_prerender_started)); |
+ return received_prerender_started; |
+ } |
+ |
+ int GetPrerenderLoadEventCountForLinkNumber(int index) const { |
+ int load_event_count; |
std::string expression = base::StringPrintf( |
"window.domAutomationController.send(" |
- " GetPrerenderEventCount(%d, '%s'))", index, type.c_str()); |
+ "receivedPrerenderLoadEvents[%d] || 0)", index); |
CHECK(content::ExecuteScriptAndExtractInt( |
- GetActiveWebContents(), expression, &event_count)); |
- return event_count; |
- } |
- |
- bool DidReceivePrerenderStartEventForLinkNumber(int index) const { |
- return GetPrerenderEventCount(index, "webkitprerenderstart") > 0; |
- } |
- |
- int GetPrerenderLoadEventCountForLinkNumber(int index) const { |
- return GetPrerenderEventCount(index, "webkitprerenderload"); |
+ GetActiveWebContents(), |
+ expression, |
+ &load_event_count)); |
+ return load_event_count; |
} |
int GetPrerenderDomContentLoadedEventCountForLinkNumber(int index) const { |
- return GetPrerenderEventCount(index, "webkitprerenderdomcontentloaded"); |
+ int dom_content_loaded_event_count; |
+ std::string expression = base::StringPrintf( |
+ "window.domAutomationController.send(" |
+ "receivedPrerenderDomContentLoadedEvents[%d] || 0)", index); |
+ |
+ CHECK(content::ExecuteScriptAndExtractInt( |
+ GetActiveWebContents(), |
+ expression, |
+ &dom_content_loaded_event_count)); |
+ return dom_content_loaded_event_count; |
} |
bool DidReceivePrerenderStopEventForLinkNumber(int index) const { |
- return GetPrerenderEventCount(index, "webkitprerenderstop") > 0; |
- } |
- |
- void WaitForPrerenderEventCount(int index, |
- const std::string& type, |
- int count) const { |
- int dummy; |
+ bool received_prerender_stopped; |
std::string expression = base::StringPrintf( |
- "WaitForPrerenderEventCount(%d, '%s', %d," |
- " window.domAutomationController.send.bind(" |
- " window.domAutomationController, 0))", |
- index, type.c_str(), count); |
- |
- CHECK(content::ExecuteScriptAndExtractInt( |
- GetActiveWebContents(), expression, &dummy)); |
- CHECK_EQ(0, dummy); |
+ "window.domAutomationController.send(Boolean(" |
+ "receivedPrerenderStopEvents[%d]))", index); |
+ |
+ CHECK(content::ExecuteScriptAndExtractBool( |
+ GetActiveWebContents(), |
+ expression, |
+ &received_prerender_stopped)); |
+ return received_prerender_stopped; |
} |
bool HadPrerenderEventErrors() const { |
@@ -1713,17 +1723,18 @@ |
ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
} |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) { |
- scoped_ptr<TestPrerender> prerender = |
- PrerenderTestURL("files/prerender/prerender_page.html", |
- FINAL_STATUS_CANCELLED, 1); |
+// Flaky, http://crbug.com/167340. |
+IN_PROC_BROWSER_TEST_F( |
+ PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) { |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
+ set_loader_query_and_fragment("?links_to_insert=1"); |
+ PrerenderTestURL("files/prerender/prerender_page.html", |
+ FINAL_STATUS_CANCELLED, 1); |
// No ChannelDestructionWatcher is needed here, since prerenders in the |
// PrerenderLinkManager should be deleted by removing the links, rather than |
// shutting down the renderer process. |
RemoveLinkElement(0); |
- prerender->WaitForStop(); |
- |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
EXPECT_FALSE(HadPrerenderEventErrors()); |
@@ -1733,15 +1744,16 @@ |
EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
} |
+// Flaky, http://crbug.com/167340. |
IN_PROC_BROWSER_TEST_F( |
- PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinks) { |
+ PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { |
GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
set_loader_query_and_fragment("?links_to_insert=2"); |
- scoped_ptr<TestPrerender> prerender = |
- PrerenderTestURL("files/prerender/prerender_page.html", |
- FINAL_STATUS_CANCELLED, 1); |
+ PrerenderTestURL("files/prerender/prerender_page.html", |
+ FINAL_STATUS_CANCELLED, 1); |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
@@ -1749,8 +1761,6 @@ |
RemoveLinkElement(0); |
RemoveLinkElement(1); |
- prerender->WaitForStop(); |
- |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
@@ -1762,43 +1772,20 @@ |
EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
} |
+#if defined(OS_WIN) |
+// TODO(gavinp): Fails on XP Rel - http://crbug.com/128841 |
+#define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ |
+ DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne |
+#else |
+#define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ |
+ PrerenderPageRemovingLinkWithTwoLinksRemovingOne |
+#endif // defined(OS_WIN) |
IN_PROC_BROWSER_TEST_F( |
- PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinksOneLate) { |
+ PrerenderBrowserTest, |
+ MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
- |
- GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
- scoped_ptr<TestPrerender> prerender = |
- PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 1); |
- |
- // Add a second prerender for the same link. It reuses the prerender, so only |
- // the start event fires here. |
- AddPrerender(url, 1); |
- WaitForPrerenderEventCount(1, "webkitprerenderstart", 1); |
- EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
- EXPECT_EQ(0, GetPrerenderLoadEventCountForLinkNumber(1)); |
- EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
- |
- RemoveLinkElement(0); |
- RemoveLinkElement(1); |
- prerender->WaitForStop(); |
- |
- EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
- 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. |
- EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F( |
- PrerenderBrowserTest, |
- PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
- GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
- GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
+ set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
set_loader_query_and_fragment("?links_to_insert=2"); |
PrerenderTestURL("files/prerender/prerender_page.html", |
FINAL_STATUS_USED, 1); |