Chromium Code Reviews| Index: Source/core/css/parser/SizesAttributeParser.cpp |
| diff --git a/Source/core/css/parser/SizesAttributeParser.cpp b/Source/core/css/parser/SizesAttributeParser.cpp |
| index cd00bb84390d99dc29fa3962b097ed2c19867787..8686f27a9ea58ec4d80c25484038a2c1c31fdd5b 100644 |
| --- a/Source/core/css/parser/SizesAttributeParser.cpp |
| +++ b/Source/core/css/parser/SizesAttributeParser.cpp |
| @@ -12,15 +12,21 @@ |
| namespace blink { |
| -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()); |
|
esprehn
2014/08/01 14:06:44
Does this need to be m_viewportDependant || CSSPri
|
| 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(); |
| } |