Title: [126828] trunk
Revision
126828
Author
[email protected]
Date
2012-08-27 17:45:43 -0700 (Mon, 27 Aug 2012)

Log Message

Fix CSSParserValue::createCSSValue() for viewport based units.
https://bugs.webkit.org/show_bug.cgi?id=94772

Reviewed by Tony Chang.

Source/WebCore:

Viewport units were not added to CSSParserValue::createCSSValue(). This patch handles that case.
Patch also converts from list of if clauses to a switch statement to catch future errors.

Test: fast/css/variables/calc-vw-crash.html

* css/CSSParserValues.cpp:
(WebCore::CSSParserValue::createCSSValue):

LayoutTests:

Add test that uses variables, calc and viewport units together.

* fast/css/variables/calc-vw-crash-expected.txt: Added.
* fast/css/variables/calc-vw-crash.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (126827 => 126828)


--- trunk/LayoutTests/ChangeLog	2012-08-28 00:42:53 UTC (rev 126827)
+++ trunk/LayoutTests/ChangeLog	2012-08-28 00:45:43 UTC (rev 126828)
@@ -1,3 +1,15 @@
+2012-08-27  Luke Macpherson   <[email protected]>
+
+        Fix CSSParserValue::createCSSValue() for viewport based units.
+        https://bugs.webkit.org/show_bug.cgi?id=94772
+
+        Reviewed by Tony Chang.
+
+        Add test that uses variables, calc and viewport units together.
+
+        * fast/css/variables/calc-vw-crash-expected.txt: Added.
+        * fast/css/variables/calc-vw-crash.html: Added.
+
 2012-08-27  Mark Lam  <[email protected]>
 
         Gardening: skipping tests due to WebCore::JSEventListener::jsFunction(WebCore::ScriptExecutionContext*) crashes.

Added: trunk/LayoutTests/fast/css/variables/calc-vw-crash-expected.txt (0 => 126828)


--- trunk/LayoutTests/fast/css/variables/calc-vw-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css/variables/calc-vw-crash-expected.txt	2012-08-28 00:45:43 UTC (rev 126828)
@@ -0,0 +1 @@
+This test is successful if it does not crash.

Added: trunk/LayoutTests/fast/css/variables/calc-vw-crash.html (0 => 126828)


--- trunk/LayoutTests/fast/css/variables/calc-vw-crash.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css/variables/calc-vw-crash.html	2012-08-28 00:45:43 UTC (rev 126828)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<script>
+if (window.testRunner) {
+    testRunner.dumpAsText();
+    internals.settings.setCSSVariablesEnabled(true);
+}
+</script>
+<style>
+#foo {
+  -webkit-var-var23: -webkit-calc(0vw);
+}
+</style>
+This test is successful if it does not crash.
+</html>

Modified: trunk/Source/WebCore/ChangeLog (126827 => 126828)


--- trunk/Source/WebCore/ChangeLog	2012-08-28 00:42:53 UTC (rev 126827)
+++ trunk/Source/WebCore/ChangeLog	2012-08-28 00:45:43 UTC (rev 126828)
@@ -1,3 +1,36 @@
+2012-08-27  Luke Macpherson   <[email protected]>
+
+        Fix CSSParserValue::createCSSValue() for viewport based units.
+        https://bugs.webkit.org/show_bug.cgi?id=94772
+
+        Reviewed by Tony Chang.
+
+        Viewport units were not added to CSSParserValue::createCSSValue(). This patch handles that case.
+        Patch also converts from list of if clauses to a switch statement to catch future errors.
+
+        Test: fast/css/variables/calc-vw-crash.html
+
+        * css/CSSParserValues.cpp:
+        (WebCore::CSSParserValue::createCSSValue):
+
+2012-08-27  Dimitri Glazkov  <[email protected]>
+
+        Rename ContentDistributor::distributeShadowChildrenTo to distributeNodeChildrenTo.
+        https://bugs.webkit.org/show_bug.cgi?id=95150
+
+        Reviewed by Hajime Morita.
+
+        Also, made the function take ContainerNode, which decouples it from the callsite's context.
+
+        No new tests, simple rename.
+
+        * html/shadow/ContentDistributor.cpp:
+        (WebCore::ContentDistributor::distribute): Changed the callsite.
+        (WebCore::ContentDistributor::distributeNodeChildrenTo): Renamed from distributeShadowChildrenTo.
+        * html/shadow/ContentDistributor.h:
+        (WebCore): Added forward decl for ContainerNode.
+        (ContentDistributor): Changed the decl name.
+
 2012-08-27  Adam Barth  <[email protected]>
 
         [V8] V8DOMWindowShell::setContext has no callers

Modified: trunk/Source/WebCore/css/CSSParserValues.cpp (126827 => 126828)


--- trunk/Source/WebCore/css/CSSParserValues.cpp	2012-08-28 00:42:53 UTC (rev 126827)
+++ trunk/Source/WebCore/css/CSSParserValues.cpp	2012-08-28 00:45:43 UTC (rev 126828)
@@ -67,31 +67,79 @@
 {
     RefPtr<CSSValue> parsedValue;
     if (id)
-        parsedValue = CSSPrimitiveValue::createIdentifier(id);
-    else if (unit == CSSPrimitiveValue::CSS_IDENT)
-        parsedValue = CSSPrimitiveValue::create(string, CSSPrimitiveValue::CSS_PARSER_IDENTIFIER);
-    else if (unit == CSSPrimitiveValue::CSS_NUMBER && isInt)
-        parsedValue = CSSPrimitiveValue::create(fValue, CSSPrimitiveValue::CSS_PARSER_INTEGER);
-    else if (unit == CSSParserValue::Operator) {
+        return CSSPrimitiveValue::createIdentifier(id);
+    
+    if (unit == CSSParserValue::Operator) {
         RefPtr<CSSPrimitiveValue> primitiveValue = CSSPrimitiveValue::createIdentifier(iValue);
         primitiveValue->setPrimitiveType(CSSPrimitiveValue::CSS_PARSER_OPERATOR);
-        parsedValue = primitiveValue;
-    } else if (unit == CSSParserValue::Function)
-        parsedValue = CSSFunctionValue::create(function);
-    else if (unit == CSSPrimitiveValue::CSS_STRING
-             || unit == CSSPrimitiveValue::CSS_URI
+        return primitiveValue;
+    }
+    if (unit == CSSParserValue::Function)
+        return CSSFunctionValue::create(function);
+    if (unit >= CSSParserValue::Q_EMS)
+        return CSSPrimitiveValue::createAllowingMarginQuirk(fValue, CSSPrimitiveValue::CSS_EMS);
+
+    CSSPrimitiveValue::UnitTypes primitiveUnit = static_cast<CSSPrimitiveValue::UnitTypes>(unit);
+    switch (primitiveUnit) {
+    case CSSPrimitiveValue::CSS_IDENT:
+        return CSSPrimitiveValue::create(string, CSSPrimitiveValue::CSS_PARSER_IDENTIFIER);
+    case CSSPrimitiveValue::CSS_NUMBER:
+        return CSSPrimitiveValue::create(fValue, isInt ? CSSPrimitiveValue::CSS_PARSER_INTEGER : CSSPrimitiveValue::CSS_NUMBER);
+    case CSSPrimitiveValue::CSS_STRING:
+    case CSSPrimitiveValue::CSS_URI:
 #if ENABLE(CSS_VARIABLES)
-             || unit == CSSPrimitiveValue::CSS_VARIABLE_NAME
+    case CSSPrimitiveValue::CSS_VARIABLE_NAME:
 #endif
-             || unit == CSSPrimitiveValue::CSS_PARSER_HEXCOLOR)
-        parsedValue = CSSPrimitiveValue::create(string, (CSSPrimitiveValue::UnitTypes)unit);
-    else if (unit >= CSSPrimitiveValue::CSS_NUMBER && unit <= CSSPrimitiveValue::CSS_KHZ)
-        parsedValue = CSSPrimitiveValue::create(fValue, (CSSPrimitiveValue::UnitTypes)unit);
-    else if (unit >= CSSPrimitiveValue::CSS_TURN && unit <= CSSPrimitiveValue::CSS_REMS) // CSS3 Values and Units
-        parsedValue = CSSPrimitiveValue::create(fValue, (CSSPrimitiveValue::UnitTypes)unit);
-    else if (unit >= CSSParserValue::Q_EMS)
-        parsedValue = CSSPrimitiveValue::createAllowingMarginQuirk(fValue, CSSPrimitiveValue::CSS_EMS);
-    return parsedValue;
+    case CSSPrimitiveValue::CSS_PARSER_HEXCOLOR:
+        return CSSPrimitiveValue::create(string, primitiveUnit);
+    case CSSPrimitiveValue::CSS_PERCENTAGE:
+    case CSSPrimitiveValue::CSS_EMS:
+    case CSSPrimitiveValue::CSS_EXS:
+    case CSSPrimitiveValue::CSS_PX:
+    case CSSPrimitiveValue::CSS_CM:
+    case CSSPrimitiveValue::CSS_MM:
+    case CSSPrimitiveValue::CSS_IN:
+    case CSSPrimitiveValue::CSS_PT:
+    case CSSPrimitiveValue::CSS_PC:
+    case CSSPrimitiveValue::CSS_DEG:
+    case CSSPrimitiveValue::CSS_RAD:
+    case CSSPrimitiveValue::CSS_GRAD:
+    case CSSPrimitiveValue::CSS_MS:
+    case CSSPrimitiveValue::CSS_S:
+    case CSSPrimitiveValue::CSS_HZ:
+    case CSSPrimitiveValue::CSS_KHZ:
+    case CSSPrimitiveValue::CSS_VW:
+    case CSSPrimitiveValue::CSS_VH:
+    case CSSPrimitiveValue::CSS_VMIN:
+    case CSSPrimitiveValue::CSS_TURN:
+    case CSSPrimitiveValue::CSS_REMS:
+        return CSSPrimitiveValue::create(fValue, primitiveUnit);
+    case CSSPrimitiveValue::CSS_UNKNOWN:
+    case CSSPrimitiveValue::CSS_DIMENSION:
+    case CSSPrimitiveValue::CSS_ATTR:
+    case CSSPrimitiveValue::CSS_COUNTER:
+    case CSSPrimitiveValue::CSS_RECT:
+    case CSSPrimitiveValue::CSS_RGBCOLOR:
+    case CSSPrimitiveValue::CSS_DPPX:
+    case CSSPrimitiveValue::CSS_DPI:
+    case CSSPrimitiveValue::CSS_DPCM:
+    case CSSPrimitiveValue::CSS_PAIR:
+    case CSSPrimitiveValue::CSS_DASHBOARD_REGION:
+    case CSSPrimitiveValue::CSS_UNICODE_RANGE:
+    case CSSPrimitiveValue::CSS_PARSER_OPERATOR:
+    case CSSPrimitiveValue::CSS_PARSER_INTEGER:
+    case CSSPrimitiveValue::CSS_PARSER_IDENTIFIER:
+    case CSSPrimitiveValue::CSS_COUNTER_NAME:
+    case CSSPrimitiveValue::CSS_SHAPE:
+    case CSSPrimitiveValue::CSS_QUAD:
+    case CSSPrimitiveValue::CSS_CALC:
+    case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_NUMBER:
+    case CSSPrimitiveValue::CSS_CALC_PERCENTAGE_WITH_LENGTH:
+        return 0;
+    }
+
+    ASSERT_NOT_REACHED();
+    return 0;
 }
 
 CSSParserSelector::CSSParserSelector()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to