Chromium Code Reviews| 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()); |