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..04e01c5923ac119270f56a78d45b6a79a3fe439f 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -1071,9 +1071,21 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
const std::string& html_file, |
FinalStatus expected_final_status, |
int expected_number_of_loads) { |
+ return PrerenderTestURL(html_file, |
+ expected_final_status, |
+ expected_number_of_loads, |
+ expected_number_of_loads); |
+ } |
+ |
+ scoped_ptr<TestPrerender> PrerenderTestURL( |
+ const std::string& html_file, |
+ FinalStatus expected_final_status, |
+ int expected_number_of_dom_content_loads, |
+ int expected_number_of_loads) { |
GURL url = test_server()->GetURL(html_file); |
return PrerenderTestURL(url, |
expected_final_status, |
+ expected_number_of_dom_content_loads, |
expected_number_of_loads); |
} |
@@ -1084,6 +1096,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
GURL url = test_server()->GetURL(html_file); |
return PrerenderTestURLImpl(url, |
expected_final_status_queue, |
+ expected_number_of_loads, |
expected_number_of_loads); |
} |
@@ -1091,11 +1104,23 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
const GURL& url, |
FinalStatus expected_final_status, |
int expected_number_of_loads) { |
+ return PrerenderTestURL(url, |
+ expected_final_status, |
+ expected_number_of_loads, |
+ expected_number_of_loads); |
+ } |
+ |
+ scoped_ptr<TestPrerender> PrerenderTestURL( |
+ const GURL& url, |
+ FinalStatus expected_final_status, |
+ int expected_number_of_dom_content_loads, |
+ int expected_number_of_loads) { |
std::vector<FinalStatus> expected_final_status_queue( |
1, expected_final_status); |
std::vector<TestPrerender*> prerenders; |
PrerenderTestURLImpl(url, |
expected_final_status_queue, |
+ expected_number_of_dom_content_loads, |
expected_number_of_loads).release(&prerenders); |
CHECK_EQ(1u, prerenders.size()); |
return scoped_ptr<TestPrerender>(prerenders[0]); |
@@ -1309,6 +1334,19 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
return load_event_count; |
} |
+ 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; |
+ } |
+ |
bool DidReceivePrerenderStopEventForLinkNumber(int index) const { |
bool received_prerender_stopped; |
std::string expression = base::StringPrintf( |
@@ -1469,6 +1507,7 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
ScopedVector<TestPrerender> PrerenderTestURLImpl( |
const GURL& prerender_url, |
const std::vector<FinalStatus>& expected_final_status_queue, |
+ int expected_number_of_dom_content_loads, |
int expected_number_of_loads) { |
dest_url_ = prerender_url; |
@@ -1533,6 +1572,11 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
if (check_load_events_) { |
EXPECT_EQ(expected_number_of_loads, prerenders[0]->number_of_loads()); |
+ // expected_number_of_dom_content_loads can differ from |
+ // expected_number_of_loads, when prerender aborts between |
+ // 'DOMContentLoaded' and 'load'. |
+ EXPECT_EQ(expected_number_of_dom_content_loads, |
+ GetPrerenderDomContentLoadedEventCountForLinkNumber(0)); |
EXPECT_EQ(expected_number_of_loads, |
GetPrerenderLoadEventCountForLinkNumber(0)); |
} |
@@ -1961,6 +2005,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttpAuthentication) { |
PrerenderTestURL("files/prerender/prerender_http_auth_container.html", |
FINAL_STATUS_AUTH_NEEDED, |
+ 1, |
0); |
} |
@@ -2113,7 +2158,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
"files/prerender/prerender_with_iframe.html", |
replacement_text, |
&replacement_path)); |
- PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 2); |
+ PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1, 2); |
EXPECT_FALSE(UrlIsInPrerenderManager( |
"files/prerender/prerender_embedded_content.html")); |
NavigateToDestURL(); |
@@ -2178,6 +2223,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderServerRedirectInIframe) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIframe) { |
PrerenderTestURL("files/prerender/prerender_download_iframe.html", |
FINAL_STATUS_DOWNLOAD, |
+ 1, |
0); |
} |
@@ -2245,6 +2291,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRegisterProtocolHandler) { |
PrerenderTestURL("files/prerender/prerender_register_protocol_handler.html", |
FINAL_STATUS_REGISTER_PROTOCOL_HANDLER, |
+ 1, |
0); |
} |
@@ -2784,6 +2831,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLErrorIframe) { |
IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) { |
PrerenderTestURL("files/prerender/prerender_print.html", |
FINAL_STATUS_WINDOW_PRINT, |
+ 1, |
0); |
} |
@@ -2872,6 +2920,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
&replacement_path)); |
PrerenderTestURL(replacement_path, |
FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
+ 1, |
0); |
} |
@@ -2900,6 +2949,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { |
&replacement_path)); |
PrerenderTestURL(replacement_path, |
FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
+ 1, |
0); |
} |
@@ -3518,7 +3568,7 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
"files/prerender/prerender_with_image.html", |
replacement_text, |
&replacement_path)); |
- PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); |
+ PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 1, 0); |
} |
// Checks that chrome-extension subresource does not cancel the prerender. |