| Index: Source/core/css/parser/SizesAttributeParser.cpp
|
| diff --git a/Source/core/css/parser/SizesAttributeParser.cpp b/Source/core/css/parser/SizesAttributeParser.cpp
|
| index f4b0e20bd357e5c32725c987ac7a006ea8554186..f4243037f94f6df45bddbffab74e168a0cf56f9c 100644
|
| --- a/Source/core/css/parser/SizesAttributeParser.cpp
|
| +++ b/Source/core/css/parser/SizesAttributeParser.cpp
|
| @@ -12,15 +12,21 @@
|
|
|
| namespace WebCore {
|
|
|
| -unsigned SizesAttributeParser::findEffectiveSize(const String& attribute, PassRefPtr<MediaValues> mediaValues)
|
| +SizesAttributeParser::SizesAttributeParser(PassRefPtr<MediaValues> mediaValues, const String& attribute)
|
| + : m_mediaValues(mediaValues)
|
| + , m_length(0)
|
| + , m_lengthWasSet(false)
|
| + , m_viewportDependant(false)
|
| {
|
| - Vector<MediaQueryToken> tokens;
|
| - SizesAttributeParser parser(mediaValues);
|
| + MediaQueryTokenizer::tokenize(attribute, m_tokens);
|
| + m_isValid = parse(m_tokens);
|
| +}
|
|
|
| - MediaQueryTokenizer::tokenize(attribute, tokens);
|
| - if (!parser.parse(tokens))
|
| - return parser.effectiveSizeDefaultValue();
|
| - return parser.effectiveSize();
|
| +unsigned SizesAttributeParser::length()
|
| +{
|
| + if (m_isValid)
|
| + return effectiveSize();
|
| + return effectiveSizeDefaultValue();
|
| }
|
|
|
| bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator startToken, MediaQueryTokenIterator endToken, unsigned& result)
|
| @@ -32,12 +38,18 @@ bool SizesAttributeParser::calculateLengthInPixels(MediaQueryTokenIterator start
|
| int length;
|
| if (!CSSPrimitiveValue::isLength(startToken->unitType()))
|
| return false;
|
| + m_viewportDependant = CSSPrimitiveValue::isViewportPercentageLength(startToken->unitType());
|
| if ((m_mediaValues->computeLength(startToken->numericValue(), startToken->unitType(), length)) && (length > 0)) {
|
| result = (unsigned)length;
|
| return true;
|
| }
|
| } else if (type == FunctionToken) {
|
| - return SizesCalcParser::parse(startToken, endToken, m_mediaValues, result);
|
| + SizesCalcParser calcParser(startToken, endToken, m_mediaValues);
|
| + if (!calcParser.isValid())
|
| + return false;
|
| + m_viewportDependant = m_viewportDependant || calcParser.viewportDependant();
|
| + result = calcParser.result();
|
| + return true;
|
| } else if (type == NumberToken && !startToken->numericValue()) {
|
| result = 0;
|
| return true;
|
| @@ -133,7 +145,8 @@ unsigned SizesAttributeParser::effectiveSize()
|
|
|
| unsigned SizesAttributeParser::effectiveSizeDefaultValue()
|
| {
|
| - // Returning the equivalent of "100%"
|
| + // Returning the equivalent of "100vw"
|
| + m_viewportDependant = true;
|
| return m_mediaValues->viewportWidth();
|
| }
|
|
|
|
|