[Web Animations] Accept null composite modes in keyframes
authorgraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Feb 2018 17:42:43 +0000 (17:42 +0000)
committergraouts@webkit.org <graouts@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Feb 2018 17:42:43 +0000 (17:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=182902

Reviewed by Dean Jackson.

LayoutTests/imported/w3c:

Update test expectations with progressions.

* web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor-expected.txt:

Source/WebCore:

The Web Animations spec used to specify that that composite modes should be non-null and instead not be
provided when specifying keyframes, but now null values are accepted. We update the IDL input types used
when parsing keyframes to allow for null values.

We had already updated the getKeyframes() output in webkit.org/b/182600.

* animation/KeyframeEffectReadOnly.cpp:
(WebCore::processIterableKeyframes):
(WebCore::processKeyframeLikeObject):
(WebCore::processPropertyIndexedKeyframes):
* animation/KeyframeEffectReadOnly.h:
* animation/KeyframeEffectReadOnly.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@228694 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/animation/KeyframeEffectReadOnly.cpp
Source/WebCore/animation/KeyframeEffectReadOnly.h
Source/WebCore/animation/KeyframeEffectReadOnly.idl

index 6f133c0..6a3df65 100644 (file)
@@ -1,3 +1,14 @@
+2018-02-17  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Accept null composite modes in keyframes
+        https://bugs.webkit.org/show_bug.cgi?id=182902
+
+        Reviewed by Dean Jackson.
+
+        Update test expectations with progressions.
+
+        * web-platform-tests/web-animations/interfaces/KeyframeEffect/constructor-expected.txt:
+
 2018-02-19  Manuel Rego Casasnovas  <rego@igalia.com>
 
         [css-grid] Apply automatic minimum size clamping to spanning items too
index 613f857..a762780 100644 (file)
@@ -2,73 +2,73 @@
 PASS A KeyframeEffectReadOnly can be constructed with no frames 
 PASS easing values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in KeyframeEffectOptions 
 PASS Invalid easing values are correctly rejected when passed to the KeyframeEffectReadOnly constructor in KeyframeEffectOptions 
-FAIL composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes Type error
-FAIL composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes Type error
+PASS composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in property-indexed keyframes 
+PASS composite values are parsed correctly when passed to the KeyframeEffectReadOnly constructor in regular keyframes 
 PASS composite value is null if the composite operation specified on the keyframe effect is being used 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification 
-FAIL A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a one shorthand property two value property-indexed keyframes specification assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one shorthand property two value property-indexed keyframes specification roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,marginTop,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property (one shorthand and one of its longhand components) two value property-indexed keyframes specification roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property two value property-indexed keyframes specification 
-FAIL A KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property two value property-indexed keyframes specification roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property property-indexed keyframes specification with different numbers of values 
-FAIL A KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property property-indexed keyframes specification with different numbers of values roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with an invalid value 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with an invalid value roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification that needs to stringify its values 
-FAIL A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification that needs to stringify its values roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference assert_equals: value for 'left' on ComputedKeyframe #0 expected "var(--dist)" but got "auto"
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframes specification with a CSS variable reference in a shorthand property roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property one value property-indexed keyframes specification 
-FAIL A KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property one value property-indexed keyframes specification roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property one non-array value property-indexed keyframes specification 
-FAIL A KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property one non-array value property-indexed keyframes specification roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the first value is invalid 
-FAIL A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the first value is invalid roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two value property-indexed keyframes specification where the second value is invalid 
-FAIL A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two value property-indexed keyframes specification where the second value is invalid roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single offset 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single offset roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single offset roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets assert_equals: value for 'computedOffset' on ComputedKeyframe #1 expected 0.25 but got 0.45000000000000007
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets that is too short assert_equals: value for 'computedOffset' on ComputedKeyframe #1 expected 0.25 but got 0.5
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is too short roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is too short roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets that is too long 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is too long roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is too long roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an empty array of offsets 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an empty array of offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an empty array of offsets roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets with an embedded null value 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with an embedded null value roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with an embedded null value roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets with a trailing null value assert_equals: value for 'computedOffset' on ComputedKeyframe #1 expected 0.25 but got 0.5
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with a trailing null value roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with a trailing null value roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets with leading and trailing null values assert_equals: value for 'computedOffset' on ComputedKeyframe #1 expected 0.25 but got 0.5
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with leading and trailing null values roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with leading and trailing null values roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets with adjacent null values 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with adjacent null values roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with adjacent null values roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets with all null values (and too many at that) 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with all null values (and too many at that) roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets with all null values (and too many at that) roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single null offset 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single null offset roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single null offset roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of offsets that is not strictly ascending in the unused part of the array assert_equals: value for 'computedOffset' on ComputedKeyframe #1 expected 0.2 but got 0.4
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is not strictly ascending in the unused part of the array roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of offsets that is not strictly ascending in the unused part of the array roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe without any specified easing 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe without any specified easing roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe without any specified easing roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single easing 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single easing roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single easing roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of easings 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of easings that is too short assert_equals: value for 'easing' on ComputedKeyframe #2 expected "ease-in" but got "ease-out"
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings that is too short roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings that is too short roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single-element array of easings 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single-element array of easings roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single-element array of easings roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an empty array of easings 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an empty array of easings roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an empty array of easings roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with an array of easings that is too long 
-FAIL A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings that is too long roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with an array of easings that is too long roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single composite operation 
 PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single composite operation roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a composite array 
@@ -80,25 +80,25 @@ PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with
 PASS A KeyframeEffectReadOnly can be constructed with a property-indexed keyframe with a single-element composite array 
 PASS A KeyframeEffectReadOnly constructed with a property-indexed keyframe with a single-element composite array roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property one keyframe sequence 
-FAIL A KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property one keyframe sequence roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence 
-FAIL A KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two keyframe sequence roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property two keyframe sequence 
-FAIL A KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property two keyframe sequence roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a one shorthand property two keyframe sequence assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one shorthand property two keyframe sequence roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,marginTop,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property (a shorthand and one of its component longhands) two keyframe sequence roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the first keyframe 
-FAIL A KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the first keyframe roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property keyframe sequence where one property is missing from the last keyframe 
-FAIL A KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property keyframe sequence where one property is missing from the last keyframe roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property two keyframe sequence that needs to stringify its values 
-FAIL A KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property two keyframe sequence that needs to stringify its values roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference assert_equals: value for 'left' on ComputedKeyframe #0 expected "var(--dist)" but got "auto"
-FAIL A KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with a CSS variable reference in a shorthand property assert_equals: properties on ComputedKeyframe #0 should match expected "composite,computedOffset,easing,margin,offset" but got "composite,computedOffset,easing,marginBottom,marginLeft,marginRight,marginTop,offset"
-FAIL A KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a keyframe sequence with a CSS variable reference in a shorthand property roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for a given interior offset Type error
 FAIL A KeyframeEffectReadOnly constructed with a keyframe sequence with duplicate values for a given interior offset roundtrips Type error
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with duplicate values for offsets 0 and 1 Type error
@@ -106,19 +106,19 @@ FAIL A KeyframeEffectReadOnly constructed with a keyframe sequence with duplicat
 FAIL A KeyframeEffectReadOnly can be constructed with a two property four keyframe sequence Type error
 FAIL A KeyframeEffectReadOnly constructed with a two property four keyframe sequence roundtrips Type error
 PASS A KeyframeEffectReadOnly can be constructed with a single keyframe sequence with omitted offset 
-FAIL A KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offset roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a single keyframe sequence with omitted offset roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a single keyframe sequence with null offset 
-FAIL A KeyframeEffectReadOnly constructed with a single keyframe sequence with null offset roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a single keyframe sequence with null offset roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a single keyframe sequence with string offset 
-FAIL A KeyframeEffectReadOnly constructed with a single keyframe sequence with string offset roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a single keyframe sequence with string offset roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some omitted offsets 
-FAIL A KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property keyframe sequence with some omitted offsets roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with some null offsets 
-FAIL A KeyframeEffectReadOnly constructed with a one property keyframe sequence with some null offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property keyframe sequence with some null offsets roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a two property keyframe sequence with some omitted offsets 
-FAIL A KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a two property keyframe sequence with some omitted offsets roundtrips 
 PASS A KeyframeEffectReadOnly can be constructed with a one property keyframe sequence with all omitted offsets 
-FAIL A KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips Type error
+PASS A KeyframeEffectReadOnly constructed with a one property keyframe sequence with all omitted offsets roundtrips 
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with different easing values, but the same easing value for a given offset Type error
 FAIL A KeyframeEffectReadOnly constructed with a keyframe sequence with different easing values, but the same easing value for a given offset roundtrips Type error
 FAIL A KeyframeEffectReadOnly can be constructed with a keyframe sequence with different composite values, but the same composite value for a given offset Type error
index c47af07..0be000b 100644 (file)
@@ -1,3 +1,23 @@
+2018-02-17  Antoine Quint  <graouts@apple.com>
+
+        [Web Animations] Accept null composite modes in keyframes
+        https://bugs.webkit.org/show_bug.cgi?id=182902
+
+        Reviewed by Dean Jackson.
+
+        The Web Animations spec used to specify that that composite modes should be non-null and instead not be
+        provided when specifying keyframes, but now null values are accepted. We update the IDL input types used
+        when parsing keyframes to allow for null values.
+
+        We had already updated the getKeyframes() output in webkit.org/b/182600.
+
+        * animation/KeyframeEffectReadOnly.cpp:
+        (WebCore::processIterableKeyframes):
+        (WebCore::processKeyframeLikeObject):
+        (WebCore::processPropertyIndexedKeyframes):
+        * animation/KeyframeEffectReadOnly.h:
+        * animation/KeyframeEffectReadOnly.idl:
+
 2018-02-19  Ms2ger  <Ms2ger@igalia.com>
 
         Explicitly qualify some method calls on this in lamdas in Service Worker code.
index 5b80fc9..1f42500 100644 (file)
@@ -150,7 +150,7 @@ static inline ExceptionOr<void> processIterableKeyframes(ExecState& state, Stron
             else if (ownPropertyName == "offset")
                 offset = convert<IDLNullable<IDLDouble>>(state, ownPropertyRawValue);
             else if (ownPropertyName == "composite")
-                composite = convert<IDLEnumeration<CompositeOperation>>(state, ownPropertyRawValue);
+                composite = convert<IDLNullable<IDLEnumeration<CompositeOperation>>>(state, ownPropertyRawValue);
             else {
                 auto cssPropertyId = IDLAttributeNameToAnimationPropertyName(ownPropertyName.string());
                 if (CSSPropertyAnimation::isPropertyAnimatable(cssPropertyId))
@@ -184,7 +184,7 @@ static inline ExceptionOr<KeyframeEffectReadOnly::KeyframeLikeObject> processKey
     //    dictionary BasePropertyIndexedKeyframe {
     //        (double? or sequence<double?>)                       offset = [];
     //        (DOMString or sequence<DOMString>)                   easing = [];
-    //        (CompositeOperation or sequence<CompositeOperation>) composite = [];
+    //        (CompositeOperation? or sequence<CompositeOperation?>) composite = [];
     //    };
     //
     //    Store the result of this procedure as keyframe output.
@@ -360,11 +360,13 @@ static inline ExceptionOr<void> processPropertyIndexedKeyframes(ExecState& state
         processedKeyframes[i].easing = easings[i];
 
     // 12. If the “composite” member of the property-indexed keyframe is not an empty sequence:
-    Vector<CompositeOperation> compositeModes;
-    if (WTF::holds_alternative<Vector<CompositeOperation>>(propertyIndexedKeyframe.baseProperties.composite))
-        compositeModes = WTF::get<Vector<CompositeOperation>>(propertyIndexedKeyframe.baseProperties.composite);
+    Vector<std::optional<CompositeOperation>> compositeModes;
+    if (WTF::holds_alternative<Vector<std::optional<CompositeOperation>>>(propertyIndexedKeyframe.baseProperties.composite))
+        compositeModes = WTF::get<Vector<std::optional<CompositeOperation>>>(propertyIndexedKeyframe.baseProperties.composite);
     else if (WTF::holds_alternative<CompositeOperation>(propertyIndexedKeyframe.baseProperties.composite))
         compositeModes.append(WTF::get<CompositeOperation>(propertyIndexedKeyframe.baseProperties.composite));
+    else if (WTF::holds_alternative<std::nullptr_t>(propertyIndexedKeyframe.baseProperties.composite))
+        compositeModes.append(std::nullopt);
     if (!compositeModes.isEmpty()) {
         // 1. Let composite modes be a sequence of composite operations assigned from the “composite” member of property-indexed keyframe. If that member is a single composite
         //    operation, let composite modes be a sequence of length one, with the value of the “composite” as its single item.
index 72b7540..a66d44b 100644 (file)
@@ -50,7 +50,7 @@ public:
     struct BasePropertyIndexedKeyframe {
         Variant<std::nullptr_t, Vector<std::optional<double>>, double> offset = Vector<std::optional<double>>();
         Variant<Vector<String>, String> easing = Vector<String>();
-        Variant<Vector<CompositeOperation>, CompositeOperation> composite = Vector<CompositeOperation>();
+        Variant<std::nullptr_t, Vector<std::optional<CompositeOperation>>, CompositeOperation> composite = Vector<std::optional<CompositeOperation>>();
     };
 
     struct PropertyAndValues {
index 8e7ae9c..d8eb689 100644 (file)
@@ -41,7 +41,7 @@
 dictionary BasePropertyIndexedKeyframe {
     (sequence<double?> or double?) offset = [];
     (sequence<DOMString> or DOMString) easing = [];
-    (sequence<CompositeOperation> or CompositeOperation) composite = [];
+    (sequence<CompositeOperation?> or CompositeOperation?) composite = [];
 };
 
 [