Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1066)

Unified Diff: Source/core/html/parser/HTMLPreloadScanner.cpp

Issue 1235563004: Apply meta tag referrer policy for preloaded requests (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: style fix Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/PreloadRequest.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
}
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/PreloadRequest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698