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

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

Issue 142013004: Re-enable prerender RemovingLink browser tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment 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 | Annotate | Revision Log
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 1261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 return prerender_manager; 1272 return prerender_manager;
1273 } 1273 }
1274 1274
1275 const PrerenderLinkManager* GetPrerenderLinkManager() const { 1275 const PrerenderLinkManager* GetPrerenderLinkManager() const {
1276 PrerenderLinkManager* prerender_link_manager = 1276 PrerenderLinkManager* prerender_link_manager =
1277 PrerenderLinkManagerFactory::GetForProfile( 1277 PrerenderLinkManagerFactory::GetForProfile(
1278 current_browser()->profile()); 1278 current_browser()->profile());
1279 return prerender_link_manager; 1279 return prerender_link_manager;
1280 } 1280 }
1281 1281
1282 int GetPrerenderEventCount(int index, const std::string& type) const {
1283 int event_count;
1284 std::string expression = base::StringPrintf(
1285 "window.domAutomationController.send("
1286 " GetPrerenderEventCount(%d, '%s'))", index, type.c_str());
1287
1288 CHECK(content::ExecuteScriptAndExtractInt(
1289 GetActiveWebContents(), expression, &event_count));
1290 return event_count;
1291 }
1292
1282 bool DidReceivePrerenderStartEventForLinkNumber(int index) const { 1293 bool DidReceivePrerenderStartEventForLinkNumber(int index) const {
1283 bool received_prerender_started; 1294 return GetPrerenderEventCount(index, "webkitprerenderstart") > 0;
1284 std::string expression = base::StringPrintf(
1285 "window.domAutomationController.send(Boolean("
1286 "receivedPrerenderStartEvents[%d]))", index);
1287
1288 CHECK(content::ExecuteScriptAndExtractBool(
1289 GetActiveWebContents(),
1290 expression,
1291 &received_prerender_started));
1292 return received_prerender_started;
1293 } 1295 }
1294 1296
1295 int GetPrerenderLoadEventCountForLinkNumber(int index) const { 1297 int GetPrerenderLoadEventCountForLinkNumber(int index) const {
1296 int load_event_count; 1298 return GetPrerenderEventCount(index, "webkitprerenderload");
1297 std::string expression = base::StringPrintf(
1298 "window.domAutomationController.send("
1299 "receivedPrerenderLoadEvents[%d] || 0)", index);
1300
1301 CHECK(content::ExecuteScriptAndExtractInt(
1302 GetActiveWebContents(),
1303 expression,
1304 &load_event_count));
1305 return load_event_count;
1306 } 1299 }
1307 1300
1308 int GetPrerenderDomContentLoadedEventCountForLinkNumber(int index) const { 1301 int GetPrerenderDomContentLoadedEventCountForLinkNumber(int index) const {
1309 int dom_content_loaded_event_count; 1302 return GetPrerenderEventCount(index, "webkitprerenderdomcontentloaded");
1310 std::string expression = base::StringPrintf(
1311 "window.domAutomationController.send("
1312 "receivedPrerenderDomContentLoadedEvents[%d] || 0)", index);
1313
1314 CHECK(content::ExecuteScriptAndExtractInt(
1315 GetActiveWebContents(),
1316 expression,
1317 &dom_content_loaded_event_count));
1318 return dom_content_loaded_event_count;
1319 } 1303 }
1320 1304
1321 bool DidReceivePrerenderStopEventForLinkNumber(int index) const { 1305 bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
1322 bool received_prerender_stopped; 1306 return GetPrerenderEventCount(index, "webkitprerenderstop") > 0;
1307 }
1308
1309 void WaitForPrerenderEventCount(int index,
1310 const std::string& type,
1311 int count) const {
1312 int dummy;
1323 std::string expression = base::StringPrintf( 1313 std::string expression = base::StringPrintf(
1324 "window.domAutomationController.send(Boolean(" 1314 "WaitForPrerenderEventCount(%d, '%s', %d,"
1325 "receivedPrerenderStopEvents[%d]))", index); 1315 " window.domAutomationController.send.bind("
1316 " window.domAutomationController, 0))",
1317 index, type.c_str(), count);
1326 1318
1327 CHECK(content::ExecuteScriptAndExtractBool( 1319 CHECK(content::ExecuteScriptAndExtractInt(
1328 GetActiveWebContents(), 1320 GetActiveWebContents(), expression, &dummy));
1329 expression, 1321 CHECK_EQ(0, dummy);
1330 &received_prerender_stopped));
1331 return received_prerender_stopped;
1332 } 1322 }
1333 1323
1334 bool HadPrerenderEventErrors() const { 1324 bool HadPrerenderEventErrors() const {
1335 bool had_prerender_event_errors; 1325 bool had_prerender_event_errors;
1336 CHECK(content::ExecuteScriptAndExtractBool( 1326 CHECK(content::ExecuteScriptAndExtractBool(
1337 GetActiveWebContents(), 1327 GetActiveWebContents(),
1338 "window.domAutomationController.send(Boolean(" 1328 "window.domAutomationController.send(Boolean("
1339 " hadPrerenderEventErrors))", 1329 " hadPrerenderEventErrors))",
1340 &had_prerender_event_errors)); 1330 &had_prerender_event_errors));
1341 return had_prerender_event_errors; 1331 return had_prerender_event_errors;
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
1716 1706
1717 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); 1707 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1));
1718 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1708 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1719 EXPECT_FALSE(HadPrerenderEventErrors()); 1709 EXPECT_FALSE(HadPrerenderEventErrors());
1720 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1710 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1721 // calls did a thread/process hop to the renderer which insured pending 1711 // calls did a thread/process hop to the renderer which insured pending
1722 // renderer events have arrived. 1712 // renderer events have arrived.
1723 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1713 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1724 } 1714 }
1725 1715
1726 // Flaky, http://crbug.com/167340. 1716 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) {
1727 IN_PROC_BROWSER_TEST_F( 1717 scoped_ptr<TestPrerender> prerender =
1728 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) { 1718 PrerenderTestURL("files/prerender/prerender_page.html",
1729 set_loader_path("files/prerender/prerender_loader_removing_links.html"); 1719 FINAL_STATUS_CANCELLED, 1);
1730 set_loader_query_and_fragment("?links_to_insert=1");
1731 PrerenderTestURL("files/prerender/prerender_page.html",
1732 FINAL_STATUS_CANCELLED, 1);
1733 1720
1734 // No ChannelDestructionWatcher is needed here, since prerenders in the 1721 // No ChannelDestructionWatcher is needed here, since prerenders in the
1735 // PrerenderLinkManager should be deleted by removing the links, rather than 1722 // PrerenderLinkManager should be deleted by removing the links, rather than
1736 // shutting down the renderer process. 1723 // shutting down the renderer process.
1737 RemoveLinkElement(0); 1724 RemoveLinkElement(0);
1725 prerender->WaitForStop();
1726
1738 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1727 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1739 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1728 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1740 EXPECT_FALSE(HadPrerenderEventErrors()); 1729 EXPECT_FALSE(HadPrerenderEventErrors());
1741 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1730 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1742 // calls did a thread/process hop to the renderer which insured pending 1731 // calls did a thread/process hop to the renderer which insured pending
1743 // renderer events have arrived. 1732 // renderer events have arrived.
1744 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1733 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1745 } 1734 }
1746 1735
1747 // Flaky, http://crbug.com/167340.
1748 IN_PROC_BROWSER_TEST_F( 1736 IN_PROC_BROWSER_TEST_F(
1749 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { 1737 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinks) {
1750 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 1738 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1751 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 1739 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1752 1740
1753 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1754 set_loader_query_and_fragment("?links_to_insert=2"); 1741 set_loader_query_and_fragment("?links_to_insert=2");
1755 PrerenderTestURL("files/prerender/prerender_page.html", 1742 scoped_ptr<TestPrerender> prerender =
1756 FINAL_STATUS_CANCELLED, 1); 1743 PrerenderTestURL("files/prerender/prerender_page.html",
1744 FINAL_STATUS_CANCELLED, 1);
1757 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1745 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1758 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1746 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1759 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1747 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1760 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1748 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1761 1749
1762 RemoveLinkElement(0); 1750 RemoveLinkElement(0);
1763 RemoveLinkElement(1); 1751 RemoveLinkElement(1);
1752 prerender->WaitForStop();
1753
1764 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1754 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1765 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1755 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1766 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1756 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1757 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1758 EXPECT_FALSE(HadPrerenderEventErrors());
1759 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1760 // calls did a thread/process hop to the renderer which insured pending
1761 // renderer events have arrived.
1762 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1763 }
1764
1765 IN_PROC_BROWSER_TEST_F(
1766 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinksOneLate) {
1767 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1768 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1769
1770 GURL url = test_server()->GetURL("files/prerender/prerender_page.html");
1771 scoped_ptr<TestPrerender> prerender =
1772 PrerenderTestURL(url, FINAL_STATUS_CANCELLED, 1);
1773
1774 // Add a second prerender for the same link. It reuses the prerender, so only
1775 // the start event fires here.
1776 AddPrerender(url, 1);
1777 WaitForPrerenderEventCount(1, "webkitprerenderstart", 1);
1778 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1779 EXPECT_EQ(0, GetPrerenderLoadEventCountForLinkNumber(1));
1780 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1781
1782 RemoveLinkElement(0);
1783 RemoveLinkElement(1);
1784 prerender->WaitForStop();
1785
1786 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1787 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1788 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1767 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1789 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1768 EXPECT_FALSE(HadPrerenderEventErrors()); 1790 EXPECT_FALSE(HadPrerenderEventErrors());
1769 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1791 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1770 // calls did a thread/process hop to the renderer which insured pending 1792 // calls did a thread/process hop to the renderer which insured pending
1771 // renderer events have arrived. 1793 // renderer events have arrived.
1772 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1794 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1773 } 1795 }
1774 1796
1775 #if defined(OS_WIN)
1776 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841
1777 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \
1778 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne
1779 #else
1780 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \
1781 PrerenderPageRemovingLinkWithTwoLinksRemovingOne
1782 #endif // defined(OS_WIN)
1783 IN_PROC_BROWSER_TEST_F( 1797 IN_PROC_BROWSER_TEST_F(
1784 PrerenderBrowserTest, 1798 PrerenderBrowserTest,
1785 MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { 1799 PrerenderPageRemovingLinkWithTwoLinksRemovingOne) {
1786 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 1800 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1787 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 1801 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1788 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1789 set_loader_query_and_fragment("?links_to_insert=2"); 1802 set_loader_query_and_fragment("?links_to_insert=2");
1790 PrerenderTestURL("files/prerender/prerender_page.html", 1803 PrerenderTestURL("files/prerender/prerender_page.html",
1791 FINAL_STATUS_USED, 1); 1804 FINAL_STATUS_USED, 1);
1792 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1805 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1793 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1806 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1794 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1807 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1795 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1808 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1796 1809
1797 RemoveLinkElement(0); 1810 RemoveLinkElement(0);
1798 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1811 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
(...skipping 2247 matching lines...) Expand 10 before | Expand all | Expand 10 after
4046 } 4059 }
4047 }; 4060 };
4048 4061
4049 // Checks that prerendering works in incognito mode. 4062 // Checks that prerendering works in incognito mode.
4050 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { 4063 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) {
4051 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 4064 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
4052 NavigateToDestURL(); 4065 NavigateToDestURL();
4053 } 4066 }
4054 4067
4055 } // namespace prerender 4068 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698