OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/stringprintf.h" | 9 #include "base/stringprintf.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 PrerenderManager::kNoExperiment), | 120 PrerenderManager::kNoExperiment), |
121 number_of_loads_(0), | 121 number_of_loads_(0), |
122 expected_number_of_loads_(expected_number_of_loads), | 122 expected_number_of_loads_(expected_number_of_loads), |
123 expected_final_status_(expected_final_status), | 123 expected_final_status_(expected_final_status), |
124 new_render_view_host_(NULL), | 124 new_render_view_host_(NULL), |
125 was_hidden_(false), | 125 was_hidden_(false), |
126 was_shown_(false), | 126 was_shown_(false), |
127 should_be_shown_(expected_final_status == FINAL_STATUS_USED), | 127 should_be_shown_(expected_final_status == FINAL_STATUS_USED), |
128 quit_message_loop_on_destruction_( | 128 quit_message_loop_on_destruction_( |
129 expected_final_status != FINAL_STATUS_EVICTED && | 129 expected_final_status != FINAL_STATUS_EVICTED && |
130 expected_final_status != FINAL_STATUS_APP_TERMINATING), | 130 expected_final_status != FINAL_STATUS_APP_TERMINATING && |
| 131 expected_final_status != FINAL_STATUS_MATCH_COMPLETE_DUMMY), |
131 expected_pending_prerenders_(0) { | 132 expected_pending_prerenders_(0) { |
132 if (expected_number_of_loads == 0) | 133 if (expected_number_of_loads == 0) |
133 MessageLoopForUI::current()->Quit(); | 134 MessageLoopForUI::current()->Quit(); |
134 } | 135 } |
135 | 136 |
136 virtual ~TestPrerenderContents() { | 137 virtual ~TestPrerenderContents() { |
137 EXPECT_EQ(expected_final_status_, final_status()) << | 138 EXPECT_EQ(expected_final_status_, final_status()) << |
138 " when testing URL " << prerender_url().path() << | 139 " when testing URL " << prerender_url().path() << |
139 " (Expected: " << NameFromFinalStatus(expected_final_status_) << | 140 " (Expected: " << NameFromFinalStatus(expected_final_status_) << |
140 ", Actual: " << NameFromFinalStatus(final_status()) << ")"; | 141 ", Actual: " << NameFromFinalStatus(final_status()) << ")"; |
(...skipping 29 matching lines...) Expand all Loading... |
170 // app termination, but before we've been deleted, which is why the second | 171 // app termination, but before we've been deleted, which is why the second |
171 // check is needed. | 172 // check is needed. |
172 if (expected_final_status_ == FINAL_STATUS_APP_TERMINATING && | 173 if (expected_final_status_ == FINAL_STATUS_APP_TERMINATING && |
173 final_status() != expected_final_status_) { | 174 final_status() != expected_final_status_) { |
174 expected_final_status_ = FINAL_STATUS_RENDERER_CRASHED; | 175 expected_final_status_ = FINAL_STATUS_RENDERER_CRASHED; |
175 } | 176 } |
176 | 177 |
177 PrerenderContents::RenderViewGone(); | 178 PrerenderContents::RenderViewGone(); |
178 } | 179 } |
179 | 180 |
180 virtual bool AddAliasURL(const GURL& url) OVERRIDE { | 181 virtual bool AddAliasURL(const GURL& url, bool destroy_on_failure) OVERRIDE { |
181 // Prevent FINAL_STATUS_UNSUPPORTED_SCHEME when navigating to about:crash in | 182 // Prevent FINAL_STATUS_UNSUPPORTED_SCHEME when navigating to about:crash in |
182 // the PrerenderRendererCrash test. | 183 // the PrerenderRendererCrash test. |
183 if (url.spec() != chrome::kAboutCrashURL) | 184 if (url.spec() != chrome::kAboutCrashURL) |
184 return PrerenderContents::AddAliasURL(url); | 185 return PrerenderContents::AddAliasURL(url, destroy_on_failure); |
185 return true; | 186 return true; |
186 } | 187 } |
187 | 188 |
188 virtual void DidStopLoading() OVERRIDE { | 189 virtual void DidStopLoading() OVERRIDE { |
189 PrerenderContents::DidStopLoading(); | 190 PrerenderContents::DidStopLoading(); |
190 ++number_of_loads_; | 191 ++number_of_loads_; |
191 if (ShouldRenderPrerenderedPageCorrectly(expected_final_status_) && | 192 if (ShouldRenderPrerenderedPageCorrectly(expected_final_status_) && |
192 number_of_loads_ == expected_number_of_loads_) { | 193 number_of_loads_ == expected_number_of_loads_) { |
193 MessageLoopForUI::current()->Quit(); | 194 MessageLoopForUI::current()->Quit(); |
194 } | 195 } |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 } | 297 } |
297 | 298 |
298 virtual PrerenderContents* CreatePrerenderContents( | 299 virtual PrerenderContents* CreatePrerenderContents( |
299 PrerenderManager* prerender_manager, | 300 PrerenderManager* prerender_manager, |
300 PrerenderTracker* prerender_tracker, | 301 PrerenderTracker* prerender_tracker, |
301 Profile* profile, | 302 Profile* profile, |
302 const GURL& url, | 303 const GURL& url, |
303 const GURL& referrer, | 304 const GURL& referrer, |
304 Origin origin, | 305 Origin origin, |
305 uint8 experiment_id) OVERRIDE { | 306 uint8 experiment_id) OVERRIDE { |
306 CHECK(!expected_final_status_queue_.empty()) << | 307 FinalStatus expected_final_status = FINAL_STATUS_MATCH_COMPLETE_DUMMY; |
307 "Creating prerender contents for " << url.path() << | 308 if (!expected_final_status_queue_.empty()) { |
308 " with no expected final status"; | 309 expected_final_status = expected_final_status_queue_.front(); |
309 FinalStatus expected_final_status = expected_final_status_queue_.front(); | 310 expected_final_status_queue_.pop_front(); |
310 expected_final_status_queue_.pop_front(); | 311 } |
311 VLOG(1) << "Creating prerender contents for " << url.path() << | 312 VLOG(1) << "Creating prerender contents for " << url.path() << |
312 " with expected final status " << expected_final_status; | 313 " with expected final status " << expected_final_status; |
313 VLOG(1) << expected_final_status_queue_.size() << " left in the queue."; | 314 VLOG(1) << expected_final_status_queue_.size() << " left in the queue."; |
314 return new TestPrerenderContents(prerender_manager, prerender_tracker, | 315 return new TestPrerenderContents(prerender_manager, prerender_tracker, |
315 profile, url, | 316 profile, url, |
316 referrer, expected_number_of_loads_, | 317 referrer, expected_number_of_loads_, |
317 expected_final_status); | 318 expected_final_status); |
318 } | 319 } |
319 | 320 |
320 private: | 321 private: |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 // Check if page behaves as expected while in prerendered state. | 714 // Check if page behaves as expected while in prerendered state. |
714 bool prerender_test_result = false; | 715 bool prerender_test_result = false; |
715 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( | 716 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( |
716 prerender_contents->render_view_host_mutable(), L"", | 717 prerender_contents->render_view_host_mutable(), L"", |
717 L"window.domAutomationController.send(DidPrerenderPass())", | 718 L"window.domAutomationController.send(DidPrerenderPass())", |
718 &prerender_test_result)); | 719 &prerender_test_result)); |
719 EXPECT_TRUE(prerender_test_result); | 720 EXPECT_TRUE(prerender_test_result); |
720 } | 721 } |
721 } else { | 722 } else { |
722 // In the failure case, we should have removed |dest_url_| from the | 723 // In the failure case, we should have removed |dest_url_| from the |
723 // prerender_manager. | 724 // prerender_manager. We ignore dummy PrerenderContents (as indicated |
724 EXPECT_TRUE(prerender_contents == NULL); | 725 // by not having started). |
| 726 EXPECT_TRUE(prerender_contents == NULL || |
| 727 !prerender_contents->prerendering_has_started()); |
725 } | 728 } |
726 } | 729 } |
727 | 730 |
728 void NavigateToURLImpl(const GURL& dest_url, | 731 void NavigateToURLImpl(const GURL& dest_url, |
729 WindowOpenDisposition disposition) const { | 732 WindowOpenDisposition disposition) const { |
730 // Make sure in navigating we have a URL to use in the PrerenderManager. | 733 // Make sure in navigating we have a URL to use in the PrerenderManager. |
731 ASSERT_TRUE(GetPrerenderContents() != NULL); | 734 ASSERT_TRUE(GetPrerenderContents() != NULL); |
732 | 735 |
733 // If opening the page in a background tab, it won't be shown when swapped | 736 // If opening the page in a background tab, it won't be shown when swapped |
734 // in. | 737 // in. |
(...skipping 1106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1841 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) { | 1844 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSessionStorage) { |
1842 set_loader_path("files/prerender/prerender_loader_with_session_storage.html"); | 1845 set_loader_path("files/prerender/prerender_loader_with_session_storage.html"); |
1843 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), | 1846 PrerenderTestURL(GetCrossDomainTestUrl("files/prerender/prerender_page.html"), |
1844 FINAL_STATUS_USED, | 1847 FINAL_STATUS_USED, |
1845 1); | 1848 1); |
1846 NavigateToDestURL(); | 1849 NavigateToDestURL(); |
1847 GoBackToPageBeforePrerender(browser()); | 1850 GoBackToPageBeforePrerender(browser()); |
1848 } | 1851 } |
1849 | 1852 |
1850 } // namespace prerender | 1853 } // namespace prerender |
OLD | NEW |