aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/animations.rs6
-rw-r--r--components/style/animation.rs154
-rw-r--r--components/style/properties/helpers/animated_properties.mako.rs155
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/animations/line-height-interpolation.html.ini18
-rw-r--r--tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini36
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini18
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini21
-rw-r--r--tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini21
-rw-r--r--tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini30
10 files changed, 100 insertions, 361 deletions
diff --git a/components/script/animations.rs b/components/script/animations.rs
index a666ac3ed84..91946853f22 100644
--- a/components/script/animations.rs
+++ b/components/script/animations.rs
@@ -113,7 +113,7 @@ impl Animations {
transition.state = AnimationState::Finished;
update.add_event(
transition.node,
- transition.property_animation.property_name().into(),
+ transition.property_animation.property_id().name().into(),
TransitionOrAnimationEventType::TransitionEnd,
transition.property_animation.duration,
);
@@ -135,7 +135,7 @@ impl Animations {
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
update.add_event(
transition.node,
- transition.property_animation.property_name().into(),
+ transition.property_animation.property_id().name().into(),
TransitionOrAnimationEventType::TransitionCancel,
(now - transition.start_time).max(0.),
);
@@ -157,7 +157,7 @@ impl Animations {
// according to https://drafts.csswg.org/css-transitions/#event-transitionevent
update.add_event(
transition.node,
- transition.property_animation.property_name().into(),
+ transition.property_animation.property_id().name().into(),
TransitionOrAnimationEventType::TransitionRun,
0.,
);
diff --git a/components/style/animation.rs b/components/style/animation.rs
index f76759abdfb..f52e9b42a51 100644
--- a/components/style/animation.rs
+++ b/components/style/animation.rs
@@ -11,13 +11,14 @@ use crate::bezier::Bezier;
use crate::context::SharedStyleContext;
use crate::dom::{OpaqueNode, TElement, TNode};
use crate::font_metrics::FontMetricsProvider;
-use crate::properties::animated_properties::AnimatedProperty;
+use crate::properties::animated_properties::AnimationValue;
use crate::properties::longhands::animation_direction::computed_value::single_value::T as AnimationDirection;
use crate::properties::longhands::animation_play_state::computed_value::single_value::T as AnimationPlayState;
use crate::properties::LonghandIdSet;
use crate::properties::{self, CascadeMode, ComputedValues, LonghandId};
use crate::stylesheets::keyframes_rule::{KeyframesAnimation, KeyframesStep, KeyframesStepValue};
use crate::stylesheets::Origin;
+use crate::values::animated::{Animate, Procedure};
use crate::values::computed::Time;
use crate::values::computed::TimingFunction;
use crate::values::generics::box_::AnimationIterationCount;
@@ -29,8 +30,11 @@ use std::fmt;
/// Represents an animation for a given property.
#[derive(Clone, Debug, MallocSizeOf)]
pub struct PropertyAnimation {
- /// An `AnimatedProperty` that this `PropertyAnimation` corresponds to.
- property: AnimatedProperty,
+ /// The value we are animating from.
+ from: AnimationValue,
+
+ /// The value we are animating to.
+ to: AnimationValue,
/// The timing function of this `PropertyAnimation`.
timing_function: TimingFunction,
@@ -42,12 +46,8 @@ pub struct PropertyAnimation {
impl PropertyAnimation {
/// Returns the given property longhand id.
pub fn property_id(&self) -> LonghandId {
- self.property.id()
- }
-
- /// Returns the given property name.
- pub fn property_name(&self) -> &'static str {
- self.property.name()
+ debug_assert_eq!(self.from.id(), self.to.id());
+ self.from.id()
}
fn from_longhand(
@@ -57,30 +57,33 @@ impl PropertyAnimation {
old_style: &ComputedValues,
new_style: &ComputedValues,
) -> Option<PropertyAnimation> {
- let animated_property = AnimatedProperty::from_longhand(longhand, old_style, new_style)?;
+ // FIXME(emilio): Handle the case where old_style and new_style's writing mode differ.
+ let longhand = longhand.to_physical(new_style.writing_mode);
+ let from = AnimationValue::from_computed_values(longhand, old_style)?;
+ let to = AnimationValue::from_computed_values(longhand, new_style)?;
+ let duration = duration.seconds() as f64;
+
+ if from == to || duration == 0.0 {
+ return None;
+ }
- let property_animation = PropertyAnimation {
- property: animated_property,
+ Some(PropertyAnimation {
+ from,
+ to,
timing_function,
- duration: duration.seconds() as f64,
- };
-
- if property_animation.does_animate() {
- Some(property_animation)
- } else {
- None
- }
+ duration,
+ })
}
- /// Update the given animation at a given point of progress.
- pub fn update(&self, style: &mut ComputedValues, time: f64) {
+ /// The output of the timing function given the progress ration of this animation.
+ fn timing_function_output(&self, progress: f64) -> f64 {
let epsilon = 1. / (200. * self.duration);
- let progress = match self.timing_function {
+ match self.timing_function {
GenericTimingFunction::CubicBezier { x1, y1, x2, y2 } => {
- Bezier::new(x1, y1, x2, y2).solve(time, epsilon)
+ Bezier::new(x1, y1, x2, y2).solve(progress, epsilon)
},
GenericTimingFunction::Steps(steps, pos) => {
- let mut current_step = (time * (steps as f64)).floor() as i32;
+ let mut current_step = (progress * (steps as f64)).floor() as i32;
if pos == StepPosition::Start ||
pos == StepPosition::JumpStart ||
@@ -95,7 +98,7 @@ impl PropertyAnimation {
// (i.e. Treat before_flag is unset,)
// https://drafts.csswg.org/css-easing/#step-timing-function-algo
- if time >= 0.0 && current_step < 0 {
+ if progress >= 0.0 && current_step < 0 {
current_step = 0;
}
@@ -108,7 +111,7 @@ impl PropertyAnimation {
StepPosition::End => steps,
};
- if time <= 1.0 && current_step > jumps {
+ if progress <= 1.0 && current_step > jumps {
current_step = jumps;
}
@@ -116,22 +119,19 @@ impl PropertyAnimation {
},
GenericTimingFunction::Keyword(keyword) => {
let (x1, x2, y1, y2) = keyword.to_bezier();
- Bezier::new(x1, x2, y1, y2).solve(time, epsilon)
+ Bezier::new(x1, x2, y1, y2).solve(progress, epsilon)
},
- };
-
- self.property.update(style, progress);
- }
-
- #[inline]
- fn does_animate(&self) -> bool {
- self.property.does_animate() && self.duration != 0.0
+ }
}
- /// Whether this animation has the same end value as another one.
- #[inline]
- pub fn has_the_same_end_value_as(&self, other: &Self) -> bool {
- self.property.has_the_same_end_value_as(&other.property)
+ /// Update the given animation at a given point of progress.
+ fn update(&self, style: &mut ComputedValues, progress: f64) {
+ let procedure = Procedure::Interpolate {
+ progress: self.timing_function_output(progress),
+ };
+ if let Ok(new_value) = self.from.animate(&self.to, procedure) {
+ new_value.set_in_style_for_servo(style);
+ }
}
}
@@ -486,42 +486,23 @@ impl Animation {
);
let mut new_style = (*style).clone();
-
- for property in self.keyframes_animation.properties_changed.iter() {
- debug!(
- "Animation::update_style: scanning prop {:?} for animation \"{}\"",
- property, self.name
- );
- let animation = PropertyAnimation::from_longhand(
- property,
+ let mut update_style_for_longhand = |longhand| {
+ let from = AnimationValue::from_computed_values(longhand, &from_style)?;
+ let to = AnimationValue::from_computed_values(longhand, &target_style)?;
+ PropertyAnimation {
+ from,
+ to,
timing_function,
- Time::from_seconds(relative_duration as f32),
- &from_style,
- &target_style,
- );
-
- match animation {
- Some(property_animation) => {
- debug!(
- "Animation::update_style: got property animation for prop {:?}",
- property
- );
- debug!("Animation::update_style: {:?}", property_animation);
- property_animation.update(&mut new_style, relative_progress);
- },
- None => {
- debug!(
- "Animation::update_style: property animation {:?} not animating",
- property
- );
- },
+ duration: relative_duration as f64,
}
+ .update(&mut new_style, relative_progress);
+ None::<()>
+ };
+
+ for property in self.keyframes_animation.properties_changed.iter() {
+ update_style_for_longhand(property);
}
- debug!(
- "Animation::update_style: got style change in animation \"{}\"",
- self.name
- );
*style = new_style;
}
}
@@ -573,12 +554,9 @@ impl Transition {
/// Whether this animation has the same end value as another one.
#[inline]
- fn has_same_end_value(&self, other_animation: &PropertyAnimation) -> bool {
- if self.state == AnimationState::Canceled {
- return false;
- }
- self.property_animation
- .has_the_same_end_value_as(other_animation)
+ fn progress(&self, now: f64) -> f64 {
+ let progress = (now - self.start_time) / (self.property_animation.duration);
+ progress.min(1.0)
}
/// Update a style to the value specified by this `Transition` given a `SharedStyleContext`.
@@ -588,9 +566,7 @@ impl Transition {
return;
}
- let now = context.current_time_for_animations;
- let progress = (now - self.start_time) / (self.property_animation.duration);
- let progress = progress.min(1.0);
+ let progress = self.progress(context.current_time_for_animations);
if progress >= 0.0 {
self.property_animation.update(style, progress);
}
@@ -782,7 +758,8 @@ pub fn start_transitions_if_applicable(
) -> LonghandIdSet {
// If the style of this element is display:none, then we don't start any transitions
// and we cancel any currently running transitions by returning an empty LonghandIdSet.
- if new_style.get_box().clone_display().is_none() {
+ let box_style = new_style.get_box();
+ if box_style.clone_display().is_none() {
return LonghandIdSet::new();
}
@@ -797,12 +774,8 @@ pub fn start_transitions_if_applicable(
let property_animation = match PropertyAnimation::from_longhand(
transition.longhand_id,
- new_style
- .get_box()
- .transition_timing_function_mod(transition.index),
- new_style
- .get_box()
- .transition_duration_mod(transition.index),
+ box_style.transition_timing_function_mod(transition.index),
+ box_style.transition_duration_mod(transition.index),
old_style,
new_style,
) {
@@ -812,12 +785,13 @@ pub fn start_transitions_if_applicable(
// Per [1], don't trigger a new transition if the end state for that
// transition is the same as that of a transition that's running or
- // completed.
+ // completed. We don't take into account any canceled animations.
// [1]: https://drafts.csswg.org/css-transitions/#starting
if animation_state
.transitions
.iter()
- .any(|transition| transition.has_same_end_value(&property_animation))
+ .filter(|transition| transition.state != AnimationState::Canceled)
+ .any(|transition| transition.property_animation.to == property_animation.to)
{
continue;
}
diff --git a/components/style/properties/helpers/animated_properties.mako.rs b/components/style/properties/helpers/animated_properties.mako.rs
index 2e9a53fc677..863da15d65c 100644
--- a/components/style/properties/helpers/animated_properties.mako.rs
+++ b/components/style/properties/helpers/animated_properties.mako.rs
@@ -57,132 +57,6 @@ impl From<nsCSSPropertyID> for TransitionProperty {
}
}
-/// An animated property interpolation between two computed values for that
-/// property.
-#[derive(Clone, Debug, PartialEq)]
-#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
-pub enum AnimatedProperty {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- <%
- value_type = "longhands::{}::computed_value::T".format(prop.ident)
- if not prop.is_animatable_with_computed_value:
- value_type = "<{} as ToAnimatedValue>::AnimatedValue".format(value_type)
- %>
- /// ${prop.name}
- ${prop.camel_case}(${value_type}, ${value_type}),
- % endif
- % endfor
-}
-
-impl AnimatedProperty {
- /// Get the id of the property we're animating.
- pub fn id(&self) -> LonghandId {
- match *self {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- AnimatedProperty::${prop.camel_case}(..) => LonghandId::${prop.camel_case},
- % endif
- % endfor
- }
- }
-
- /// Get the name of this property.
- pub fn name(&self) -> &'static str {
- self.id().name()
- }
-
- /// Whether this interpolation does animate, that is, whether the start and
- /// end values are different.
- pub fn does_animate(&self) -> bool {
- match *self {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- AnimatedProperty::${prop.camel_case}(ref from, ref to) => from != to,
- % endif
- % endfor
- }
- }
-
- /// Whether an animated property has the same end value as another.
- pub fn has_the_same_end_value_as(&self, other: &Self) -> bool {
- match (self, other) {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- (&AnimatedProperty::${prop.camel_case}(_, ref this_end_value),
- &AnimatedProperty::${prop.camel_case}(_, ref other_end_value)) => {
- this_end_value == other_end_value
- }
- % endif
- % endfor
- _ => false,
- }
- }
-
- /// Update `style` with the proper computed style corresponding to this
- /// animation at `progress`.
- #[cfg_attr(feature = "gecko", allow(unused))]
- pub fn update(&self, style: &mut ComputedValues, progress: f64) {
- #[cfg(feature = "servo")]
- {
- match *self {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- AnimatedProperty::${prop.camel_case}(ref from, ref to) => {
- // https://drafts.csswg.org/web-animations/#discrete-animation-type
- % if prop.animation_value_type == "discrete":
- let value = if progress < 0.5 { from.clone() } else { to.clone() };
- % else:
- let value = match from.animate(to, Procedure::Interpolate { progress }) {
- Ok(value) => value,
- Err(()) => return,
- };
- % endif
- % if not prop.is_animatable_with_computed_value:
- let value: longhands::${prop.ident}::computed_value::T =
- ToAnimatedValue::from_animated_value(value);
- % endif
- style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value);
- }
- % endif
- % endfor
- }
- }
- }
-
- /// Get an animatable value from a transition-property, an old style, and a
- /// new style.
- pub fn from_longhand(
- property: LonghandId,
- old_style: &ComputedValues,
- new_style: &ComputedValues,
- ) -> Option<AnimatedProperty> {
- // FIXME(emilio): Handle the case where old_style and new_style's
- // writing mode differ.
- let property = property.to_physical(new_style.writing_mode);
- Some(match property {
- % for prop in data.longhands:
- % if prop.animatable and not prop.logical:
- LonghandId::${prop.camel_case} => {
- let old_computed = old_style.clone_${prop.ident}();
- let new_computed = new_style.clone_${prop.ident}();
- AnimatedProperty::${prop.camel_case}(
- % if prop.is_animatable_with_computed_value:
- old_computed,
- new_computed,
- % else:
- old_computed.to_animated_value(),
- new_computed.to_animated_value(),
- % endif
- )
- }
- % endif
- % endfor
- _ => return None,
- })
- }
-}
-
/// A collection of AnimationValue that were composed on an element.
/// This HashMap stores the values that are the last AnimationValue to be
/// composed for each TransitionProperty.
@@ -192,11 +66,6 @@ pub type AnimationValueMap = FxHashMap<LonghandId, AnimationValue>;
/// property in order to be interpolated with another one. When interpolating,
/// both values need to belong to the same property.
///
-/// This is different to AnimatedProperty in the sense that AnimatedProperty
-/// also knows the final value to be used during the animation.
-///
-/// This is to be used in Gecko integration code.
-///
/// FIXME: We need to add a path for custom properties, but that's trivial after
/// this (is a similar path to that of PropertyDeclaration).
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
@@ -546,6 +415,30 @@ impl AnimationValue {
_ => return None,
})
}
+
+ /// Update `style` with the value of this `AnimationValue`.
+ ///
+ /// SERVO ONLY: This doesn't properly handle things like updating 'em' units
+ /// when animated font-size.
+ pub fn set_in_style_for_servo(&self, style: &mut ComputedValues) {
+ match self {
+ % for prop in data.longhands:
+ % if prop.animatable and not prop.logical:
+ AnimationValue::${prop.camel_case}(ref value) => {
+ % if not prop.is_animatable_with_computed_value:
+ let value: longhands::${prop.ident}::computed_value::T =
+ ToAnimatedValue::from_animated_value(value.clone());
+ style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value);
+ % else:
+ style.mutate_${prop.style_struct.name_lower}().set_${prop.ident}(value.clone());
+ % endif
+ }
+ % else:
+ AnimationValue::${prop.camel_case}(..) => unreachable!(),
+ % endif
+ % endfor
+ }
+ }
}
fn animate_discrete<T: Clone>(this: &T, other: &T, procedure: Procedure) -> Result<T, ()> {
diff --git a/tests/wpt/metadata/css/CSS2/linebox/animations/line-height-interpolation.html.ini b/tests/wpt/metadata/css/CSS2/linebox/animations/line-height-interpolation.html.ini
index 20917a6c997..8e7e49200ea 100644
--- a/tests/wpt/metadata/css/CSS2/linebox/animations/line-height-interpolation.html.ini
+++ b/tests/wpt/metadata/css/CSS2/linebox/animations/line-height-interpolation.html.ini
@@ -47,9 +47,6 @@
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (0.3) should be [normal\]]
- expected: FAIL
-
[CSS Animations: property <line-height> from [normal\] to [4\] at (0) should be [normal\]]
expected: FAIL
@@ -134,9 +131,6 @@
[Web Animations: property <line-height> from [14q\] to [normal\] at (0) should be [14q\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (0) should be [normal\]]
- expected: FAIL
-
[Web Animations: property <line-height> from [4\] to [14px\] at (0.5) should be [14px\]]
expected: FAIL
@@ -224,9 +218,6 @@
[Web Animations: property <line-height> from [normal\] to [14px\] at (0) should be [normal\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (-0.3) should be [normal\]]
- expected: FAIL
-
[Web Animations: property <line-height> from [4q\] to [14q\] at (-0.3) should be [1q\]]
expected: FAIL
@@ -323,9 +314,6 @@
[CSS Animations: property <line-height> from [14q\] to [normal\] at (0.3) should be [14q\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (0.6) should be [normal\]]
- expected: FAIL
-
[Web Animations: property <line-height> from [normal\] to [14px\] at (0.3) should be [normal\]]
expected: FAIL
@@ -407,15 +395,9 @@
[Web Animations: property <line-height> from [inherit\] to [20px\] at (1.5) should be [15px\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (1) should be [normal\]]
- expected: FAIL
-
[CSS Animations: property <line-height> from [normal\] to [14px\] at (0.6) should be [14px\]]
expected: FAIL
- [CSS Animations: property <line-height> from [normal\] to [normal\] at (1.5) should be [normal\]]
- expected: FAIL
-
[Web Animations: property <line-height> from [inherit\] to [20px\] at (0.3) should be [27px\]]
expected: FAIL
diff --git a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
deleted file mode 100644
index a647125277a..00000000000
--- a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-animation.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[mix-blend-mode-animation.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
index 25e13e6d057..5d58a032ca7 100644
--- a/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-backgrounds/animations/border-width-interpolation.html.ini
@@ -11,9 +11,6 @@
[CSS Animations: property <border-left-width> from [unset\] to [20px\] at (1.5) should be [28.5px\]]
expected: FAIL
- [CSS Animations: property <border-left-width> from [0px\] to [10px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <border-left-width> from [unset\] to [20px\] at (0.3) should be [8.1px\]]
expected: FAIL
@@ -26,9 +23,6 @@
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (-2) should be [35px\]]
expected: FAIL
- [CSS Animations: property <border-top-width> from [15px\] to [thick\] at (1.5) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (0.6) should be [7px\]]
expected: FAIL
@@ -41,15 +35,6 @@
[Web Animations: property <border-left-width> from neutral to [20px\] at (1) should be [20px\]]
expected: FAIL
- [CSS Animations: property <border-bottom-width> from [thick\] to [15px\] at (-2) should be [0px\]]
- expected: FAIL
-
- [CSS Animations: property <border-left-width> from [inherit\] to [20px\] at (0) should be [0px\]]
- expected: FAIL
-
- [CSS Animations: property <border-left-width> from [medium\] to [13px\] at (-2) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (0.6) should be [9px\]]
expected: FAIL
@@ -101,9 +86,6 @@
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
expected: FAIL
- [CSS Animations: property <border-right-width> from [thin\] to [11px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (1.5) should be [35px 55px 75px 95px\]]
expected: FAIL
@@ -146,9 +128,6 @@
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (1.5) should be [16px\]]
expected: FAIL
- [CSS Animations: property <border-left-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <border-right-width> from [thin\] to [11px\] at (0.3) should be [4px\]]
expected: FAIL
@@ -218,9 +197,6 @@
[CSS Animations: property <border-left-width> from [medium\] to [13px\] at (1.5) should be [18px\]]
expected: FAIL
- [CSS Animations: property <border-right-width> from [thin\] to [11px\] at (-2) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (1.5) should be [20px\]]
expected: FAIL
@@ -239,9 +215,6 @@
[CSS Animations: property <border-left-width> from [initial\] to [20px\] at (0) should be [3px\]]
expected: FAIL
- [CSS Animations: property <border-left-width> from [inherit\] to [20px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <border-bottom-width> from [thick\] to [15px\] at (-0.3) should be [2px\]]
expected: FAIL
@@ -347,9 +320,6 @@
[Web Animations: property <border-right-width> from [thin\] to [11px\] at (-0.3) should be [0px\]]
expected: FAIL
- [CSS Animations: property <border-left-width> from [0px\] to [10px\] at (0) should be [0px\]]
- expected: FAIL
-
[CSS Transitions with transition: all: property <border-width> from [20px 40px 60px 80px\] to [30px 50px 70px 90px\] at (0) should be [20px 40px 60px 80px\]]
expected: FAIL
@@ -383,9 +353,6 @@
[CSS Animations: property <border-top-width> from [15px\] to [thick\] at (1) should be [5px\]]
expected: FAIL
- [CSS Animations: property <border-left-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <border-left-width> from neutral to [20px\] at (1.5) should be [25px\]]
expected: FAIL
@@ -416,3 +383,6 @@
[Web Animations: property <border-left-width> from [0px\] to [10px\] at (1) should be [10px\]]
expected: FAIL
+ [CSS Animations: property <border-left-width> from [0px\] to [10px\] at (1) should be [10px\]]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
index 2bef4675376..ab3ca501f93 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/rotate-interpolation.html.ini
@@ -92,12 +92,6 @@
[Web Animations: property <rotate> from [1 -2.5 3.64 100deg\] to [1 -2.5 3.64 -100deg\] at (-1) should be [0.22 -0.55 0.8 300deg\]]
expected: FAIL
- [CSS Animations: property <rotate> from [none\] to [none\] at (0) should be [none\]]
- expected: FAIL
-
- [CSS Animations: property <rotate> from [none\] to [none\] at (2) should be [none\]]
- expected: FAIL
-
[Web Animations: property <rotate> from neutral to [30deg\] at (1) should be [30deg\]]
expected: FAIL
@@ -146,12 +140,6 @@
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0) should be [100deg\]]
expected: FAIL
- [CSS Animations: property <rotate> from [none\] to [none\] at (0.125) should be [none\]]
- expected: FAIL
-
- [CSS Animations: property <rotate> from [none\] to [none\] at (1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <rotate> from [none\] to [7 -8 9 400grad\] at (-1) should be [0.5 -0.57 0.65 -400grad\]]
expected: FAIL
@@ -242,9 +230,6 @@
[Web Animations: property <rotate> from [1 0 0 0deg\] to [0 1 0 10deg\] at (0) should be [0 1 0 0deg\]]
expected: FAIL
- [CSS Animations: property <rotate> from [none\] to [none\] at (0.875) should be [none\]]
- expected: FAIL
-
[Web Animations: property <rotate> from [unset\] to [30deg\] at (2) should be [60deg\]]
expected: FAIL
@@ -353,9 +338,6 @@
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (0.875) should be [170deg\]]
expected: FAIL
- [CSS Animations: property <rotate> from [none\] to [none\] at (-1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <rotate> from [100deg\] to [180deg\] at (1) should be [180deg\]]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
index da388d7db86..4bb2092b5fb 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/scale-interpolation.html.ini
@@ -119,9 +119,6 @@
[CSS Animations: property <scale> from [inherit\] to [2 0.5 1\] at (-1) should be [-1 1.5 3\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (0.875) should be [none\]]
- expected: FAIL
-
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (2) should be [3.5 0 0\]]
expected: FAIL
@@ -149,9 +146,6 @@
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.875) should be [5 3 2\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (-1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <scale> from [none\] to [4 3 2\] at (1) should be [4 3 2\]]
expected: FAIL
@@ -167,9 +161,6 @@
[Web Animations: property <scale> from [2 0.5 1\] to [inherit\] at (2) should be [-1 1.5 3\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (0.125) should be [none\]]
- expected: FAIL
-
[Web Animations: property <scale> from [1\] to [10 -5 0\] at (1) should be [10 -5 0\]]
expected: FAIL
@@ -179,9 +170,6 @@
[Web Animations: property <scale> from [2 30 400\] to [10 110 1200\] at (-1) should be [-6 -50 -400\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0.125) should be [23 15 8\]]
expected: FAIL
@@ -194,9 +182,6 @@
[Web Animations: property <scale> from [inherit\] to [2 0.5 1\] at (0) should be [0.5 1 2\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (0) should be [none\]]
- expected: FAIL
-
[Web Animations: property <scale> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
@@ -218,9 +203,6 @@
[Web Animations: property <scale> from [26 17 9\] to [2 1\] at (0) should be [26 17 9\]]
expected: FAIL
- [CSS Animations: property <scale> from [2 0.5 1\] to [inherit\] at (0) should be [2 0.5\]]
- expected: FAIL
-
[Web Animations: property <scale> from [-10 5\] to [10 -5\] at (0.75) should be [5 -2.5\]]
expected: FAIL
@@ -341,9 +323,6 @@
[Web Animations: property <scale> from [inherit\] to [initial\] at (-1) should be [0 1 3\]]
expected: FAIL
- [CSS Animations: property <scale> from [none\] to [none\] at (2) should be [none\]]
- expected: FAIL
-
[CSS Animations: property <scale> from [initial\] to [inherit\] at (0) should be [1\]]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
index dd69074e4e9..60c0940f68c 100644
--- a/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-transforms/animation/translate-interpolation.html.ini
@@ -218,9 +218,6 @@
[Web Animations: property <translate> from [-100px -50px 100px\] to [0px\] at (-1) should be [-200px -100px 200px\]]
expected: FAIL
- [CSS Animations: property <translate> from [200px 100px 200px\] to [inherit\] at (0) should be [200px 100px 200px\]]
- expected: FAIL
-
[Web Animations: property <translate> from [inherit\] to [200px 100px 200px\] at (1) should be [200px 100px 200px\]]
expected: FAIL
@@ -236,24 +233,15 @@
[Web Animations: property <translate> from neutral to [20px\] at (0.25) should be [12.5px\]]
expected: FAIL
- [CSS Animations: property <translate> from [none\] to [none\] at (0.125) should be [none\]]
- expected: FAIL
-
[Web Animations: property <translate> from [200px 100px 200px\] to [inherit\] at (0) should be [200px 100px 200px\]]
expected: FAIL
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (0) should be [220px 240px 260px\]]
expected: FAIL
- [CSS Animations: property <translate> from [none\] to [none\] at (0.875) should be [none\]]
- expected: FAIL
-
[Web Animations: property <translate> from neutral to [20px\] at (1) should be [20px\]]
expected: FAIL
- [CSS Animations: property <translate> from [none\] to [none\] at (-1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <translate> from [200px 100px 400px\] to [initial\] at (0.75) should be [50px 25px 100px\]]
expected: FAIL
@@ -440,18 +428,9 @@
[Web Animations: property <translate> from [220px 240px 260px\] to [300px 400px 500px\] at (1) should be [300px 400px 500px\]]
expected: FAIL
- [CSS Animations: property <translate> from [none\] to [none\] at (0) should be [none\]]
- expected: FAIL
-
- [CSS Animations: property <translate> from [none\] to [none\] at (2) should be [none\]]
- expected: FAIL
-
[Web Animations: property <translate> from neutral to [20px\] at (0.75) should be [17.5px\]]
expected: FAIL
- [CSS Animations: property <translate> from [none\] to [none\] at (1) should be [none\]]
- expected: FAIL
-
[Web Animations: property <translate> from [initial\] to [inherit\] at (-1) should be [-100px -200px -300px\]]
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
index 570d7ee9b59..2de0aa2b8a7 100644
--- a/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
+++ b/tests/wpt/metadata/css/css-ui/animation/outline-width-interpolation.html.ini
@@ -149,12 +149,6 @@
[CSS Animations: property <outline-width> from [0px\] to [10px\] at (1.5) should be [15px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [initial\] to [20px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
- [CSS Animations: property <outline-width> from [thick\] to [15px\] at (-2) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <outline-width> from [thick\] to [15px\] at (0) should be [5px\]]
expected: FAIL
@@ -191,9 +185,6 @@
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0.6) should be [13px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [unset\] to [20px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
expected: FAIL
@@ -206,9 +197,6 @@
[Web Animations: property <outline-width> from [inherit\] to [20px\] at (0) should be [30px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [0px\] to [10px\] at (0) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <outline-width> from neutral to [20px\] at (0.6) should be [16px\]]
expected: FAIL
@@ -242,9 +230,6 @@
[CSS Transitions with transition: all: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [0px\] to [10px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[CSS Animations: property <outline-width> from [initial\] to [20px\] at (0) should be [3px\]]
expected: FAIL
@@ -254,12 +239,6 @@
[CSS Transitions: property <outline-width> from [unset\] to [20px\] at (1.5) should be [28px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [unset\] to [23px\] at (0) should be [3px\]]
- expected: FAIL
-
- [CSS Animations: property <outline-width> from [unset\] to [23px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <outline-width> from [unset\] to [23px\] at (1.5) should be [33px\]]
expected: FAIL
@@ -284,9 +263,6 @@
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1) should be [23px\]]
expected: FAIL
- [CSS Animations: property <outline-width> from [initial\] to [23px\] at (-0.3) should be [0px\]]
- expected: FAIL
-
[Web Animations: property <outline-width> from [unset\] to [23px\] at (-0.3) should be [0px\]]
expected: FAIL
@@ -326,3 +302,9 @@
[CSS Animations: property <outline-width> from [initial\] to [23px\] at (1.5) should be [33px\]]
expected: FAIL
+ [CSS Animations: property <outline-width> from [unset\] to [23px\] at (0) should be [3px\]]
+ expected: FAIL
+
+ [CSS Animations: property <outline-width> from [0px\] to [10px\] at (1) should be [10px\]]
+ expected: FAIL
+