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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 string16 ready_title = ASCIIToUTF16(kReadyTitle); | 261 string16 ready_title = ASCIIToUTF16(kReadyTitle); |
262 ASSERT_EQ(ready_title, ready_title_watcher_->WaitAndGetTitle()); | 262 ASSERT_EQ(ready_title, ready_title_watcher_->WaitAndGetTitle()); |
263 } | 263 } |
264 } | 264 } |
265 | 265 |
266 // Waits until the prerender has |expected_pending_prerenders| pending | 266 // Waits until the prerender has |expected_pending_prerenders| pending |
267 // prerenders. | 267 // prerenders. |
268 void WaitForPendingPrerenders(size_t expected_pending_prerenders) { | 268 void WaitForPendingPrerenders(size_t expected_pending_prerenders) { |
269 if (pending_prerenders().size() < expected_pending_prerenders) { | 269 if (pending_prerenders().size() < expected_pending_prerenders) { |
270 expected_pending_prerenders_ = expected_pending_prerenders; | 270 expected_pending_prerenders_ = expected_pending_prerenders; |
271 ui_test_utils::RunMessageLoop(); | 271 content::RunMessageLoop(); |
272 expected_pending_prerenders_ = 0; | 272 expected_pending_prerenders_ = 0; |
273 } | 273 } |
274 | 274 |
275 EXPECT_EQ(expected_pending_prerenders, pending_prerenders().size()); | 275 EXPECT_EQ(expected_pending_prerenders, pending_prerenders().size()); |
276 } | 276 } |
277 | 277 |
278 bool UrlIsPending(const GURL& url) const { | 278 bool UrlIsPending(const GURL& url) const { |
279 for (std::vector<PendingPrerenderInfo>::const_iterator | 279 for (std::vector<PendingPrerenderInfo>::const_iterator |
280 it = pending_prerenders().begin(), | 280 it = pending_prerenders().begin(), |
281 end = pending_prerenders().end(); | 281 end = pending_prerenders().end(); |
(...skipping 621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
903 &web_contents->GetController())); | 903 &web_contents->GetController())); |
904 | 904 |
905 // ui_test_utils::NavigateToURL uses its own observer and message loop. | 905 // ui_test_utils::NavigateToURL uses its own observer and message loop. |
906 // Since the test needs to wait until the prerendered page has stopped | 906 // Since the test needs to wait until the prerendered page has stopped |
907 // loading, rather than the page directly navigated to, need to | 907 // loading, rather than the page directly navigated to, need to |
908 // handle browser navigation directly. | 908 // handle browser navigation directly. |
909 current_browser()->OpenURL(OpenURLParams( | 909 current_browser()->OpenURL(OpenURLParams( |
910 loader_url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, | 910 loader_url, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, |
911 false)); | 911 false)); |
912 | 912 |
913 ui_test_utils::RunMessageLoop(); | 913 content::RunMessageLoop(); |
914 // Now that we've run the prerender until it stopped loading, we can now | 914 // Now that we've run the prerender until it stopped loading, we can now |
915 // also make sure the launcher has finished loading. | 915 // also make sure the launcher has finished loading. |
916 loader_nav_observer.Wait(); | 916 loader_nav_observer.Wait(); |
917 | 917 |
918 TestPrerenderContents* prerender_contents = GetPrerenderContents(); | 918 TestPrerenderContents* prerender_contents = GetPrerenderContents(); |
919 | 919 |
920 if (ShouldRenderPrerenderedPageCorrectly(expected_final_status)) { | 920 if (ShouldRenderPrerenderedPageCorrectly(expected_final_status)) { |
921 ASSERT_TRUE(prerender_contents != NULL); | 921 ASSERT_TRUE(prerender_contents != NULL); |
922 EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status()); | 922 EXPECT_EQ(FINAL_STATUS_MAX, prerender_contents->final_status()); |
923 | 923 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 ASSERT_TRUE(prerender_contents != NULL); | 1004 ASSERT_TRUE(prerender_contents != NULL); |
1005 | 1005 |
1006 RenderViewHost* render_view_host = | 1006 RenderViewHost* render_view_host = |
1007 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(); | 1007 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(); |
1008 | 1008 |
1009 render_view_host->ExecuteJavascriptInWebFrame( | 1009 render_view_host->ExecuteJavascriptInWebFrame( |
1010 string16(), ASCIIToUTF16(javascript_function_name)); | 1010 string16(), ASCIIToUTF16(javascript_function_name)); |
1011 | 1011 |
1012 if (prerender_contents->quit_message_loop_on_destruction()) { | 1012 if (prerender_contents->quit_message_loop_on_destruction()) { |
1013 // Run message loop until the prerender contents is destroyed. | 1013 // Run message loop until the prerender contents is destroyed. |
1014 ui_test_utils::RunMessageLoop(); | 1014 content::RunMessageLoop(); |
1015 } else { | 1015 } else { |
1016 // We don't expect to pick up a running prerender, so instead | 1016 // We don't expect to pick up a running prerender, so instead |
1017 // observe one navigation. | 1017 // observe one navigation. |
1018 content::TestNavigationObserver observer( | 1018 content::TestNavigationObserver observer( |
1019 content::NotificationService::AllSources(), NULL, 1); | 1019 content::NotificationService::AllSources(), NULL, 1); |
1020 base::RunLoop run_loop; | 1020 base::RunLoop run_loop; |
1021 observer.WaitForObservation( | 1021 observer.WaitForObservation( |
1022 base::Bind(&content::RunThisRunLoop, | 1022 base::Bind(&content::RunThisRunLoop, |
1023 base::Unretained(&run_loop)), | 1023 base::Unretained(&run_loop)), |
1024 content::GetQuitTaskForRunLoop(&run_loop)); | 1024 content::GetQuitTaskForRunLoop(&run_loop)); |
(...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1695 | 1695 |
1696 // Navigate to about:crash and then wait for the renderer to crash. | 1696 // Navigate to about:crash and then wait for the renderer to crash. |
1697 ASSERT_TRUE(GetPrerenderContents()); | 1697 ASSERT_TRUE(GetPrerenderContents()); |
1698 ASSERT_TRUE(GetPrerenderContents()->prerender_contents()); | 1698 ASSERT_TRUE(GetPrerenderContents()->prerender_contents()); |
1699 GetPrerenderContents()->prerender_contents()->web_contents()->GetController(). | 1699 GetPrerenderContents()->prerender_contents()->web_contents()->GetController(). |
1700 LoadURL( | 1700 LoadURL( |
1701 GURL(chrome::kChromeUICrashURL), | 1701 GURL(chrome::kChromeUICrashURL), |
1702 content::Referrer(), | 1702 content::Referrer(), |
1703 content::PAGE_TRANSITION_TYPED, | 1703 content::PAGE_TRANSITION_TYPED, |
1704 std::string()); | 1704 std::string()); |
1705 ui_test_utils::RunMessageLoop(); | 1705 content::RunMessageLoop(); |
1706 } | 1706 } |
1707 | 1707 |
1708 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 1708 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
1709 PrerenderPageWithFragment) { | 1709 PrerenderPageWithFragment) { |
1710 PrerenderTestURL("files/prerender/prerender_page.html#fragment", | 1710 PrerenderTestURL("files/prerender/prerender_page.html#fragment", |
1711 FINAL_STATUS_USED, | 1711 FINAL_STATUS_USED, |
1712 1); | 1712 1); |
1713 NavigateToDestURL(); | 1713 NavigateToDestURL(); |
1714 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 1714 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
1715 } | 1715 } |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2127 PrerenderTestURL("files/prerender/prerender_page.html", | 2127 PrerenderTestURL("files/prerender/prerender_page.html", |
2128 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, | 2128 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, |
2129 1); | 2129 1); |
2130 | 2130 |
2131 // Post a task to clear the history, and run the message loop until it | 2131 // Post a task to clear the history, and run the message loop until it |
2132 // destroys the prerender. | 2132 // destroys the prerender. |
2133 MessageLoop::current()->PostTask( | 2133 MessageLoop::current()->PostTask( |
2134 FROM_HERE, | 2134 FROM_HERE, |
2135 base::Bind(&ClearBrowsingData, current_browser(), | 2135 base::Bind(&ClearBrowsingData, current_browser(), |
2136 BrowsingDataRemover::REMOVE_HISTORY)); | 2136 BrowsingDataRemover::REMOVE_HISTORY)); |
2137 ui_test_utils::RunMessageLoop(); | 2137 content::RunMessageLoop(); |
2138 | 2138 |
2139 // Make sure prerender history was cleared. | 2139 // Make sure prerender history was cleared. |
2140 EXPECT_EQ(0, GetHistoryLength()); | 2140 EXPECT_EQ(0, GetHistoryLength()); |
2141 } | 2141 } |
2142 | 2142 |
2143 // Checks that when the cache is cleared, prerenders are cancelled but | 2143 // Checks that when the cache is cleared, prerenders are cancelled but |
2144 // prerendering history is not cleared. | 2144 // prerendering history is not cleared. |
2145 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearCache) { | 2145 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderClearCache) { |
2146 PrerenderTestURL("files/prerender/prerender_page.html", | 2146 PrerenderTestURL("files/prerender/prerender_page.html", |
2147 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, | 2147 FINAL_STATUS_CACHE_OR_HISTORY_CLEARED, |
2148 1); | 2148 1); |
2149 | 2149 |
2150 // Post a task to clear the cache, and run the message loop until it | 2150 // Post a task to clear the cache, and run the message loop until it |
2151 // destroys the prerender. | 2151 // destroys the prerender. |
2152 MessageLoop::current()->PostTask(FROM_HERE, | 2152 MessageLoop::current()->PostTask(FROM_HERE, |
2153 base::Bind(&ClearBrowsingData, current_browser(), | 2153 base::Bind(&ClearBrowsingData, current_browser(), |
2154 BrowsingDataRemover::REMOVE_CACHE)); | 2154 BrowsingDataRemover::REMOVE_CACHE)); |
2155 ui_test_utils::RunMessageLoop(); | 2155 content::RunMessageLoop(); |
2156 | 2156 |
2157 // Make sure prerender history was not cleared. Not a vital behavior, but | 2157 // Make sure prerender history was not cleared. Not a vital behavior, but |
2158 // used to compare with PrerenderClearHistory test. | 2158 // used to compare with PrerenderClearHistory test. |
2159 EXPECT_EQ(1, GetHistoryLength()); | 2159 EXPECT_EQ(1, GetHistoryLength()); |
2160 } | 2160 } |
2161 | 2161 |
2162 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { | 2162 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderCancelAll) { |
2163 PrerenderTestURL("files/prerender/prerender_page.html", | 2163 PrerenderTestURL("files/prerender/prerender_page.html", |
2164 FINAL_STATUS_CANCELLED, | 2164 FINAL_STATUS_CANCELLED, |
2165 1); | 2165 1); |
2166 // Post a task to cancel all the prerenders. | 2166 // Post a task to cancel all the prerenders. |
2167 MessageLoop::current()->PostTask( | 2167 MessageLoop::current()->PostTask( |
2168 FROM_HERE, | 2168 FROM_HERE, |
2169 base::Bind(&CancelAllPrerenders, GetPrerenderManager())); | 2169 base::Bind(&CancelAllPrerenders, GetPrerenderManager())); |
2170 ui_test_utils::RunMessageLoop(); | 2170 content::RunMessageLoop(); |
2171 EXPECT_TRUE(GetPrerenderContents() == NULL); | 2171 EXPECT_TRUE(GetPrerenderContents() == NULL); |
2172 } | 2172 } |
2173 | 2173 |
2174 // Prerendering and history tests. | 2174 // Prerendering and history tests. |
2175 // The prerendered page is navigated to in several ways [navigate via | 2175 // The prerendered page is navigated to in several ways [navigate via |
2176 // omnibox, click on link, key-modified click to open in background tab, etc], | 2176 // omnibox, click on link, key-modified click to open in background tab, etc], |
2177 // followed by a navigation to another page from the prerendered page, followed | 2177 // followed by a navigation to another page from the prerendered page, followed |
2178 // by a back navigation. | 2178 // by a back navigation. |
2179 | 2179 |
2180 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) { | 2180 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) { |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2383 ResultCatcher catcher; | 2383 ResultCatcher catcher; |
2384 | 2384 |
2385 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 2385 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
2386 NavigateToDestURL(); | 2386 NavigateToDestURL(); |
2387 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); | 2387 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); |
2388 | 2388 |
2389 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); | 2389 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); |
2390 } | 2390 } |
2391 | 2391 |
2392 } // namespace prerender | 2392 } // namespace prerender |
OLD | NEW |