Index: Source/core/html/parser/HTMLPreloadScanner.cpp |
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp |
index 44395718c6253b2dd08370460cb8b2d26e62e11a..6572a221b3d89fd9448423b3ed0e3f187e6eecfb 100644 |
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp |
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp |
@@ -173,7 +173,7 @@ public: |
} |
} |
- PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData) |
+ PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData, const ReferrerPolicy& referrerPolicy) |
{ |
PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePreload; |
if (shouldPreconnect()) |
@@ -194,7 +194,7 @@ public: |
resourceWidth.isSet = true; |
} |
- OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), resourceWidth, clientHintsPreferences, requestType); |
+ OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), referrerPolicy, resourceWidth, clientHintsPreferences, requestType); |
if (isCORSEnabled()) |
request->setCrossOriginEnabled(allowStoredCredentials()); |
request->setCharset(charset()); |
@@ -473,7 +473,7 @@ static void handleMetaViewport(const String& attributeValue, CachedDocumentParam |
cachedMediaValues->setViewportWidth(constraints.layoutSize.width()); |
} |
-template<typename Token> |
+template <typename Token> |
void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests) |
{ |
if (!m_documentParameters->doHtmlPreloadScanning) |
@@ -554,6 +554,16 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
handleMetaViewport(String(contentAttribute->value), m_documentParameters.get()); |
return; |
} |
+ if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "referrer")) { |
+ const typename Token::Attribute* contentAttribute = token.getAttributeItem(contentAttr); |
+ if (contentAttribute) { |
+ const String contentAttributeValue(contentAttribute->value); |
+ if (contentAttributeValue.isEmpty() || contentAttributeValue.isNull() || !SecurityPolicy::referrerPolicyFromString(contentAttributeValue, &m_documentParameters->referrerPolicy)) { |
+ m_documentParameters->referrerPolicy = ReferrerPolicyDefault; |
+ } |
+ m_cssScanner.setReferrerPolicy(m_documentParameters->referrerPolicy); |
Yoav Weiss
2015/07/15 08:14:47
Could you split that part into a helper function?
estark
2015/07/15 21:58:56
Done.
|
+ } |
+ } |
} |
if (match(tagImpl, pictureTag)) { |
@@ -566,7 +576,7 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
scanner.processAttributes(token.attributes()); |
if (m_inPicture) |
scanner.handlePictureSourceURL(m_pictureData); |
- OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData); |
+ OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData, m_documentParameters->referrerPolicy); |
if (request) |
requests.append(request.release()); |
return; |
@@ -637,6 +647,7 @@ CachedDocumentParameters::CachedDocumentParameters(Document* document, PassRefPt |
defaultViewportMinWidth = document->viewportDefaultMinWidth(); |
viewportMetaZeroValuesQuirk = document->settings() && document->settings()->viewportMetaZeroValuesQuirk(); |
viewportMetaEnabled = document->settings() && document->settings()->viewportMetaEnabled(); |
+ referrerPolicy = ReferrerPolicyDefault; |
} |
} |