Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2122)

Unified Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 166273007: Reland r251495: Re-enable prerender RemovingLink browser tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_events_common.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc
index 127eda231cb36fef2c9ef2069efd6f52ab446945..0af32c7d1af7ac3f908f1c7a97a8c70d5d3423cc 100644
--- a/chrome/browser/prerender/prerender_browsertest.cc
+++ b/chrome/browser/prerender/prerender_browsertest.cc
@@ -1280,56 +1280,46 @@ 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");
}
int GetPrerenderDomContentLoadedEventCountForLinkNumber(int index) const {
- 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;
+ return GetPrerenderEventCount(index, "webkitprerenderdomcontentloaded");
}
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 {
@@ -1397,8 +1387,8 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
loader_path_ = path;
}
- void set_loader_query_and_fragment(const std::string& query_and_fragment) {
- loader_query_and_fragment_ = query_and_fragment;
+ void set_loader_query(const std::string& query) {
+ loader_query_ = query;
}
GURL GetCrossDomainTestUrl(const std::string& path) {
@@ -1494,8 +1484,8 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
const net::SpawnedTestServer* src_server = test_server();
if (https_src_server_)
src_server = https_src_server_.get();
- GURL loader_url = src_server->GetURL(replacement_path +
- loader_query_and_fragment_);
+ GURL loader_url = src_server->GetURL(
+ replacement_path + "&" + loader_query_);
GURL::Replacements loader_replacements;
if (!loader_host_override_.empty())
@@ -1617,7 +1607,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest {
bool check_load_events_;
std::string loader_host_override_;
std::string loader_path_;
- std::string loader_query_and_fragment_;
+ std::string loader_query_;
Browser* explicitly_set_browser_;
};
@@ -1724,18 +1714,17 @@ 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");
- set_loader_query_and_fragment("?links_to_insert=1");
- PrerenderTestURL("files/prerender/prerender_page.html",
- FINAL_STATUS_CANCELLED, 1);
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) {
+ 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());
@@ -1745,16 +1734,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);
+ set_loader_query("links_to_insert=2");
+ 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));
@@ -1762,6 +1750,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));
@@ -1773,21 +1795,12 @@ 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");
+ set_loader_query("links_to_insert=2");
PrerenderTestURL("files/prerender/prerender_page.html",
FINAL_STATUS_USED, 1);
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
« no previous file with comments | « no previous file | chrome/test/data/prerender/prerender_events_common.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698