OLD | NEW |
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 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/stringprintf.h" | 10 #include "base/stringprintf.h" |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 : PrerenderContents(prerender_manager, profile, url, | 215 : PrerenderContents(prerender_manager, profile, url, |
216 referrer, origin, PrerenderManager::kNoExperiment), | 216 referrer, origin, PrerenderManager::kNoExperiment), |
217 number_of_loads_(0), | 217 number_of_loads_(0), |
218 expected_number_of_loads_(expected_number_of_loads), | 218 expected_number_of_loads_(expected_number_of_loads), |
219 expected_final_status_(expected_final_status), | 219 expected_final_status_(expected_final_status), |
220 new_render_view_host_(NULL), | 220 new_render_view_host_(NULL), |
221 was_hidden_(false), | 221 was_hidden_(false), |
222 was_shown_(false), | 222 was_shown_(false), |
223 should_be_shown_(expected_final_status == FINAL_STATUS_USED), | 223 should_be_shown_(expected_final_status == FINAL_STATUS_USED), |
224 quit_message_loop_on_destruction_( | 224 quit_message_loop_on_destruction_( |
225 expected_final_status != FINAL_STATUS_EVICTED && | |
226 expected_final_status != FINAL_STATUS_APP_TERMINATING && | 225 expected_final_status != FINAL_STATUS_APP_TERMINATING && |
227 expected_final_status != FINAL_STATUS_MAX), | 226 expected_final_status != FINAL_STATUS_MAX), |
228 expected_pending_prerenders_(0), | 227 expected_pending_prerenders_(0), |
229 prerender_should_wait_for_ready_title_( | 228 prerender_should_wait_for_ready_title_( |
230 prerender_should_wait_for_ready_title) { | 229 prerender_should_wait_for_ready_title) { |
231 if (expected_number_of_loads == 0) | 230 if (expected_number_of_loads == 0) |
232 MessageLoopForUI::current()->Quit(); | 231 MessageLoopForUI::current()->Quit(); |
233 } | 232 } |
234 | 233 |
235 virtual ~TestPrerenderContents() { | 234 virtual ~TestPrerenderContents() { |
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1234 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1233 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
1235 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* | 1234 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* |
1236 // calls did a thread/process hop to the renderer which insured pending | 1235 // calls did a thread/process hop to the renderer which insured pending |
1237 // renderer events have arrived. | 1236 // renderer events have arrived. |
1238 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); | 1237 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
1239 } | 1238 } |
1240 | 1239 |
1241 // Flaky, http://crbug.com/167340. | 1240 // Flaky, http://crbug.com/167340. |
1242 IN_PROC_BROWSER_TEST_F( | 1241 IN_PROC_BROWSER_TEST_F( |
1243 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { | 1242 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { |
| 1243 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1244 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
| 1245 |
1244 set_loader_path("files/prerender/prerender_loader_removing_links.html"); | 1246 set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
1245 set_loader_query_and_fragment("?links_to_insert=2"); | 1247 set_loader_query_and_fragment("?links_to_insert=2"); |
1246 PrerenderTestURL("files/prerender/prerender_page.html", | 1248 PrerenderTestURL("files/prerender/prerender_page.html", |
1247 FINAL_STATUS_CANCELLED, 1); | 1249 FINAL_STATUS_CANCELLED, 1); |
1248 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1250 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
1249 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1251 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
1250 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1252 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
1251 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1253 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
1252 | 1254 |
1253 RemoveLinkElement(0); | 1255 RemoveLinkElement(0); |
(...skipping 12 matching lines...) Expand all Loading... |
1266 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841 | 1268 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841 |
1267 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ | 1269 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ |
1268 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne | 1270 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne |
1269 #else | 1271 #else |
1270 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ | 1272 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ |
1271 PrerenderPageRemovingLinkWithTwoLinksRemovingOne | 1273 PrerenderPageRemovingLinkWithTwoLinksRemovingOne |
1272 #endif // defined(OS_WIN) | 1274 #endif // defined(OS_WIN) |
1273 IN_PROC_BROWSER_TEST_F( | 1275 IN_PROC_BROWSER_TEST_F( |
1274 PrerenderBrowserTest, | 1276 PrerenderBrowserTest, |
1275 MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { | 1277 MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne) { |
| 1278 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1279 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
1276 set_loader_path("files/prerender/prerender_loader_removing_links.html"); | 1280 set_loader_path("files/prerender/prerender_loader_removing_links.html"); |
1277 set_loader_query_and_fragment("?links_to_insert=2"); | 1281 set_loader_query_and_fragment("?links_to_insert=2"); |
1278 PrerenderTestURL("files/prerender/prerender_page.html", | 1282 PrerenderTestURL("files/prerender/prerender_page.html", |
1279 FINAL_STATUS_USED, 1); | 1283 FINAL_STATUS_USED, 1); |
1280 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); | 1284 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); |
1281 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); | 1285 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); |
1282 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); | 1286 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); |
1283 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); | 1287 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); |
1284 | 1288 |
1285 RemoveLinkElement(0); | 1289 RemoveLinkElement(0); |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1694 1); | 1698 1); |
1695 } | 1699 } |
1696 | 1700 |
1697 // Checks shutdown code while a prerender is active. | 1701 // Checks shutdown code while a prerender is active. |
1698 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) { | 1702 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderQuickQuit) { |
1699 PrerenderTestURL("files/prerender/prerender_page.html", | 1703 PrerenderTestURL("files/prerender/prerender_page.html", |
1700 FINAL_STATUS_APP_TERMINATING, | 1704 FINAL_STATUS_APP_TERMINATING, |
1701 0); | 1705 0); |
1702 } | 1706 } |
1703 | 1707 |
1704 #if defined(OS_LINUX) | 1708 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test. |
1705 // http://crbug.com/145248 | |
1706 #define MAYBE_PrerenderInfiniteLoop DISABLED_PrerenderInfiniteLoop | |
1707 #else | |
1708 #define MAYBE_PrerenderInfiniteLoop PrerenderInfiniteLoop | |
1709 #endif | |
1710 // Checks that we don't prerender in an infinite loop. | 1709 // Checks that we don't prerender in an infinite loop. |
1711 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, MAYBE_PrerenderInfiniteLoop) { | 1710 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, DISABLED_PrerenderInfiniteLoop) { |
1712 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; | 1711 const char* const kHtmlFileA = "files/prerender/prerender_infinite_a.html"; |
1713 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; | 1712 const char* const kHtmlFileB = "files/prerender/prerender_infinite_b.html"; |
1714 | 1713 |
1715 std::deque<FinalStatus> expected_final_status_queue; | 1714 std::deque<FinalStatus> expected_final_status_queue; |
1716 expected_final_status_queue.push_back(FINAL_STATUS_USED); | 1715 expected_final_status_queue.push_back(FINAL_STATUS_USED); |
1717 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 1716 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
1718 | 1717 |
1719 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); | 1718 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
1720 ASSERT_TRUE(GetPrerenderContents()); | 1719 ASSERT_TRUE(GetPrerenderContents()); |
1721 GetPrerenderContents()->WaitForPendingPrerenders(1u); | 1720 GetPrerenderContents()->WaitForPendingPrerenders(1u); |
1722 | 1721 |
1723 // Next url should be in pending list but not an active entry. | 1722 // Next url should be in pending list but not an active entry. |
1724 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); | 1723 EXPECT_FALSE(UrlIsInPrerenderManager(kHtmlFileB)); |
1725 | 1724 |
1726 NavigateToDestURL(); | 1725 NavigateToDestURL(); |
1727 | 1726 |
1728 // Make sure the PrerenderContents for the next url is now in the manager | 1727 // Make sure the PrerenderContents for the next url is now in the manager |
1729 // and not pending. | 1728 // and not pending. |
1730 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); | 1729 EXPECT_TRUE(UrlIsInPrerenderManager(kHtmlFileB)); |
1731 } | 1730 } |
1732 | 1731 |
1733 #if defined(OS_LINUX) || defined(OS_WIN) | 1732 // TODO(gavinp,sreeram): Fix http://crbug.com/145248 and deflake this test. |
1734 // http://crbug.com/145248 | |
1735 #define MAYBE_PrerenderInfiniteLoopMultiple \ | |
1736 DISABLED_PrerenderInfiniteLoopMultiple | |
1737 #else | |
1738 #define MAYBE_PrerenderInfiniteLoopMultiple PrerenderInfiniteLoopMultiple | |
1739 #endif | |
1740 // Checks that we don't prerender in an infinite loop and multiple links are | 1733 // Checks that we don't prerender in an infinite loop and multiple links are |
1741 // handled correctly. | 1734 // handled correctly. |
1742 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 1735 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
1743 MAYBE_PrerenderInfiniteLoopMultiple) { | 1736 DISABLED_PrerenderInfiniteLoopMultiple) { |
1744 const char* const kHtmlFileA = | 1737 const char* const kHtmlFileA = |
1745 "files/prerender/prerender_infinite_a_multiple.html"; | 1738 "files/prerender/prerender_infinite_a_multiple.html"; |
1746 const char* const kHtmlFileB = | 1739 const char* const kHtmlFileB = |
1747 "files/prerender/prerender_infinite_b_multiple.html"; | 1740 "files/prerender/prerender_infinite_b_multiple.html"; |
1748 const char* const kHtmlFileC = | 1741 const char* const kHtmlFileC = |
1749 "files/prerender/prerender_infinite_c_multiple.html"; | 1742 "files/prerender/prerender_infinite_c_multiple.html"; |
1750 | 1743 |
1751 // This test is conceptually simplest if concurrency is at two, since we | 1744 // This test is conceptually simplest if concurrency is at two, since we |
1752 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. | 1745 // don't have to worry about which of kHtmlFileB or kHtmlFileC gets evicted. |
1753 GetPrerenderManager()->mutable_config().max_concurrency = 2; | 1746 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; |
| 1747 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; |
1754 | 1748 |
1755 std::deque<FinalStatus> expected_final_status_queue; | 1749 std::deque<FinalStatus> expected_final_status_queue; |
1756 expected_final_status_queue.push_back(FINAL_STATUS_USED); | 1750 expected_final_status_queue.push_back(FINAL_STATUS_USED); |
1757 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 1751 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
1758 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); | 1752 expected_final_status_queue.push_back(FINAL_STATUS_APP_TERMINATING); |
1759 | 1753 |
1760 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); | 1754 PrerenderTestURL(kHtmlFileA, expected_final_status_queue, 1); |
1761 ASSERT_TRUE(GetPrerenderContents()); | 1755 ASSERT_TRUE(GetPrerenderContents()); |
1762 GetPrerenderContents()->WaitForPendingPrerenders(2u); | 1756 GetPrerenderContents()->WaitForPendingPrerenders(2u); |
1763 | 1757 |
(...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2646 channel_close_watcher.WatchChannel( | 2640 channel_close_watcher.WatchChannel( |
2647 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); | 2641 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); |
2648 NavigateToDestURL(); | 2642 NavigateToDestURL(); |
2649 channel_close_watcher.WaitForChannelClose(); | 2643 channel_close_watcher.WaitForChannelClose(); |
2650 | 2644 |
2651 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 2645 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
2652 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 2646 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
2653 } | 2647 } |
2654 | 2648 |
2655 } // namespace prerender | 2649 } // namespace prerender |
OLD | NEW |