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 f33bd843981afda07759a13310e3b523e9a8f71c..4f2b8bf2c7a80ec5fded9a07f03ef81181dfc39c 100644 |
| --- a/chrome/browser/prerender/prerender_browsertest.cc |
| +++ b/chrome/browser/prerender/prerender_browsertest.cc |
| @@ -1283,43 +1283,42 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
| return prerender_link_manager; |
| } |
| - bool DidReceivePrerenderStartEventForLinkNumber(int index) const { |
| - bool received_prerender_started; |
| + int GetPrerenderEventCount(int index, const std::string& type) const { |
| + int event_count; |
| std::string expression = base::StringPrintf( |
| - "window.domAutomationController.send(Boolean(" |
| - "receivedPrerenderStartEvents[%d]))", index); |
| + "window.domAutomationController.send(" |
| + " GetPrerenderEventCount(%d, '%s'))", index, type.c_str()); |
| - CHECK(content::ExecuteScriptAndExtractBool( |
| - GetActiveWebContents(), |
| - expression, |
| - &received_prerender_started)); |
| - return received_prerender_started; |
| + CHECK(content::ExecuteScriptAndExtractInt( |
| + GetActiveWebContents(), expression, &event_count)); |
| + return event_count; |
| } |
| - int GetPrerenderLoadEventCountForLinkNumber(int index) const { |
| - int load_event_count; |
| - std::string expression = base::StringPrintf( |
| - "window.domAutomationController.send(" |
| - "receivedPrerenderLoadEvents[%d] || 0)", index); |
| + bool DidReceivePrerenderStartEventForLinkNumber(int index) const { |
| + return GetPrerenderEventCount(index, "webkitprerenderstart") > 0; |
| + } |
| - CHECK(content::ExecuteScriptAndExtractInt( |
| - GetActiveWebContents(), |
| - expression, |
| - &load_event_count)); |
| - return load_event_count; |
| + int GetPrerenderLoadEventCountForLinkNumber(int index) const { |
| + return GetPrerenderEventCount(index, "webkitprerenderload"); |
| } |
| bool DidReceivePrerenderStopEventForLinkNumber(int index) const { |
| - bool received_prerender_stopped; |
| + return GetPrerenderEventCount(index, "webkitprerenderstop") > 0; |
| + } |
| + |
| + void WaitForPrerenderEventCount(int index, |
| + const std::string& type, |
| + int count) const { |
| + int dummy; |
| std::string expression = base::StringPrintf( |
| - "window.domAutomationController.send(Boolean(" |
| - "receivedPrerenderStopEvents[%d]))", index); |
| + "WaitForPrerenderEventCount(%d, '%s', %d," |
| + " window.domAutomationController.send.bind(" |
| + " window.domAutomationController, 0))", |
| + index, type.c_str(), count); |
| - CHECK(content::ExecuteScriptAndExtractBool( |
| - GetActiveWebContents(), |
| - expression, |
| - &received_prerender_stopped)); |
| - return received_prerender_stopped; |
| + CHECK(content::ExecuteScriptAndExtractInt( |
| + GetActiveWebContents(), expression, &dummy)); |
| + CHECK_EQ(0, dummy); |
| } |
| bool HadPrerenderEventErrors() const { |
| @@ -1713,18 +1712,18 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovesPending) { |
| ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
| } |
| -// Flaky, http://crbug.com/167340. |
| -IN_PROC_BROWSER_TEST_F( |
| - PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) { |
| - set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
| +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) { |
| set_loader_query_and_fragment("?links_to_insert=1"); |
|
mmenke
2014/02/13 16:34:33
Since there's only one link, we can get rid of thi
davidben
2014/02/14 01:01:13
Done.
|
| - PrerenderTestURL("files/prerender/prerender_page.html", |
| - FINAL_STATUS_CANCELLED, 1); |
| + scoped_ptr<TestPrerender> prerender = |
| + 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()); |
| @@ -1734,16 +1733,15 @@ IN_PROC_BROWSER_TEST_F( |
| EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
| } |
| -// Flaky, http://crbug.com/167340. |
| IN_PROC_BROWSER_TEST_F( |
| - PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { |
| + PrerenderBrowserTest, 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"); |
| - PrerenderTestURL("files/prerender/prerender_page.html", |
| - FINAL_STATUS_CANCELLED, 1); |
| + scoped_ptr<TestPrerender> prerender = |
| + PrerenderTestURL("files/prerender/prerender_page.html", |
| + FINAL_STATUS_CANCELLED, 1); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
| EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
| EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
| @@ -1751,6 +1749,40 @@ IN_PROC_BROWSER_TEST_F( |
| 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, PrerenderPageRemovingLinkWithTwoLinksOneLate) { |
| + 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)); |
| @@ -1762,20 +1794,11 @@ IN_PROC_BROWSER_TEST_F( |
| 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, |
| - MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
| + 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); |