| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/loader/LinkLoader.h" | 5 #include "core/loader/LinkLoader.h" |
| 6 | 6 |
| 7 #include "core/fetch/MemoryCache.h" | 7 #include "core/fetch/MemoryCache.h" |
| 8 #include "core/fetch/ResourceFetcher.h" | 8 #include "core/fetch/ResourceFetcher.h" |
| 9 #include "core/frame/Settings.h" | 9 #include "core/frame/Settings.h" |
| 10 #include "core/html/LinkRelAttribute.h" | 10 #include "core/html/LinkRelAttribute.h" |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 } | 245 } |
| 246 } | 246 } |
| 247 } | 247 } |
| 248 dummyPageHolder->document().fetcher()->clearPreloads(); | 248 dummyPageHolder->document().fetcher()->clearPreloads(); |
| 249 } | 249 } |
| 250 memoryCache()->evictResources(); | 250 memoryCache()->evictResources(); |
| 251 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); | 251 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 252 } | 252 } |
| 253 } | 253 } |
| 254 | 254 |
| 255 TEST(LinkLoaderTest, Prefetch) { |
| 256 struct TestCase { |
| 257 const char* href; |
| 258 // TODO(yoav): Add support for type and media crbug.com/662687 |
| 259 const char* type; |
| 260 const char* media; |
| 261 const ReferrerPolicy referrerPolicy; |
| 262 const bool linkLoaderShouldLoadValue; |
| 263 const bool expectingLoad; |
| 264 const ReferrerPolicy expectedReferrerPolicy; |
| 265 } cases[] = { |
| 266 // Referrer Policy |
| 267 {"http://example.test/cat.jpg", "image/jpg", "", ReferrerPolicyOrigin, |
| 268 true, true, ReferrerPolicyOrigin}, |
| 269 {"http://example.test/cat.jpg", "image/jpg", "", |
| 270 ReferrerPolicyOriginWhenCrossOrigin, true, true, |
| 271 ReferrerPolicyOriginWhenCrossOrigin}, |
| 272 {"http://example.test/cat.jpg", "image/jpg", "", ReferrerPolicyNever, |
| 273 true, true, ReferrerPolicyNever}, |
| 274 }; |
| 275 |
| 276 // Test the cases with a single header |
| 277 for (const auto& testCase : cases) { |
| 278 std::unique_ptr<DummyPageHolder> dummyPageHolder = |
| 279 DummyPageHolder::create(IntSize(500, 500)); |
| 280 dummyPageHolder->frame().settings()->setScriptEnabled(true); |
| 281 Persistent<MockLinkLoaderClient> loaderClient = |
| 282 MockLinkLoaderClient::create(testCase.linkLoaderShouldLoadValue); |
| 283 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
| 284 KURL hrefURL = KURL(KURL(), testCase.href); |
| 285 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); |
| 286 loader->loadLink(LinkRelAttribute("prefetch"), CrossOriginAttributeNotSet, |
| 287 testCase.type, "", testCase.media, testCase.referrerPolicy, |
| 288 hrefURL, dummyPageHolder->document(), NetworkHintsMock()); |
| 289 ASSERT_TRUE(dummyPageHolder->document().fetcher()); |
| 290 Resource* resource = loader->resource(); |
| 291 if (testCase.expectingLoad) { |
| 292 EXPECT_TRUE(resource); |
| 293 } else { |
| 294 EXPECT_FALSE(resource); |
| 295 } |
| 296 if (resource) { |
| 297 if (testCase.expectedReferrerPolicy != ReferrerPolicyDefault) { |
| 298 EXPECT_EQ(testCase.expectedReferrerPolicy, |
| 299 resource->resourceRequest().getReferrerPolicy()); |
| 300 } |
| 301 } |
| 302 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 303 } |
| 304 } |
| 305 |
| 255 TEST(LinkLoaderTest, DNSPrefetch) { | 306 TEST(LinkLoaderTest, DNSPrefetch) { |
| 256 struct { | 307 struct { |
| 257 const char* href; | 308 const char* href; |
| 258 const bool shouldLoad; | 309 const bool shouldLoad; |
| 259 } cases[] = { | 310 } cases[] = { |
| 260 {"http://example.com/", true}, | 311 {"http://example.com/", true}, |
| 261 {"https://example.com/", true}, | 312 {"https://example.com/", true}, |
| 262 {"//example.com/", true}, | 313 {"//example.com/", true}, |
| 314 {"//example.com/", false}, |
| 263 }; | 315 }; |
| 264 | 316 |
| 265 // TODO(yoav): Test (and fix) shouldLoad = false | |
| 266 | |
| 267 // Test the cases with a single header | 317 // Test the cases with a single header |
| 268 for (const auto& testCase : cases) { | 318 for (const auto& testCase : cases) { |
| 269 std::unique_ptr<DummyPageHolder> dummyPageHolder = | 319 std::unique_ptr<DummyPageHolder> dummyPageHolder = |
| 270 DummyPageHolder::create(IntSize(500, 500)); | 320 DummyPageHolder::create(IntSize(500, 500)); |
| 271 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); | 321 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); |
| 272 Persistent<MockLinkLoaderClient> loaderClient = | 322 Persistent<MockLinkLoaderClient> loaderClient = |
| 273 MockLinkLoaderClient::create(testCase.shouldLoad); | 323 MockLinkLoaderClient::create(testCase.shouldLoad); |
| 274 LinkLoader* loader = LinkLoader::create(loaderClient.get()); | 324 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
| 275 KURL hrefURL = | 325 KURL hrefURL = |
| 276 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), | 326 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 290 const char* href; | 340 const char* href; |
| 291 CrossOriginAttributeValue crossOrigin; | 341 CrossOriginAttributeValue crossOrigin; |
| 292 const bool shouldLoad; | 342 const bool shouldLoad; |
| 293 const bool isHTTPS; | 343 const bool isHTTPS; |
| 294 const bool isCrossOrigin; | 344 const bool isCrossOrigin; |
| 295 } cases[] = { | 345 } cases[] = { |
| 296 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, | 346 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, |
| 297 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, | 347 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, |
| 298 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true}, | 348 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true}, |
| 299 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, | 349 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, |
| 350 {"http://example.com/", CrossOriginAttributeNotSet, false, false, false}, |
| 300 }; | 351 }; |
| 301 | 352 |
| 302 // Test the cases with a single header | 353 // Test the cases with a single header |
| 303 for (const auto& testCase : cases) { | 354 for (const auto& testCase : cases) { |
| 304 std::unique_ptr<DummyPageHolder> dummyPageHolder = | 355 std::unique_ptr<DummyPageHolder> dummyPageHolder = |
| 305 DummyPageHolder::create(IntSize(500, 500)); | 356 DummyPageHolder::create(IntSize(500, 500)); |
| 306 Persistent<MockLinkLoaderClient> loaderClient = | 357 Persistent<MockLinkLoaderClient> loaderClient = |
| 307 MockLinkLoaderClient::create(testCase.shouldLoad); | 358 MockLinkLoaderClient::create(testCase.shouldLoad); |
| 308 LinkLoader* loader = LinkLoader::create(loaderClient.get()); | 359 LinkLoader* loader = LinkLoader::create(loaderClient.get()); |
| 309 KURL hrefURL = | 360 KURL hrefURL = |
| 310 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), | 361 KURL(KURL(ParsedURLStringTag(), String("http://example.com")), |
| 311 testCase.href); | 362 testCase.href); |
| 312 NetworkHintsMock networkHints; | 363 NetworkHintsMock networkHints; |
| 313 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, | 364 loader->loadLink(LinkRelAttribute("preconnect"), testCase.crossOrigin, |
| 314 String(), String(), String(), ReferrerPolicyDefault, | 365 String(), String(), String(), ReferrerPolicyDefault, |
| 315 hrefURL, dummyPageHolder->document(), networkHints); | 366 hrefURL, dummyPageHolder->document(), networkHints); |
| 316 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); | 367 EXPECT_EQ(testCase.shouldLoad, networkHints.didPreconnect()); |
| 317 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); | 368 EXPECT_EQ(testCase.isHTTPS, networkHints.isHTTPS()); |
| 318 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); | 369 EXPECT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin()); |
| 319 } | 370 } |
| 320 } | 371 } |
| 321 | 372 |
| 322 } // namespace blink | 373 } // namespace blink |
| OLD | NEW |