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

Side by Side Diff: chrome/browser/prerender/prerender_browsertest.cc

Issue 133073021: Pass DomContentLoaded event from prerenders to launching elements. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed unit tests. 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <deque> 5 #include <deque>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after
1064 // current_browser(). 1064 // current_browser().
1065 WebContents* GetActiveWebContents() const { 1065 WebContents* GetActiveWebContents() const {
1066 return current_browser()->tab_strip_model()->GetActiveWebContents(); 1066 return current_browser()->tab_strip_model()->GetActiveWebContents();
1067 } 1067 }
1068 1068
1069 // Overload for a single expected final status 1069 // Overload for a single expected final status
1070 scoped_ptr<TestPrerender> PrerenderTestURL( 1070 scoped_ptr<TestPrerender> PrerenderTestURL(
1071 const std::string& html_file, 1071 const std::string& html_file,
1072 FinalStatus expected_final_status, 1072 FinalStatus expected_final_status,
1073 int expected_number_of_loads) { 1073 int expected_number_of_loads) {
1074 return PrerenderTestURL(html_file,
1075 expected_final_status,
1076 expected_number_of_loads,
1077 expected_number_of_loads);
1078 }
1079
1080 scoped_ptr<TestPrerender> PrerenderTestURL(
1081 const std::string& html_file,
1082 FinalStatus expected_final_status,
1083 int expected_number_of_dom_content_loads,
1084 int expected_number_of_loads) {
1074 GURL url = test_server()->GetURL(html_file); 1085 GURL url = test_server()->GetURL(html_file);
1075 return PrerenderTestURL(url, 1086 return PrerenderTestURL(url,
1076 expected_final_status, 1087 expected_final_status,
1088 expected_number_of_dom_content_loads,
1077 expected_number_of_loads); 1089 expected_number_of_loads);
1078 } 1090 }
1079 1091
1080 ScopedVector<TestPrerender> PrerenderTestURL( 1092 ScopedVector<TestPrerender> PrerenderTestURL(
1081 const std::string& html_file, 1093 const std::string& html_file,
1082 const std::vector<FinalStatus>& expected_final_status_queue, 1094 const std::vector<FinalStatus>& expected_final_status_queue,
1083 int expected_number_of_loads) { 1095 int expected_number_of_loads) {
1084 GURL url = test_server()->GetURL(html_file); 1096 GURL url = test_server()->GetURL(html_file);
1085 return PrerenderTestURLImpl(url, 1097 return PrerenderTestURLImpl(url,
1086 expected_final_status_queue, 1098 expected_final_status_queue,
1099 expected_number_of_loads,
1087 expected_number_of_loads); 1100 expected_number_of_loads);
1088 } 1101 }
1089 1102
1090 scoped_ptr<TestPrerender> PrerenderTestURL( 1103 scoped_ptr<TestPrerender> PrerenderTestURL(
1091 const GURL& url, 1104 const GURL& url,
1092 FinalStatus expected_final_status, 1105 FinalStatus expected_final_status,
1093 int expected_number_of_loads) { 1106 int expected_number_of_loads) {
1107 return PrerenderTestURL(url,
1108 expected_final_status,
1109 expected_number_of_loads,
1110 expected_number_of_loads);
1111 }
1112
1113 scoped_ptr<TestPrerender> PrerenderTestURL(
1114 const GURL& url,
1115 FinalStatus expected_final_status,
1116 int expected_number_of_dom_content_loads,
1117 int expected_number_of_loads) {
1094 std::vector<FinalStatus> expected_final_status_queue( 1118 std::vector<FinalStatus> expected_final_status_queue(
1095 1, expected_final_status); 1119 1, expected_final_status);
1096 std::vector<TestPrerender*> prerenders; 1120 std::vector<TestPrerender*> prerenders;
1097 PrerenderTestURLImpl(url, 1121 PrerenderTestURLImpl(url,
1098 expected_final_status_queue, 1122 expected_final_status_queue,
1123 expected_number_of_dom_content_loads,
1099 expected_number_of_loads).release(&prerenders); 1124 expected_number_of_loads).release(&prerenders);
1100 CHECK_EQ(1u, prerenders.size()); 1125 CHECK_EQ(1u, prerenders.size());
1101 return scoped_ptr<TestPrerender>(prerenders[0]); 1126 return scoped_ptr<TestPrerender>(prerenders[0]);
1102 } 1127 }
1103 1128
1104 void NavigateToDestURL() const { 1129 void NavigateToDestURL() const {
1105 NavigateToDestURLWithDisposition(CURRENT_TAB, true); 1130 NavigateToDestURLWithDisposition(CURRENT_TAB, true);
1106 } 1131 }
1107 1132
1108 // Opens the url in a new tab, with no opener. 1133 // Opens the url in a new tab, with no opener.
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 "window.domAutomationController.send(" 1327 "window.domAutomationController.send("
1303 "receivedPrerenderLoadEvents[%d] || 0)", index); 1328 "receivedPrerenderLoadEvents[%d] || 0)", index);
1304 1329
1305 CHECK(content::ExecuteScriptAndExtractInt( 1330 CHECK(content::ExecuteScriptAndExtractInt(
1306 GetActiveWebContents(), 1331 GetActiveWebContents(),
1307 expression, 1332 expression,
1308 &load_event_count)); 1333 &load_event_count));
1309 return load_event_count; 1334 return load_event_count;
1310 } 1335 }
1311 1336
1337 int GetPrerenderDomContentLoadedEventCountForLinkNumber(int index) const {
1338 int dom_content_loaded_event_count;
1339 std::string expression = base::StringPrintf(
1340 "window.domAutomationController.send("
1341 "receivedPrerenderDomContentLoadedEvents[%d] || 0)", index);
1342
1343 CHECK(content::ExecuteScriptAndExtractInt(
1344 GetActiveWebContents(),
1345 expression,
1346 &dom_content_loaded_event_count));
1347 return dom_content_loaded_event_count;
1348 }
1349
1312 bool DidReceivePrerenderStopEventForLinkNumber(int index) const { 1350 bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
1313 bool received_prerender_stopped; 1351 bool received_prerender_stopped;
1314 std::string expression = base::StringPrintf( 1352 std::string expression = base::StringPrintf(
1315 "window.domAutomationController.send(Boolean(" 1353 "window.domAutomationController.send(Boolean("
1316 "receivedPrerenderStopEvents[%d]))", index); 1354 "receivedPrerenderStopEvents[%d]))", index);
1317 1355
1318 CHECK(content::ExecuteScriptAndExtractBool( 1356 CHECK(content::ExecuteScriptAndExtractBool(
1319 GetActiveWebContents(), 1357 GetActiveWebContents(),
1320 expression, 1358 expression,
1321 &received_prerender_stopped)); 1359 &received_prerender_stopped));
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
1462 private: 1500 private:
1463 // TODO(davidben): Remove this altogether so the tests don't globally assume 1501 // TODO(davidben): Remove this altogether so the tests don't globally assume
1464 // only one prerender. 1502 // only one prerender.
1465 TestPrerenderContents* GetPrerenderContents() const { 1503 TestPrerenderContents* GetPrerenderContents() const {
1466 return GetPrerenderContentsFor(dest_url_); 1504 return GetPrerenderContentsFor(dest_url_);
1467 } 1505 }
1468 1506
1469 ScopedVector<TestPrerender> PrerenderTestURLImpl( 1507 ScopedVector<TestPrerender> PrerenderTestURLImpl(
1470 const GURL& prerender_url, 1508 const GURL& prerender_url,
1471 const std::vector<FinalStatus>& expected_final_status_queue, 1509 const std::vector<FinalStatus>& expected_final_status_queue,
1510 int expected_number_of_dom_content_loads,
1472 int expected_number_of_loads) { 1511 int expected_number_of_loads) {
1473 dest_url_ = prerender_url; 1512 dest_url_ = prerender_url;
1474 1513
1475 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 1514 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
1476 replacement_text.push_back( 1515 replacement_text.push_back(
1477 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec())); 1516 make_pair("REPLACE_WITH_PRERENDER_URL", prerender_url.spec()));
1478 std::string replacement_path; 1517 std::string replacement_path;
1479 CHECK(net::SpawnedTestServer::GetFilePathWithReplacements( 1518 CHECK(net::SpawnedTestServer::GetFilePathWithReplacements(
1480 loader_path_, 1519 loader_path_,
1481 replacement_text, 1520 replacement_text,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1526 if (call_javascript_) { 1565 if (call_javascript_) {
1527 // Check if page behaves as expected while in prerendered state. 1566 // Check if page behaves as expected while in prerendered state.
1528 EXPECT_TRUE(DidPrerenderPass(prerender_contents->prerender_contents())); 1567 EXPECT_TRUE(DidPrerenderPass(prerender_contents->prerender_contents()));
1529 } 1568 }
1530 } 1569 }
1531 1570
1532 // Test that the referring page received the right start and load events. 1571 // Test that the referring page received the right start and load events.
1533 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1572 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1534 if (check_load_events_) { 1573 if (check_load_events_) {
1535 EXPECT_EQ(expected_number_of_loads, prerenders[0]->number_of_loads()); 1574 EXPECT_EQ(expected_number_of_loads, prerenders[0]->number_of_loads());
1575 // expected_number_of_dom_content_loads can differ from
1576 // expected_number_of_loads, when prerender aborts between
1577 // 'DOMContentLoaded' and 'load'.
1578 EXPECT_EQ(expected_number_of_dom_content_loads,
1579 GetPrerenderDomContentLoadedEventCountForLinkNumber(0));
1536 EXPECT_EQ(expected_number_of_loads, 1580 EXPECT_EQ(expected_number_of_loads,
1537 GetPrerenderLoadEventCountForLinkNumber(0)); 1581 GetPrerenderLoadEventCountForLinkNumber(0));
1538 } 1582 }
1539 EXPECT_FALSE(HadPrerenderEventErrors()); 1583 EXPECT_FALSE(HadPrerenderEventErrors());
1540 1584
1541 return prerenders.Pass(); 1585 return prerenders.Pass();
1542 } 1586 }
1543 1587
1544 void NavigateToURLImpl(const content::OpenURLParams& params, 1588 void NavigateToURLImpl(const content::OpenURLParams& params,
1545 bool expect_swap_to_succeed) const { 1589 bool expect_swap_to_succeed) const {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1610 std::string loader_query_and_fragment_; 1654 std::string loader_query_and_fragment_;
1611 Browser* explicitly_set_browser_; 1655 Browser* explicitly_set_browser_;
1612 }; 1656 };
1613 1657
1614 // Checks that a page is correctly prerendered in the case of a 1658 // Checks that a page is correctly prerendered in the case of a
1615 // <link rel=prerender> tag and then loaded into a tab in response to a 1659 // <link rel=prerender> tag and then loaded into a tab in response to a
1616 // navigation. 1660 // navigation.
1617 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) { 1661 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPage) {
1618 UMAHistogramHelper histograms; 1662 UMAHistogramHelper histograms;
1619 1663
1620 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 1664 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
davidben 2014/02/11 17:04:33 Maybe a manual assertion after this line to test t
ksimbili 2014/02/11 20:05:57 Done.
1621 histograms.Fetch(); 1665 histograms.Fetch();
1622 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 1666 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
1623 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 1667 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
1624 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 1668 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
1625 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1); 1669 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 1);
1626 1670
1627 ChannelDestructionWatcher channel_close_watcher; 1671 ChannelDestructionWatcher channel_close_watcher;
1628 channel_close_watcher.WatchChannel( 1672 channel_close_watcher.WatchChannel(
1629 GetActiveWebContents()->GetRenderProcessHost()); 1673 GetActiveWebContents()->GetRenderProcessHost());
1630 NavigateToDestURL(); 1674 NavigateToDestURL();
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
1954 1); 1998 1);
1955 NavigateToDestURL(); 1999 NavigateToDestURL();
1956 } 2000 }
1957 2001
1958 // Renders a page that contains a prerender link to a page that contains an 2002 // Renders a page that contains a prerender link to a page that contains an
1959 // iframe with a source that requires http authentication. This should not 2003 // iframe with a source that requires http authentication. This should not
1960 // prerender successfully. 2004 // prerender successfully.
1961 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttpAuthentication) { 2005 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHttpAuthentication) {
1962 PrerenderTestURL("files/prerender/prerender_http_auth_container.html", 2006 PrerenderTestURL("files/prerender/prerender_http_auth_container.html",
1963 FINAL_STATUS_AUTH_NEEDED, 2007 FINAL_STATUS_AUTH_NEEDED,
2008 1,
1964 0); 2009 0);
1965 } 2010 }
1966 2011
1967 // Checks that client-issued redirects work with prerendering. 2012 // Checks that client-issued redirects work with prerendering.
1968 // This version navigates to the page which issues the redirection, rather 2013 // This version navigates to the page which issues the redirection, rather
1969 // than the final destination page. 2014 // than the final destination page.
1970 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2015 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
1971 PrerenderClientRedirectNavigateToFirst) { 2016 PrerenderClientRedirectNavigateToFirst) {
1972 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), 2017 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"),
1973 FINAL_STATUS_USED, 2018 FINAL_STATUS_USED,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2106 std::string redirect_path = CreateClientRedirect( 2151 std::string redirect_path = CreateClientRedirect(
2107 "/files/prerender/prerender_embedded_content.html"); 2152 "/files/prerender/prerender_embedded_content.html");
2108 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 2153 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
2109 replacement_text.push_back( 2154 replacement_text.push_back(
2110 std::make_pair("REPLACE_WITH_URL", "/" + redirect_path)); 2155 std::make_pair("REPLACE_WITH_URL", "/" + redirect_path));
2111 std::string replacement_path; 2156 std::string replacement_path;
2112 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( 2157 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements(
2113 "files/prerender/prerender_with_iframe.html", 2158 "files/prerender/prerender_with_iframe.html",
2114 replacement_text, 2159 replacement_text,
2115 &replacement_path)); 2160 &replacement_path));
2116 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 2); 2161 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1, 2);
2117 EXPECT_FALSE(UrlIsInPrerenderManager( 2162 EXPECT_FALSE(UrlIsInPrerenderManager(
2118 "files/prerender/prerender_embedded_content.html")); 2163 "files/prerender/prerender_embedded_content.html"));
2119 NavigateToDestURL(); 2164 NavigateToDestURL();
2120 } 2165 }
2121 2166
2122 // Checks that server-issued redirects work with prerendering. 2167 // Checks that server-issued redirects work with prerendering.
2123 // This version navigates to the page which issues the redirection, rather 2168 // This version navigates to the page which issues the redirection, rather
2124 // than the final destination page. 2169 // than the final destination page.
2125 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2170 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2126 PrerenderServerRedirectNavigateToFirst) { 2171 PrerenderServerRedirectNavigateToFirst) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2171 EXPECT_FALSE(UrlIsInPrerenderManager( 2216 EXPECT_FALSE(UrlIsInPrerenderManager(
2172 "files/prerender/prerender_embedded_content.html")); 2217 "files/prerender/prerender_embedded_content.html"));
2173 NavigateToDestURL(); 2218 NavigateToDestURL();
2174 } 2219 }
2175 2220
2176 // Prerenders a page that contains an automatic download triggered through an 2221 // Prerenders a page that contains an automatic download triggered through an
2177 // iframe. This should not prerender successfully. 2222 // iframe. This should not prerender successfully.
2178 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIframe) { 2223 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadIframe) {
2179 PrerenderTestURL("files/prerender/prerender_download_iframe.html", 2224 PrerenderTestURL("files/prerender/prerender_download_iframe.html",
2180 FINAL_STATUS_DOWNLOAD, 2225 FINAL_STATUS_DOWNLOAD,
2226 1,
2181 0); 2227 0);
2182 } 2228 }
2183 2229
2184 // Prerenders a page that contains an automatic download triggered through 2230 // Prerenders a page that contains an automatic download triggered through
2185 // Javascript changing the window.location. This should not prerender 2231 // Javascript changing the window.location. This should not prerender
2186 // successfully 2232 // successfully
2187 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadLocation) { 2233 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDownloadLocation) {
2188 PrerenderTestURL(CreateClientRedirect("files/download-test1.lib"), 2234 PrerenderTestURL(CreateClientRedirect("files/download-test1.lib"),
2189 FINAL_STATUS_DOWNLOAD, 2235 FINAL_STATUS_DOWNLOAD,
2190 1); 2236 1);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2238 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) { 2284 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPopup) {
2239 PrerenderTestURL("files/prerender/prerender_popup.html", 2285 PrerenderTestURL("files/prerender/prerender_popup.html",
2240 FINAL_STATUS_CREATE_NEW_WINDOW, 2286 FINAL_STATUS_CREATE_NEW_WINDOW,
2241 0); 2287 0);
2242 } 2288 }
2243 2289
2244 // Checks that registering a protocol handler causes cancellation. 2290 // Checks that registering a protocol handler causes cancellation.
2245 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRegisterProtocolHandler) { 2291 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderRegisterProtocolHandler) {
2246 PrerenderTestURL("files/prerender/prerender_register_protocol_handler.html", 2292 PrerenderTestURL("files/prerender/prerender_register_protocol_handler.html",
2247 FINAL_STATUS_REGISTER_PROTOCOL_HANDLER, 2293 FINAL_STATUS_REGISTER_PROTOCOL_HANDLER,
2294 1,
2248 0); 2295 0);
2249 } 2296 }
2250 2297
2251 // Checks that renderers using excessive memory will be terminated. 2298 // Checks that renderers using excessive memory will be terminated.
2252 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExcessiveMemory) { 2299 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExcessiveMemory) {
2253 ASSERT_TRUE(GetPrerenderManager()); 2300 ASSERT_TRUE(GetPrerenderManager());
2254 GetPrerenderManager()->mutable_config().max_bytes = 30 * 1024 * 1024; 2301 GetPrerenderManager()->mutable_config().max_bytes = 30 * 1024 * 1024;
2255 // The excessive memory kill may happen before or after the load event as it 2302 // The excessive memory kill may happen before or after the load event as it
2256 // happens asynchronously with IPC calls. Even if the test does not start 2303 // happens asynchronously with IPC calls. Even if the test does not start
2257 // allocating until after load, the browser process might notice before the 2304 // allocating until after load, the browser process might notice before the
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after
2777 replacement_text, 2824 replacement_text,
2778 &replacement_path)); 2825 &replacement_path));
2779 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1); 2826 PrerenderTestURL(replacement_path, FINAL_STATUS_USED, 1);
2780 NavigateToDestURL(); 2827 NavigateToDestURL();
2781 } 2828 }
2782 2829
2783 // Checks that we cancel correctly when window.print() is called. 2830 // Checks that we cancel correctly when window.print() is called.
2784 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) { 2831 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPrint) {
2785 PrerenderTestURL("files/prerender/prerender_print.html", 2832 PrerenderTestURL("files/prerender/prerender_print.html",
2786 FINAL_STATUS_WINDOW_PRINT, 2833 FINAL_STATUS_WINDOW_PRINT,
2834 1,
2787 0); 2835 0);
2788 } 2836 }
2789 2837
2790 // Checks that if a page is opened in a new window by javascript and both the 2838 // Checks that if a page is opened in a new window by javascript and both the
2791 // pages are in the same domain, the prerendered page is not used, due to 2839 // pages are in the same domain, the prerendered page is not used, due to
2792 // window.opener. 2840 // window.opener.
2793 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 2841 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
2794 PrerenderSameDomainWindowOpenerWindowOpen) { 2842 PrerenderSameDomainWindowOpenerWindowOpen) {
2795 PrerenderTestURL("files/prerender/prerender_page.html", 2843 PrerenderTestURL("files/prerender/prerender_page.html",
2796 FINAL_STATUS_WINDOW_OPENER, 2844 FINAL_STATUS_WINDOW_OPENER,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2865 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 2913 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
2866 replacement_text.push_back( 2914 replacement_text.push_back(
2867 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); 2915 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec()));
2868 std::string replacement_path; 2916 std::string replacement_path;
2869 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( 2917 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements(
2870 "files/prerender/prerender_with_image.html", 2918 "files/prerender/prerender_with_image.html",
2871 replacement_text, 2919 replacement_text,
2872 &replacement_path)); 2920 &replacement_path));
2873 PrerenderTestURL(replacement_path, 2921 PrerenderTestURL(replacement_path,
2874 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 2922 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED,
2923 1,
2875 0); 2924 0);
2876 } 2925 }
2877 2926
2878 // Checks that an SSL Client Certificate request that originates from an 2927 // Checks that an SSL Client Certificate request that originates from an
2879 // iframe will cancel the prerendered page. 2928 // iframe will cancel the prerendered page.
2880 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { 2929 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) {
2881 ProfileIOData::FromResourceContext( 2930 ProfileIOData::FromResourceContext(
2882 current_browser()->profile()->GetResourceContext())-> 2931 current_browser()->profile()->GetResourceContext())->
2883 set_client_cert_store_factory_for_testing( 2932 set_client_cert_store_factory_for_testing(
2884 base::Bind(&CreateCertStore)); 2933 base::Bind(&CreateCertStore));
2885 net::SpawnedTestServer::SSLOptions ssl_options; 2934 net::SpawnedTestServer::SSLOptions ssl_options;
2886 ssl_options.request_client_certificate = true; 2935 ssl_options.request_client_certificate = true;
2887 net::SpawnedTestServer https_server( 2936 net::SpawnedTestServer https_server(
2888 net::SpawnedTestServer::TYPE_HTTPS, ssl_options, 2937 net::SpawnedTestServer::TYPE_HTTPS, ssl_options,
2889 base::FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 2938 base::FilePath(FILE_PATH_LITERAL("chrome/test/data")));
2890 ASSERT_TRUE(https_server.Start()); 2939 ASSERT_TRUE(https_server.Start());
2891 GURL https_url = https_server.GetURL( 2940 GURL https_url = https_server.GetURL(
2892 "files/prerender/prerender_embedded_content.html"); 2941 "files/prerender/prerender_embedded_content.html");
2893 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 2942 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
2894 replacement_text.push_back( 2943 replacement_text.push_back(
2895 std::make_pair("REPLACE_WITH_URL", https_url.spec())); 2944 std::make_pair("REPLACE_WITH_URL", https_url.spec()));
2896 std::string replacement_path; 2945 std::string replacement_path;
2897 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( 2946 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements(
2898 "files/prerender/prerender_with_iframe.html", 2947 "files/prerender/prerender_with_iframe.html",
2899 replacement_text, 2948 replacement_text,
2900 &replacement_path)); 2949 &replacement_path));
2901 PrerenderTestURL(replacement_path, 2950 PrerenderTestURL(replacement_path,
2902 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 2951 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED,
2952 1,
2903 0); 2953 0);
2904 } 2954 }
2905 2955
2906 #if defined(FULL_SAFE_BROWSING) 2956 #if defined(FULL_SAFE_BROWSING)
2907 // Ensures that we do not prerender pages with a safe browsing 2957 // Ensures that we do not prerender pages with a safe browsing
2908 // interstitial. 2958 // interstitial.
2909 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) { 2959 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) {
2910 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); 2960 GURL url = test_server()->GetURL("files/prerender/prerender_page.html");
2911 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( 2961 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl(
2912 url, SB_THREAT_TYPE_URL_MALWARE); 2962 url, SB_THREAT_TYPE_URL_MALWARE);
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after
3511 GURL image_url = test_server()->GetURL( 3561 GURL image_url = test_server()->GetURL(
3512 CreateServerRedirect("invalidscheme://www.google.com/test.jpg")); 3562 CreateServerRedirect("invalidscheme://www.google.com/test.jpg"));
3513 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 3563 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
3514 replacement_text.push_back( 3564 replacement_text.push_back(
3515 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); 3565 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec()));
3516 std::string replacement_path; 3566 std::string replacement_path;
3517 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( 3567 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements(
3518 "files/prerender/prerender_with_image.html", 3568 "files/prerender/prerender_with_image.html",
3519 replacement_text, 3569 replacement_text,
3520 &replacement_path)); 3570 &replacement_path));
3521 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 0); 3571 PrerenderTestURL(replacement_path, FINAL_STATUS_UNSUPPORTED_SCHEME, 1, 0);
3522 } 3572 }
3523 3573
3524 // Checks that chrome-extension subresource does not cancel the prerender. 3574 // Checks that chrome-extension subresource does not cancel the prerender.
3525 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, 3575 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest,
3526 PrerenderKeepSubresourceExtensionScheme) { 3576 PrerenderKeepSubresourceExtensionScheme) {
3527 GURL image_url = GURL("chrome-extension://abcdefg/test.jpg"); 3577 GURL image_url = GURL("chrome-extension://abcdefg/test.jpg");
3528 std::vector<net::SpawnedTestServer::StringPair> replacement_text; 3578 std::vector<net::SpawnedTestServer::StringPair> replacement_text;
3529 replacement_text.push_back( 3579 replacement_text.push_back(
3530 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); 3580 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec()));
3531 std::string replacement_path; 3581 std::string replacement_path;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) { 3701 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderDeferredImage) {
3652 DisableJavascriptCalls(); 3702 DisableJavascriptCalls();
3653 UMAHistogramHelper histograms; 3703 UMAHistogramHelper histograms;
3654 3704
3655 // The prerender will not completely load until after the swap, so wait for a 3705 // The prerender will not completely load until after the swap, so wait for a
3656 // title change before calling DidPrerenderPass. 3706 // title change before calling DidPrerenderPass.
3657 scoped_ptr<TestPrerender> prerender = 3707 scoped_ptr<TestPrerender> prerender =
3658 PrerenderTestURL( 3708 PrerenderTestURL(
3659 "files/prerender/prerender_deferred_image.html", 3709 "files/prerender/prerender_deferred_image.html",
3660 FINAL_STATUS_USED, 0); 3710 FINAL_STATUS_USED, 0);
3661 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle); 3711 WaitForASCIITitle(prerender->contents()->prerender_contents(), kReadyTitle);
davidben 2014/02/11 17:04:33 This would be a pretty good place to assert DOMCon
ksimbili 2014/02/11 20:05:57 Added test here. I'll add WaitForDomContentLoads,
3662 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents())); 3712 EXPECT_TRUE(DidPrerenderPass(prerender->contents()->prerender_contents()));
3663 EXPECT_EQ(0, prerender->number_of_loads()); 3713 EXPECT_EQ(0, prerender->number_of_loads());
3664 histograms.Fetch(); 3714 histograms.Fetch();
3665 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); 3715 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1);
3666 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); 3716 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0);
3667 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0); 3717 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatchedComplete", 0);
3668 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0); 3718 histograms.ExpectTotalCount("Prerender.websame_PrerenderNotSwappedInPLT", 0);
3669 3719
3670 // Swap. 3720 // Swap.
3671 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(), 3721 NavigationOrSwapObserver swap_observer(current_browser()->tab_strip_model(),
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
4047 } 4097 }
4048 }; 4098 };
4049 4099
4050 // Checks that prerendering works in incognito mode. 4100 // Checks that prerendering works in incognito mode.
4051 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { 4101 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) {
4052 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 4102 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
4053 NavigateToDestURL(); 4103 NavigateToDestURL();
4054 } 4104 }
4055 4105
4056 } // namespace prerender 4106 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698