| 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 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 String("Preconnect CORS setting is ") + | 175 String("Preconnect CORS setting is ") + |
| 176 String((crossOrigin == CrossOriginAttributeAnonymous) | 176 String((crossOrigin == CrossOriginAttributeAnonymous) |
| 177 ? "anonymous" | 177 ? "anonymous" |
| 178 : "use-credentials"))); | 178 : "use-credentials"))); |
| 179 } | 179 } |
| 180 } | 180 } |
| 181 networkHintsInterface.preconnectHost(href, crossOrigin); | 181 networkHintsInterface.preconnectHost(href, crossOrigin); |
| 182 } | 182 } |
| 183 } | 183 } |
| 184 | 184 |
| 185 bool LinkLoader::getResourceTypeFromAsAttribute(const String& as, | 185 WTF::Optional<Resource::Type> LinkLoader::getResourceTypeFromAsAttribute( |
| 186 Resource::Type& type) { | 186 const String& as) { |
| 187 DCHECK_EQ(as.lower(), as); | 187 DCHECK_EQ(as.lower(), as); |
| 188 if (as == "image") { | 188 if (as == "image") { |
| 189 type = Resource::Image; | 189 return Resource::Image; |
| 190 } else if (as == "script") { | 190 } else if (as == "script") { |
| 191 type = Resource::Script; | 191 return Resource::Script; |
| 192 } else if (as == "style") { | 192 } else if (as == "style") { |
| 193 type = Resource::CSSStyleSheet; | 193 return Resource::CSSStyleSheet; |
| 194 } else if (as == "media") { | 194 } else if (as == "media") { |
| 195 type = Resource::Media; | 195 return Resource::Media; |
| 196 } else if (as == "font") { | 196 } else if (as == "font") { |
| 197 type = Resource::Font; | 197 return Resource::Font; |
| 198 } else if (as == "track") { | 198 } else if (as == "track") { |
| 199 type = Resource::TextTrack; | 199 return Resource::TextTrack; |
| 200 } else { | 200 } else if (as.isEmpty()) { |
| 201 type = Resource::Raw; | 201 return Resource::Raw; |
| 202 if (!as.isEmpty()) | |
| 203 return false; | |
| 204 } | 202 } |
| 205 return true; | 203 return WTF::nullopt; |
| 206 } | 204 } |
| 207 | 205 |
| 208 void LinkLoader::createLinkPreloadResourceClient(Resource* resource) { | 206 void LinkLoader::createLinkPreloadResourceClient(Resource* resource) { |
| 209 if (!resource) | 207 if (!resource) |
| 210 return; | 208 return; |
| 211 switch (resource->getType()) { | 209 switch (resource->getType()) { |
| 212 case Resource::Image: | 210 case Resource::Image: |
| 213 m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create( | 211 m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create( |
| 214 this, toImageResource(resource)); | 212 this, toImageResource(resource)); |
| 215 break; | 213 break; |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 } | 291 } |
| 294 | 292 |
| 295 // Preload only if media matches | 293 // Preload only if media matches |
| 296 MediaQuerySet* mediaQueries = MediaQuerySet::create(media); | 294 MediaQuerySet* mediaQueries = MediaQuerySet::create(media); |
| 297 MediaQueryEvaluator evaluator(*mediaValues); | 295 MediaQueryEvaluator evaluator(*mediaValues); |
| 298 if (!evaluator.eval(mediaQueries)) | 296 if (!evaluator.eval(mediaQueries)) |
| 299 return nullptr; | 297 return nullptr; |
| 300 } | 298 } |
| 301 if (caller == LinkCalledFromHeader) | 299 if (caller == LinkCalledFromHeader) |
| 302 UseCounter::count(document, UseCounter::LinkHeaderPreload); | 300 UseCounter::count(document, UseCounter::LinkHeaderPreload); |
| 303 Resource::Type resourceType; | 301 Optional<Resource::Type> resourceType = |
| 304 if (!LinkLoader::getResourceTypeFromAsAttribute(as, resourceType)) { | 302 LinkLoader::getResourceTypeFromAsAttribute(as); |
| 303 if (resourceType == WTF::nullopt) { |
| 305 document.addConsoleMessage(ConsoleMessage::create( | 304 document.addConsoleMessage(ConsoleMessage::create( |
| 306 OtherMessageSource, WarningMessageLevel, | 305 OtherMessageSource, WarningMessageLevel, |
| 307 String("<link rel=preload> must have a valid `as` value"))); | 306 String("<link rel=preload> must have a valid `as` value"))); |
| 308 errorOccurred = true; | 307 errorOccurred = true; |
| 309 return nullptr; | 308 return nullptr; |
| 310 } | 309 } |
| 311 | 310 |
| 312 if (!isSupportedType(resourceType, mimeType)) { | 311 if (!isSupportedType(resourceType.value(), mimeType)) { |
| 313 document.addConsoleMessage(ConsoleMessage::create( | 312 document.addConsoleMessage(ConsoleMessage::create( |
| 314 OtherMessageSource, WarningMessageLevel, | 313 OtherMessageSource, WarningMessageLevel, |
| 315 String("<link rel=preload> has an unsupported `type` value"))); | 314 String("<link rel=preload> has an unsupported `type` value"))); |
| 316 return nullptr; | 315 return nullptr; |
| 317 } | 316 } |
| 318 ResourceRequest resourceRequest(document.completeURL(href)); | 317 ResourceRequest resourceRequest(document.completeURL(href)); |
| 319 ResourceFetcher::determineRequestContext(resourceRequest, resourceType, | 318 ResourceFetcher::determineRequestContext(resourceRequest, |
| 320 false); | 319 resourceType.value(), false); |
| 321 | 320 |
| 322 if (referrerPolicy != ReferrerPolicyDefault) { | 321 if (referrerPolicy != ReferrerPolicyDefault) { |
| 323 resourceRequest.setHTTPReferrer(SecurityPolicy::generateReferrer( | 322 resourceRequest.setHTTPReferrer(SecurityPolicy::generateReferrer( |
| 324 referrerPolicy, href, document.outgoingReferrer())); | 323 referrerPolicy, href, document.outgoingReferrer())); |
| 325 } | 324 } |
| 326 | 325 |
| 327 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, | 326 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, |
| 328 document.encodingName()); | 327 document.encodingName()); |
| 329 | 328 |
| 330 if (crossOrigin != CrossOriginAttributeNotSet) { | 329 if (crossOrigin != CrossOriginAttributeNotSet) { |
| 331 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), | 330 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), |
| 332 crossOrigin); | 331 crossOrigin); |
| 333 } | 332 } |
| 334 Settings* settings = document.settings(); | 333 Settings* settings = document.settings(); |
| 335 if (settings && settings->getLogPreload()) { | 334 if (settings && settings->getLogPreload()) { |
| 336 document.addConsoleMessage(ConsoleMessage::create( | 335 document.addConsoleMessage(ConsoleMessage::create( |
| 337 OtherMessageSource, DebugMessageLevel, | 336 OtherMessageSource, DebugMessageLevel, |
| 338 String("Preload triggered for " + href.host() + href.path()))); | 337 String("Preload triggered for " + href.host() + href.path()))); |
| 339 } | 338 } |
| 340 linkRequest.setForPreload(true, monotonicallyIncreasingTime()); | 339 linkRequest.setForPreload(true, monotonicallyIncreasingTime()); |
| 341 linkRequest.setLinkPreload(true); | 340 linkRequest.setLinkPreload(true); |
| 342 return document.loader()->startPreload(resourceType, linkRequest); | 341 return document.loader()->startPreload(resourceType.value(), linkRequest); |
| 343 } | 342 } |
| 344 | 343 |
| 345 static Resource* prefetchIfNeeded(Document& document, | 344 static Resource* prefetchIfNeeded(Document& document, |
| 346 const KURL& href, | 345 const KURL& href, |
| 347 const LinkRelAttribute& relAttribute, | 346 const LinkRelAttribute& relAttribute, |
| 348 CrossOriginAttributeValue crossOrigin, | 347 CrossOriginAttributeValue crossOrigin, |
| 349 ReferrerPolicy referrerPolicy) { | 348 ReferrerPolicy referrerPolicy) { |
| 350 if (relAttribute.isLinkPrefetch() && href.isValid() && document.frame()) { | 349 if (relAttribute.isLinkPrefetch() && href.isValid() && document.frame()) { |
| 351 UseCounter::count(document, UseCounter::LinkRelPrefetch); | 350 UseCounter::count(document, UseCounter::LinkRelPrefetch); |
| 352 | 351 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 | 486 |
| 488 DEFINE_TRACE(LinkLoader) { | 487 DEFINE_TRACE(LinkLoader) { |
| 489 visitor->trace(m_client); | 488 visitor->trace(m_client); |
| 490 visitor->trace(m_prerender); | 489 visitor->trace(m_prerender); |
| 491 visitor->trace(m_linkPreloadResourceClient); | 490 visitor->trace(m_linkPreloadResourceClient); |
| 492 ResourceOwner<Resource, ResourceClient>::trace(visitor); | 491 ResourceOwner<Resource, ResourceClient>::trace(visitor); |
| 493 PrerenderClient::trace(visitor); | 492 PrerenderClient::trace(visitor); |
| 494 } | 493 } |
| 495 | 494 |
| 496 } // namespace blink | 495 } // namespace blink |
| OLD | NEW |