Title: [207543] trunk/Source/WebCore
Revision
207543
Author
hy...@apple.com
Date
2016-10-19 10:40:27 -0700 (Wed, 19 Oct 2016)

Log Message

[CSS Parser] Fix transform parsing
https://bugs.webkit.org/show_bug.cgi?id=163671

Reviewed by Dean Jackson.

The new parser turned function names into CSSValueIDs and made CSSFunctionValue store them. This
meant it could be used to handle transform values, with the function name representing the
transform operation efficiently as a CSSValueID.

The old parser, however, creates WebKitCSSTransformValues. This value does not exist in the new
parser. Rather than forcing the old and new parser over to CSSFunctionValues, I opted to
just make the new parser build WebkitCSSTransformValues too.

The main reason I did this is that WebkitCSSTransformValue is actually exposed to the Web via
IDL. To be safe, I am not eliminating it (even though Blink has).

* css/parser/CSSPropertyParser.cpp:
(WebCore::consumeTranslate3d):
(WebCore::consumeNumbers):
(WebCore::consumePerspective):
(WebCore::transformOperationForCSSValueID):
(WebCore::consumeTransformValue):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (207542 => 207543)


--- trunk/Source/WebCore/ChangeLog	2016-10-19 17:18:27 UTC (rev 207542)
+++ trunk/Source/WebCore/ChangeLog	2016-10-19 17:40:27 UTC (rev 207543)
@@ -1,3 +1,28 @@
+2016-10-19  Dave Hyatt  <hy...@apple.com>
+
+        [CSS Parser] Fix transform parsing
+        https://bugs.webkit.org/show_bug.cgi?id=163671
+
+        Reviewed by Dean Jackson.
+
+        The new parser turned function names into CSSValueIDs and made CSSFunctionValue store them. This
+        meant it could be used to handle transform values, with the function name representing the
+        transform operation efficiently as a CSSValueID.
+
+        The old parser, however, creates WebKitCSSTransformValues. This value does not exist in the new
+        parser. Rather than forcing the old and new parser over to CSSFunctionValues, I opted to
+        just make the new parser build WebkitCSSTransformValues too.
+
+        The main reason I did this is that WebkitCSSTransformValue is actually exposed to the Web via
+        IDL. To be safe, I am not eliminating it (even though Blink has).
+
+        * css/parser/CSSPropertyParser.cpp:
+        (WebCore::consumeTranslate3d):
+        (WebCore::consumeNumbers):
+        (WebCore::consumePerspective):
+        (WebCore::transformOperationForCSSValueID):
+        (WebCore::consumeTransformValue):
+
 2016-10-19  Darin Adler  <da...@apple.com>
 
         Move XPath from ExceptionCode to Exception

Modified: trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp (207542 => 207543)


--- trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-10-19 17:18:27 UTC (rev 207542)
+++ trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp	2016-10-19 17:40:27 UTC (rev 207543)
@@ -68,6 +68,7 @@
 #include "SVGPathUtilities.h"
 #include "StylePropertyShorthand.h"
 #include "StylePropertyShorthandFunctions.h"
+#include "WebkitCSSTransformValue.h"
 #include <memory>
 #include <wtf/text/StringBuilder.h>
 
@@ -1451,7 +1452,7 @@
     return consumeLineWidth(range, cssParserMode, UnitlessQuirk::Forbid);
 }
 
-static bool consumeTranslate3d(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue)
+static bool consumeTranslate3d(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<WebKitCSSTransformValue>& transformValue)
 {
     unsigned numberOfArguments = 2;
     RefPtr<CSSValue> parsedValue;
@@ -1470,7 +1471,7 @@
     return true;
 }
 
-static bool consumeNumbers(CSSParserTokenRange& args, RefPtr<CSSFunctionValue>& transformValue, unsigned numberOfArguments)
+static bool consumeNumbers(CSSParserTokenRange& args, RefPtr<WebKitCSSTransformValue>& transformValue, unsigned numberOfArguments)
 {
     do {
         RefPtr<CSSPrimitiveValue> parsedValue = consumeNumber(args, ValueRangeAll);
@@ -1483,7 +1484,7 @@
     return true;
 }
 
-static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue)
+static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<WebKitCSSTransformValue>& transformValue)
 {
     RefPtr<CSSPrimitiveValue> parsedValue = consumeLength(args, cssParserMode, ValueRangeNonNegative);
     if (!parsedValue) {
@@ -1498,6 +1499,58 @@
     return true;
 }
 
+// FIXME-NEWPARSER: This has no reason to exist once we eliminate WebkitCSSTransformValue in favor
+// of CSSFunctionValue.
+static WebKitCSSTransformValue::TransformOperationType transformOperationForCSSValueID(CSSValueID functionId)
+{
+    switch (functionId) {
+    case CSSValueRotate:
+        return WebKitCSSTransformValue::RotateTransformOperation;
+    case CSSValueRotatex:
+        return WebKitCSSTransformValue::RotateXTransformOperation;
+    case CSSValueRotatey:
+        return WebKitCSSTransformValue::RotateYTransformOperation;
+    case CSSValueRotatez:
+        return WebKitCSSTransformValue::RotateZTransformOperation;
+    case CSSValueSkewx:
+        return WebKitCSSTransformValue::SkewXTransformOperation;
+    case CSSValueSkewy:
+        return WebKitCSSTransformValue::SkewYTransformOperation;
+    case CSSValueSkew:
+        return WebKitCSSTransformValue::SkewTransformOperation;
+    case CSSValueScalex:
+        return WebKitCSSTransformValue::ScaleXTransformOperation;
+    case CSSValueScaley:
+        return WebKitCSSTransformValue::ScaleYTransformOperation;
+    case CSSValueScalez:
+        return WebKitCSSTransformValue::ScaleZTransformOperation;
+    case CSSValueScale:
+        return WebKitCSSTransformValue::ScaleTransformOperation;
+    case CSSValuePerspective:
+        return WebKitCSSTransformValue::PerspectiveTransformOperation;
+    case CSSValueTranslatex:
+        return WebKitCSSTransformValue::TranslateXTransformOperation;
+    case CSSValueTranslatey:
+        return WebKitCSSTransformValue::TranslateYTransformOperation;
+    case CSSValueTranslate:
+        return WebKitCSSTransformValue::TranslateTransformOperation;
+    case CSSValueTranslatez:
+        return WebKitCSSTransformValue::TranslateZTransformOperation;
+    case CSSValueMatrix:
+        return WebKitCSSTransformValue::MatrixTransformOperation;
+    case CSSValueMatrix3d:
+        return WebKitCSSTransformValue::Matrix3DTransformOperation;
+    case CSSValueScale3d:
+        return WebKitCSSTransformValue::Scale3DTransformOperation;
+    case CSSValueRotate3d:
+        return WebKitCSSTransformValue::Rotate3DTransformOperation;
+    case CSSValueTranslate3d:
+        return WebKitCSSTransformValue::Translate3DTransformOperation;
+    default:
+        return WebKitCSSTransformValue::UnknownTransformOperation;
+    }
+}
+
 static RefPtr<CSSValue> consumeTransformValue(CSSParserTokenRange& range, CSSParserMode cssParserMode)
 {
     CSSValueID functionId = range.peek().functionId();
@@ -1506,7 +1559,10 @@
     CSSParserTokenRange args = consumeFunction(range);
     if (args.atEnd())
         return nullptr;
-    RefPtr<CSSFunctionValue> transformValue = CSSFunctionValue::create(functionId);
+    
+    // FIXME-NEWPARSER: Do we really need WebkitCSSTransformValue? A CSSFunctionValue is good
+    // enough and has the CSSValueID as the operation type. Blink has eliminated it.
+    RefPtr<WebKitCSSTransformValue> transformValue = WebKitCSSTransformValue::create(transformOperationForCSSValueID(functionId));
     RefPtr<CSSValue> parsedValue;
     switch (functionId) {
     case CSSValueRotate:
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to