| 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" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "content/public/common/content_switches.h" | 23 #include "content/public/common/content_switches.h" |
| 24 #include "content/public/common/url_constants.h" | 24 #include "content/public/common/url_constants.h" |
| 25 #include "content/public/test/browser_test_utils.h" | 25 #include "content/public/test/browser_test_utils.h" |
| 26 #include "net/base/escape.h" | 26 #include "net/base/escape.h" |
| 27 #include "net/dns/mock_host_resolver.h" | 27 #include "net/dns/mock_host_resolver.h" |
| 28 #include "net/test/embedded_test_server/request_handler_util.h" | 28 #include "net/test/embedded_test_server/request_handler_util.h" |
| 29 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 30 #include "ui/base/l10n/l10n_util.h" | 30 #include "ui/base/l10n/l10n_util.h" |
| 31 | 31 |
| 32 using prerender::test_utils::CreateCountingInterceptorOnIO; | 32 using prerender::test_utils::CreateCountingInterceptorOnIO; |
| 33 using prerender::test_utils::CreatePrefetchOnlyInterceptorOnIO; |
| 33 using prerender::test_utils::DestructionWaiter; | 34 using prerender::test_utils::DestructionWaiter; |
| 34 using prerender::test_utils::RequestCounter; | 35 using prerender::test_utils::RequestCounter; |
| 35 using prerender::test_utils::TestPrerender; | 36 using prerender::test_utils::TestPrerender; |
| 36 | 37 |
| 37 namespace prerender { | 38 namespace prerender { |
| 38 | 39 |
| 39 // These URLs used for test resources must be relative with the exception of | 40 // These URLs used for test resources must be relative with the exception of |
| 40 // |kPrefetchLoaderPath|. | 41 // |kPrefetchLoaderPath|. |
| 41 const char kPrefetchImagePage[] = "prerender/prefetch_image.html"; | 42 const char kPrefetchImagePage[] = "prerender/prefetch_image.html"; |
| 42 const char kPrefetchJpeg[] = "prerender/image.jpeg"; | 43 const char kPrefetchJpeg[] = "prerender/image.jpeg"; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 std::unique_ptr<TestPrerender> test_prerender = | 125 std::unique_ptr<TestPrerender> test_prerender = |
| 125 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 126 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 126 main_counter.WaitForCount(1); | 127 main_counter.WaitForCount(1); |
| 127 script_counter.WaitForCount(1); | 128 script_counter.WaitForCount(1); |
| 128 script2_counter.WaitForCount(0); | 129 script2_counter.WaitForCount(0); |
| 129 | 130 |
| 130 // Verify that the page load did not happen. | 131 // Verify that the page load did not happen. |
| 131 test_prerender->WaitForLoads(0); | 132 test_prerender->WaitForLoads(0); |
| 132 } | 133 } |
| 133 | 134 |
| 135 // Check that the LOAD_PREFETCH flag is set. |
| 136 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchLoadFlag) { |
| 137 RequestCounter main_counter; |
| 138 RequestCounter script_counter; |
| 139 content::BrowserThread::PostTask( |
| 140 content::BrowserThread::IO, FROM_HERE, |
| 141 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, |
| 142 src_server()->GetURL(MakeAbsolute(kPrefetchPage)), |
| 143 main_counter.AsWeakPtr())); |
| 144 content::BrowserThread::PostTask( |
| 145 content::BrowserThread::IO, FROM_HERE, |
| 146 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, |
| 147 src_server()->GetURL(MakeAbsolute(kPrefetchScript)), |
| 148 script_counter.AsWeakPtr())); |
| 149 |
| 150 std::unique_ptr<TestPrerender> test_prerender = |
| 151 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 152 main_counter.WaitForCount(1); |
| 153 script_counter.WaitForCount(1); |
| 154 |
| 155 // Verify that the page load did not happen. |
| 156 test_prerender->WaitForLoads(0); |
| 157 } |
| 158 |
| 134 // Checks the prefetch of an img tag. | 159 // Checks the prefetch of an img tag. |
| 135 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) { | 160 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchImage) { |
| 136 RequestCounter image_counter; | 161 RequestCounter image_counter; |
| 137 CountRequestFor(kPrefetchJpeg, &image_counter); | 162 CountRequestFor(kPrefetchJpeg, &image_counter); |
| 138 base::StringPairs replacement_text; | 163 base::StringPairs replacement_text; |
| 139 replacement_text.push_back( | 164 replacement_text.push_back( |
| 140 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg))); | 165 std::make_pair("REPLACE_WITH_IMAGE_URL", MakeAbsolute(kPrefetchJpeg))); |
| 141 std::string main_page_path; | 166 std::string main_page_path; |
| 142 net::test_server::GetFilePathWithReplacements( | 167 net::test_server::GetFilePathWithReplacements( |
| 143 kPrefetchImagePage, replacement_text, &main_page_path); | 168 kPrefetchImagePage, replacement_text, &main_page_path); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 262 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { | 287 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { |
| 263 RequestCounter script_counter; | 288 RequestCounter script_counter; |
| 264 CountRequestFor(kPrefetchScript, &script_counter); | 289 CountRequestFor(kPrefetchScript, &script_counter); |
| 265 PrefetchFromFile( | 290 PrefetchFromFile( |
| 266 "/server-redirect/?" + | 291 "/server-redirect/?" + |
| 267 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), | 292 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false), |
| 268 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 293 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 269 script_counter.WaitForCount(1); | 294 script_counter.WaitForCount(1); |
| 270 } | 295 } |
| 271 | 296 |
| 297 // Checks that the load flags are set correctly for all resources in a 301 |
| 298 // redirect chain. |
| 299 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301LoadFlags) { |
| 300 std::string redirect_path = |
| 301 "/server-redirect/?" + |
| 302 net::EscapeQueryParamValue(MakeAbsolute(kPrefetchPage), false); |
| 303 GURL redirect_url = src_server()->GetURL(redirect_path); |
| 304 GURL page_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage)); |
| 305 RequestCounter redirect_counter; |
| 306 content::BrowserThread::PostTask( |
| 307 content::BrowserThread::IO, FROM_HERE, |
| 308 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, redirect_url, |
| 309 redirect_counter.AsWeakPtr())); |
| 310 RequestCounter page_counter; |
| 311 content::BrowserThread::PostTask( |
| 312 content::BrowserThread::IO, FROM_HERE, |
| 313 base::Bind(&CreatePrefetchOnlyInterceptorOnIO, page_url, |
| 314 page_counter.AsWeakPtr())); |
| 315 PrefetchFromFile(redirect_path, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 316 redirect_counter.WaitForCount(1); |
| 317 page_counter.WaitForCount(1); |
| 318 } |
| 319 |
| 272 // Checks that a subresource 301 redirect is followed. | 320 // Checks that a subresource 301 redirect is followed. |
| 273 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) { | 321 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Subresource) { |
| 274 RequestCounter script_counter; | 322 RequestCounter script_counter; |
| 275 CountRequestFor(kPrefetchScript, &script_counter); | 323 CountRequestFor(kPrefetchScript, &script_counter); |
| 276 PrefetchFromFile(kPrefetchSubresourceRedirectPage, | 324 PrefetchFromFile(kPrefetchSubresourceRedirectPage, |
| 277 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); | 325 FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); |
| 278 script_counter.WaitForCount(1); | 326 script_counter.WaitForCount(1); |
| 279 } | 327 } |
| 280 | 328 |
| 281 // Checks a client redirect is not followed. | 329 // Checks a client redirect is not followed. |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 | 492 |
| 445 // Check that the URL that was prefetched is not in history. | 493 // Check that the URL that was prefetched is not in history. |
| 446 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) == | 494 EXPECT_TRUE(std::find(urls.begin(), urls.end(), prefetched_url) == |
| 447 urls.end()); | 495 urls.end()); |
| 448 | 496 |
| 449 // The loader URL is the remaining entry. | 497 // The loader URL is the remaining entry. |
| 450 EXPECT_EQ(2U, urls.size()); | 498 EXPECT_EQ(2U, urls.size()); |
| 451 } | 499 } |
| 452 | 500 |
| 453 } // namespace prerender | 501 } // namespace prerender |
| OLD | NEW |