From 77aa3721c5221eea9acb064b8c9fd559ee2a6c14 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Tue, 26 May 2020 20:34:58 +0200 Subject: [PATCH] Add support for remaining animation and transition events Fixes #21564. --- components/atoms/static_atoms.txt | 2 + components/script/animations.rs | 97 ++++++++++- components/style/animation.rs | 102 +++++++---- .../animationevent-types.html.ini | 5 - .../Element-getAnimations.tentative.html.ini | 2 +- .../animationevent-pseudoelement.html.ini | 2 +- .../animationevent-types.html.ini | 6 - .../css/css-transitions/events-006.html.ini | 2 +- .../variable-animation-from-to.html.ini | 2 +- ...ariable-animation-over-transition.html.ini | 2 +- ...ubstitute-into-keyframe-shorthand.html.ini | 2 +- ...ubstitute-into-keyframe-transform.html.ini | 2 +- ...nimation-substitute-into-keyframe.html.ini | 2 +- ...bstitute-within-keyframe-fallback.html.ini | 2 +- ...bstitute-within-keyframe-multiple.html.ini | 2 +- ...mation-substitute-within-keyframe.html.ini | 2 +- .../variable-animation-to-only.html.ini | 2 +- ...ariable-transitions-from-no-value.html.ini | 2 +- .../variable-transitions-to-no-value.html.ini | 2 +- ...on-property-variable-before-value.html.ini | 2 +- ...fore-transition-property-variable.html.ini | 2 +- .../css/animations/animation-events.html.ini | 2 + .../css/animations/transition-events.html.ini | 3 + tests/wpt/mozilla/meta/MANIFEST.json | 16 ++ .../css/animations/animation-events.html.ini | 2 + .../css/animations/transition-events.html.ini | 3 + .../css/animations/animation-events.html | 160 ++++++++++++++++++ .../css/animations/transition-events.html | 131 ++++++++++++++ 28 files changed, 493 insertions(+), 68 deletions(-) delete mode 100644 tests/wpt/metadata-layout-2020/css/css-animations/animationevent-types.html.ini delete mode 100644 tests/wpt/metadata/css/css-animations/animationevent-types.html.ini create mode 100644 tests/wpt/mozilla/meta-layout-2020/css/animations/animation-events.html.ini create mode 100644 tests/wpt/mozilla/meta-layout-2020/css/animations/transition-events.html.ini create mode 100644 tests/wpt/mozilla/meta/css/animations/animation-events.html.ini create mode 100644 tests/wpt/mozilla/meta/css/animations/transition-events.html.ini create mode 100644 tests/wpt/mozilla/tests/css/animations/animation-events.html create mode 100644 tests/wpt/mozilla/tests/css/animations/transition-events.html diff --git a/components/atoms/static_atoms.txt b/components/atoms/static_atoms.txt index ebf4a2c27be..d4f2f38da7e 100644 --- a/components/atoms/static_atoms.txt +++ b/components/atoms/static_atoms.txt @@ -2,6 +2,7 @@ DOMContentLoaded abort activate addtrack +animationcancel animationend animationiteration animationstart @@ -132,6 +133,7 @@ track transitioncancel transitionend transitionrun +transitionstart unhandledrejection unload url diff --git a/components/script/animations.rs b/components/script/animations.rs index f9de0fc0a32..d0bfcef6f79 100644 --- a/components/script/animations.rs +++ b/components/script/animations.rs @@ -78,12 +78,15 @@ impl Animations { let mut sets = self.sets.write(); for set in sets.values_mut() { + self.start_pending_animations(set, now, pipeline_id); + // When necessary, iterate our running animations to the next iteration. for animation in set.animations.iter_mut() { if animation.iterate_if_necessary(now) { self.add_animation_event( animation, TransitionOrAnimationEventType::AnimationIteration, + now, pipeline_id, ); } @@ -97,7 +100,6 @@ impl Animations { /// Processes any new animations that were discovered after reflow. Collect messages /// that trigger events for any animations that changed state. - /// TODO(mrobinson): The specification dictates that this should happen before reflow. pub(crate) fn do_post_reflow_update(&self, window: &Window, now: f64) { let pipeline_id = window.pipeline_id(); let mut sets = self.sets.write(); @@ -140,6 +142,39 @@ impl Animations { .sum() } + /// Walk through the list of pending animations and start all of the ones that + /// have left the delay phase. + fn start_pending_animations( + &self, + set: &mut ElementAnimationSet, + now: f64, + pipeline_id: PipelineId, + ) { + for animation in set.animations.iter_mut() { + if animation.state == AnimationState::Pending && animation.started_at <= now { + animation.state = AnimationState::Running; + self.add_animation_event( + animation, + TransitionOrAnimationEventType::AnimationStart, + now, + pipeline_id, + ); + } + } + + for transition in set.transitions.iter_mut() { + if transition.state == AnimationState::Pending && transition.start_time <= now { + transition.state = AnimationState::Running; + self.add_transition_event( + transition, + TransitionOrAnimationEventType::TransitionStart, + now, + pipeline_id, + ); + } + } + } + /// Walk through the list of running animations and remove all of the ones that /// have ended. fn finish_running_animations( @@ -154,6 +189,7 @@ impl Animations { self.add_animation_event( animation, TransitionOrAnimationEventType::AnimationEnd, + now, pipeline_id, ); } @@ -192,7 +228,17 @@ impl Animations { } } - // TODO(mrobinson): We need to send animationcancel events. + for animation in &set.animations { + if animation.state == AnimationState::Canceled { + self.add_animation_event( + animation, + TransitionOrAnimationEventType::AnimationCancel, + now, + pipeline_id, + ); + } + } + set.clear_canceled_animations(); } @@ -263,14 +309,21 @@ impl Animations { now: f64, pipeline_id: PipelineId, ) { + // Calculate the `elapsed-time` property of the event and take the absolute + // value to prevent -0 values. let elapsed_time = match event_type { TransitionOrAnimationEventType::TransitionRun | + TransitionOrAnimationEventType::TransitionStart => transition + .property_animation + .duration + .min((-transition.delay).max(0.)), TransitionOrAnimationEventType::TransitionEnd => transition.property_animation.duration, TransitionOrAnimationEventType::TransitionCancel => { (now - transition.start_time).max(0.) }, _ => unreachable!(), - }; + } + .abs(); self.pending_events .borrow_mut() @@ -291,6 +344,7 @@ impl Animations { &self, animation: &Animation, event_type: TransitionOrAnimationEventType, + now: f64, pipeline_id: PipelineId, ) { let num_iterations = match animation.iteration_state { @@ -298,11 +352,25 @@ impl Animations { KeyframesIterationState::Infinite(current) => current, }; + let active_duration = match animation.iteration_state { + KeyframesIterationState::Finite(_, max) => max * animation.duration, + KeyframesIterationState::Infinite(_) => std::f64::MAX, + }; + + // Calculate the `elapsed-time` property of the event and take the absolute + // value to prevent -0 values. let elapsed_time = match event_type { + TransitionOrAnimationEventType::AnimationStart => { + (-animation.delay).max(0.).min(active_duration) + }, TransitionOrAnimationEventType::AnimationIteration | TransitionOrAnimationEventType::AnimationEnd => num_iterations * animation.duration, + TransitionOrAnimationEventType::AnimationCancel => { + (num_iterations * animation.duration) + (now - animation.started_at).max(0.) + }, _ => unreachable!(), - }; + } + .abs(); self.pending_events .borrow_mut() @@ -333,10 +401,13 @@ impl Animations { let event_atom = match event.event_type { TransitionOrAnimationEventType::AnimationEnd => atom!("animationend"), + TransitionOrAnimationEventType::AnimationStart => atom!("animationstart"), + TransitionOrAnimationEventType::AnimationCancel => atom!("animationcancel"), TransitionOrAnimationEventType::AnimationIteration => atom!("animationiteration"), TransitionOrAnimationEventType::TransitionCancel => atom!("transitioncancel"), TransitionOrAnimationEventType::TransitionEnd => atom!("transitionend"), TransitionOrAnimationEventType::TransitionRun => atom!("transitionrun"), + TransitionOrAnimationEventType::TransitionStart => atom!("transitionstart"), }; let parent = EventInit { bubbles: true, @@ -381,25 +452,39 @@ pub enum TransitionOrAnimationEventType { /// "The transitionrun event occurs when a transition is created (i.e., when it /// is added to the set of running transitions)." TransitionRun, + /// "The transitionstart event occurs when a transition’s delay phase ends." + TransitionStart, /// "The transitionend event occurs at the completion of the transition. In the /// case where a transition is removed before completion, such as if the /// transition-property is removed, then the event will not fire." TransitionEnd, /// "The transitioncancel event occurs when a transition is canceled." TransitionCancel, + /// "The animationstart event occurs at the start of the animation. If there is + /// an animation-delay then this event will fire once the delay period has expired." + AnimationStart, /// "The animationiteration event occurs at the end of each iteration of an /// animation, except when an animationend event would fire at the same time." AnimationIteration, /// "The animationend event occurs when the animation finishes" AnimationEnd, + /// "The animationcancel event occurs when the animation stops running in a way + /// that does not fire an animationend event..." + AnimationCancel, } impl TransitionOrAnimationEventType { /// Whether or not this event is a transition-related event. pub fn is_transition_event(&self) -> bool { match *self { - Self::TransitionRun | Self::TransitionEnd | Self::TransitionCancel => true, - Self::AnimationEnd | Self::AnimationIteration => false, + Self::TransitionRun | + Self::TransitionEnd | + Self::TransitionCancel | + Self::TransitionStart => true, + Self::AnimationEnd | + Self::AnimationIteration | + Self::AnimationStart | + Self::AnimationCancel => false, } } } diff --git a/components/style/animation.rs b/components/style/animation.rs index 2330f41f448..152692a0b28 100644 --- a/components/style/animation.rs +++ b/components/style/animation.rs @@ -139,17 +139,27 @@ impl PropertyAnimation { /// This structure represents the state of an animation. #[derive(Clone, Debug, MallocSizeOf, PartialEq)] pub enum AnimationState { + /// The animation has been created, but is not running yet. This state + /// is also used when an animation is still in the first delay phase. + Pending, + /// This animation is currently running. + Running, /// This animation is paused. The inner field is the percentage of progress /// when it was paused, from 0 to 1. Paused(f64), - /// This animation is currently running. - Running, /// This animation has finished. Finished, /// This animation has been canceled. Canceled, } +impl AnimationState { + /// Whether or not this state requires its owning animation to be ticked. + fn needs_to_be_ticked(&self) -> bool { + *self == AnimationState::Running || *self == AnimationState::Pending + } +} + /// This structure represents a keyframes animation current iteration state. /// /// If the iteration count is infinite, there's no other state, otherwise we @@ -174,7 +184,8 @@ pub struct Animation { /// The internal animation from the style system. pub keyframes_animation: KeyframesAnimation, - /// The time this animation started at. + /// The time this animation started at, which is the current value of the animation + /// timeline when this animation was created plus any animation delay. pub started_at: f64, /// The duration of this animation. @@ -273,9 +284,11 @@ impl Animation { /// canceled due to changes in the style. pub fn has_ended(&self, time: f64) -> bool { match self.state { - AnimationState::Canceled | AnimationState::Paused(_) => return false, - AnimationState::Finished => return true, AnimationState::Running => {}, + AnimationState::Finished => return true, + AnimationState::Pending | AnimationState::Canceled | AnimationState::Paused(_) => { + return false + }, } if !self.iteration_over(time) { @@ -312,24 +325,11 @@ impl Animation { let old_direction = self.current_direction; let old_state = self.state.clone(); let old_iteration_state = self.iteration_state.clone(); + *self = other.clone(); - let mut new_started_at = old_started_at; - - // If we're unpausing the animation, fake the start time so we seem to - // restore it. - // - // If the animation keeps paused, keep the old value. - // - // If we're pausing the animation, compute the progress value. - match (&mut self.state, old_state) { - (&mut Running, Paused(progress)) => new_started_at = now - (self.duration * progress), - (&mut Paused(ref mut new), Paused(old)) => *new = old, - (&mut Paused(ref mut progress), Running) => { - *progress = (now - old_started_at) / old_duration - }, - _ => {}, - } + self.started_at = old_started_at; + self.current_direction = old_direction; // Don't update the iteration count, just the iteration limit. // TODO: see how changing the limit affects rendering in other browsers. @@ -342,8 +342,37 @@ impl Animation { _ => {}, } - self.current_direction = old_direction; - self.started_at = new_started_at; + // Don't pause or restart animations that should remain finished. + // We call mem::replace because `has_ended(...)` looks at `Animation::state`. + let new_state = std::mem::replace(&mut self.state, Running); + if old_state == Finished && self.has_ended(now) { + self.state = Finished; + } else { + self.state = new_state; + } + + // If we're unpausing the animation, fake the start time so we seem to + // restore it. + // + // If the animation keeps paused, keep the old value. + // + // If we're pausing the animation, compute the progress value. + match (&mut self.state, &old_state) { + (&mut Pending, &Paused(progress)) => { + self.started_at = now - (self.duration * progress); + }, + (&mut Paused(ref mut new), &Paused(old)) => *new = old, + (&mut Paused(ref mut progress), &Running) => { + *progress = (now - old_started_at) / old_duration + }, + _ => {}, + } + + // Try to detect when we should skip straight to the running phase to + // avoid sending multiple animationstart events. + if self.state == Pending && self.started_at <= now && old_state != Pending { + self.state = Running; + } } /// Update the given style to reflect the values specified by this `Animation` @@ -360,7 +389,7 @@ impl Animation { let started_at = self.started_at; let now = match self.state { - AnimationState::Running | AnimationState::Finished => { + AnimationState::Running | AnimationState::Pending | AnimationState::Finished => { context.current_time_for_animations }, AnimationState::Paused(progress) => started_at + duration * progress, @@ -551,9 +580,12 @@ pub struct Transition { pub node: OpaqueNode, /// The start time of this transition, which is the current value of the animation - /// timeline when this transition created. + /// timeline when this transition was created plus any animation delay. pub start_time: f64, + /// The delay used for this transition. + pub delay: f64, + /// The internal style `PropertyAnimation` for this transition. pub property_animation: PropertyAnimation, @@ -724,26 +756,25 @@ impl ElementAnimationSet { } /// Whether or not this state needs animation ticks for its transitions - /// or animations. New animations don't need ticks until they are no - /// longer marked as new. + /// or animations. pub fn needs_animation_ticks(&self) -> bool { self.animations .iter() - .any(|animation| animation.state == AnimationState::Running && !animation.is_new) || - self.transitions.iter().any(|transition| { - transition.state == AnimationState::Running && !transition.is_new - }) + .any(|animation| animation.state.needs_to_be_ticked()) || + self.transitions + .iter() + .any(|transition| transition.state.needs_to_be_ticked()) } /// The number of running animations and transitions for this `ElementAnimationSet`. pub fn running_animation_and_transition_count(&self) -> usize { self.animations .iter() - .filter(|animation| animation.state == AnimationState::Running) + .filter(|animation| animation.state.needs_to_be_ticked()) .count() + self.transitions .iter() - .filter(|transition| transition.state == AnimationState::Running) + .filter(|transition| transition.state.needs_to_be_ticked()) .count() } @@ -870,8 +901,9 @@ impl ElementAnimationSet { let mut new_transition = Transition { node: opaque_node, start_time: now + delay, + delay, property_animation, - state: AnimationState::Running, + state: AnimationState::Pending, is_new: true, reversing_adjusted_start_value, reversing_shortening_factor: 1.0, @@ -1040,7 +1072,7 @@ pub fn maybe_start_animations( let state = match box_style.animation_play_state_mod(i) { AnimationPlayState::Paused => AnimationState::Paused(0.), - AnimationPlayState::Running => AnimationState::Running, + AnimationPlayState::Running => AnimationState::Pending, }; let new_animation = Animation { diff --git a/tests/wpt/metadata-layout-2020/css/css-animations/animationevent-types.html.ini b/tests/wpt/metadata-layout-2020/css/css-animations/animationevent-types.html.ini deleted file mode 100644 index 256ea2378e5..00000000000 --- a/tests/wpt/metadata-layout-2020/css/css-animations/animationevent-types.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[animationevent-types.html] - expected: TIMEOUT - [animationstart event is instanceof AnimationEvent] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/css/css-animations/Element-getAnimations.tentative.html.ini b/tests/wpt/metadata/css/css-animations/Element-getAnimations.tentative.html.ini index 854c8c6e480..5913cd5b936 100644 --- a/tests/wpt/metadata/css/css-animations/Element-getAnimations.tentative.html.ini +++ b/tests/wpt/metadata/css/css-animations/Element-getAnimations.tentative.html.ini @@ -1,5 +1,5 @@ [Element-getAnimations.tentative.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26626 [getAnimations for CSS Animations with animation-name: none] expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/animationevent-pseudoelement.html.ini b/tests/wpt/metadata/css/css-animations/animationevent-pseudoelement.html.ini index 69cb0d12c27..c7f08fec5f7 100644 --- a/tests/wpt/metadata/css/css-animations/animationevent-pseudoelement.html.ini +++ b/tests/wpt/metadata/css/css-animations/animationevent-pseudoelement.html.ini @@ -1,5 +1,5 @@ [animationevent-pseudoelement.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/10316 expected: TIMEOUT [AnimationEvent should have the correct pseudoElement memeber] expected: TIMEOUT diff --git a/tests/wpt/metadata/css/css-animations/animationevent-types.html.ini b/tests/wpt/metadata/css/css-animations/animationevent-types.html.ini deleted file mode 100644 index 944fcee5779..00000000000 --- a/tests/wpt/metadata/css/css-animations/animationevent-types.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[animationevent-types.html] - bug: https://github.com/servo/servo/issues/21564 - expected: TIMEOUT - [animationstart event is instanceof AnimationEvent] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/css/css-transitions/events-006.html.ini b/tests/wpt/metadata/css/css-transitions/events-006.html.ini index a884e8df574..edacd476df2 100644 --- a/tests/wpt/metadata/css/css-transitions/events-006.html.ini +++ b/tests/wpt/metadata/css/css-transitions/events-006.html.ini @@ -1,5 +1,5 @@ [events-006.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/10316 expected: TIMEOUT [transition padding-left on ::after] expected: NOTRUN diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-from-to.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-from-to.html.ini index 79ed388547d..ac3f2998e7f 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-from-to.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-from-to.html.ini @@ -1,5 +1,5 @@ [variable-animation-from-to.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value before animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-over-transition.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-over-transition.html.ini index c6edf5d258b..6544dd3874e 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-over-transition.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-over-transition.html.ini @@ -1,5 +1,5 @@ [variable-animation-over-transition.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value before animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-shorthand.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-shorthand.html.ini index e61911d3325..bed87a13159 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-shorthand.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-shorthand.html.ini @@ -1,2 +1,2 @@ [variable-animation-substitute-into-keyframe-shorthand.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-transform.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-transform.html.ini index 77ff1af8a7d..4722727d208 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-transform.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe-transform.html.ini @@ -1,5 +1,5 @@ [variable-animation-substitute-into-keyframe-transform.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 [Verify transform before animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe.html.ini index ccac15c6181..99e8565a805 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-into-keyframe.html.ini @@ -1,2 +1,2 @@ [variable-animation-substitute-into-keyframe.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-fallback.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-fallback.html.ini index 8fe87ce4aa4..3290f166029 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-fallback.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-fallback.html.ini @@ -1,5 +1,5 @@ [variable-animation-substitute-within-keyframe-fallback.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 [Verify color after animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-multiple.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-multiple.html.ini index 7046292ccd7..ca4fe4dfc75 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-multiple.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe-multiple.html.ini @@ -1,5 +1,5 @@ [variable-animation-substitute-within-keyframe-multiple.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 [Verify color after animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe.html.ini index 705cf7ed37a..d347620f3dc 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-substitute-within-keyframe.html.ini @@ -1,5 +1,5 @@ [variable-animation-substitute-within-keyframe.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 [Verify color after animation] expected: FAIL diff --git a/tests/wpt/metadata/css/css-variables/variable-animation-to-only.html.ini b/tests/wpt/metadata/css/css-variables/variable-animation-to-only.html.ini index 5e862e864ff..976008b1d68 100644 --- a/tests/wpt/metadata/css/css-variables/variable-animation-to-only.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-animation-to-only.html.ini @@ -1,5 +1,5 @@ [variable-animation-to-only.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value after animation] expected: TIMEOUT diff --git a/tests/wpt/metadata/css/css-variables/variable-transitions-from-no-value.html.ini b/tests/wpt/metadata/css/css-variables/variable-transitions-from-no-value.html.ini index 1d039975c27..b29d8db3da1 100644 --- a/tests/wpt/metadata/css/css-variables/variable-transitions-from-no-value.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-transitions-from-no-value.html.ini @@ -1,5 +1,5 @@ [variable-transitions-from-no-value.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value after transition] expected: NOTRUN diff --git a/tests/wpt/metadata/css/css-variables/variable-transitions-to-no-value.html.ini b/tests/wpt/metadata/css/css-variables/variable-transitions-to-no-value.html.ini index b36005d4be8..a7604084561 100644 --- a/tests/wpt/metadata/css/css-variables/variable-transitions-to-no-value.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-transitions-to-no-value.html.ini @@ -1,5 +1,5 @@ [variable-transitions-to-no-value.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value after transition] expected: NOTRUN diff --git a/tests/wpt/metadata/css/css-variables/variable-transitions-transition-property-variable-before-value.html.ini b/tests/wpt/metadata/css/css-variables/variable-transitions-transition-property-variable-before-value.html.ini index 53ad4c18ded..cb48c956d7d 100644 --- a/tests/wpt/metadata/css/css-variables/variable-transitions-transition-property-variable-before-value.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-transitions-transition-property-variable-before-value.html.ini @@ -1,5 +1,5 @@ [variable-transitions-transition-property-variable-before-value.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value after transition] expected: NOTRUN diff --git a/tests/wpt/metadata/css/css-variables/variable-transitions-value-before-transition-property-variable.html.ini b/tests/wpt/metadata/css/css-variables/variable-transitions-value-before-transition-property-variable.html.ini index d9b360988cd..81ca758a599 100644 --- a/tests/wpt/metadata/css/css-variables/variable-transitions-value-before-transition-property-variable.html.ini +++ b/tests/wpt/metadata/css/css-variables/variable-transitions-value-before-transition-property-variable.html.ini @@ -1,5 +1,5 @@ [variable-transitions-value-before-transition-property-variable.html] - bug: https://github.com/servo/servo/issues/21564 + bug: https://github.com/servo/servo/issues/26625 expected: TIMEOUT [Verify CSS variable value after transition] expected: NOTRUN diff --git a/tests/wpt/mozilla/meta-layout-2020/css/animations/animation-events.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/animations/animation-events.html.ini new file mode 100644 index 00000000000..33f08914f30 --- /dev/null +++ b/tests/wpt/mozilla/meta-layout-2020/css/animations/animation-events.html.ini @@ -0,0 +1,2 @@ +prefs: ["layout.animations.test.enabled:false", + "dom.testbinding.enabled:false"] diff --git a/tests/wpt/mozilla/meta-layout-2020/css/animations/transition-events.html.ini b/tests/wpt/mozilla/meta-layout-2020/css/animations/transition-events.html.ini new file mode 100644 index 00000000000..f53fd6a5050 --- /dev/null +++ b/tests/wpt/mozilla/meta-layout-2020/css/animations/transition-events.html.ini @@ -0,0 +1,3 @@ +prefs: ["layout.animations.test.enabled:false", + "dom.testbinding.enabled:false"] + diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 70c41cd6def..f5225f39757 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -12849,6 +12849,15 @@ }, "css": { "animations": { + "animation-events.html": [ + "0975aa64ec47ca4b4c8fc1e0a40414a51719ad67", + [ + null, + { + "timeout": "long" + } + ] + ], "animation-fill-mode.html": [ "4cfaab9fbce0adccd83f592935e63fa8ff58a1cf", [ @@ -12884,6 +12893,13 @@ {} ] ], + "transition-events.html": [ + "b561fc8353276e6bdd13a9d1b965f57733ecd19b", + [ + null, + {} + ] + ], "transition-raf.html": [ "c38404503408e04b3c75b42df18ec3a7ec0819f5", [ diff --git a/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini b/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini new file mode 100644 index 00000000000..33f08914f30 --- /dev/null +++ b/tests/wpt/mozilla/meta/css/animations/animation-events.html.ini @@ -0,0 +1,2 @@ +prefs: ["layout.animations.test.enabled:false", + "dom.testbinding.enabled:false"] diff --git a/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini b/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini new file mode 100644 index 00000000000..f53fd6a5050 --- /dev/null +++ b/tests/wpt/mozilla/meta/css/animations/transition-events.html.ini @@ -0,0 +1,3 @@ +prefs: ["layout.animations.test.enabled:false", + "dom.testbinding.enabled:false"] + diff --git a/tests/wpt/mozilla/tests/css/animations/animation-events.html b/tests/wpt/mozilla/tests/css/animations/animation-events.html new file mode 100644 index 00000000000..0975aa64ec4 --- /dev/null +++ b/tests/wpt/mozilla/tests/css/animations/animation-events.html @@ -0,0 +1,160 @@ + + +CSS animation event dispatch + + + + + +
+ diff --git a/tests/wpt/mozilla/tests/css/animations/transition-events.html b/tests/wpt/mozilla/tests/css/animations/transition-events.html new file mode 100644 index 00000000000..b561fc83532 --- /dev/null +++ b/tests/wpt/mozilla/tests/css/animations/transition-events.html @@ -0,0 +1,131 @@ + + +CSS transition event dispatch + + + +
+