Index: third_party/WebKit/Source/core/loader/LinkLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.cpp b/third_party/WebKit/Source/core/loader/LinkLoader.cpp |
index 4d80182e8987cc079191209a35d856c5b810e577..116562a71b6f03a03be0b8963446d9fa7ac18fd3 100644 |
--- a/third_party/WebKit/Source/core/loader/LinkLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/LinkLoader.cpp |
@@ -269,7 +269,8 @@ static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, |
CrossOriginAttributeValue crossOrigin, |
LinkCaller caller, |
bool& errorOccurred, |
- ViewportDescription* viewportDescription) { |
+ ViewportDescription* viewportDescription, |
+ ReferrerPolicy referrerPolicy) { |
if (!document.loader() || !relAttribute.isLinkPreload()) |
return nullptr; |
@@ -316,6 +317,12 @@ static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, |
ResourceRequest resourceRequest(document.completeURL(href)); |
ResourceFetcher::determineRequestContext(resourceRequest, resourceType, |
false); |
+ |
+ if (referrerPolicy != ReferrerPolicyDefault) { |
+ resourceRequest.setHTTPReferrer(SecurityPolicy::generateReferrer( |
+ referrerPolicy, href, document.outgoingReferrer())); |
+ } |
+ |
FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, |
document.encodingName()); |
@@ -373,10 +380,18 @@ void LinkLoader::loadLinksFromHeader( |
(viewportDescriptionWrapper && viewportDescriptionWrapper->set) |
? &(viewportDescriptionWrapper->description) |
: nullptr; |
+ |
+ ReferrerPolicy referrerPolicy = ReferrerPolicyDefault; |
+ if (!header.referrerPolicy().isNull()) { |
+ SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords( |
Mike West
2016/10/23 05:25:46
Same question regarding legacy.
|
+ header.referrerPolicy(), &referrerPolicy); |
+ } |
+ |
preloadIfNeeded(relAttribute, url, *document, header.as(), |
header.mimeType(), header.media(), |
crossOriginAttributeValue(header.crossOrigin()), |
- LinkCalledFromHeader, errorOccurred, viewportDescription); |
+ LinkCalledFromHeader, errorOccurred, viewportDescription, |
+ referrerPolicy); |
} |
// TODO(yoav): Add more supported headers as needed. |
} |
@@ -387,6 +402,7 @@ bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, |
const String& type, |
const String& as, |
const String& media, |
+ const String& referrerPolicyString, |
const KURL& href, |
Document& document, |
const NetworkHintsInterface& networkHintsInterface) { |
@@ -404,10 +420,15 @@ bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, |
networkHintsInterface, LinkCalledFromMarkup); |
bool errorOccurred = false; |
+ ReferrerPolicy referrerPolicy = ReferrerPolicyDefault; |
+ if (!referrerPolicyString.isNull()) { |
+ SecurityPolicy::referrerPolicyFromStringWithLegacyKeywords( |
Mike West
2016/10/23 05:25:46
Ditto.
|
+ referrerPolicyString, &referrerPolicy); |
+ } |
if (m_client->shouldLoadLink()) { |
createLinkPreloadResourceClient(preloadIfNeeded( |
relAttribute, href, document, as, type, media, crossOrigin, |
- LinkCalledFromMarkup, errorOccurred, nullptr)); |
+ LinkCalledFromMarkup, errorOccurred, nullptr, referrerPolicy)); |
} |
if (errorOccurred) |
m_linkLoadingErrorTimer.startOneShot(0, BLINK_FROM_HERE); |