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

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

Issue 1291613010: Implement referrerpolicy attribute for img elements (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: yoav comments Created 5 years, 4 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
Index: Source/core/html/parser/HTMLPreloadScanner.cpp
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp
index 055e811b23f9025c037f00a0e4963680a3e4e484..ab469e57714fcb5c14deb700462d2d9a6b017e80 100644
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp
@@ -123,6 +123,7 @@ public:
, m_defer(FetchRequest::NoDefer)
, m_allowCredentials(DoNotAllowStoredCredentials)
, m_mediaValues(mediaValues)
+ , m_referrerPolicy(ReferrerPolicyDefault)
{
ASSERT(m_mediaValues->isCached());
if (match(m_tagImpl, imgTag)
@@ -174,7 +175,7 @@ public:
}
}
- PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData, const ReferrerPolicy referrerPolicy)
+ PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData, const ReferrerPolicy documentReferrerPolicy)
{
PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePreload;
if (shouldPreconnect())
@@ -195,6 +196,9 @@ public:
resourceWidth.isSet = true;
}
+ // The element's 'referrerpolicy' attribute (if present) takes
+ // precedence over the document's referrer policy.
+ ReferrerPolicy referrerPolicy = m_referrerPolicy != ReferrerPolicyDefault ? m_referrerPolicy : documentReferrerPolicy;
OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), referrerPolicy, resourceWidth, clientHintsPreferences, requestType);
if (isCORSEnabled())
request->setCrossOriginEnabled(allowStoredCredentials());
@@ -237,6 +241,13 @@ private:
m_srcsetImageCandidate = bestFitSourceForSrcsetAttribute(m_mediaValues->devicePixelRatio(), m_sourceSize, m_srcsetAttributeValue);
setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), m_sourceSize, m_imgSrcUrl, m_srcsetImageCandidate), AllowURLReplacement);
}
+ } else if (match(attributeName, referrerpolicyAttr) && !attributeValue.isNull()) {
+ ReferrerPolicy parsedPolicy;
+ if (SecurityPolicy::referrerPolicyFromString(attributeValue, &parsedPolicy)) {
+ m_referrerPolicy = parsedPolicy;
+ } else {
+ m_referrerPolicy = ReferrerPolicyDefault;
+ }
Yoav Weiss 2015/08/18 21:09:21 I believe we can replace the last 6 lines with `Se
estark 2015/08/19 02:53:22 Done.
}
}
@@ -411,6 +422,7 @@ private:
FetchRequest::DeferOption m_defer;
StoredCredentials m_allowCredentials;
RefPtrWillBeMember<MediaValues> m_mediaValues;
+ ReferrerPolicy m_referrerPolicy;
};
TokenPreloadScanner::TokenPreloadScanner(const KURL& documentURL, PassOwnPtr<CachedDocumentParameters> documentParameters)
@@ -593,6 +605,7 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString&
scanner.processAttributes(token.attributes());
if (m_inPicture)
scanner.handlePictureSourceURL(m_pictureData);
+
Yoav Weiss 2015/08/18 21:09:21 Nit: spurious new line
estark 2015/08/19 02:53:22 Done.
OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData, m_documentParameters->referrerPolicy);
if (request)
requests.append(request.release());

Powered by Google App Engine
This is Rietveld 408576698