Chromium Code Reviews| 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 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 262 | 262 |
| 263 static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, | 263 static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, |
| 264 const KURL& href, | 264 const KURL& href, |
| 265 Document& document, | 265 Document& document, |
| 266 const String& as, | 266 const String& as, |
| 267 const String& mimeType, | 267 const String& mimeType, |
| 268 const String& media, | 268 const String& media, |
| 269 CrossOriginAttributeValue crossOrigin, | 269 CrossOriginAttributeValue crossOrigin, |
| 270 LinkCaller caller, | 270 LinkCaller caller, |
| 271 bool& errorOccurred, | 271 bool& errorOccurred, |
| 272 ViewportDescription* viewportDescription) { | 272 ViewportDescription* viewportDescription, |
| 273 ReferrerPolicy referrerPolicy) { | |
| 273 if (!document.loader() || !relAttribute.isLinkPreload()) | 274 if (!document.loader() || !relAttribute.isLinkPreload()) |
| 274 return nullptr; | 275 return nullptr; |
| 275 | 276 |
| 276 UseCounter::count(document, UseCounter::LinkRelPreload); | 277 UseCounter::count(document, UseCounter::LinkRelPreload); |
| 277 if (!href.isValid() || href.isEmpty()) { | 278 if (!href.isValid() || href.isEmpty()) { |
| 278 document.addConsoleMessage(ConsoleMessage::create( | 279 document.addConsoleMessage(ConsoleMessage::create( |
| 279 OtherMessageSource, WarningMessageLevel, | 280 OtherMessageSource, WarningMessageLevel, |
| 280 String("<link rel=preload> has an invalid `href` value"))); | 281 String("<link rel=preload> has an invalid `href` value"))); |
| 281 return nullptr; | 282 return nullptr; |
| 282 } | 283 } |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 309 | 310 |
| 310 if (!isSupportedType(resourceType, mimeType)) { | 311 if (!isSupportedType(resourceType, mimeType)) { |
| 311 document.addConsoleMessage(ConsoleMessage::create( | 312 document.addConsoleMessage(ConsoleMessage::create( |
| 312 OtherMessageSource, WarningMessageLevel, | 313 OtherMessageSource, WarningMessageLevel, |
| 313 String("<link rel=preload> has an unsupported `type` value"))); | 314 String("<link rel=preload> has an unsupported `type` value"))); |
| 314 return nullptr; | 315 return nullptr; |
| 315 } | 316 } |
| 316 ResourceRequest resourceRequest(document.completeURL(href)); | 317 ResourceRequest resourceRequest(document.completeURL(href)); |
| 317 ResourceFetcher::determineRequestContext(resourceRequest, resourceType, | 318 ResourceFetcher::determineRequestContext(resourceRequest, resourceType, |
| 318 false); | 319 false); |
| 320 | |
| 321 if (referrerPolicy != ReferrerPolicyDefault) { | |
| 322 resourceRequest.setHTTPReferrer(SecurityPolicy::generateReferrer( | |
| 323 referrerPolicy, href, document.outgoingReferrer())); | |
| 324 } | |
| 325 | |
| 319 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, | 326 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, |
| 320 document.encodingName()); | 327 document.encodingName()); |
| 321 | 328 |
| 322 if (crossOrigin != CrossOriginAttributeNotSet) { | 329 if (crossOrigin != CrossOriginAttributeNotSet) { |
| 323 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), | 330 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), |
| 324 crossOrigin); | 331 crossOrigin); |
| 325 } | 332 } |
| 326 Settings* settings = document.settings(); | 333 Settings* settings = document.settings(); |
| 327 if (settings && settings->logPreload()) { | 334 if (settings && settings->logPreload()) { |
| 328 document.addConsoleMessage(ConsoleMessage::create( | 335 document.addConsoleMessage(ConsoleMessage::create( |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 366 preconnectIfNeeded(relAttribute, url, *document, | 373 preconnectIfNeeded(relAttribute, url, *document, |
| 367 crossOriginAttributeValue(header.crossOrigin()), | 374 crossOriginAttributeValue(header.crossOrigin()), |
| 368 networkHintsInterface, LinkCalledFromHeader); | 375 networkHintsInterface, LinkCalledFromHeader); |
| 369 } | 376 } |
| 370 if (canLoadResources != DoNotLoadResources) { | 377 if (canLoadResources != DoNotLoadResources) { |
| 371 bool errorOccurred = false; | 378 bool errorOccurred = false; |
| 372 ViewportDescription* viewportDescription = | 379 ViewportDescription* viewportDescription = |
| 373 (viewportDescriptionWrapper && viewportDescriptionWrapper->set) | 380 (viewportDescriptionWrapper && viewportDescriptionWrapper->set) |
| 374 ? &(viewportDescriptionWrapper->description) | 381 ? &(viewportDescriptionWrapper->description) |
| 375 : nullptr; | 382 : nullptr; |
| 383 | |
| 384 ReferrerPolicy referrerPolicy = ReferrerPolicyDefault; | |
| 385 if (!header.referrerPolicy().isNull()) { | |
| 386 SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords( | |
|
Mike West
2016/10/23 05:25:46
Same question regarding legacy.
| |
| 387 header.referrerPolicy(), &referrerPolicy); | |
| 388 } | |
| 389 | |
| 376 preloadIfNeeded(relAttribute, url, *document, header.as(), | 390 preloadIfNeeded(relAttribute, url, *document, header.as(), |
| 377 header.mimeType(), header.media(), | 391 header.mimeType(), header.media(), |
| 378 crossOriginAttributeValue(header.crossOrigin()), | 392 crossOriginAttributeValue(header.crossOrigin()), |
| 379 LinkCalledFromHeader, errorOccurred, viewportDescription); | 393 LinkCalledFromHeader, errorOccurred, viewportDescription, |
| 394 referrerPolicy); | |
| 380 } | 395 } |
| 381 // TODO(yoav): Add more supported headers as needed. | 396 // TODO(yoav): Add more supported headers as needed. |
| 382 } | 397 } |
| 383 } | 398 } |
| 384 | 399 |
| 385 bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, | 400 bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, |
| 386 CrossOriginAttributeValue crossOrigin, | 401 CrossOriginAttributeValue crossOrigin, |
| 387 const String& type, | 402 const String& type, |
| 388 const String& as, | 403 const String& as, |
| 389 const String& media, | 404 const String& media, |
| 405 const String& referrerPolicyString, | |
| 390 const KURL& href, | 406 const KURL& href, |
| 391 Document& document, | 407 Document& document, |
| 392 const NetworkHintsInterface& networkHintsInterface) { | 408 const NetworkHintsInterface& networkHintsInterface) { |
| 393 // TODO(yoav): Do all links need to load only after they're in document??? | 409 // TODO(yoav): Do all links need to load only after they're in document??? |
| 394 | 410 |
| 395 // TODO(yoav): Convert all uses of the CrossOriginAttribute to | 411 // TODO(yoav): Convert all uses of the CrossOriginAttribute to |
| 396 // CrossOriginAttributeValue. crbug.com/486689 | 412 // CrossOriginAttributeValue. crbug.com/486689 |
| 397 | 413 |
| 398 // FIXME(crbug.com/463266): We're ignoring type here, for everything but | 414 // FIXME(crbug.com/463266): We're ignoring type here, for everything but |
| 399 // preload. Maybe we shouldn't. | 415 // preload. Maybe we shouldn't. |
| 400 dnsPrefetchIfNeeded(relAttribute, href, document, networkHintsInterface, | 416 dnsPrefetchIfNeeded(relAttribute, href, document, networkHintsInterface, |
| 401 LinkCalledFromMarkup); | 417 LinkCalledFromMarkup); |
| 402 | 418 |
| 403 preconnectIfNeeded(relAttribute, href, document, crossOrigin, | 419 preconnectIfNeeded(relAttribute, href, document, crossOrigin, |
| 404 networkHintsInterface, LinkCalledFromMarkup); | 420 networkHintsInterface, LinkCalledFromMarkup); |
| 405 | 421 |
| 406 bool errorOccurred = false; | 422 bool errorOccurred = false; |
| 423 ReferrerPolicy referrerPolicy = ReferrerPolicyDefault; | |
| 424 if (!referrerPolicyString.isNull()) { | |
| 425 SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords( | |
|
Mike West
2016/10/23 05:25:46
Ditto.
| |
| 426 referrerPolicyString, &referrerPolicy); | |
| 427 } | |
| 407 if (m_client->shouldLoadLink()) { | 428 if (m_client->shouldLoadLink()) { |
| 408 createLinkPreloadResourceClient(preloadIfNeeded( | 429 createLinkPreloadResourceClient(preloadIfNeeded( |
| 409 relAttribute, href, document, as, type, media, crossOrigin, | 430 relAttribute, href, document, as, type, media, crossOrigin, |
| 410 LinkCalledFromMarkup, errorOccurred, nullptr)); | 431 LinkCalledFromMarkup, errorOccurred, nullptr, referrerPolicy)); |
| 411 } | 432 } |
| 412 if (errorOccurred) | 433 if (errorOccurred) |
| 413 m_linkLoadingErrorTimer.startOneShot(0, BLINK_FROM_HERE); | 434 m_linkLoadingErrorTimer.startOneShot(0, BLINK_FROM_HERE); |
| 414 | 435 |
| 415 if (href.isEmpty() || !href.isValid()) | 436 if (href.isEmpty() || !href.isValid()) |
| 416 released(); | 437 released(); |
| 417 | 438 |
| 418 // FIXME(crbug.com/323096): Should take care of import. | 439 // FIXME(crbug.com/323096): Should take care of import. |
| 419 if (relAttribute.isLinkPrefetch() && href.isValid() && document.frame()) { | 440 if (relAttribute.isLinkPrefetch() && href.isValid() && document.frame()) { |
| 420 if (!m_client->shouldLoadLink()) | 441 if (!m_client->shouldLoadLink()) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 462 | 483 |
| 463 DEFINE_TRACE(LinkLoader) { | 484 DEFINE_TRACE(LinkLoader) { |
| 464 visitor->trace(m_client); | 485 visitor->trace(m_client); |
| 465 visitor->trace(m_prerender); | 486 visitor->trace(m_prerender); |
| 466 visitor->trace(m_linkPreloadResourceClient); | 487 visitor->trace(m_linkPreloadResourceClient); |
| 467 ResourceOwner<Resource, ResourceClient>::trace(visitor); | 488 ResourceOwner<Resource, ResourceClient>::trace(visitor); |
| 468 PrerenderClient::trace(visitor); | 489 PrerenderClient::trace(visitor); |
| 469 } | 490 } |
| 470 | 491 |
| 471 } // namespace blink | 492 } // namespace blink |
| OLD | NEW |