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: