| 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 |