Index: Source/core/html/parser/HTMLPreloadScanner.cpp |
diff --git a/Source/core/html/parser/HTMLPreloadScanner.cpp b/Source/core/html/parser/HTMLPreloadScanner.cpp |
index f443fd73daa8b5c3d4b6e16af164f0887a969b98..c9f97889eff78f00a4acd8a3a2fd08bbeb36f5ce 100644 |
--- a/Source/core/html/parser/HTMLPreloadScanner.cpp |
+++ b/Source/core/html/parser/HTMLPreloadScanner.cpp |
@@ -34,6 +34,7 @@ |
#include "core/css/MediaList.h" |
#include "core/css/MediaQueryEvaluator.h" |
#include "core/css/MediaValues.h" |
+#include "core/css/parser/SizesAttributeParser.h" |
#include "core/html/LinkRelAttribute.h" |
#include "core/html/parser/HTMLParserIdioms.h" |
#include "core/html/parser/HTMLSrcsetParser.h" |
@@ -107,7 +108,7 @@ public: |
, m_linkIsStyleSheet(false) |
, m_matchedMediaAttribute(true) |
, m_inputIsImage(false) |
- , m_encounteredImgSrc(false) |
+ , m_imgSourceSize(0) |
, m_isCORSEnabled(false) |
, m_allowCredentials(DoNotAllowStoredCredentials) |
, m_mediaValues(mediaValues) |
@@ -117,6 +118,8 @@ public: |
&& !match(m_tagImpl, linkTag) |
&& !match(m_tagImpl, scriptTag)) |
m_tagImpl = 0; |
+ if (RuntimeEnabledFeatures::pictureSizesEnabled()) |
+ m_imgSourceSize = SizesAttributeParser::findEffectiveSize(String(), m_mediaValues); |
} |
enum URLReplacement { |
@@ -171,15 +174,18 @@ private: |
else if (match(attributeName, crossoriginAttr)) |
setCrossOriginAllowed(attributeValue); |
} else if (match(m_tagImpl, imgTag)) { |
- int effectiveSize = -1; // FIXME - hook up the real value from `sizes` |
- if (match(attributeName, srcAttr) && !m_encounteredImgSrc) { |
- m_encounteredImgSrc = true; |
- setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), effectiveSize, attributeValue, m_srcsetImageCandidate), AllowURLReplacement); |
+ if (match(attributeName, srcAttr) && m_imgSrcUrl.isNull()) { |
+ m_imgSrcUrl = attributeValue; |
+ setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), m_imgSourceSize, attributeValue, m_srcsetImageCandidate), AllowURLReplacement); |
} else if (match(attributeName, crossoriginAttr)) { |
setCrossOriginAllowed(attributeValue); |
} else if (match(attributeName, srcsetAttr) && m_srcsetImageCandidate.isEmpty()) { |
- m_srcsetImageCandidate = bestFitSourceForSrcsetAttribute(m_mediaValues->devicePixelRatio(), effectiveSize, attributeValue); |
- setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), effectiveSize, m_urlToLoad, m_srcsetImageCandidate), AllowURLReplacement); |
+ m_srcsetImageCandidate = bestFitSourceForSrcsetAttribute(m_mediaValues->devicePixelRatio(), m_imgSourceSize, attributeValue); |
+ setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), m_imgSourceSize, m_imgSrcUrl, m_srcsetImageCandidate), AllowURLReplacement); |
+ } else if (RuntimeEnabledFeatures::pictureSizesEnabled() && match(attributeName, sizesAttr) && m_imgSourceSize < 0) { |
eseidel
2014/04/19 04:18:46
it's unsigned < 0 is impossible.
|
+ m_imgSourceSize = SizesAttributeParser::findEffectiveSize(attributeValue, m_mediaValues); |
+ if (!m_srcsetImageCandidate.isEmpty()) |
+ setUrlToLoad(bestFitSourceForImageAttributes(m_mediaValues->devicePixelRatio(), m_imgSourceSize, m_imgSrcUrl, m_srcsetImageCandidate), AllowURLReplacement); |
} |
} else if (match(m_tagImpl, linkTag)) { |
if (match(attributeName, hrefAttr)) |
@@ -273,7 +279,8 @@ private: |
bool m_linkIsStyleSheet; |
bool m_matchedMediaAttribute; |
bool m_inputIsImage; |
- bool m_encounteredImgSrc; |
+ String m_imgSrcUrl; |
+ unsigned m_imgSourceSize; |
bool m_isCORSEnabled; |
StoredCredentials m_allowCredentials; |
RefPtr<MediaValues> m_mediaValues; |