Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / parser / SizesCalcParser.cpp
index f99688b..3a7272f 100644 (file)
@@ -8,14 +8,20 @@
 #include "core/css/MediaValues.h"
 #include "core/css/parser/MediaQueryToken.h"
 
-namespace WebCore {
+namespace blink {
 
-bool SizesCalcParser::parse(MediaQueryTokenIterator start, MediaQueryTokenIterator end, PassRefPtr<MediaValues> mediaValues, unsigned& result)
+SizesCalcParser::SizesCalcParser(MediaQueryTokenIterator start, MediaQueryTokenIterator end, PassRefPtr<MediaValues> mediaValues)
+    : m_mediaValues(mediaValues)
+    , m_viewportDependant(false)
+    , m_result(0)
 {
-    SizesCalcParser parser(mediaValues);
-    if (!parser.calcToReversePolishNotation(start, end))
-        return false;
-    return parser.calculate(result);
+    m_isValid = calcToReversePolishNotation(start, end) && calculate();
+}
+
+unsigned SizesCalcParser::result() const
+{
+    ASSERT(m_isValid);
+    return m_result;
 }
 
 static bool operatorPriority(UChar cc, bool& highPriority)
@@ -93,6 +99,7 @@ bool SizesCalcParser::calcToReversePolishNotation(MediaQueryTokenIterator start,
             appendNumber(*it);
             break;
         case DimensionToken:
+            m_viewportDependant = m_viewportDependant || CSSPrimitiveValue::isViewportPercentageLength(it->unitType());
             if (!CSSPrimitiveValue::isLength(it->unitType()) || !appendLength(*it))
                 return false;
             break;
@@ -193,7 +200,7 @@ static bool operateOnStack(Vector<SizesCalcValue>& stack, UChar operation)
     return true;
 }
 
-bool SizesCalcParser::calculate(unsigned& result)
+bool SizesCalcParser::calculate()
 {
     Vector<SizesCalcValue> stack;
     for (Vector<SizesCalcValue>::iterator it = m_valueList.begin(); it != m_valueList.end(); ++it) {
@@ -205,10 +212,10 @@ bool SizesCalcParser::calculate(unsigned& result)
         }
     }
     if (stack.size() == 1 && stack.last().isLength) {
-        result = clampTo<unsigned>(stack.last().value);
+        m_result = clampTo<unsigned>(stack.last().value);
         return true;
     }
     return false;
 }
 
-} // namespace WebCore
+} // namespace blink