Changeset 207543 in webkit


Ignore:
Timestamp:
Oct 19, 2016 10:40:27 AM (7 years ago)
Author:
hyatt@apple.com
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):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207541 r207543  
     12016-10-19  Dave Hyatt  <hyatt@apple.com>
     2
     3        [CSS Parser] Fix transform parsing
     4        https://bugs.webkit.org/show_bug.cgi?id=163671
     5
     6        Reviewed by Dean Jackson.
     7
     8        The new parser turned function names into CSSValueIDs and made CSSFunctionValue store them. This
     9        meant it could be used to handle transform values, with the function name representing the
     10        transform operation efficiently as a CSSValueID.
     11
     12        The old parser, however, creates WebKitCSSTransformValues. This value does not exist in the new
     13        parser. Rather than forcing the old and new parser over to CSSFunctionValues, I opted to
     14        just make the new parser build WebkitCSSTransformValues too.
     15
     16        The main reason I did this is that WebkitCSSTransformValue is actually exposed to the Web via
     17        IDL. To be safe, I am not eliminating it (even though Blink has).
     18
     19        * css/parser/CSSPropertyParser.cpp:
     20        (WebCore::consumeTranslate3d):
     21        (WebCore::consumeNumbers):
     22        (WebCore::consumePerspective):
     23        (WebCore::transformOperationForCSSValueID):
     24        (WebCore::consumeTransformValue):
     25
    1262016-10-19  Darin Adler  <darin@apple.com>
    227
  • trunk/Source/WebCore/css/parser/CSSPropertyParser.cpp

    r207521 r207543  
    6969#include "StylePropertyShorthand.h"
    7070#include "StylePropertyShorthandFunctions.h"
     71#include "WebkitCSSTransformValue.h"
    7172#include <memory>
    7273#include <wtf/text/StringBuilder.h>
     
    14521453}
    14531454
    1454 static bool consumeTranslate3d(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue)
     1455static bool consumeTranslate3d(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<WebKitCSSTransformValue>& transformValue)
    14551456{
    14561457    unsigned numberOfArguments = 2;
     
    14711472}
    14721473
    1473 static bool consumeNumbers(CSSParserTokenRange& args, RefPtr<CSSFunctionValue>& transformValue, unsigned numberOfArguments)
     1474static bool consumeNumbers(CSSParserTokenRange& args, RefPtr<WebKitCSSTransformValue>& transformValue, unsigned numberOfArguments)
    14741475{
    14751476    do {
     
    14841485}
    14851486
    1486 static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<CSSFunctionValue>& transformValue)
     1487static bool consumePerspective(CSSParserTokenRange& args, CSSParserMode cssParserMode, RefPtr<WebKitCSSTransformValue>& transformValue)
    14871488{
    14881489    RefPtr<CSSPrimitiveValue> parsedValue = consumeLength(args, cssParserMode, ValueRangeNonNegative);
     
    14991500}
    15001501
     1502// FIXME-NEWPARSER: This has no reason to exist once we eliminate WebkitCSSTransformValue in favor
     1503// of CSSFunctionValue.
     1504static WebKitCSSTransformValue::TransformOperationType transformOperationForCSSValueID(CSSValueID functionId)
     1505{
     1506    switch (functionId) {
     1507    case CSSValueRotate:
     1508        return WebKitCSSTransformValue::RotateTransformOperation;
     1509    case CSSValueRotatex:
     1510        return WebKitCSSTransformValue::RotateXTransformOperation;
     1511    case CSSValueRotatey:
     1512        return WebKitCSSTransformValue::RotateYTransformOperation;
     1513    case CSSValueRotatez:
     1514        return WebKitCSSTransformValue::RotateZTransformOperation;
     1515    case CSSValueSkewx:
     1516        return WebKitCSSTransformValue::SkewXTransformOperation;
     1517    case CSSValueSkewy:
     1518        return WebKitCSSTransformValue::SkewYTransformOperation;
     1519    case CSSValueSkew:
     1520        return WebKitCSSTransformValue::SkewTransformOperation;
     1521    case CSSValueScalex:
     1522        return WebKitCSSTransformValue::ScaleXTransformOperation;
     1523    case CSSValueScaley:
     1524        return WebKitCSSTransformValue::ScaleYTransformOperation;
     1525    case CSSValueScalez:
     1526        return WebKitCSSTransformValue::ScaleZTransformOperation;
     1527    case CSSValueScale:
     1528        return WebKitCSSTransformValue::ScaleTransformOperation;
     1529    case CSSValuePerspective:
     1530        return WebKitCSSTransformValue::PerspectiveTransformOperation;
     1531    case CSSValueTranslatex:
     1532        return WebKitCSSTransformValue::TranslateXTransformOperation;
     1533    case CSSValueTranslatey:
     1534        return WebKitCSSTransformValue::TranslateYTransformOperation;
     1535    case CSSValueTranslate:
     1536        return WebKitCSSTransformValue::TranslateTransformOperation;
     1537    case CSSValueTranslatez:
     1538        return WebKitCSSTransformValue::TranslateZTransformOperation;
     1539    case CSSValueMatrix:
     1540        return WebKitCSSTransformValue::MatrixTransformOperation;
     1541    case CSSValueMatrix3d:
     1542        return WebKitCSSTransformValue::Matrix3DTransformOperation;
     1543    case CSSValueScale3d:
     1544        return WebKitCSSTransformValue::Scale3DTransformOperation;
     1545    case CSSValueRotate3d:
     1546        return WebKitCSSTransformValue::Rotate3DTransformOperation;
     1547    case CSSValueTranslate3d:
     1548        return WebKitCSSTransformValue::Translate3DTransformOperation;
     1549    default:
     1550        return WebKitCSSTransformValue::UnknownTransformOperation;
     1551    }
     1552}
     1553
    15011554static RefPtr<CSSValue> consumeTransformValue(CSSParserTokenRange& range, CSSParserMode cssParserMode)
    15021555{
     
    15071560    if (args.atEnd())
    15081561        return nullptr;
    1509     RefPtr<CSSFunctionValue> transformValue = CSSFunctionValue::create(functionId);
     1562   
     1563    // FIXME-NEWPARSER: Do we really need WebkitCSSTransformValue? A CSSFunctionValue is good
     1564    // enough and has the CSSValueID as the operation type. Blink has eliminated it.
     1565    RefPtr<WebKitCSSTransformValue> transformValue = WebKitCSSTransformValue::create(transformOperationForCSSValueID(functionId));
    15101566    RefPtr<CSSValue> parsedValue;
    15111567    switch (functionId) {
Note: See TracChangeset for help on using the changeset viewer.