From 92221f0c57dbbeabd20a39253e97e1276ef490ae Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 18 Jul 2025 11:56:00 +0200 Subject: [PATCH] LibWeb: Apply all animations and transitions before invalidating style This fixes an issue where only the last KeyframeEffect applied to an element would actually have an effect on the computed properties. It was particularly noticeable when animating a shorthand property like border-width, since only one of the border edges would have its width actually animate. By deferring the invalidation until all animations have been processed, we also reduce the amount of work that gets done on pages with many animations/transitions per element. Discord is very fond of this for example. --- Libraries/LibWeb/Animations/Animation.cpp | 6 +- .../LibWeb/Animations/AnimationEffect.cpp | 78 +++++++++++++++++++ Libraries/LibWeb/Animations/AnimationEffect.h | 16 +++- .../LibWeb/Animations/KeyframeEffect.cpp | 74 ++---------------- Libraries/LibWeb/Animations/KeyframeEffect.h | 2 +- Libraries/LibWeb/DOM/AbstractElement.h | 8 ++ Libraries/LibWeb/DOM/Document.cpp | 6 +- .../background-position-interpolation.txt | 76 +++++++++--------- ...ckground-position-origin-interpolation.txt | 36 ++++----- .../animations/border-color-interpolation.txt | 24 +++--- .../animations/border-width-interpolation.txt | 24 +++--- 11 files changed, 198 insertions(+), 152 deletions(-) diff --git a/Libraries/LibWeb/Animations/Animation.cpp b/Libraries/LibWeb/Animations/Animation.cpp index 9442943fdfa..80e4da5fe99 100644 --- a/Libraries/LibWeb/Animations/Animation.cpp +++ b/Libraries/LibWeb/Animations/Animation.cpp @@ -92,8 +92,10 @@ void Animation::set_effect(GC::Ptr new_effect) m_effect = new_effect; // Once animated properties of the old effect no longer apply, we need to ensure appropriate invalidations are scheduled - if (old_effect) - old_effect->update_computed_properties(); + if (old_effect) { + AnimationUpdateContext context; + old_effect->update_computed_properties(context); + } // 7. Run the procedure to update an animation’s finished state for animation with the did seek flag set to false, // and the synchronously notify flag set to false. diff --git a/Libraries/LibWeb/Animations/AnimationEffect.cpp b/Libraries/LibWeb/Animations/AnimationEffect.cpp index f0ff3dbe934..c5cb22deffd 100644 --- a/Libraries/LibWeb/Animations/AnimationEffect.cpp +++ b/Libraries/LibWeb/Animations/AnimationEffect.cpp @@ -4,13 +4,18 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include #include #include #include +#include #include +#include +#include +#include #include namespace Web::Animations { @@ -626,4 +631,77 @@ void AnimationEffect::visit_edges(JS::Cell::Visitor& visitor) visitor.visit(m_associated_animation); } +static CSS::RequiredInvalidationAfterStyleChange compute_required_invalidation_for_animated_properties(HashMap> const& old_properties, HashMap> const& new_properties) +{ + CSS::RequiredInvalidationAfterStyleChange invalidation; + auto old_and_new_properties = MUST(Bitmap::create(to_underlying(CSS::last_property_id) + 1, 0)); + for (auto const& [property_id, _] : old_properties) + old_and_new_properties.set(to_underlying(property_id), 1); + for (auto const& [property_id, _] : new_properties) + old_and_new_properties.set(to_underlying(property_id), 1); + for (auto i = to_underlying(CSS::first_property_id); i <= to_underlying(CSS::last_property_id); ++i) { + if (!old_and_new_properties.get(i)) + continue; + auto property_id = static_cast(i); + auto const* old_value = old_properties.get(property_id).value_or({}); + auto const* new_value = new_properties.get(property_id).value_or({}); + if (!old_value && !new_value) + continue; + invalidation |= compute_property_invalidation(property_id, old_value, new_value); + } + return invalidation; +} + +AnimationUpdateContext::~AnimationUpdateContext() +{ + for (auto& it : elements) { + auto style = it.value->target_style; + if (!style) + continue; + auto& element = it.key; + GC::Ref target = element.element(); + auto invalidation = compute_required_invalidation_for_animated_properties(it.value->animated_properties_before_update, style->animated_property_values()); + + if (invalidation.is_none()) + continue; + + // Traversal of the subtree is necessary to update the animated properties inherited from the target element. + target->for_each_in_subtree_of_type([&](auto& element) { + auto element_invalidation = element.recompute_inherited_style(); + if (element_invalidation.is_none()) + return TraversalDecision::SkipChildrenAndContinue; + invalidation |= element_invalidation; + return TraversalDecision::Continue; + }); + + if (!element.pseudo_element().has_value()) { + if (target->layout_node()) + target->layout_node()->apply_style(*style); + } else { + auto pseudo_element_node = target->get_pseudo_element_node(element.pseudo_element().value()); + if (auto* node_with_style = dynamic_cast(pseudo_element_node.ptr())) { + node_with_style->apply_style(*style); + } + } + + if (invalidation.relayout && target->layout_node()) + target->layout_node()->set_needs_layout_update(DOM::SetNeedsLayoutReason::KeyframeEffect); + if (invalidation.rebuild_layout_tree) { + // We mark layout tree for rebuild starting from parent element to correctly invalidate + // "display" property change to/from "contents" value. + if (auto parent_element = target->parent_element()) { + parent_element->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect); + } else { + target->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect); + } + } + if (invalidation.repaint) { + element.document().set_needs_display(); + element.document().set_needs_to_resolve_paint_only_properties(); + } + if (invalidation.rebuild_stacking_context_tree) + element.document().invalidate_stacking_context_tree(); + } +} + } diff --git a/Libraries/LibWeb/Animations/AnimationEffect.h b/Libraries/LibWeb/Animations/AnimationEffect.h index aa4514d1862..4d78d783306 100644 --- a/Libraries/LibWeb/Animations/AnimationEffect.h +++ b/Libraries/LibWeb/Animations/AnimationEffect.h @@ -59,6 +59,20 @@ enum class AnimationDirection { Bindings::FillMode css_fill_mode_to_bindings_fill_mode(CSS::AnimationFillMode mode); Bindings::PlaybackDirection css_animation_direction_to_bindings_playback_direction(CSS::AnimationDirection direction); +// This object lives for the duration of an animation update, and is used to store per-element data about animated CSS properties. +struct AnimationUpdateContext { + struct ElementData { + using PropertyMap = HashMap>; + PropertyMap animated_properties_before_update; + GC::Ptr target_style; + }; + + ~AnimationUpdateContext(); + + // NOTE: This is lazily populated by KeyframeEffects as their respective animations are applied to an element. + HashMap> elements; +}; + // https://www.w3.org/TR/web-animations-1/#the-animationeffect-interface class AnimationEffect : public Bindings::PlatformObject { WEB_PLATFORM_OBJECT(AnimationEffect, Bindings::PlatformObject); @@ -144,7 +158,7 @@ public: virtual DOM::Element* target() const { return {}; } virtual bool is_keyframe_effect() const { return false; } - virtual void update_computed_properties() = 0; + virtual void update_computed_properties(AnimationUpdateContext&) = 0; protected: AnimationEffect(JS::Realm&); diff --git a/Libraries/LibWeb/Animations/KeyframeEffect.cpp b/Libraries/LibWeb/Animations/KeyframeEffect.cpp index a841629c162..35403d6402e 100644 --- a/Libraries/LibWeb/Animations/KeyframeEffect.cpp +++ b/Libraries/LibWeb/Animations/KeyframeEffect.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -912,28 +913,7 @@ void KeyframeEffect::visit_edges(Cell::Visitor& visitor) visitor.visit(m_keyframe_objects); } -static CSS::RequiredInvalidationAfterStyleChange compute_required_invalidation(HashMap> const& old_properties, HashMap> const& new_properties) -{ - CSS::RequiredInvalidationAfterStyleChange invalidation; - auto old_and_new_properties = MUST(Bitmap::create(to_underlying(CSS::last_property_id) + 1, 0)); - for (auto const& [property_id, _] : old_properties) - old_and_new_properties.set(to_underlying(property_id), 1); - for (auto const& [property_id, _] : new_properties) - old_and_new_properties.set(to_underlying(property_id), 1); - for (auto i = to_underlying(CSS::first_property_id); i <= to_underlying(CSS::last_property_id); ++i) { - if (!old_and_new_properties.get(i)) - continue; - auto property_id = static_cast(i); - auto const* old_value = old_properties.get(property_id).value_or({}); - auto const* new_value = new_properties.get(property_id).value_or({}); - if (!old_value && !new_value) - continue; - invalidation |= compute_property_invalidation(property_id, old_value, new_value); - } - return invalidation; -} - -void KeyframeEffect::update_computed_properties() +void KeyframeEffect::update_computed_properties(AnimationUpdateContext& context) { auto target = this->target(); if (!target || !target->is_connected()) @@ -950,53 +930,13 @@ void KeyframeEffect::update_computed_properties() if (!computed_properties) return; - auto animated_properties_before_update = computed_properties->animated_property_values(); - computed_properties->reset_animated_properties({}); - - auto& document = target->document(); - document.style_computer().collect_animation_into(*target, pseudo_element_type(), *this, *computed_properties, CSS::StyleComputer::AnimationRefresh::Yes); - - auto invalidation = compute_required_invalidation(animated_properties_before_update, computed_properties->animated_property_values()); - - if (invalidation.is_none()) - return; - - // Traversal of the subtree is necessary to update the animated properties inherited from the target element. - target->for_each_in_subtree_of_type([&](auto& element) { - auto element_invalidation = element.recompute_inherited_style(); - if (element_invalidation.is_none()) - return TraversalDecision::SkipChildrenAndContinue; - invalidation |= element_invalidation; - return TraversalDecision::Continue; + context.elements.ensure(DOM::AbstractElement { *target, pseudo_element_type() }, [computed_properties] { + auto old_animated_properties = computed_properties->animated_property_values(); + computed_properties->reset_animated_properties({}); + return make(move(old_animated_properties), computed_properties); }); - if (!pseudo_element_type().has_value()) { - if (target->layout_node()) - target->layout_node()->apply_style(*computed_properties); - } else { - auto pseudo_element_node = target->get_pseudo_element_node(pseudo_element_type().value()); - if (auto* node_with_style = dynamic_cast(pseudo_element_node.ptr())) { - node_with_style->apply_style(*computed_properties); - } - } - - if (invalidation.relayout && target->layout_node()) - target->layout_node()->set_needs_layout_update(DOM::SetNeedsLayoutReason::KeyframeEffect); - if (invalidation.rebuild_layout_tree) { - // We mark layout tree for rebuild starting from parent element to correctly invalidate - // "display" property change to/from "contents" value. - if (auto parent_element = target->parent_element()) { - parent_element->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect); - } else { - target->set_needs_layout_tree_update(true, DOM::SetNeedsLayoutTreeUpdateReason::KeyframeEffect); - } - } - if (invalidation.repaint) { - document.set_needs_display(); - document.set_needs_to_resolve_paint_only_properties(); - } - if (invalidation.rebuild_stacking_context_tree) - document.invalidate_stacking_context_tree(); + target->document().style_computer().collect_animation_into(*target, pseudo_element_type(), *this, *computed_properties, CSS::StyleComputer::AnimationRefresh::Yes); } } diff --git a/Libraries/LibWeb/Animations/KeyframeEffect.h b/Libraries/LibWeb/Animations/KeyframeEffect.h index 438852fc796..9b330cb55fa 100644 --- a/Libraries/LibWeb/Animations/KeyframeEffect.h +++ b/Libraries/LibWeb/Animations/KeyframeEffect.h @@ -105,7 +105,7 @@ public: virtual bool is_keyframe_effect() const override { return true; } - virtual void update_computed_properties() override; + virtual void update_computed_properties(AnimationUpdateContext&) override; Optional last_css_animation_play_state() const { return m_last_css_animation_play_state; } void set_last_css_animation_play_state(CSS::AnimationPlayState state) { m_last_css_animation_play_state = state; } diff --git a/Libraries/LibWeb/DOM/AbstractElement.h b/Libraries/LibWeb/DOM/AbstractElement.h index 975eab7469b..24ea4d49ab5 100644 --- a/Libraries/LibWeb/DOM/AbstractElement.h +++ b/Libraries/LibWeb/DOM/AbstractElement.h @@ -59,3 +59,11 @@ private: }; } + +template<> +struct AK::Traits : public DefaultTraits { + static unsigned hash(Web::DOM::AbstractElement const& key) + { + return pair_int_hash(ptr_hash(&key.element()), key.pseudo_element().has_value() ? to_underlying(key.pseudo_element().value()) : -1); + } +}; diff --git a/Libraries/LibWeb/DOM/Document.cpp b/Libraries/LibWeb/DOM/Document.cpp index 1d83b99c1cc..3d0532bad46 100644 --- a/Libraries/LibWeb/DOM/Document.cpp +++ b/Libraries/LibWeb/DOM/Document.cpp @@ -9,6 +9,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include #include @@ -1537,15 +1538,18 @@ void Document::update_animated_style_if_needed() if (!m_needs_animated_style_update) return; + Animations::AnimationUpdateContext context; + for (auto& timeline : m_associated_animation_timelines) { for (auto& animation : timeline->associated_animations()) { if (animation->is_idle() || animation->is_finished()) continue; if (auto effect = animation->effect()) { - effect->update_computed_properties(); + effect->update_computed_properties(context); } } } + m_needs_animated_style_update = false; } diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-interpolation.txt index 2f313cb3109..e0a5ea0f6c9 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-interpolation.txt @@ -2,22 +2,22 @@ Harness status: OK Found 196 tests -36 Pass -160 Fail -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px] -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px] -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px] -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] +72 Pass +124 Fail +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px] +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px] +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px] +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] +Pass CSS Transitions: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px] +Pass CSS Transitions with transition: all: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [90px 90px, 90px 90px, 90px 90px, 90px 90px] Fail CSS Animations: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [30px 30px, 30px 30px, 30px 30px, 30px 30px] Fail CSS Animations: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [40px 40px, 40px 40px, 40px 40px, 40px 40px] Fail CSS Animations: property from neutral to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [50px 50px, 50px 50px, 50px 50px, 50px 50px] @@ -60,20 +60,20 @@ Fail Web Animations: property from [initial] to [80px 80px Fail Web Animations: property from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)] Fail Web Animations: property from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)] Fail Web Animations: property from [initial] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px] Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px] +Pass CSS Transitions: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [70px 70px, 70px 70px, 70px 70px, 70px 70px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [75px 75px, 75px 75px, 75px 75px, 75px 75px] Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px] +Pass CSS Transitions with transition: all: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [85px 85px, 85px 85px, 85px 85px, 85px 85px] Pass CSS Animations: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [55px 55px, 55px 55px, 55px 55px, 55px 55px] Pass CSS Animations: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [60px 60px, 60px 60px, 60px 60px, 60px 60px] Pass CSS Animations: property from [inherit] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [65px 65px, 65px 65px, 65px 65px, 65px 65px] @@ -116,20 +116,20 @@ Fail Web Animations: property from [unset] to [80px 80px, Fail Web Animations: property from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px), calc(0% + 60px) calc(0% + 60px)] Fail Web Animations: property from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px), calc(0% + 80px) calc(0% + 80px)] Fail Web Animations: property from [unset] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px), calc(0% + 100px) calc(0% + 100px)] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px] Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px] +Pass CSS Transitions: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.5) should be [ 40px 40px, 40px 40px, 40px 40px, 40px 40px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.75) should be [ 60px 60px, 60px 60px, 60px 60px, 60px 60px] Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1) should be [ 80px 80px, 80px 80px, 80px 80px, 80px 80px] -Fail CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] +Pass CSS Transitions with transition: all: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (1.25) should be [100px 100px, 100px 100px, 100px 100px, 100px 100px] Pass CSS Animations: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (-0.25) should be [-20px -20px, -20px -20px, -20px -20px, -20px -20px] Pass CSS Animations: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0) should be [ 0px 0px, 0px 0px, 0px 0px, 0px 0px] Pass CSS Animations: property from [0px 0px, 0px 0px, 0px 0px, 0px 0px] to [80px 80px, 80px 80px, 80px 80px, 80px 80px] at (0.25) should be [ 20px 20px, 20px 20px, 20px 20px, 20px 20px] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-origin-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-origin-interpolation.txt index 75c8707cad0..97f2c7e4dcb 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-origin-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/background-position-origin-interpolation.txt @@ -2,17 +2,17 @@ Harness status: OK Found 280 tests -88 Pass -192 Fail -Fail CSS Transitions: property from neutral to [left 20px top 20px] at (0) should be [10px 10px] -Fail CSS Transitions: property from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px] -Fail CSS Transitions: property from neutral to [left 20px top 20px] at (0.5) should be [15px 15px] -Fail CSS Transitions: property from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px] +104 Pass +176 Fail +Pass CSS Transitions: property from neutral to [left 20px top 20px] at (0) should be [10px 10px] +Pass CSS Transitions: property from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px] +Pass CSS Transitions: property from neutral to [left 20px top 20px] at (0.5) should be [15px 15px] +Pass CSS Transitions: property from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px] Pass CSS Transitions: property from neutral to [left 20px top 20px] at (1) should be [20px 20px] -Fail CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0) should be [10px 10px] -Fail CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px] -Fail CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.5) should be [15px 15px] -Fail CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px] +Pass CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0) should be [10px 10px] +Pass CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px] +Pass CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.5) should be [15px 15px] +Pass CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (0.75) should be [17.5px 17.5px] Pass CSS Transitions with transition: all: property from neutral to [left 20px top 20px] at (1) should be [20px 20px] Fail CSS Animations: property from neutral to [left 20px top 20px] at (0) should be [10px 10px] Fail CSS Animations: property from neutral to [left 20px top 20px] at (0.25) should be [12.5px 12.5px] @@ -44,15 +44,15 @@ Fail Web Animations: property from [initial] to [left 20px Fail Web Animations: property from [initial] to [left 20px top 20px] at (0.5) should be [calc(0% + 10px) calc(0% + 10px)] Fail Web Animations: property from [initial] to [left 20px top 20px] at (0.75) should be [calc(0% + 15px) calc(0% + 15px)] Fail Web Animations: property from [initial] to [left 20px top 20px] at (1) should be [calc(0% + 20px) calc(0% + 20px)] -Fail CSS Transitions: property from [inherit] to [left 20px top 20px] at (0) should be [80px 80px] -Fail CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px] -Fail CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px] -Fail CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px] +Pass CSS Transitions: property from [inherit] to [left 20px top 20px] at (0) should be [80px 80px] +Pass CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px] +Pass CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px] +Pass CSS Transitions: property from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px] Pass CSS Transitions: property from [inherit] to [left 20px top 20px] at (1) should be [20px 20px] -Fail CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0) should be [80px 80px] -Fail CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px] -Fail CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px] -Fail CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px] +Pass CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0) should be [80px 80px] +Pass CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px] +Pass CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.5) should be [50px 50px] +Pass CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (0.75) should be [35px 35px] Pass CSS Transitions with transition: all: property from [inherit] to [left 20px top 20px] at (1) should be [20px 20px] Pass CSS Animations: property from [inherit] to [left 20px top 20px] at (0) should be [80px 80px] Pass CSS Animations: property from [inherit] to [left 20px top 20px] at (0.25) should be [65px 65px] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-color-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-color-interpolation.txt index 5aa6b821885..a1dcf882422 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-color-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-color-interpolation.txt @@ -2,20 +2,20 @@ Harness status: OK Found 144 tests -76 Pass -68 Fail -Fail CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)] -Fail CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)] -Fail CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)] -Fail CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)] +86 Pass +58 Fail +Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)] +Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)] +Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)] +Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)] Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1) should be [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] -Fail CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)] -Fail CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)] -Fail CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)] -Fail CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)] -Fail CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)] +Pass CSS Transitions: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)] +Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)] +Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)] +Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)] +Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.6) should be [rgb(14, 24, 34) rgb(40, 50, 60) rgb(26, 36, 46) rgb(46, 56, 66)] Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1) should be [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] -Fail CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)] +Pass CSS Transitions with transition: all: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (1.5) should be [rgb(5, 15, 25) rgb(40, 50, 60) rgb(35, 45, 55) rgb(55, 65, 75)] Pass CSS Animations: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (-0.3) should be [rgb(23, 33, 43) rgb(40, 50, 60) rgb(17, 27, 37) rgb(37, 47, 57)] Pass CSS Animations: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0) should be [rgb(20, 30, 40) rgb(40, 50, 60)] Pass CSS Animations: property from [rgb(20, 30, 40) rgb(40, 50, 60)] to [rgb(10, 20, 30) rgb(40, 50, 60) rgb(30, 40, 50) rgb(50, 60, 70)] at (0.3) should be [rgb(17, 27, 37) rgb(40, 50, 60) rgb(23, 33, 43) rgb(43, 53, 63)] diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-width-interpolation.txt b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-width-interpolation.txt index 64cf206ad39..342d64c41e6 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-width-interpolation.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/css-backgrounds/animations/border-width-interpolation.txt @@ -2,20 +2,20 @@ Harness status: OK Found 256 tests -92 Pass -164 Fail -Fail CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px] -Fail CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px] -Fail CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px] -Fail CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px] +102 Pass +154 Fail +Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px] +Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px] +Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px] +Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px] Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1) should be [30px 50px 70px 90px] -Fail CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px] -Fail CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px] -Fail CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px] -Fail CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px] -Fail CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px] +Pass CSS Transitions: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px] +Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px] +Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px] +Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px] +Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.6) should be [26px 46px 66px 86px] Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1) should be [30px 50px 70px 90px] -Fail CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px] +Pass CSS Transitions with transition: all: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (1.5) should be [35px 55px 75px 95px] Pass CSS Animations: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (-0.3) should be [17px 37px 57px 77px] Pass CSS Animations: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0) should be [20px 40px 60px 80px] Pass CSS Animations: property from [20px 40px 60px 80px] to [30px 50px 70px 90px] at (0.3) should be [23px 43px 63px 83px]