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..45d912089d6a94e8f97d51ec7c59da5a9d79118e 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,38 @@ static void handleMetaViewport(const String& attributeValue, CachedDocumentParam |
cachedMediaValues->setViewportWidth(constraints.layoutSize.width()); |
} |
-template<typename Token> |
+static void handleMetaReferrer(const String& attributeValue, CachedDocumentParameters* documentParameters, CSSPreloadScanner* cssScanner) |
+{ |
+ if (attributeValue.isEmpty() || attributeValue.isNull() || !SecurityPolicy::referrerPolicyFromString(attributeValue, &documentParameters->referrerPolicy)) { |
+ documentParameters->referrerPolicy = ReferrerPolicyDefault; |
+ } |
+ cssScanner->setReferrerPolicy(documentParameters->referrerPolicy); |
+} |
+ |
+template <typename Token> |
+static void handleMetaNameAttribute(const Token& token, CachedDocumentParameters* documentParameters, CSSPreloadScanner* cssScanner) |
+{ |
+ const typename Token::Attribute* nameAttribute = token.getAttributeItem(nameAttr); |
+ if (!nameAttribute) |
+ return; |
+ |
+ String nameAttributeValue(nameAttribute->value); |
+ const typename Token::Attribute* contentAttribute = token.getAttributeItem(contentAttr); |
+ if (!contentAttribute) |
+ return; |
+ |
+ String contentAttributeValue(contentAttribute->value); |
+ if (equalIgnoringCase(nameAttributeValue, "viewport")) { |
+ handleMetaViewport(contentAttributeValue, documentParameters); |
+ return; |
+ } |
+ |
+ if (equalIgnoringCase(nameAttributeValue, "referrer")) { |
+ handleMetaReferrer(contentAttributeValue, documentParameters, cssScanner); |
+ } |
+} |
+ |
+template <typename Token> |
void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests) |
{ |
if (!m_documentParameters->doHtmlPreloadScanning) |
@@ -547,13 +578,8 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
} |
return; |
} |
- const typename Token::Attribute* nameAttribute = token.getAttributeItem(nameAttr); |
- if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "viewport")) { |
- const typename Token::Attribute* contentAttribute = token.getAttributeItem(contentAttr); |
- if (contentAttribute) |
- handleMetaViewport(String(contentAttribute->value), m_documentParameters.get()); |
- return; |
- } |
+ |
+ handleMetaNameAttribute(token, m_documentParameters.get(), &m_cssScanner); |
} |
if (match(tagImpl, pictureTag)) { |
@@ -566,7 +592,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 +663,7 @@ CachedDocumentParameters::CachedDocumentParameters(Document* document, PassRefPt |
defaultViewportMinWidth = document->viewportDefaultMinWidth(); |
viewportMetaZeroValuesQuirk = document->settings() && document->settings()->viewportMetaZeroValuesQuirk(); |
viewportMetaEnabled = document->settings() && document->settings()->viewportMetaEnabled(); |
+ referrerPolicy = ReferrerPolicyDefault; |
} |
} |