tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit bc43dca150533444d4e351c19c37ef9ab23787f6
parent c7a403899fc6814b9b87f43315c8d8ac228f8c62
Author: Fredrik Söderquist <fs@opera.com>
Date:   Sat, 22 Nov 2025 21:11:44 +0000

Bug 2001416 [wpt PR 56148] - Add animation-composition to wpt/css/support/interpolation-testcommon.js, a=testonly

Automatic update from web-platform-tests
Add animation-composition to wpt/css/support/interpolation-testcommon.js

Expand coverage in test_composition() to include validation of CSS
animations via the animation-composition property. Previously we only
verified the "composition' property in keyframes for programmatic
animations.

Bug: 461845655
Change-Id: I86fc32d5be9fb27d8682528d09ab754d7bab7cfd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7170724
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Commit-Queue: Kevin Ellis <kevers@chromium.org>
Auto-Submit: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/main@{#1547941}

--

wpt-commits: 0caefc11bf668930de979cbaaccbf4854168af8e
wpt-pr: 56148

Diffstat:
Mtesting/web-platform/tests/css/support/interpolation-testcommon.js | 47++++++++++++++++++++++++++++++++++++-----------
1 file changed, 36 insertions(+), 11 deletions(-)

diff --git a/testing/web-platform/tests/css/support/interpolation-testcommon.js b/testing/web-platform/tests/css/support/interpolation-testcommon.js @@ -45,6 +45,23 @@ target.style.animationDelay = '-50s'; target.style.animationTimingFunction = createEasing(at); }, + interpolateWithComposition: function(property, from, fromComposite, to, toComposite, at, target) { + const id = cssAnimationsData.nextID++; + if (!cssAnimationsData.sharedStyle) { + cssAnimationsData.sharedStyle = createElement(document.body, 'style'); + } + cssAnimationsData.sharedStyle.textContent += '' + + '@keyframes animation' + id + ' {' + + (isNeutralKeyframe(from) + ? '' : `from {${property}:${from};animation-composition:${fromComposite}}`) + + (isNeutralKeyframe(to) + ? '' : `to {${property}:${to};animation-composition:${toComposite}}`) + + '}'; + target.style.animationName = 'animation' + id; + target.style.animationDuration = '100s'; + target.style.animationDelay = '-50s'; + target.style.animationTimingFunction = createEasing(at); + }, }; var cssTransitionsInterpolation = { @@ -170,9 +187,9 @@ return expectFlip(underlying, underlying, -Infinity); }, interpolate: function(property, from, to, at, target) { - this.interpolateComposite(property, from, 'replace', to, 'replace', at, target); + this.interpolateWithComposition(property, from, 'replace', to, 'replace', at, target); }, - interpolateComposite: function(property, from, fromComposite, to, toComposite, at, target) { + interpolateWithComposition: function(property, from, fromComposite, to, toComposite, at, target) { // This case turns into a test error later on. if (!this.isSupported()) return; @@ -395,7 +412,7 @@ }); } - function createCompositionTestTargets(compositionContainer, compositionTest) { + function createCompositionTestTargets(compositionMethod, compositionMethodContainer, compositionTest) { var options = compositionTest.options; var property = options.property; var underlying = options.underlying; @@ -415,8 +432,8 @@ }, `Composition tests must have valid setup`); } - var testText = `Compositing: property <${property}> underlying [${underlying}] from ${fromComposite} [${from}] to ${toComposite} [${to}]`; - var testContainer = createElement(compositionContainer, 'div'); + var testText = `Compositing ${compositionMethod.name}: property <${property}> underlying [${underlying}] from ${fromComposite} [${from}] to ${toComposite} [${to}]`; + var testContainer = createElement(compositionMethodContainer, 'div'); createElement(testContainer); // Setup a standard equality function if an override is not provided. @@ -436,7 +453,7 @@ var target = actualTargetContainer.target; target.style.setProperty(property, underlying); target.interpolate = function() { - webAnimationsInterpolation.interpolateComposite(property, from, fromComposite, to, toComposite, expectation.at, target); + compositionMethod.interpolateWithComposition(property, from, fromComposite, to, toComposite, expectation.at, target); }; target.measure = function() { var expectedValue = getComputedStyle(expectedTargetContainer.target).getPropertyValue(property); @@ -463,7 +480,7 @@ - function createTestTargets(interpolationMethods, interpolationTests, compositionTests, container) { + function createTestTargets(interpolationMethods, interpolationTests, compositionMethods, compositionTests, container) { var targets = []; for (var interpolationMethod of interpolationMethods) { var interpolationMethodContainer = createElement(container); @@ -474,9 +491,11 @@ } } } - var compositionContainer = createElement(container); - for (var compositionTest of compositionTests) { - [].push.apply(targets, createCompositionTestTargets(compositionContainer, compositionTest)); + for (var compositionMethod of compositionMethods) { + var compositionContainer = createElement(container); + for (var compositionTest of compositionTests) { + [].push.apply(targets, createCompositionTestTargets(compositionMethod, compositionContainer, compositionTest)); + } } return targets; } @@ -494,6 +513,10 @@ cssAnimationsInterpolation, webAnimationsInterpolation, ]; + var compositionMethods = [ + cssAnimationsInterpolation, + webAnimationsInterpolation, + ]; if (addAllowDiscreteTests) { interpolationMethods = [ cssTransitionsInterpolationAllowDiscrete, @@ -501,7 +524,9 @@ ].concat(interpolationMethods); } var container = createElement(document.body); - var targets = createTestTargets(interpolationMethods, interpolationTests, compositionTests, container); + var targets = createTestTargets(interpolationMethods, interpolationTests, + compositionMethods, compositionTests, + container); // Separate interpolation and measurement into different phases to avoid O(n^2) of the number of targets. for (var target of targets) { target.interpolate();