OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 } else if (as == "style") { | 219 } else if (as == "style") { |
220 return Resource::kCSSStyleSheet; | 220 return Resource::kCSSStyleSheet; |
221 } else if (as == "video") { | 221 } else if (as == "video") { |
222 return Resource::kMedia; | 222 return Resource::kMedia; |
223 } else if (as == "audio") { | 223 } else if (as == "audio") { |
224 return Resource::kMedia; | 224 return Resource::kMedia; |
225 } else if (as == "track") { | 225 } else if (as == "track") { |
226 return Resource::kTextTrack; | 226 return Resource::kTextTrack; |
227 } else if (as == "font") { | 227 } else if (as == "font") { |
228 return Resource::kFont; | 228 return Resource::kFont; |
229 } else if (as.IsEmpty()) { | 229 } else if (as == "fetch") { |
230 return Resource::kRaw; | 230 return Resource::kRaw; |
231 } | 231 } |
232 return WTF::nullopt; | 232 return WTF::nullopt; |
233 } | 233 } |
234 | 234 |
235 Resource* LinkLoader::LinkPreloadedResourceForTesting() { | 235 Resource* LinkLoader::LinkPreloadedResourceForTesting() { |
236 return link_preload_resource_client_ | 236 return link_preload_resource_client_ |
237 ? link_preload_resource_client_->GetResource() | 237 ? link_preload_resource_client_->GetResource() |
238 : nullptr; | 238 : nullptr; |
239 } | 239 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 } | 295 } |
296 | 296 |
297 static Resource* PreloadIfNeeded(const LinkRelAttribute& rel_attribute, | 297 static Resource* PreloadIfNeeded(const LinkRelAttribute& rel_attribute, |
298 const KURL& href, | 298 const KURL& href, |
299 Document& document, | 299 Document& document, |
300 const String& as, | 300 const String& as, |
301 const String& mime_type, | 301 const String& mime_type, |
302 const String& media, | 302 const String& media, |
303 CrossOriginAttributeValue cross_origin, | 303 CrossOriginAttributeValue cross_origin, |
304 LinkCaller caller, | 304 LinkCaller caller, |
305 bool& error_occurred, | |
306 ViewportDescription* viewport_description, | 305 ViewportDescription* viewport_description, |
307 ReferrerPolicy referrer_policy) { | 306 ReferrerPolicy referrer_policy) { |
308 if (!document.Loader() || !rel_attribute.IsLinkPreload()) | 307 if (!document.Loader() || !rel_attribute.IsLinkPreload()) |
309 return nullptr; | 308 return nullptr; |
310 | 309 |
311 UseCounter::Count(document, UseCounter::kLinkRelPreload); | 310 UseCounter::Count(document, UseCounter::kLinkRelPreload); |
312 if (!href.IsValid() || href.IsEmpty()) { | 311 if (!href.IsValid() || href.IsEmpty()) { |
313 document.AddConsoleMessage(ConsoleMessage::Create( | 312 document.AddConsoleMessage(ConsoleMessage::Create( |
314 kOtherMessageSource, kWarningMessageLevel, | 313 kOtherMessageSource, kWarningMessageLevel, |
315 String("<link rel=preload> has an invalid `href` value"))); | 314 String("<link rel=preload> has an invalid `href` value"))); |
(...skipping 16 matching lines...) Expand all Loading... |
332 return nullptr; | 331 return nullptr; |
333 } | 332 } |
334 if (caller == kLinkCalledFromHeader) | 333 if (caller == kLinkCalledFromHeader) |
335 UseCounter::Count(document, UseCounter::kLinkHeaderPreload); | 334 UseCounter::Count(document, UseCounter::kLinkHeaderPreload); |
336 Optional<Resource::Type> resource_type = | 335 Optional<Resource::Type> resource_type = |
337 LinkLoader::GetResourceTypeFromAsAttribute(as); | 336 LinkLoader::GetResourceTypeFromAsAttribute(as); |
338 if (resource_type == WTF::nullopt) { | 337 if (resource_type == WTF::nullopt) { |
339 document.AddConsoleMessage(ConsoleMessage::Create( | 338 document.AddConsoleMessage(ConsoleMessage::Create( |
340 kOtherMessageSource, kWarningMessageLevel, | 339 kOtherMessageSource, kWarningMessageLevel, |
341 String("<link rel=preload> must have a valid `as` value"))); | 340 String("<link rel=preload> must have a valid `as` value"))); |
342 error_occurred = true; | |
343 return nullptr; | 341 return nullptr; |
344 } | 342 } |
345 | 343 |
346 if (!IsSupportedType(resource_type.value(), mime_type)) { | 344 if (!IsSupportedType(resource_type.value(), mime_type)) { |
347 document.AddConsoleMessage(ConsoleMessage::Create( | 345 document.AddConsoleMessage(ConsoleMessage::Create( |
348 kOtherMessageSource, kWarningMessageLevel, | 346 kOtherMessageSource, kWarningMessageLevel, |
349 String("<link rel=preload> has an unsupported `type` value"))); | 347 String("<link rel=preload> has an unsupported `type` value"))); |
350 return nullptr; | 348 return nullptr; |
351 } | 349 } |
352 ResourceRequest resource_request(document.CompleteURL(href)); | 350 ResourceRequest resource_request(document.CompleteURL(href)); |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 if (can_load_resources != kOnlyLoadResources) { | 429 if (can_load_resources != kOnlyLoadResources) { |
432 DnsPrefetchIfNeeded(rel_attribute, url, document, &frame, | 430 DnsPrefetchIfNeeded(rel_attribute, url, document, &frame, |
433 network_hints_interface, kLinkCalledFromHeader); | 431 network_hints_interface, kLinkCalledFromHeader); |
434 | 432 |
435 PreconnectIfNeeded(rel_attribute, url, document, &frame, | 433 PreconnectIfNeeded(rel_attribute, url, document, &frame, |
436 GetCrossOriginAttributeValue(header.CrossOrigin()), | 434 GetCrossOriginAttributeValue(header.CrossOrigin()), |
437 network_hints_interface, kLinkCalledFromHeader); | 435 network_hints_interface, kLinkCalledFromHeader); |
438 } | 436 } |
439 if (can_load_resources != kDoNotLoadResources) { | 437 if (can_load_resources != kDoNotLoadResources) { |
440 DCHECK(document); | 438 DCHECK(document); |
441 bool error_occurred = false; | |
442 ViewportDescription* viewport_description = | 439 ViewportDescription* viewport_description = |
443 (viewport_description_wrapper && viewport_description_wrapper->set) | 440 (viewport_description_wrapper && viewport_description_wrapper->set) |
444 ? &(viewport_description_wrapper->description) | 441 ? &(viewport_description_wrapper->description) |
445 : nullptr; | 442 : nullptr; |
446 | 443 |
447 CrossOriginAttributeValue cross_origin = | 444 CrossOriginAttributeValue cross_origin = |
448 GetCrossOriginAttributeValue(header.CrossOrigin()); | 445 GetCrossOriginAttributeValue(header.CrossOrigin()); |
449 PreloadIfNeeded(rel_attribute, url, *document, header.As(), | 446 PreloadIfNeeded(rel_attribute, url, *document, header.As(), |
450 header.MimeType(), header.Media(), cross_origin, | 447 header.MimeType(), header.Media(), cross_origin, |
451 kLinkCalledFromHeader, error_occurred, | 448 kLinkCalledFromHeader, viewport_description, |
452 viewport_description, kReferrerPolicyDefault); | 449 kReferrerPolicyDefault); |
453 PrefetchIfNeeded(*document, url, rel_attribute, cross_origin, | 450 PrefetchIfNeeded(*document, url, rel_attribute, cross_origin, |
454 kReferrerPolicyDefault); | 451 kReferrerPolicyDefault); |
455 } | 452 } |
456 if (rel_attribute.IsServiceWorker()) { | 453 if (rel_attribute.IsServiceWorker()) { |
457 UseCounter::Count(&frame, UseCounter::kLinkHeaderServiceWorker); | 454 UseCounter::Count(&frame, UseCounter::kLinkHeaderServiceWorker); |
458 } | 455 } |
459 // TODO(yoav): Add more supported headers as needed. | 456 // TODO(yoav): Add more supported headers as needed. |
460 } | 457 } |
461 } | 458 } |
462 | 459 |
(...skipping 10 matching lines...) Expand all Loading... |
473 if (!client_->ShouldLoadLink()) | 470 if (!client_->ShouldLoadLink()) |
474 return false; | 471 return false; |
475 | 472 |
476 DnsPrefetchIfNeeded(rel_attribute, href, &document, document.GetFrame(), | 473 DnsPrefetchIfNeeded(rel_attribute, href, &document, document.GetFrame(), |
477 network_hints_interface, kLinkCalledFromMarkup); | 474 network_hints_interface, kLinkCalledFromMarkup); |
478 | 475 |
479 PreconnectIfNeeded(rel_attribute, href, &document, document.GetFrame(), | 476 PreconnectIfNeeded(rel_attribute, href, &document, document.GetFrame(), |
480 cross_origin, network_hints_interface, | 477 cross_origin, network_hints_interface, |
481 kLinkCalledFromMarkup); | 478 kLinkCalledFromMarkup); |
482 | 479 |
483 bool error_occurred = false; | |
484 CreateLinkPreloadResourceClient(PreloadIfNeeded( | 480 CreateLinkPreloadResourceClient(PreloadIfNeeded( |
485 rel_attribute, href, document, as, type, media, cross_origin, | 481 rel_attribute, href, document, as, type, media, cross_origin, |
486 kLinkCalledFromMarkup, error_occurred, nullptr, referrer_policy)); | 482 kLinkCalledFromMarkup, nullptr, referrer_policy)); |
487 if (error_occurred) | |
488 link_loading_error_timer_.StartOneShot(0, BLINK_FROM_HERE); | |
489 | 483 |
490 if (href.IsEmpty() || !href.IsValid()) | 484 if (href.IsEmpty() || !href.IsValid()) |
491 Released(); | 485 Released(); |
492 | 486 |
493 Resource* resource = PrefetchIfNeeded(document, href, rel_attribute, | 487 Resource* resource = PrefetchIfNeeded(document, href, rel_attribute, |
494 cross_origin, referrer_policy); | 488 cross_origin, referrer_policy); |
495 if (resource) | 489 if (resource) |
496 SetResource(resource); | 490 SetResource(resource); |
497 | 491 |
498 if (const unsigned prerender_rel_types = | 492 if (const unsigned prerender_rel_types = |
(...skipping 27 matching lines...) Expand all Loading... |
526 | 520 |
527 DEFINE_TRACE(LinkLoader) { | 521 DEFINE_TRACE(LinkLoader) { |
528 visitor->Trace(client_); | 522 visitor->Trace(client_); |
529 visitor->Trace(prerender_); | 523 visitor->Trace(prerender_); |
530 visitor->Trace(link_preload_resource_client_); | 524 visitor->Trace(link_preload_resource_client_); |
531 ResourceOwner<Resource, ResourceClient>::Trace(visitor); | 525 ResourceOwner<Resource, ResourceClient>::Trace(visitor); |
532 PrerenderClient::Trace(visitor); | 526 PrerenderClient::Trace(visitor); |
533 } | 527 } |
534 | 528 |
535 } // namespace blink | 529 } // namespace blink |
OLD | NEW |