Chromium Code Reviews| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/strings/string16.h" | 6 #include "base/strings/string16.h" |
| 7 #include "base/strings/string_split.h" | 7 #include "base/strings/string_split.h" |
| 8 #include "base/task_scheduler/post_task.h" | 8 #include "base/task_scheduler/post_task.h" |
| 9 #include "chrome/browser/history/history_service_factory.h" | 9 #include "chrome/browser/history/history_service_factory.h" |
| 10 #include "chrome/browser/history/history_test_utils.h" | 10 #include "chrome/browser/history/history_test_utils.h" |
| 11 #include "chrome/browser/prerender/prerender_handle.h" | 11 #include "chrome/browser/prerender/prerender_handle.h" |
| 12 #include "chrome/browser/prerender/prerender_manager.h" | 12 #include "chrome/browser/prerender/prerender_manager.h" |
| 13 #include "chrome/browser/prerender/prerender_manager_factory.h" | 13 #include "chrome/browser/prerender/prerender_manager_factory.h" |
| 14 #include "chrome/browser/prerender/prerender_test_utils.h" | 14 #include "chrome/browser/prerender/prerender_test_utils.h" |
| 15 #include "chrome/browser/profiles/profile.h" | 15 #include "chrome/browser/profiles/profile.h" |
| 16 #include "chrome/browser/task_manager/task_manager_browsertest_util.h" | 16 #include "chrome/browser/task_manager/task_manager_browsertest_util.h" |
| 17 #include "chrome/browser/ui/browser.h" | 17 #include "chrome/browser/ui/browser.h" |
| 18 #include "chrome/browser/ui/browser_commands.h" | 18 #include "chrome/browser/ui/browser_commands.h" |
| 19 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 19 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 20 #include "chrome/common/chrome_switches.h" | 20 #include "chrome/common/chrome_switches.h" |
| 21 #include "chrome/grit/generated_resources.h" | 21 #include "chrome/grit/generated_resources.h" |
| 22 #include "chrome/test/base/ui_test_utils.h" | 22 #include "chrome/test/base/ui_test_utils.h" |
| 23 #include "content/public/common/content_switches.h" | |
| 24 #include "content/public/common/url_constants.h" | 23 #include "content/public/common/url_constants.h" |
| 25 #include "content/public/test/browser_test_utils.h" | 24 #include "content/public/test/browser_test_utils.h" |
| 26 #include "net/base/escape.h" | 25 #include "net/base/escape.h" |
| 27 #include "net/dns/mock_host_resolver.h" | 26 #include "net/dns/mock_host_resolver.h" |
| 28 #include "net/test/embedded_test_server/request_handler_util.h" | 27 #include "net/test/embedded_test_server/request_handler_util.h" |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
| 30 #include "ui/base/l10n/l10n_util.h" | 29 #include "ui/base/l10n/l10n_util.h" |
| 31 | 30 |
| 32 using prerender::test_utils::CreateCountingInterceptorOnIO; | 31 using prerender::test_utils::CreateCountingInterceptorOnIO; |
| 33 using prerender::test_utils::CreatePrefetchOnlyInterceptorOnIO; | 32 using prerender::test_utils::CreatePrefetchOnlyInterceptorOnIO; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 52 const char kPrefetchScript[] = "prerender/prefetch.js"; | 51 const char kPrefetchScript[] = "prerender/prefetch.js"; |
| 53 const char kPrefetchScript2[] = "prerender/prefetch2.js"; | 52 const char kPrefetchScript2[] = "prerender/prefetch2.js"; |
| 54 const char kPrefetchSubresourceRedirectPage[] = | 53 const char kPrefetchSubresourceRedirectPage[] = |
| 55 "prerender/prefetch_subresource_redirect.html"; | 54 "prerender/prefetch_subresource_redirect.html"; |
| 56 | 55 |
| 57 class NoStatePrefetchBrowserTest | 56 class NoStatePrefetchBrowserTest |
| 58 : public test_utils::PrerenderInProcessBrowserTest { | 57 : public test_utils::PrerenderInProcessBrowserTest { |
| 59 public: | 58 public: |
| 60 NoStatePrefetchBrowserTest() {} | 59 NoStatePrefetchBrowserTest() {} |
| 61 | 60 |
| 62 void SetUpCommandLine(base::CommandLine* command_line) override { | |
| 63 PrerenderInProcessBrowserTest::SetUpCommandLine(command_line); | |
| 64 command_line->AppendSwitchASCII( | |
| 65 switches::kPrerenderMode, switches::kPrerenderModeSwitchValuePrefetch); | |
| 66 } | |
| 67 | |
| 68 // Set up a request counter for |path|, which is also the location of the data | 61 // Set up a request counter for |path|, which is also the location of the data |
| 69 // served by the request. | 62 // served by the request. |
| 70 void CountRequestFor(const std::string& path_str, RequestCounter* counter) { | 63 void CountRequestFor(const std::string& path_str, RequestCounter* counter) { |
| 71 url::StringPieceReplacements<base::FilePath::StringType> replacement; | 64 url::StringPieceReplacements<base::FilePath::StringType> replacement; |
| 72 base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_str); | 65 base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_str); |
| 73 replacement.SetPathStr(file_path.value()); | 66 replacement.SetPathStr(file_path.value()); |
| 74 const GURL url = src_server()->base_url().ReplaceComponents(replacement); | 67 const GURL url = src_server()->base_url().ReplaceComponents(replacement); |
| 75 CountRequestForUrl(url, path_str, counter); | 68 CountRequestForUrl(url, path_str, counter); |
| 76 } | 69 } |
| 77 | 70 |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 108 expected_final_status); | 101 expected_final_status); |
| 109 } | 102 } |
| 110 | 103 |
| 111 private: | 104 private: |
| 112 DISALLOW_COPY_AND_ASSIGN(NoStatePrefetchBrowserTest); | 105 DISALLOW_COPY_AND_ASSIGN(NoStatePrefetchBrowserTest); |
| 113 }; | 106 }; |
| 114 | 107 |
| 115 // Checks that a page is correctly prefetched in the case of a | 108 // Checks that a page is correctly prefetched in the case of a |
| 116 // <link rel=prerender> tag and the JavaScript on the page is not executed. | 109 // <link rel=prerender> tag and the JavaScript on the page is not executed. |
| 117 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimple) { | 110 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimple) { |
| 111 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
|
pasko
2016/12/01 16:47:58
that's very repetitive, can we do it in c-tor or S
droger
2016/12/01 17:17:41
No.
One option would be to keep the SetUpCommandL
droger
2016/12/01 17:39:49
Maybe I spoke too soon, as SetupOnMainThread() see
| |
| 112 | |
| 118 RequestCounter main_counter; | 113 RequestCounter main_counter; |
| 119 CountRequestFor(kPrefetchPage, &main_counter); | 114 CountRequestFor(kPrefetchPage, &main_counter); |
| 120 RequestCounter script_counter; | 115 RequestCounter script_counter; |
| 121 CountRequestFor(kPrefetchScript, &script_counter); | 116 CountRequestFor(kPrefetchScript, &script_counter); |
| 122 RequestCounter script2_counter; | 117 RequestCounter script2_counter; |
| 123 CountRequestFor(kPrefetchScript2, &script2_counter); | 118 CountRequestFor(kPrefetchScript2, &script2_counter); |
| 124 | 119 |
| 125 std::unique_ptr<TestPrerender> test_prerender = | 120 std::unique_ptr<TestPrerender> test_prerender = |
| 126 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 121 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 127 main_counter.WaitForCount(1); | 122 main_counter.WaitForCount(1); |
| 128 script_counter.WaitForCount(1); | 123 script_counter.WaitForCount(1); |
| 129 script2_counter.WaitForCount(0); | 124 script2_counter.WaitForCount(0); |
| 130 | 125 |
| 131 // Verify that the page load did not happen. | 126 // Verify that the page load did not happen. |
| 132 test_prerender->WaitForLoads(0); | 127 test_prerender->WaitForLoads(0); |
| 133 } | 128 } |
| 134 | 129 |
| 135 // Check that the LOAD_PREFETCH flag is set. | 130 // Check that the LOAD_PREFETCH flag is set. |
| 136 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchLoadFlag) { | 131 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchLoadFlag) { |
| 132 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 133 | |
| 137 RequestCounter main_counter; | 134 RequestCounter main_counter; |
| 138 RequestCounter script_counter; | 135 RequestCounter script_counter; |
| 139 content::BrowserThread::PostTask( | 136 content::BrowserThread::PostTask( |
| 140 content::BrowserThread::IO, FROM_HERE, | 137 content::BrowserThread::IO, FROM_HERE, |
| 141 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, | 138 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, |
| 142 src_server()->GetURL(MakeAbsolute(kPrefetchPage)), | 139 src_server()->GetURL(MakeAbsolute(kPrefetchPage)), |
| 143 main_counter.AsWeakPtr())); | 140 main_counter.AsWeakPtr())); |
| 144 content::BrowserThread::PostTask( | 141 content::BrowserThread::PostTask( |
| 145 content::BrowserThread::IO, FROM_HERE, | 142 content::BrowserThread::IO, FROM_HERE, |
| 146 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, | 143 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, |
| 147 src_server()->GetURL(MakeAbsolute(kPrefetchScript)), | 144 src_server()->GetURL(MakeAbsolute(kPrefetchScript)), |
| 148 script_counter.AsWeakPtr())); | 145 script_counter.AsWeakPtr())); |
| 149 | 146 |
| 150 std::unique_ptr<TestPrerender> test_prerender = | 147 std::unique_ptr<TestPrerender> test_prerender = |
| 151 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 148 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 152 main_counter.WaitForCount(1); | 149 main_counter.WaitForCount(1); |
| 153 script_counter.WaitForCount(1); | 150 script_counter.WaitForCount(1); |
| 154 | 151 |
| 155 // Verify that the page load did not happen. | 152 // Verify that the page load did not happen. |
| 156 test_prerender->WaitForLoads(0); | 153 test_prerender->WaitForLoads(0); |
| 157 } | 154 } |
| 158 | 155 |
| 159 // Checks the prefetch of an img tag. | 156 // Checks the prefetch of an img tag. |
| 160 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) { | 157 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) { |
| 158 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 159 | |
| 161 RequestCounter image_counter; | 160 RequestCounter image_counter; |
| 162 CountRequestFor(kPrefetchJpeg, &image_counter); | 161 CountRequestFor(kPrefetchJpeg, &image_counter); |
| 163 base::StringPairs replacement_text; | 162 base::StringPairs replacement_text; |
| 164 replacement_text.push_back( | 163 replacement_text.push_back( |
| 165 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg))); | 164 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg))); |
| 166 std::string main_page_path; | 165 std::string main_page_path; |
| 167 net::test_server::GetFilePathWithReplacements( | 166 net::test_server::GetFilePathWithReplacements( |
| 168 kPrefetchImagePage, replacement_text, &main_page_path); | 167 kPrefetchImagePage, replacement_text, &main_page_path); |
| 169 // Note CountRequestFor cannot be used on the main page as the test server | 168 // Note CountRequestFor cannot be used on the main page as the test server |
| 170 // must handling the image url replacement. | 169 // must handling the image url replacement. |
| 171 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 170 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 172 image_counter.WaitForCount(1); | 171 image_counter.WaitForCount(1); |
| 173 } | 172 } |
| 174 | 173 |
| 175 // Checks that a cross-domain prefetching works correctly. | 174 // Checks that a cross-domain prefetching works correctly. |
| 176 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) { | 175 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchCrossDomain) { |
| 176 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 177 | |
| 177 static const std::string secondary_domain = "www.foo.com"; | 178 static const std::string secondary_domain = "www.foo.com"; |
| 178 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); | 179 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); |
| 179 GURL cross_domain_url(base::StringPrintf( | 180 GURL cross_domain_url(base::StringPrintf( |
| 180 "http://%s:%d/%s", secondary_domain.c_str(), | 181 "http://%s:%d/%s", secondary_domain.c_str(), |
| 181 embedded_test_server()->host_port_pair().port(), kPrefetchPage)); | 182 embedded_test_server()->host_port_pair().port(), kPrefetchPage)); |
| 182 RequestCounter cross_domain_counter; | 183 RequestCounter cross_domain_counter; |
| 183 CountRequestForUrl(cross_domain_url, kPrefetchPage, &cross_domain_counter); | 184 CountRequestForUrl(cross_domain_url, kPrefetchPage, &cross_domain_counter); |
| 184 PrefetchFromURL(cross_domain_url, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 185 PrefetchFromURL(cross_domain_url, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 185 cross_domain_counter.WaitForCount(1); | 186 cross_domain_counter.WaitForCount(1); |
| 186 } | 187 } |
| 187 | 188 |
| 188 // Checks that response header CSP is respected. | 189 // Checks that response header CSP is respected. |
| 189 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ResponseHeaderCSP) { | 190 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ResponseHeaderCSP) { |
| 191 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 192 | |
| 190 static const std::string secondary_domain = "foo.bar"; | 193 static const std::string secondary_domain = "foo.bar"; |
| 191 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); | 194 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); |
| 192 RequestCounter main_page; | 195 RequestCounter main_page; |
| 193 CountRequestFor(kPrefetchResponseHeaderCSP, &main_page); | 196 CountRequestFor(kPrefetchResponseHeaderCSP, &main_page); |
| 194 RequestCounter first_script; | 197 RequestCounter first_script; |
| 195 CountRequestFor(kPrefetchScript, &first_script); | 198 CountRequestFor(kPrefetchScript, &first_script); |
| 196 RequestCounter second_script; | 199 RequestCounter second_script; |
| 197 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); | 200 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); |
| 198 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); | 201 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); |
| 199 PrefetchFromFile(kPrefetchResponseHeaderCSP, | 202 PrefetchFromFile(kPrefetchResponseHeaderCSP, |
| 200 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 203 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 201 // The second script is in the correct domain for CSP, but the first script is | 204 // The second script is in the correct domain for CSP, but the first script is |
| 202 // not. | 205 // not. |
| 203 main_page.WaitForCount(1); | 206 main_page.WaitForCount(1); |
| 204 second_script.WaitForCount(1); | 207 second_script.WaitForCount(1); |
| 205 first_script.WaitForCount(0); | 208 first_script.WaitForCount(0); |
| 206 } | 209 } |
| 207 | 210 |
| 208 // Checks that CSP in the meta tag cancels the prefetch. | 211 // Checks that CSP in the meta tag cancels the prefetch. |
| 209 // TODO(mattcary): probably this behavior should be consistent with | 212 // TODO(mattcary): probably this behavior should be consistent with |
| 210 // response-header CSP. See crbug/656581. | 213 // response-header CSP. See crbug/656581. |
| 211 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, MetaTagCSP) { | 214 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, MetaTagCSP) { |
| 215 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 216 | |
| 212 static const std::string secondary_domain = "foo.bar"; | 217 static const std::string secondary_domain = "foo.bar"; |
| 213 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); | 218 host_resolver()->AddRule(secondary_domain, "127.0.0.1"); |
| 214 RequestCounter main_page; | 219 RequestCounter main_page; |
| 215 CountRequestFor(kPrefetchMetaCSP, &main_page); | 220 CountRequestFor(kPrefetchMetaCSP, &main_page); |
| 216 RequestCounter first_script; | 221 RequestCounter first_script; |
| 217 CountRequestFor(kPrefetchScript, &first_script); | 222 CountRequestFor(kPrefetchScript, &first_script); |
| 218 RequestCounter second_script; | 223 RequestCounter second_script; |
| 219 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); | 224 GURL second_script_url(std::string("http://foo.bar/") + kPrefetchScript2); |
| 220 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); | 225 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); |
| 221 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 226 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 222 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, | 227 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, |
| 223 // |second_script| would be loaded. Instead as the background scanner bails as | 228 // |second_script| would be loaded. Instead as the background scanner bails as |
| 224 // soon as the meta CSP tag is seen, only |main_page| is fetched. | 229 // soon as the meta CSP tag is seen, only |main_page| is fetched. |
| 225 main_page.WaitForCount(1); | 230 main_page.WaitForCount(1); |
| 226 second_script.WaitForCount(0); | 231 second_script.WaitForCount(0); |
| 227 first_script.WaitForCount(0); | 232 first_script.WaitForCount(0); |
| 228 } | 233 } |
| 229 | 234 |
| 230 // Checks that the second prefetch request succeeds. This test waits for | 235 // Checks that the second prefetch request succeeds. This test waits for |
| 231 // Prerender Stop before starting the second request. | 236 // Prerender Stop before starting the second request. |
| 232 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) { | 237 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) { |
| 238 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 239 | |
| 233 RequestCounter first_main_counter; | 240 RequestCounter first_main_counter; |
| 234 CountRequestFor(kPrefetchPage, &first_main_counter); | 241 CountRequestFor(kPrefetchPage, &first_main_counter); |
| 235 RequestCounter second_main_counter; | 242 RequestCounter second_main_counter; |
| 236 CountRequestFor(kPrefetchPage2, &second_main_counter); | 243 CountRequestFor(kPrefetchPage2, &second_main_counter); |
| 237 RequestCounter first_script_counter; | 244 RequestCounter first_script_counter; |
| 238 CountRequestFor(kPrefetchScript, &first_script_counter); | 245 CountRequestFor(kPrefetchScript, &first_script_counter); |
| 239 RequestCounter second_script_counter; | 246 RequestCounter second_script_counter; |
| 240 CountRequestFor(kPrefetchScript2, &second_script_counter); | 247 CountRequestFor(kPrefetchScript2, &second_script_counter); |
| 241 | 248 |
| 242 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 249 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 243 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 250 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 244 first_main_counter.WaitForCount(1); | 251 first_main_counter.WaitForCount(1); |
| 245 second_main_counter.WaitForCount(1); | 252 second_main_counter.WaitForCount(1); |
| 246 first_script_counter.WaitForCount(1); | 253 first_script_counter.WaitForCount(1); |
| 247 second_script_counter.WaitForCount(1); | 254 second_script_counter.WaitForCount(1); |
| 248 } | 255 } |
| 249 | 256 |
| 250 // Checks that a second prefetch request, started before the first stops, | 257 // Checks that a second prefetch request, started before the first stops, |
| 251 // succeeds. | 258 // succeeds. |
| 252 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) { | 259 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) { |
| 260 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 261 | |
| 253 RequestCounter second_main_counter; | 262 RequestCounter second_main_counter; |
| 254 CountRequestFor(kPrefetchPage2, &second_main_counter); | 263 CountRequestFor(kPrefetchPage2, &second_main_counter); |
| 255 RequestCounter second_script_counter; | 264 RequestCounter second_script_counter; |
| 256 CountRequestFor(kPrefetchScript2, &second_script_counter); | 265 CountRequestFor(kPrefetchScript2, &second_script_counter); |
| 257 | 266 |
| 258 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); | 267 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 259 base::FilePath first_path = ui_test_utils::GetTestFilePath( | 268 base::FilePath first_path = ui_test_utils::GetTestFilePath( |
| 260 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage)); | 269 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage)); |
| 261 | 270 |
| 262 content::BrowserThread::PostTask( | 271 content::BrowserThread::PostTask( |
| 263 content::BrowserThread::IO, FROM_HERE, | 272 content::BrowserThread::IO, FROM_HERE, |
| 264 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO, | 273 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO, |
| 265 first_url, first_path, base::Closure())); | 274 first_url, first_path, base::Closure())); |
| 266 | 275 |
| 267 // Start the first prefetch directly instead of via PrefetchFromFile for the | 276 // Start the first prefetch directly instead of via PrefetchFromFile for the |
| 268 // first prefetch to avoid the wait on prerender stop. | 277 // first prefetch to avoid the wait on prerender stop. |
| 269 GURL first_loader_url = ServeLoaderURL( | 278 GURL first_loader_url = ServeLoaderURL( |
| 270 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, ""); | 279 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, ""); |
| 271 std::vector<FinalStatus> first_expected_status_queue(1, | 280 std::vector<FinalStatus> first_expected_status_queue(1, |
| 272 FINAL_STATUS_CANCELLED); | 281 FINAL_STATUS_CANCELLED); |
| 273 NavigateWithPrerenders(first_loader_url, first_expected_status_queue); | 282 NavigateWithPrerenders(first_loader_url, first_expected_status_queue); |
| 274 | 283 |
| 275 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 284 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 276 second_main_counter.WaitForCount(1); | 285 second_main_counter.WaitForCount(1); |
| 277 second_script_counter.WaitForCount(1); | 286 second_script_counter.WaitForCount(1); |
| 278 } | 287 } |
| 279 | 288 |
| 280 // Checks a prefetch to a nonexisting page. | 289 // Checks a prefetch to a nonexisting page. |
| 281 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { | 290 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { |
| 291 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 292 | |
| 282 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( | 293 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( |
| 283 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); | 294 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); |
| 284 } | 295 } |
| 285 | 296 |
| 286 // Checks that a 301 redirect is followed. | 297 // Checks that a 301 redirect is followed. |
| 287 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { | 298 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { |
| 299 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 300 | |
| 288 RequestCounter script_counter; | 301 RequestCounter script_counter; |
| 289 CountRequestFor(kPrefetchScript, &script_counter); | 302 CountRequestFor(kPrefetchScript, &script_counter); |
| 290 PrefetchFromFile( | 303 PrefetchFromFile( |
| 291 "/server-redirect/?" + | 304 "/server-redirect/?" + |
| 292 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), | 305 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), |
| 293 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 306 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 294 script_counter.WaitForCount(1); | 307 script_counter.WaitForCount(1); |
| 295 } | 308 } |
| 296 | 309 |
| 297 // Checks that the load flags are set correctly for all resources in a 301 | 310 // Checks that the load flags are set correctly for all resources in a 301 |
| 298 // redirect chain. | 311 // redirect chain. |
| 299 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301LoadFlags) { | 312 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301LoadFlags) { |
| 313 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 314 | |
| 300 std::string redirect_path = | 315 std::string redirect_path = |
| 301 "/server-redirect/?" + | 316 "/server-redirect/?" + |
| 302 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false); | 317 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false); |
| 303 GURL redirect_url = src_server()->GetURL(redirect_path); | 318 GURL redirect_url = src_server()->GetURL(redirect_path); |
| 304 GURL page_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); | 319 GURL page_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 305 RequestCounter redirect_counter; | 320 RequestCounter redirect_counter; |
| 306 content::BrowserThread::PostTask( | 321 content::BrowserThread::PostTask( |
| 307 content::BrowserThread::IO, FROM_HERE, | 322 content::BrowserThread::IO, FROM_HERE, |
| 308 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, redirect_url, | 323 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, redirect_url, |
| 309 redirect_counter.AsWeakPtr())); | 324 redirect_counter.AsWeakPtr())); |
| 310 RequestCounter page_counter; | 325 RequestCounter page_counter; |
| 311 content::BrowserThread::PostTask( | 326 content::BrowserThread::PostTask( |
| 312 content::BrowserThread::IO, FROM_HERE, | 327 content::BrowserThread::IO, FROM_HERE, |
| 313 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, page_url, | 328 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, page_url, |
| 314 page_counter.AsWeakPtr())); | 329 page_counter.AsWeakPtr())); |
| 315 PrefetchFromFile(redirect_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 330 PrefetchFromFile(redirect_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 316 redirect_counter.WaitForCount(1); | 331 redirect_counter.WaitForCount(1); |
| 317 page_counter.WaitForCount(1); | 332 page_counter.WaitForCount(1); |
| 318 } | 333 } |
| 319 | 334 |
| 320 // Checks that a subresource 301 redirect is followed. | 335 // Checks that a subresource 301 redirect is followed. |
| 321 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) { | 336 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) { |
| 337 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 338 | |
| 322 RequestCounter script_counter; | 339 RequestCounter script_counter; |
| 323 CountRequestFor(kPrefetchScript, &script_counter); | 340 CountRequestFor(kPrefetchScript, &script_counter); |
| 324 PrefetchFromFile(kPrefetchSubresourceRedirectPage, | 341 PrefetchFromFile(kPrefetchSubresourceRedirectPage, |
| 325 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 342 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 326 script_counter.WaitForCount(1); | 343 script_counter.WaitForCount(1); |
| 327 } | 344 } |
| 328 | 345 |
| 329 // Checks a client redirect is not followed. | 346 // Checks a client redirect is not followed. |
| 330 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchClientRedirect) { | 347 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchClientRedirect) { |
| 348 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 349 | |
| 331 RequestCounter script_counter; | 350 RequestCounter script_counter; |
| 332 CountRequestFor(kPrefetchScript, &script_counter); | 351 CountRequestFor(kPrefetchScript, &script_counter); |
| 333 // A complete load of kPrefetchPage2 is used as a sentinal. Otherwise the test | 352 // A complete load of kPrefetchPage2 is used as a sentinal. Otherwise the test |
| 334 // ends before script_counter would reliably see the load of kPrefetchScript, | 353 // ends before script_counter would reliably see the load of kPrefetchScript, |
| 335 // were it to happen. | 354 // were it to happen. |
| 336 RequestCounter sentinel_counter; | 355 RequestCounter sentinel_counter; |
| 337 CountRequestFor(kPrefetchScript2, &sentinel_counter); | 356 CountRequestFor(kPrefetchScript2, &sentinel_counter); |
| 338 PrefetchFromFile( | 357 PrefetchFromFile( |
| 339 "/client-redirect/?" + | 358 "/client-redirect/?" + |
| 340 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), | 359 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), |
| 341 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 360 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 342 ui_test_utils::NavigateToURL( | 361 ui_test_utils::NavigateToURL( |
| 343 current_browser(), src_server()->GetURL(MakeAbsolute(kPrefetchPage2))); | 362 current_browser(), src_server()->GetURL(MakeAbsolute(kPrefetchPage2))); |
| 344 sentinel_counter.WaitForCount(1); | 363 sentinel_counter.WaitForCount(1); |
| 345 script_counter.WaitForCount(0); | 364 script_counter.WaitForCount(0); |
| 346 } | 365 } |
| 347 | 366 |
| 348 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchHttps) { | 367 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchHttps) { |
| 368 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 369 | |
| 349 UseHttpsSrcServer(); | 370 UseHttpsSrcServer(); |
| 350 RequestCounter main_counter; | 371 RequestCounter main_counter; |
| 351 CountRequestFor(kPrefetchPage, &main_counter); | 372 CountRequestFor(kPrefetchPage, &main_counter); |
| 352 RequestCounter script_counter; | 373 RequestCounter script_counter; |
| 353 CountRequestFor(kPrefetchScript, &script_counter); | 374 CountRequestFor(kPrefetchScript, &script_counter); |
| 354 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 375 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 355 main_counter.WaitForCount(1); | 376 main_counter.WaitForCount(1); |
| 356 script_counter.WaitForCount(1); | 377 script_counter.WaitForCount(1); |
| 357 } | 378 } |
| 358 | 379 |
| 359 // Checks that an SSL error prevents prefetch. | 380 // Checks that an SSL error prevents prefetch. |
| 360 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLError) { | 381 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLError) { |
| 382 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 383 | |
| 361 // Only send the loaded page, not the loader, through SSL. | 384 // Only send the loaded page, not the loader, through SSL. |
| 362 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 385 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 363 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); | 386 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); |
| 364 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); | 387 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 365 ASSERT_TRUE(https_server.Start()); | 388 ASSERT_TRUE(https_server.Start()); |
| 366 std::unique_ptr<TestPrerender> prerender = PrefetchFromURL( | 389 std::unique_ptr<TestPrerender> prerender = PrefetchFromURL( |
| 367 https_server.GetURL(MakeAbsolute(kPrefetchPage)), FINAL_STATUS_SSL_ERROR); | 390 https_server.GetURL(MakeAbsolute(kPrefetchPage)), FINAL_STATUS_SSL_ERROR); |
| 368 DestructionWaiter waiter(prerender->contents(), FINAL_STATUS_SSL_ERROR); | 391 DestructionWaiter waiter(prerender->contents(), FINAL_STATUS_SSL_ERROR); |
| 369 EXPECT_TRUE(waiter.WaitForDestroy()); | 392 EXPECT_TRUE(waiter.WaitForDestroy()); |
| 370 } | 393 } |
| 371 | 394 |
| 372 // Checks that a subresource failing SSL does not prevent prefetch on the rest | 395 // Checks that a subresource failing SSL does not prevent prefetch on the rest |
| 373 // of the page. | 396 // of the page. |
| 374 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLSubresourceError) { | 397 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, SSLSubresourceError) { |
| 398 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 399 | |
| 375 // First confirm that the image loads as expected. | 400 // First confirm that the image loads as expected. |
| 376 | 401 |
| 377 // A separate HTTPS server is started for the subresource; src_server() is | 402 // A separate HTTPS server is started for the subresource; src_server() is |
| 378 // non-HTTPS. | 403 // non-HTTPS. |
| 379 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 404 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 380 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); | 405 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_MISMATCHED_NAME); |
| 381 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); | 406 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 382 ASSERT_TRUE(https_server.Start()); | 407 ASSERT_TRUE(https_server.Start()); |
| 383 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); | 408 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); |
| 384 base::StringPairs replacement_text; | 409 base::StringPairs replacement_text; |
| 385 replacement_text.push_back( | 410 replacement_text.push_back( |
| 386 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); | 411 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); |
| 387 std::string main_page_path; | 412 std::string main_page_path; |
| 388 net::test_server::GetFilePathWithReplacements( | 413 net::test_server::GetFilePathWithReplacements( |
| 389 kPrefetchImagePage, replacement_text, &main_page_path); | 414 kPrefetchImagePage, replacement_text, &main_page_path); |
| 390 RequestCounter script_counter; | 415 RequestCounter script_counter; |
| 391 CountRequestFor(kPrefetchScript, &script_counter); | 416 CountRequestFor(kPrefetchScript, &script_counter); |
| 392 | 417 |
| 393 std::unique_ptr<TestPrerender> prerender = | 418 std::unique_ptr<TestPrerender> prerender = |
| 394 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 419 PrefetchFromFile(main_page_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 395 // Checks that the presumed failure of the image load didn't affect the script | 420 // Checks that the presumed failure of the image load didn't affect the script |
| 396 // fetch. This assumes waiting for the script load is enough to see any error | 421 // fetch. This assumes waiting for the script load is enough to see any error |
| 397 // from the image load. | 422 // from the image load. |
| 398 script_counter.WaitForCount(1); | 423 script_counter.WaitForCount(1); |
| 399 } | 424 } |
| 400 | 425 |
| 401 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Loop) { | 426 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Loop) { |
| 427 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 428 | |
| 402 RequestCounter script_counter; | 429 RequestCounter script_counter; |
| 403 CountRequestFor(kPrefetchScript, &script_counter); | 430 CountRequestFor(kPrefetchScript, &script_counter); |
| 404 RequestCounter main_counter; | 431 RequestCounter main_counter; |
| 405 CountRequestFor(kPrefetchLoopPage, &main_counter); | 432 CountRequestFor(kPrefetchLoopPage, &main_counter); |
| 406 | 433 |
| 407 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( | 434 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( |
| 408 kPrefetchLoopPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 435 kPrefetchLoopPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 409 main_counter.WaitForCount(1); | 436 main_counter.WaitForCount(1); |
| 410 script_counter.WaitForCount(1); | 437 script_counter.WaitForCount(1); |
| 411 } | 438 } |
| 412 | 439 |
| 413 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, RendererCrash) { | 440 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, RendererCrash) { |
| 441 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 442 | |
| 414 // Navigate to about:blank to get the session storage namespace. | 443 // Navigate to about:blank to get the session storage namespace. |
| 415 ui_test_utils::NavigateToURL(current_browser(), GURL(url::kAboutBlankURL)); | 444 ui_test_utils::NavigateToURL(current_browser(), GURL(url::kAboutBlankURL)); |
| 416 content::SessionStorageNamespace* storage_namespace = | 445 content::SessionStorageNamespace* storage_namespace = |
| 417 GetActiveWebContents() | 446 GetActiveWebContents() |
| 418 ->GetController() | 447 ->GetController() |
| 419 .GetDefaultSessionStorageNamespace(); | 448 .GetDefaultSessionStorageNamespace(); |
| 420 | 449 |
| 421 // Navigate to about:crash without an intermediate loader because chrome:// | 450 // Navigate to about:crash without an intermediate loader because chrome:// |
| 422 // URLs are ignored in renderers, and the test server has no support for them. | 451 // URLs are ignored in renderers, and the test server has no support for them. |
| 423 const gfx::Size kSize(640, 480); | 452 const gfx::Size kSize(640, 480); |
| 424 std::unique_ptr<TestPrerender> test_prerender = | 453 std::unique_ptr<TestPrerender> test_prerender = |
| 425 prerender_contents_factory()->ExpectPrerenderContents( | 454 prerender_contents_factory()->ExpectPrerenderContents( |
| 426 FINAL_STATUS_RENDERER_CRASHED); | 455 FINAL_STATUS_RENDERER_CRASHED); |
| 427 std::unique_ptr<PrerenderHandle> prerender_handle( | 456 std::unique_ptr<PrerenderHandle> prerender_handle( |
| 428 GetPrerenderManager()->AddPrerenderFromExternalRequest( | 457 GetPrerenderManager()->AddPrerenderFromExternalRequest( |
| 429 GURL(content::kChromeUICrashURL), content::Referrer(), | 458 GURL(content::kChromeUICrashURL), content::Referrer(), |
| 430 storage_namespace, gfx::Rect(kSize))); | 459 storage_namespace, gfx::Rect(kSize))); |
| 431 ASSERT_EQ(prerender_handle->contents(), test_prerender->contents()); | 460 ASSERT_EQ(prerender_handle->contents(), test_prerender->contents()); |
| 432 test_prerender->WaitForStop(); | 461 test_prerender->WaitForStop(); |
| 433 } | 462 } |
| 434 | 463 |
| 435 // Checks that the prefetch of png correctly loads the png. | 464 // Checks that the prefetch of png correctly loads the png. |
| 436 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Png) { | 465 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Png) { |
| 466 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 467 | |
| 437 RequestCounter counter; | 468 RequestCounter counter; |
| 438 CountRequestFor(kPrefetchPng, &counter); | 469 CountRequestFor(kPrefetchPng, &counter); |
| 439 PrefetchFromFile(kPrefetchPng, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 470 PrefetchFromFile(kPrefetchPng, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 440 counter.WaitForCount(1); | 471 counter.WaitForCount(1); |
| 441 } | 472 } |
| 442 | 473 |
| 443 // Checks that the prefetch of png correctly loads the jpeg. | 474 // Checks that the prefetch of png correctly loads the jpeg. |
| 444 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Jpeg) { | 475 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Jpeg) { |
| 476 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 477 | |
| 445 RequestCounter counter; | 478 RequestCounter counter; |
| 446 CountRequestFor(kPrefetchJpeg, &counter); | 479 CountRequestFor(kPrefetchJpeg, &counter); |
| 447 PrefetchFromFile(kPrefetchJpeg, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 480 PrefetchFromFile(kPrefetchJpeg, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 448 counter.WaitForCount(1); | 481 counter.WaitForCount(1); |
| 449 } | 482 } |
| 450 | 483 |
| 451 // Checks that nothing is prefetched from malware sites. | 484 // Checks that nothing is prefetched from malware sites. |
| 452 // TODO(mattcary): disabled as prefetch process teardown is racey with prerender | 485 // TODO(mattcary): disabled as prefetch process teardown is racey with prerender |
| 453 // contents destruction, can fix when prefetch prerenderers are destroyed | 486 // contents destruction, can fix when prefetch prerenderers are destroyed |
| 454 // deterministically. | 487 // deterministically. |
| 455 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, | 488 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, |
| 456 DISABLED_PrerenderSafeBrowsingTopLevel) { | 489 DISABLED_PrerenderSafeBrowsingTopLevel) { |
| 490 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 491 | |
| 457 GURL url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); | 492 GURL url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 458 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 493 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
| 459 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); | 494 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
| 460 // Prefetch resources are blocked, but the prerender is not killed in any | 495 // Prefetch resources are blocked, but the prerender is not killed in any |
| 461 // special way. | 496 // special way. |
| 462 // TODO(mattcary): since the prerender will count itself as loaded even if the | 497 // TODO(mattcary): since the prerender will count itself as loaded even if the |
| 463 // fetch of the main resource fails, the test doesn't actually confirm what we | 498 // fetch of the main resource fails, the test doesn't actually confirm what we |
| 464 // want it to confirm. This may be fixed by planned changes to the prerender | 499 // want it to confirm. This may be fixed by planned changes to the prerender |
| 465 // lifecycle. | 500 // lifecycle. |
| 466 std::unique_ptr<TestPrerender> prerender = | 501 std::unique_ptr<TestPrerender> prerender = |
| 467 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); | 502 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); |
| 468 } | 503 } |
| 469 | 504 |
| 470 // Checks that prefetching a page does not add it to browsing history. | 505 // Checks that prefetching a page does not add it to browsing history. |
| 471 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, HistoryUntouchedByPrefetch) { | 506 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, HistoryUntouchedByPrefetch) { |
| 507 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH); | |
| 508 | |
| 472 // Initialize. | 509 // Initialize. |
| 473 Profile* profile = current_browser()->profile(); | 510 Profile* profile = current_browser()->profile(); |
| 474 ASSERT_TRUE(profile); | 511 ASSERT_TRUE(profile); |
| 475 ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile( | 512 ui_test_utils::WaitForHistoryToLoad(HistoryServiceFactory::GetForProfile( |
| 476 profile, ServiceAccessType::EXPLICIT_ACCESS)); | 513 profile, ServiceAccessType::EXPLICIT_ACCESS)); |
| 477 | 514 |
| 478 // Prefetch a page. | 515 // Prefetch a page. |
| 479 GURL prefetched_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); | 516 GURL prefetched_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 480 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 517 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 481 WaitForHistoryBackendToRun(profile); | 518 WaitForHistoryBackendToRun(profile); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 492 | 529 |
| 493 // Check that the URL that was prefetched is not in history. | 530 // Check that the URL that was prefetched is not in history. |
| 494 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) == | 531 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) == |
| 495 urls.end()); | 532 urls.end()); |
| 496 | 533 |
| 497 // The loader URL is the remaining entry. | 534 // The loader URL is the remaining entry. |
| 498 EXPECT_EQ(2U, urls.size()); | 535 EXPECT_EQ(2U, urls.size()); |
| 499 } | 536 } |
| 500 | 537 |
| 501 } // namespace prerender | 538 } // namespace prerender |
| OLD | NEW |