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 #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 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 void NavigateToDestURL() const { | 1138 void NavigateToDestURL() const { |
1139 NavigateToDestURLWithDisposition(CURRENT_TAB, true); | 1139 NavigateToDestURLWithDisposition(CURRENT_TAB, true); |
1140 } | 1140 } |
1141 | 1141 |
1142 // Opens the url in a new tab, with no opener. | 1142 // Opens the url in a new tab, with no opener. |
1143 void NavigateToDestURLWithDisposition( | 1143 void NavigateToDestURLWithDisposition( |
1144 WindowOpenDisposition disposition, | 1144 WindowOpenDisposition disposition, |
1145 bool expect_swap_to_succeed) const { | 1145 bool expect_swap_to_succeed) const { |
1146 NavigateToURLWithParams( | 1146 NavigateToURLWithParams( |
1147 content::OpenURLParams(dest_url_, Referrer(), disposition, | 1147 content::OpenURLParams(dest_url_, Referrer(), disposition, |
1148 content::PAGE_TRANSITION_TYPED, false), | 1148 ui::PAGE_TRANSITION_TYPED, false), |
1149 expect_swap_to_succeed); | 1149 expect_swap_to_succeed); |
1150 } | 1150 } |
1151 | 1151 |
1152 void NavigateToURL(const std::string& dest_html_file) const { | 1152 void NavigateToURL(const std::string& dest_html_file) const { |
1153 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); | 1153 NavigateToURLWithDisposition(dest_html_file, CURRENT_TAB, true); |
1154 } | 1154 } |
1155 | 1155 |
1156 void NavigateToURLWithDisposition(const std::string& dest_html_file, | 1156 void NavigateToURLWithDisposition(const std::string& dest_html_file, |
1157 WindowOpenDisposition disposition, | 1157 WindowOpenDisposition disposition, |
1158 bool expect_swap_to_succeed) const { | 1158 bool expect_swap_to_succeed) const { |
1159 GURL dest_url = test_server()->GetURL(dest_html_file); | 1159 GURL dest_url = test_server()->GetURL(dest_html_file); |
1160 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed); | 1160 NavigateToURLWithDisposition(dest_url, disposition, expect_swap_to_succeed); |
1161 } | 1161 } |
1162 | 1162 |
1163 void NavigateToURLWithDisposition(const GURL& dest_url, | 1163 void NavigateToURLWithDisposition(const GURL& dest_url, |
1164 WindowOpenDisposition disposition, | 1164 WindowOpenDisposition disposition, |
1165 bool expect_swap_to_succeed) const { | 1165 bool expect_swap_to_succeed) const { |
1166 NavigateToURLWithParams( | 1166 NavigateToURLWithParams( |
1167 content::OpenURLParams(dest_url, Referrer(), disposition, | 1167 content::OpenURLParams(dest_url, Referrer(), disposition, |
1168 content::PAGE_TRANSITION_TYPED, false), | 1168 ui::PAGE_TRANSITION_TYPED, false), |
1169 expect_swap_to_succeed); | 1169 expect_swap_to_succeed); |
1170 } | 1170 } |
1171 | 1171 |
1172 void NavigateToURLWithParams(const content::OpenURLParams& params, | 1172 void NavigateToURLWithParams(const content::OpenURLParams& params, |
1173 bool expect_swap_to_succeed) const { | 1173 bool expect_swap_to_succeed) const { |
1174 NavigateToURLImpl(params, expect_swap_to_succeed); | 1174 NavigateToURLImpl(params, expect_swap_to_succeed); |
1175 } | 1175 } |
1176 | 1176 |
1177 void OpenDestURLViaClick() const { | 1177 void OpenDestURLViaClick() const { |
1178 OpenURLViaClick(dest_url_); | 1178 OpenURLViaClick(dest_url_); |
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2132 "files/prerender/prerender_location_replace.html?" + | 2132 "files/prerender/prerender_location_replace.html?" + |
2133 net::EscapeQueryParamValue(dest_url.spec(), false) + | 2133 net::EscapeQueryParamValue(dest_url.spec(), false) + |
2134 "#navigate"); | 2134 "#navigate"); |
2135 navigate_url = navigate_url.ReplaceComponents(replacements); | 2135 navigate_url = navigate_url.ReplaceComponents(replacements); |
2136 | 2136 |
2137 NavigationOrSwapObserver swap_observer( | 2137 NavigationOrSwapObserver swap_observer( |
2138 current_browser()->tab_strip_model(), | 2138 current_browser()->tab_strip_model(), |
2139 GetActiveWebContents(), 2); | 2139 GetActiveWebContents(), 2); |
2140 current_browser()->OpenURL(OpenURLParams( | 2140 current_browser()->OpenURL(OpenURLParams( |
2141 navigate_url, Referrer(), CURRENT_TAB, | 2141 navigate_url, Referrer(), CURRENT_TAB, |
2142 content::PAGE_TRANSITION_TYPED, false)); | 2142 ui::PAGE_TRANSITION_TYPED, false)); |
2143 swap_observer.Wait(); | 2143 swap_observer.Wait(); |
2144 | 2144 |
2145 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 2145 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
2146 | 2146 |
2147 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", | 2147 histogram_tester().ExpectTotalCount("Prerender.gws_PrerenderNotSwappedInPLT", |
2148 0); | 2148 0); |
2149 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); | 2149 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLT", 1); |
2150 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); | 2150 histogram_tester().ExpectTotalCount("Prerender.gws_PerceivedPLTMatched", 1); |
2151 histogram_tester().ExpectTotalCount( | 2151 histogram_tester().ExpectTotalCount( |
2152 "Prerender.gws_PerceivedPLTMatchedComplete", 1); | 2152 "Prerender.gws_PerceivedPLTMatchedComplete", 1); |
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2625 FINAL_STATUS_RENDERER_CRASHED, | 2625 FINAL_STATUS_RENDERER_CRASHED, |
2626 1); | 2626 1); |
2627 | 2627 |
2628 // Navigate to about:crash and then wait for the renderer to crash. | 2628 // Navigate to about:crash and then wait for the renderer to crash. |
2629 ASSERT_TRUE(prerender->contents()); | 2629 ASSERT_TRUE(prerender->contents()); |
2630 ASSERT_TRUE(prerender->contents()->prerender_contents()); | 2630 ASSERT_TRUE(prerender->contents()->prerender_contents()); |
2631 prerender->contents()->prerender_contents()->GetController(). | 2631 prerender->contents()->prerender_contents()->GetController(). |
2632 LoadURL( | 2632 LoadURL( |
2633 GURL(content::kChromeUICrashURL), | 2633 GURL(content::kChromeUICrashURL), |
2634 content::Referrer(), | 2634 content::Referrer(), |
2635 content::PAGE_TRANSITION_TYPED, | 2635 ui::PAGE_TRANSITION_TYPED, |
2636 std::string()); | 2636 std::string()); |
2637 prerender->WaitForStop(); | 2637 prerender->WaitForStop(); |
2638 } | 2638 } |
2639 #endif | 2639 #endif |
2640 | 2640 |
2641 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2641 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
2642 PrerenderPageWithFragment) { | 2642 PrerenderPageWithFragment) { |
2643 PrerenderTestURL("files/prerender/prerender_page.html#fragment", | 2643 PrerenderTestURL("files/prerender/prerender_page.html#fragment", |
2644 FINAL_STATUS_USED, | 2644 FINAL_STATUS_USED, |
2645 1); | 2645 1); |
(...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3924 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); | 3924 FINAL_STATUS_BAD_DEFERRED_REDIRECT, 0); |
3925 NavigateToDestURL(); | 3925 NavigateToDestURL(); |
3926 } | 3926 } |
3927 | 3927 |
3928 // Checks that prerenders are not swapped for navigations with extra headers. | 3928 // Checks that prerenders are not swapped for navigations with extra headers. |
3929 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { | 3929 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderExtraHeadersNoSwap) { |
3930 PrerenderTestURL("files/prerender/prerender_page.html", | 3930 PrerenderTestURL("files/prerender/prerender_page.html", |
3931 FINAL_STATUS_APP_TERMINATING, 1); | 3931 FINAL_STATUS_APP_TERMINATING, 1); |
3932 | 3932 |
3933 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3933 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
3934 content::PAGE_TRANSITION_TYPED, false); | 3934 ui::PAGE_TRANSITION_TYPED, false); |
3935 params.extra_headers = "X-Custom-Header: 42\r\n"; | 3935 params.extra_headers = "X-Custom-Header: 42\r\n"; |
3936 NavigateToURLWithParams(params, false); | 3936 NavigateToURLWithParams(params, false); |
3937 } | 3937 } |
3938 | 3938 |
3939 // Checks that prerenders are not swapped for navigations with browser-initiated | 3939 // Checks that prerenders are not swapped for navigations with browser-initiated |
3940 // POST data. | 3940 // POST data. |
3941 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3941 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
3942 PrerenderBrowserInitiatedPostNoSwap) { | 3942 PrerenderBrowserInitiatedPostNoSwap) { |
3943 PrerenderTestURL("files/prerender/prerender_page.html", | 3943 PrerenderTestURL("files/prerender/prerender_page.html", |
3944 FINAL_STATUS_APP_TERMINATING, 1); | 3944 FINAL_STATUS_APP_TERMINATING, 1); |
3945 | 3945 |
3946 std::string post_data = "DATA"; | 3946 std::string post_data = "DATA"; |
3947 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 3947 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
3948 content::PAGE_TRANSITION_TYPED, false); | 3948 ui::PAGE_TRANSITION_TYPED, false); |
3949 params.uses_post = true; | 3949 params.uses_post = true; |
3950 params.browser_initiated_post_data = | 3950 params.browser_initiated_post_data = |
3951 base::RefCountedString::TakeString(&post_data); | 3951 base::RefCountedString::TakeString(&post_data); |
3952 NavigateToURLWithParams(params, false); | 3952 NavigateToURLWithParams(params, false); |
3953 } | 3953 } |
3954 | 3954 |
3955 // Checks that the prerendering of a page is canceled correctly when the | 3955 // Checks that the prerendering of a page is canceled correctly when the |
3956 // prerendered page tries to make a second navigation entry. | 3956 // prerendered page tries to make a second navigation entry. |
3957 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNewNavigationEntry) { | 3957 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNewNavigationEntry) { |
3958 PrerenderTestURL("files/prerender/prerender_new_entry.html", | 3958 PrerenderTestURL("files/prerender/prerender_new_entry.html", |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4075 | 4075 |
4076 // Verify DidDisplayPass in the new tab. | 4076 // Verify DidDisplayPass in the new tab. |
4077 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); | 4077 EXPECT_TRUE(DidDisplayPass(GetActiveWebContents())); |
4078 } | 4078 } |
4079 | 4079 |
4080 // Checks that prerenders honor |should_replace_current_entry|. | 4080 // Checks that prerenders honor |should_replace_current_entry|. |
4081 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { | 4081 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderReplaceCurrentEntry) { |
4082 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4082 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
4083 | 4083 |
4084 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, | 4084 content::OpenURLParams params(dest_url(), Referrer(), CURRENT_TAB, |
4085 content::PAGE_TRANSITION_TYPED, false); | 4085 ui::PAGE_TRANSITION_TYPED, false); |
4086 params.should_replace_current_entry = true; | 4086 params.should_replace_current_entry = true; |
4087 NavigateToURLWithParams(params, false); | 4087 NavigateToURLWithParams(params, false); |
4088 | 4088 |
4089 const NavigationController& controller = | 4089 const NavigationController& controller = |
4090 GetActiveWebContents()->GetController(); | 4090 GetActiveWebContents()->GetController(); |
4091 // First entry is about:blank, second is prerender_page.html. | 4091 // First entry is about:blank, second is prerender_page.html. |
4092 EXPECT_TRUE(controller.GetPendingEntry() == NULL); | 4092 EXPECT_TRUE(controller.GetPendingEntry() == NULL); |
4093 EXPECT_EQ(2, controller.GetEntryCount()); | 4093 EXPECT_EQ(2, controller.GetEntryCount()); |
4094 EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetEntryAtIndex(0)->GetURL()); | 4094 EXPECT_EQ(GURL(url::kAboutBlankURL), controller.GetEntryAtIndex(0)->GetURL()); |
4095 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL()); | 4095 EXPECT_EQ(dest_url(), controller.GetEntryAtIndex(1)->GetURL()); |
(...skipping 28 matching lines...) Expand all Loading... |
4124 current_browser(), | 4124 current_browser(), |
4125 GURL(url::kAboutBlankURL), | 4125 GURL(url::kAboutBlankURL), |
4126 NEW_FOREGROUND_TAB, | 4126 NEW_FOREGROUND_TAB, |
4127 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 4127 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
4128 | 4128 |
4129 // Fire off two navigations, without running the event loop between them. | 4129 // Fire off two navigations, without running the event loop between them. |
4130 NavigationOrSwapObserver swap_observer( | 4130 NavigationOrSwapObserver swap_observer( |
4131 current_browser()->tab_strip_model(), | 4131 current_browser()->tab_strip_model(), |
4132 GetActiveWebContents(), 2); | 4132 GetActiveWebContents(), 2); |
4133 current_browser()->OpenURL(OpenURLParams( | 4133 current_browser()->OpenURL(OpenURLParams( |
4134 url1, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); | 4134 url1, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
4135 current_browser()->OpenURL(OpenURLParams( | 4135 current_browser()->OpenURL(OpenURLParams( |
4136 url2, Referrer(), CURRENT_TAB, content::PAGE_TRANSITION_TYPED, false)); | 4136 url2, Referrer(), CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, false)); |
4137 swap_observer.Wait(); | 4137 swap_observer.Wait(); |
4138 | 4138 |
4139 // The WebContents should be on url2. There may be 2 or 3 entries, depending | 4139 // The WebContents should be on url2. There may be 2 or 3 entries, depending |
4140 // on whether the first one managed to complete. | 4140 // on whether the first one managed to complete. |
4141 // | 4141 // |
4142 // TODO(davidben): When http://crbug.com/335835 is fixed, the 3 entry case | 4142 // TODO(davidben): When http://crbug.com/335835 is fixed, the 3 entry case |
4143 // shouldn't be possible because it's throttled by the pending swap that | 4143 // shouldn't be possible because it's throttled by the pending swap that |
4144 // cannot complete. | 4144 // cannot complete. |
4145 const NavigationController& controller = | 4145 const NavigationController& controller = |
4146 GetActiveWebContents()->GetController(); | 4146 GetActiveWebContents()->GetController(); |
(...skipping 21 matching lines...) Expand all Loading... |
4168 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 4168 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
4169 | 4169 |
4170 // Navigate to the URL. Wait for DidStartLoading, just so it's definitely | 4170 // Navigate to the URL. Wait for DidStartLoading, just so it's definitely |
4171 // progressed somewhere. | 4171 // progressed somewhere. |
4172 content::WindowedNotificationObserver page_load_observer( | 4172 content::WindowedNotificationObserver page_load_observer( |
4173 content::NOTIFICATION_LOAD_START, | 4173 content::NOTIFICATION_LOAD_START, |
4174 content::Source<NavigationController>( | 4174 content::Source<NavigationController>( |
4175 &GetActiveWebContents()->GetController())); | 4175 &GetActiveWebContents()->GetController())); |
4176 current_browser()->OpenURL(OpenURLParams( | 4176 current_browser()->OpenURL(OpenURLParams( |
4177 dest_url(), Referrer(), CURRENT_TAB, | 4177 dest_url(), Referrer(), CURRENT_TAB, |
4178 content::PAGE_TRANSITION_TYPED, false)); | 4178 ui::PAGE_TRANSITION_TYPED, false)); |
4179 page_load_observer.Wait(); | 4179 page_load_observer.Wait(); |
4180 | 4180 |
4181 // Navigate somewhere else. This should succeed and abort the pending swap. | 4181 // Navigate somewhere else. This should succeed and abort the pending swap. |
4182 TestNavigationObserver nav_observer(GetActiveWebContents()); | 4182 TestNavigationObserver nav_observer(GetActiveWebContents()); |
4183 current_browser()->OpenURL(OpenURLParams(GURL(url::kAboutBlankURL), | 4183 current_browser()->OpenURL(OpenURLParams(GURL(url::kAboutBlankURL), |
4184 Referrer(), | 4184 Referrer(), |
4185 CURRENT_TAB, | 4185 CURRENT_TAB, |
4186 content::PAGE_TRANSITION_TYPED, | 4186 ui::PAGE_TRANSITION_TYPED, |
4187 false)); | 4187 false)); |
4188 nav_observer.Wait(); | 4188 nav_observer.Wait(); |
4189 } | 4189 } |
4190 | 4190 |
4191 // Checks that <a ping> requests are not dropped in prerender. | 4191 // Checks that <a ping> requests are not dropped in prerender. |
4192 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { | 4192 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { |
4193 // Count hits to a certain URL. | 4193 // Count hits to a certain URL. |
4194 const GURL kPingURL("http://prerender.test/ping"); | 4194 const GURL kPingURL("http://prerender.test/ping"); |
4195 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 4195 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
4196 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 4196 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4447 | 4447 |
4448 // Navigate to the URL entered. | 4448 // Navigate to the URL entered. |
4449 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 4449 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
4450 | 4450 |
4451 // Prerender should be running, but abandoned. | 4451 // Prerender should be running, but abandoned. |
4452 EXPECT_TRUE( | 4452 EXPECT_TRUE( |
4453 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); | 4453 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); |
4454 } | 4454 } |
4455 | 4455 |
4456 } // namespace prerender | 4456 } // namespace prerender |
OLD | NEW |