Index: Source/core/html/parser/HTMLPreloadScanner.cpp |
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp |
index 3a5d44e7d604b66577b3802da56728dd43da157e..7e9abb7a698625c9e55ed0168c9d570a41c028c2 100644 |
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp |
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp |
@@ -164,15 +164,19 @@ public: |
processAttribute(htmlTokenAttribute.name, htmlTokenAttribute.value); |
} |
- void handlePictureSourceURL(String& sourceURL) |
+ void handlePictureSourceURL(PictureData& pictureData) |
{ |
- if (match(m_tagImpl, sourceTag) && m_matchedMediaAttribute && sourceURL.isEmpty()) |
- sourceURL = m_srcsetImageCandidate.toString(); |
- else if (match(m_tagImpl, imgTag) && !sourceURL.isEmpty()) |
- setUrlToLoad(sourceURL, AllowURLReplacement); |
+ if (match(m_tagImpl, sourceTag) && m_matchedMediaAttribute && pictureData.sourceURL.isEmpty()) { |
+ pictureData.sourceURL = m_srcsetImageCandidate.toString(); |
+ pictureData.sourceSizeSet = m_sourceSizeSet; |
+ pictureData.sourceSize = m_sourceSize; |
+ pictureData.picked = true; |
+ } else if (match(m_tagImpl, imgTag) && !pictureData.sourceURL.isEmpty()) { |
+ setUrlToLoad(pictureData.sourceURL, AllowURLReplacement); |
+ } |
} |
- PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences) |
+ PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL, const SegmentedString& source, const ClientHintsPreferences& clientHintsPreferences, const PictureData& pictureData) |
{ |
PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePreload; |
if (shouldPreconnect()) |
@@ -182,8 +186,14 @@ public: |
TextPosition position = TextPosition(source.currentLine(), source.currentColumn()); |
FetchRequest::ResourceWidth resourceWidth; |
- if (m_sourceSizeSet) { |
- resourceWidth.width = m_sourceSize; |
+ float sourceSize = m_sourceSize; |
+ bool sourceSizeSet = m_sourceSizeSet; |
+ if (pictureData.picked) { |
+ sourceSizeSet = pictureData.sourceSizeSet; |
+ sourceSize = pictureData.sourceSize; |
+ } |
+ if (sourceSizeSet) { |
+ resourceWidth.width = sourceSize; |
resourceWidth.isSet = true; |
} else { |
resourceWidth.isSet = m_widthValueSet; |
@@ -560,15 +570,15 @@ void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& |
if (match(tagImpl, pictureTag)) { |
m_inPicture = true; |
- m_pictureSourceURL = String(); |
+ m_pictureData = PictureData(); |
return; |
} |
StartTagScanner scanner(tagImpl, m_documentParameters->mediaValues); |
scanner.processAttributes(token.attributes()); |
if (m_inPicture) |
- scanner.handlePictureSourceURL(m_pictureSourceURL); |
- OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences); |
+ scanner.handlePictureSourceURL(m_pictureData); |
+ OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predictedBaseElementURL, source, m_clientHintsPreferences, m_pictureData); |
if (request) |
requests.append(request.release()); |
return; |