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

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: New test, and machinery to support said test. 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 1265 matching lines...) Expand 10 before | Expand all | Expand 10 after
1276 return prerender_manager; 1276 return prerender_manager;
1277 } 1277 }
1278 1278
1279 const PrerenderLinkManager* GetPrerenderLinkManager() const { 1279 const PrerenderLinkManager* GetPrerenderLinkManager() const {
1280 PrerenderLinkManager* prerender_link_manager = 1280 PrerenderLinkManager* prerender_link_manager =
1281 PrerenderLinkManagerFactory::GetForProfile( 1281 PrerenderLinkManagerFactory::GetForProfile(
1282 current_browser()->profile()); 1282 current_browser()->profile());
1283 return prerender_link_manager; 1283 return prerender_link_manager;
1284 } 1284 }
1285 1285
1286 int GetPrerenderEventCount(int index, const std::string& type) const {
1287 int event_count;
1288 std::string expression = base::StringPrintf(
1289 "window.domAutomationController.send("
1290 " GetPrerenderEventCount(%d, '%s'))", index, type.c_str());
1291
1292 CHECK(content::ExecuteScriptAndExtractInt(
1293 GetActiveWebContents(), expression, &event_count));
1294 return event_count;
1295 }
1296
1286 bool DidReceivePrerenderStartEventForLinkNumber(int index) const { 1297 bool DidReceivePrerenderStartEventForLinkNumber(int index) const {
1287 bool received_prerender_started; 1298 return GetPrerenderEventCount(index, "webkitprerenderstart") > 0;
1288 std::string expression = base::StringPrintf(
1289 "window.domAutomationController.send(Boolean("
1290 "receivedPrerenderStartEvents[%d]))", index);
1291
1292 CHECK(content::ExecuteScriptAndExtractBool(
1293 GetActiveWebContents(),
1294 expression,
1295 &received_prerender_started));
1296 return received_prerender_started;
1297 } 1299 }
1298 1300
1299 int GetPrerenderLoadEventCountForLinkNumber(int index) const { 1301 int GetPrerenderLoadEventCountForLinkNumber(int index) const {
1300 int load_event_count; 1302 return GetPrerenderEventCount(index, "webkitprerenderload");
1301 std::string expression = base::StringPrintf(
1302 "window.domAutomationController.send("
1303 "receivedPrerenderLoadEvents[%d] || 0)", index);
1304
1305 CHECK(content::ExecuteScriptAndExtractInt(
1306 GetActiveWebContents(),
1307 expression,
1308 &load_event_count));
1309 return load_event_count;
1310 } 1303 }
1311 1304
1312 bool DidReceivePrerenderStopEventForLinkNumber(int index) const { 1305 bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
1313 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;
1314 std::string expression = base::StringPrintf( 1313 std::string expression = base::StringPrintf(
1315 "window.domAutomationController.send(Boolean(" 1314 "WaitForPrerenderEventCount(%d, '%s', %d,"
1316 "receivedPrerenderStopEvents[%d]))", index); 1315 " window.domAutomationController.send.bind("
1316 " window.domAutomationController, 0))",
1317 index, type.c_str(), count);
1317 1318
1318 CHECK(content::ExecuteScriptAndExtractBool( 1319 CHECK(content::ExecuteScriptAndExtractInt(
1319 GetActiveWebContents(), 1320 GetActiveWebContents(), expression, &dummy));
1320 expression, 1321 CHECK_EQ(0, dummy);
1321 &received_prerender_stopped));
1322 return received_prerender_stopped;
1323 } 1322 }
1324 1323
1325 bool HadPrerenderEventErrors() const { 1324 bool HadPrerenderEventErrors() const {
1326 bool had_prerender_event_errors; 1325 bool had_prerender_event_errors;
1327 CHECK(content::ExecuteScriptAndExtractBool( 1326 CHECK(content::ExecuteScriptAndExtractBool(
1328 GetActiveWebContents(), 1327 GetActiveWebContents(),
1329 "window.domAutomationController.send(Boolean(" 1328 "window.domAutomationController.send(Boolean("
1330 " hadPrerenderEventErrors))", 1329 " hadPrerenderEventErrors))",
1331 &had_prerender_event_errors)); 1330 &had_prerender_event_errors));
1332 return had_prerender_event_errors; 1331 return had_prerender_event_errors;
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1706 1705
1707 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); 1706 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1));
1708 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1707 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1709 EXPECT_FALSE(HadPrerenderEventErrors()); 1708 EXPECT_FALSE(HadPrerenderEventErrors());
1710 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1709 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1711 // calls did a thread/process hop to the renderer which insured pending 1710 // calls did a thread/process hop to the renderer which insured pending
1712 // renderer events have arrived. 1711 // renderer events have arrived.
1713 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1712 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1714 } 1713 }
1715 1714
1716 // Flaky, http://crbug.com/167340. 1715 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageRemovingLink) {
1717 IN_PROC_BROWSER_TEST_F(
1718 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) {
1719 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1720 set_loader_query_and_fragment("?links_to_insert=1"); 1716 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.
1721 PrerenderTestURL("files/prerender/prerender_page.html", 1717 scoped_ptr<TestPrerender> prerender =
1722 FINAL_STATUS_CANCELLED, 1); 1718 PrerenderTestURL("files/prerender/prerender_page.html",
1719 FINAL_STATUS_CANCELLED, 1);
1723 1720
1724 // No ChannelDestructionWatcher is needed here, since prerenders in the 1721 // No ChannelDestructionWatcher is needed here, since prerenders in the
1725 // PrerenderLinkManager should be deleted by removing the links, rather than 1722 // PrerenderLinkManager should be deleted by removing the links, rather than
1726 // shutting down the renderer process. 1723 // shutting down the renderer process.
1727 RemoveLinkElement(0); 1724 RemoveLinkElement(0);
1725 prerender->WaitForStop();
1726
1728 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1727 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1729 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1728 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1730 EXPECT_FALSE(HadPrerenderEventErrors()); 1729 EXPECT_FALSE(HadPrerenderEventErrors());
1731 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1730 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1732 // 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
1733 // renderer events have arrived. 1732 // renderer events have arrived.
1734 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1733 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1735 } 1734 }
1736 1735
1737 // Flaky, http://crbug.com/167340.
1738 IN_PROC_BROWSER_TEST_F( 1736 IN_PROC_BROWSER_TEST_F(
1739 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { 1737 PrerenderBrowserTest, PrerenderPageRemovingLinkWithTwoLinks) {
1740 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 1738 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1741 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 1739 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1742 1740
1743 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1744 set_loader_query_and_fragment("?links_to_insert=2"); 1741 set_loader_query_and_fragment("?links_to_insert=2");
1745 PrerenderTestURL("files/prerender/prerender_page.html", 1742 scoped_ptr<TestPrerender> prerender =
1746 FINAL_STATUS_CANCELLED, 1); 1743 PrerenderTestURL("files/prerender/prerender_page.html",
1744 FINAL_STATUS_CANCELLED, 1);
1747 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1745 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1748 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1746 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1749 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1747 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1750 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1748 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1751 1749
1752 RemoveLinkElement(0); 1750 RemoveLinkElement(0);
1753 RemoveLinkElement(1); 1751 RemoveLinkElement(1);
1752 prerender->WaitForStop();
1753
1754 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1754 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1755 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1755 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1756 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));
1757 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1789 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1758 EXPECT_FALSE(HadPrerenderEventErrors()); 1790 EXPECT_FALSE(HadPrerenderEventErrors());
1759 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1791 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1760 // 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
1761 // renderer events have arrived. 1793 // renderer events have arrived.
1762 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1794 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1763 } 1795 }
1764 1796
1765 #if defined(OS_WIN)
1766 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841
1767 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \
1768 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne
1769 #else
1770 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \
1771 PrerenderPageRemovingLinkWithTwoLinksRemovingOne
1772 #endif // defined(OS_WIN)
1773 IN_PROC_BROWSER_TEST_F( 1797 IN_PROC_BROWSER_TEST_F(
1774 PrerenderBrowserTest, 1798 PrerenderBrowserTest,
1775 MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { 1799 PrerenderPageRemovingLinkWithTwoLinksRemovingOne) {
1776 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 1800 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1777 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 1801 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1778 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1779 set_loader_query_and_fragment("?links_to_insert=2"); 1802 set_loader_query_and_fragment("?links_to_insert=2");
1780 PrerenderTestURL("files/prerender/prerender_page.html", 1803 PrerenderTestURL("files/prerender/prerender_page.html",
1781 FINAL_STATUS_USED, 1); 1804 FINAL_STATUS_USED, 1);
1782 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1805 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1783 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1806 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1784 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1807 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1785 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1808 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1786 1809
1787 RemoveLinkElement(0); 1810 RemoveLinkElement(0);
1788 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1811 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
(...skipping 2258 matching lines...) Expand 10 before | Expand all | Expand 10 after
4047 } 4070 }
4048 }; 4071 };
4049 4072
4050 // Checks that prerendering works in incognito mode. 4073 // Checks that prerendering works in incognito mode.
4051 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) { 4074 IN_PROC_BROWSER_TEST_F(PrerenderIncognitoBrowserTest, PrerenderIncognito) {
4052 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); 4075 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1);
4053 NavigateToDestURL(); 4076 NavigateToDestURL();
4054 } 4077 }
4055 4078
4056 } // namespace prerender 4079 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698