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 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; |