Index: Source/core/html/parser/HTMLPreloadScanner.cpp |
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp |
index 999a380ce8d899fc172e46b34e7027c1f284c8d9..b15a9f7b9bbead7ddc91f4641b48e30ff3980563 100644 |
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp |
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp |
@@ -166,7 +166,7 @@ public: |
setUrlToLoad(sourceURL, AllowURLReplacement); |
} |
- PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source) |
+ PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences) |
{ |
if (!shouldPreload() || !m_matchedMediaAttribute) |
return nullptr; |
@@ -177,7 +177,7 @@ public: |
resourceWidth.width = m_sourceSize; |
resourceWidth.isSet = true; |
} |
- OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), resourceWidth); |
+ OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_tagImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), resourceWidth, clientHintsPreferences); |
if (isCORSEnabled()) |
request->setCrossOriginEnabled(allowStoredCredentials()); |
request->setCharset(charset()); |
@@ -436,6 +436,17 @@ void TokenPreloadScanner::scan(const CompactHTMLToken& token, const SegmentedStr |
scanCommon(token, source, requests); |
} |
+static void handleMetaViewport(const String& attributeValue, CachedDocumentParameters* documentParameters) |
+{ |
+ ViewportDescription description(ViewportDescription::ViewportMeta); |
+ HTMLMetaElement::getViewportDescriptionFromContentAttribute(attributeValue, description, nullptr, documentParameters->viewportMetaZeroValuesQuirk); |
+ FloatSize initialViewport(documentParameters->mediaValues->viewportHeight(), documentParameters->mediaValues->viewportWidth()); |
+ PageScaleConstraints constraints = description.resolve(initialViewport, documentParameters->defaultViewportMinWidth); |
+ MediaValuesCached* cachedMediaValues = static_cast<MediaValuesCached*>(documentParameters->mediaValues.get()); |
+ cachedMediaValues->setViewportHeight(constraints.layoutSize.height()); |
+ cachedMediaValues->setViewportWidth(constraints.layoutSize.width()); |
+} |
+ |
template<typename Token> |
void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests) |
{ |
@@ -496,23 +507,20 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
} |
if (match(tagImpl, metaTag)) { |
const typename Token::Attribute* equivAttribute = token.getAttributeItem(http_equivAttr); |
- if (equivAttribute && equalIgnoringCase(String(equivAttribute->value), "content-security-policy")) { |
- m_isCSPEnabled = true; |
+ if (equivAttribute) { |
+ String equivAttributeValue(equivAttribute->value); |
+ if (equalIgnoringCase(equivAttributeValue, "content-security-policy")) |
+ m_isCSPEnabled = true; |
+ else if (equalIgnoringCase(equivAttributeValue, "accept-ch")) |
+ handleAcceptClientHintsHeader(equivAttributeValue, m_clientHintsPreferences); |
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) { |
- ViewportDescription description(ViewportDescription::ViewportMeta); |
- HTMLMetaElement::getViewportDescriptionFromContentAttribute(String(contentAttribute->value), description, nullptr, m_documentParameters->viewportMetaZeroValuesQuirk); |
- FloatSize initialViewport(m_documentParameters->mediaValues->viewportHeight(), m_documentParameters->mediaValues->viewportWidth()); |
- PageScaleConstraints constraints = description.resolve(initialViewport, m_documentParameters->defaultViewportMinWidth); |
- MediaValuesCached* cachedMediaValues = static_cast<MediaValuesCached*>(m_documentParameters->mediaValues.get()); |
- cachedMediaValues->setViewportHeight(constraints.layoutSize.height()); |
- cachedMediaValues->setViewportWidth(constraints.layoutSize.width()); |
- } |
+ if (contentAttribute) |
+ handleMetaViewport(String(contentAttribute->value), m_documentParameters.get()); |
+ return; |
} |
} |
@@ -526,7 +534,7 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
scanner.processAttributes(token.attributes()); |
if (m_inPicture) |
scanner.handlePictureSourceURL(m_pictureSourceURL); |
- OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source); |
+ OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences); |
if (request) |
requests.append(request.release()); |
return; |