Skip to content

Commit 925bb54

Browse files
committed
LibWeb: Produce correct resolved value for animation-duration
1 parent fc9c0d8 commit 925bb54

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

Libraries/LibWeb/CSS/CSSStyleProperties.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
2222
#include <LibWeb/CSS/StyleValues/ShorthandStyleValue.h>
2323
#include <LibWeb/CSS/StyleValues/StyleValueList.h>
24+
#include <LibWeb/CSS/StyleValues/TimeStyleValue.h>
2425
#include <LibWeb/CSS/StyleValues/TransformationStyleValue.h>
2526
#include <LibWeb/DOM/Document.h>
2627
#include <LibWeb/DOM/Element.h>
@@ -870,6 +871,38 @@ RefPtr<StyleValue const> CSSStyleProperties::style_value_for_computed_property(L
870871
return TransformationStyleValue::create(PropertyID::Transform, TransformFunction::Matrix3d, move(parameters));
871872
}
872873
}
874+
case PropertyID::AnimationDuration: {
875+
// https://drafts.csswg.org/css-animations-2/#animation-duration
876+
// For backwards-compatibility with Level 1, when the computed value of animation-timeline is auto (i.e. only
877+
// one list value, and that value being auto), the resolved value of auto for animation-duration is 0s whenever
878+
// its used value would also be 0s.
879+
auto const& animation_timeline_computed_value = get_computed_value(PropertyID::AnimationTimeline);
880+
auto const& animation_duration_computed_value = get_computed_value(PropertyID::AnimationDuration);
881+
882+
if (animation_timeline_computed_value.to_keyword() == Keyword::Auto) {
883+
884+
// FIXME: We can remove these two branches once parse_comma_separated_value_list always returns StyleValueList.
885+
if (animation_duration_computed_value.to_keyword() == Keyword::Auto)
886+
return TimeStyleValue::create(Time::make_seconds(0));
887+
888+
if (!animation_duration_computed_value.is_value_list())
889+
return animation_duration_computed_value;
890+
891+
StyleValueVector resolved_durations;
892+
893+
for (auto const& duration : animation_duration_computed_value.as_value_list().values()) {
894+
if (duration->to_keyword() == Keyword::Auto) {
895+
resolved_durations.append(TimeStyleValue::create(Time::make_seconds(0)));
896+
} else {
897+
resolved_durations.append(duration);
898+
}
899+
}
900+
901+
return StyleValueList::create(move(resolved_durations), StyleValueList::Separator::Comma);
902+
}
903+
904+
return animation_duration_computed_value;
905+
}
873906

874907
// -> Any other property
875908
// The resolved value is the computed value.

Tests/LibWeb/Text/expected/wpt-import/css/css-animations/parsing/animation-duration-computed.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ Harness status: OK
22

33
Found 15 tests
44

5-
11 Pass
6-
4 Fail
5+
13 Pass
6+
2 Fail
77
Pass Property animation-duration value '500ms'
88
Pass Property animation-duration value 'calc(2 * 3s)'
99
Fail Property animation-duration value 'calc(10s + (sign(2cqw - 10px) * 5s))'
1010
Pass Property animation-duration value '20s, 10s'
11-
Fail Property animation-duration value 'auto'
11+
Pass Property animation-duration value 'auto'
1212
Fail Property animation-duration value 'auto, auto'
13-
Fail Resolved value of animation-duration:auto with animation-timeline:auto
13+
Pass Resolved value of animation-duration:auto with animation-timeline:auto
1414
Pass Resolved value of animation-duration:auto with animation-timeline:auto, auto
1515
Pass Resolved value of animation-duration:auto with animation-timeline:--t
1616
Pass Resolved value of animation-duration:auto with animation-timeline:--t, --t2

0 commit comments

Comments
 (0)