Skip to content

css: Enable jump-start, jump-both, jump-end, jump-none step-position#43061

Merged
yezhizhen merged 6 commits into
servo:mainfrom
yezhizhen:fix-jump
Mar 9, 2026
Merged

css: Enable jump-start, jump-both, jump-end, jump-none step-position#43061
yezhizhen merged 6 commits into
servo:mainfrom
yezhizhen:fix-jump

Conversation

@yezhizhen

@yezhizhen yezhizhen commented Mar 6, 2026

Copy link
Copy Markdown
Member

Bumps stylo to servo/stylo#323
As tested with examples, all step-position keywords now work: https://drafts.csswg.org/css-easing-2/#typedef-step-position

Testing: New passing WPT. Several in moveBefore goes from TIMEOUT to FAIL, as the API is not enabled in Servo. Added 4 new tests to test the proper rendering.
Fixes: #43060

@yezhizhen yezhizhen requested a review from xiaochengh March 6, 2026 14:17
@servo-highfive servo-highfive added S-awaiting-review There is new code that needs to be reviewed. S-needs-rebase There are merge conflict errors. labels Mar 6, 2026
@yezhizhen yezhizhen added the T-linux-wpt Do a try run of the WPT label Mar 6, 2026
@github-actions github-actions Bot removed the T-linux-wpt Do a try run of the WPT label Mar 6, 2026
@github-actions

github-actions Bot commented Mar 6, 2026

Copy link
Copy Markdown

🔨 Triggering try run (#22767317286) for Linux (WPT)

@servo-highfive servo-highfive removed the S-needs-rebase There are merge conflict errors. label Mar 6, 2026
@github-actions

github-actions Bot commented Mar 6, 2026

Copy link
Copy Markdown

Test results for linux-wpt from try job (#22767317286):

Flaky unexpected result (26)
  • ERROR [expected OK] /_webgl/conformance/canvas/canvas-zero-size.html
  • CRASH [expected OK] /_webgl/conformance2/wasm/readpixels-2gb-in-4gb-wasm-memory.html
  • TIMEOUT [expected OK] /content-security-policy/inheritance/document-write-iframe.html (#41195)
    • TIMEOUT [expected PASS] subtest: document.open() keeps inherited CSPs on transient about:blank.

      Test timed out
      

  • FAIL [expected PASS] /css/css-backgrounds/background-size-042.html
  • CRASH [expected OK] /css/css-color/light-dark-currentcolor-in-color.html
  • OK /css/css-fonts/generic-family-keywords-002.html (#40929)
    • FAIL [expected PASS] subtest: font-family: -webkit-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-sans-serif treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-cursive treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-fantasy treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-monospace treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-system-ui treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • FAIL [expected PASS] subtest: font-family: -webkit-math treated as <font-family>, not <generic-name>

      assert_equals: expected 30 but got 50
      

    • PASS [expected FAIL] subtest: font-family: -webkit-generic(fangsong) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(kai) treated as <font-family>, not <generic-name>
    • PASS [expected FAIL] subtest: font-family: -webkit-generic(khmer-mul) treated as <font-family>, not <generic-name>
    • And 12 more unexpected results...
  • OK /css/css-fonts/variations/at-font-face-font-matching.html (#20684)
    • FAIL [expected PASS] subtest: Matching font-style: 'oblique -20deg' should prefer 'oblique -60deg -40deg' over 'oblique -10deg'

      assert_equals: Unexpected font on test element expected 487 but got 532
      

  • OK [expected ERROR] /fetch/fetch-later/quota/same-origin-iframe/sandboxed-iframe.https.window.html (#41704)
  • TIMEOUT /fetch/metadata/generated/css-images.sub.tentative.html (#29047)
    • FAIL [expected PASS] subtest: content sec-fetch-site - HTTPS downgrade-upgrade

      assert_unreached: Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/initial-empty-document/load-pageshow-events-window-open.html (#28691)
    • FAIL [expected PASS] subtest: load event does not fire on window.open('about:blank')

      assert_unreached: load should not be fired Reached unreachable code
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-cross-origin.sub.window.html (#29056)
    • PASS [expected FAIL] subtest: Cross-origin navigation started from unload handler must be ignored
  • OK /html/browsers/browsing-the-web/navigating-across-documents/navigation-unload-same-origin.window.html (#29049)
    • PASS [expected FAIL] subtest: Same-origin navigation started from unload handler must be ignored
  • OK /html/browsers/history/the-history-interface/traverse_the_history_3.html (#21383)
    • PASS [expected FAIL] subtest: Multiple history traversals, last would be aborted
  • CRASH [expected OK] /html/browsers/windows/browsing-context-names/choose-_parent-004.html
  • OK /html/browsers/windows/embedded-opener-remove-frame.html (#23867)
    • FAIL [expected PASS] subtest: opener of discarded auxiliary browsing context

      assert_object_equals: property "get" expected function "function opener() {
          [native code]
      }" got function "function opener() {
          [native code]
      }"
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-2.html (#39703)
    • FAIL [expected PASS] subtest: Meta refresh of the original iframe is not blocked if moved into a sandboxed iframe

      uncaught exception: Error: assert_unreached: The iframe into which the meta was moved must not refresh Reached unreachable code
      

  • TIMEOUT [expected OK] /html/semantics/embedded-content/the-iframe-element/iframe_sandbox_navigate_other_frame_popup.sub.html (#39702)
    • TIMEOUT [expected FAIL] subtest: Sandboxed iframe can not navigate other frame's popup

      Test timed out
      

  • OK /html/semantics/forms/form-submission-0/jsurl-form-submit.tentative.html (#36489)
    • PASS [expected FAIL] subtest: Verifies that form submissions scheduled inside javascript: urls take precedence over the javascript: url's return value.
  • OK /html/semantics/scripting-1/the-script-element/execution-timing/077.html (#22139)
    • FAIL [expected PASS] subtest: adding several types of scripts through the DOM and removing some of them confuses scheduler

      assert_array_equals: expected property 1 to be "Script #1 ran" but got "Script #3 ran" (expected array ["Script #2 ran", "Script #1 ran", "Script #3 ran", "Script #4 ran"] got ["Script #2 ran", "Script #3 ran", "Script #4 ran", "Script #1 ran"])
      

  • PASS [expected FAIL] /png/apng/fcTL-dispose-none.html (#41817)
  • OK /pointerevents/compat/pointerevent_touch_target_after_pointerdown_target_removed.tentative.html (#42813)
    • PASS [expected FAIL] subtest: After a pointerdown listener moves the target to different position, touch events should be fired on the pointerdown target, but pointer events should be fired on the pointerdown target parent
    • PASS [expected FAIL] subtest: After a pointerdown listener moves the target to different position, touchmove event should be fired on the pointerdown target parent
  • OK /resource-timing/buffer-full-add-then-clear.html (#40819)
    • FAIL [expected PASS] subtest: Test that if the buffer is cleared after entries were added to the secondary buffer, those entries make it into the primary one

      assert_equals: Number of entries does not match the expected value. expected 3 but got 0
      

  • TIMEOUT /trusted-types/trusted-types-navigation.html?06-10 (#37920)
    • PASS [expected FAIL] subtest: Navigate a frame via anchor with javascript:-urls in report-only mode.
  • TIMEOUT /trusted-types/trusted-types-navigation.html?26-30 (#38807)
    • PASS [expected TIMEOUT] subtest: Navigate a window via form-submission with javascript:-urls in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a window via form-submission with javascript:-urls w/ default policy in report-only mode.
    • PASS [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls in enforcing mode.
    • TIMEOUT [expected NOTRUN] subtest: Navigate a frame via form-submission with javascript:-urls w/ default policy in enforcing mode.

      Test timed out
      

  • OK /wasm/webapi/abort.any.worker.html (#40013)
    • FAIL [expected PASS] subtest: compileStreaming() asynchronously racing with abort should succeed or reject with AbortError

      assert_equals: expected "AbortError" but got "CompileError"
      

  • OK /webxr/xrSession_features_deviceSupport.https.html (#24357)
    • FAIL [expected PASS] subtest: Immersive XRSession requests with no supported device should reject

      assert_unreached: Should have rejected: undefined Reached unreachable code
      

Stable unexpected results that are known to be intermittent (22)
  • TIMEOUT /FileAPI/url/url-in-tags-revoke.window.html (#19978)
    • TIMEOUT [expected PASS] subtest: Fetching a blob URL immediately before revoking it works in <script> tags.

      Test timed out
      

  • FAIL [expected PASS] /_mozilla/mozilla/sslfail.html (#10760)
  • TIMEOUT [expected OK] /_mozilla/mozilla/window_resize_event.html (#36741)
    • TIMEOUT [expected PASS] subtest: Popup onresize event fires after resizeTo

      Test timed out
      

  • CRASH [expected PASS] /_mozilla/shadow-dom/move-element-with-ua-shadow-tree-crash.html (#39473)
  • CRASH [expected ERROR] /_webgl/conformance2/misc/uninitialized-test-2.html (#41656)
  • OK /content-security-policy/frame-ancestors/frame-ancestors-path-ignored.window.html (#36468)
    • FAIL [expected PASS] subtest: A 'frame-ancestors' CSP directive with a URL that includes a path should be ignored.

      assert_unreached: The IFrame should have been blocked (or cross-origin). It wasn't. Reached unreachable code
      

  • OK /css/css-cascade/layer-cssom-order-reverse.html (#36094)
    • PASS [expected FAIL] subtest: Delete layer invalidates @font-face
  • OK /css/css-fonts/generic-family-keywords-001.html (#37467)
    • FAIL [expected PASS] subtest: @font-face matching for quoted and unquoted generic(kai)

      assert_equals: quoted generic(kai) matches  @font-face rule expected 50 but got 30
      

  • OK /css/css-fonts/generic-family-keywords-003.html (#38994)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted cursive (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted fantasy (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted monospace (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted system-ui (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted math (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(fangsong) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(kai) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted generic(khmer-mul) (drawing text in a canvas)
    • PASS [expected FAIL] subtest: @font-face matching for quoted and unquoted ui-serif (drawing text in a canvas)
  • ERROR [expected OK] /fetch/fetch-later/quota/same-origin-iframe/accumulated-oversized-payload.https.window.html (#41705)
  • OK /fetch/metadata/generated/css-font-face.https.sub.tentative.html (#32732)
    • PASS [expected FAIL] subtest: sec-fetch-user
  • OK [expected TIMEOUT] /html/anonymous-iframe/indexeddb.tentative.https.window.html (#39254)
    • FAIL [expected TIMEOUT] subtest: indexeddb

      assert_equals: expected (undefined) undefined but got (string) "da6b8550-ba20-42e0-a658-78774c4d2f94"
      

  • OK /html/browsers/browsing-the-web/navigating-across-documents/005.html (#27062)
    • PASS [expected FAIL] subtest: Link with onclick navigation and href navigation
  • OK /html/browsers/browsing-the-web/navigating-across-documents/replace-before-load/a-click.html (#28697)
    • PASS [expected FAIL] subtest: aElement.click() before the load event must NOT replace
  • OK /html/browsers/history/the-history-interface/traverse_the_history_2.html (#21383)
    • FAIL [expected PASS] subtest: Multiple history traversals, last would be aborted

      assert_array_equals: Pages opened during history navigation expected property 1 to be 3 but got 2 (expected array [6, 3] got [6, 2])
      

  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/supported-elements.html (#24145)
    • FAIL [expected TIMEOUT] subtest: Host element with delegatesFocus should support autofocus

      assert_equals: expected Element node <div autofocus=""></div> but got Element node <body></body>
      

    • FAIL [expected NOTRUN] subtest: Host element with delegatesFocus including no focusable descendants should be skipped

      assert_equals: expected Element node <input autofocus=""></input> but got Element node <body></body>
      

    • FAIL [expected NOTRUN] subtest: Area element should support autofocus

      assert_equals: expected Element node <area autofocus="" href="/common/blank.html"></area> but got Element node <body>
      <img src="/media/poster.png" usemap="#map">
      <map n...
      

  • OK [expected TIMEOUT] /html/interaction/focus/the-autofocus-attribute/update-the-rendering.html (#24145)
    • FAIL [expected TIMEOUT] subtest: "Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks

      assert_array_equals: animationFrame lengths differ, expected array ["autofocus", "scroll", "animationFrame"] length 3, got ["animationFrame"] length 1
      

  • OK /html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html (#39694)
    • PASS [expected FAIL] subtest: Meta refresh is blocked by the allow-scripts sandbox flag at its creation time, not when refresh comes due
  • OK /navigation-timing/test-navigation-type-reload.html (#33334)
    • FAIL [expected PASS] subtest: Reload domInteractive > Original domInteractive

      assert_true: Reload domInteractive > Original domInteractive expected true got false
      

  • OK /resource-timing/test_resource_timing.html (#25720)
    • PASS [expected FAIL] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (img)
    • FAIL [expected PASS] subtest: PerformanceEntry has correct name, initiatorType, startTime, and duration (link)

      assert_equals: expected 16.830000000000002 but got 16.83
      

  • OK [expected TIMEOUT] /webstorage/localstorage-about-blank-3P-iframe-opens-3P-window.partitioned.html (#29053)
    • PASS [expected TIMEOUT] subtest: StorageKey: test 3P about:blank window opened from a 3P iframe
  • ERROR [expected OK] /webxr/render_state_update.https.html (#27535)
Stable unexpected results (8)
  • OK /css/css-easing/step-timing-functions-syntax.html
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(1, jump-start)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(1, jump-end)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(1, jump-both)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(2, jump-none)" should set the property value
  • OK /css/css-easing/timing-functions-syntax-computed.html
    • PASS [expected FAIL] subtest: Property animation-timing-function value 'steps(2, jump-start)'
    • PASS [expected FAIL] subtest: Property animation-timing-function value 'steps(2, jump-end)'
    • PASS [expected FAIL] subtest: Property animation-timing-function value 'steps(2, jump-both)'
    • PASS [expected FAIL] subtest: Property animation-timing-function value 'steps(2, jump-none)'
  • OK /css/css-easing/timing-functions-syntax-valid.html
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(2, jump-start)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(2, jump-end)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(2, jump-both)" should set the property value
    • PASS [expected FAIL] subtest: e.style['animation-timing-function'] = "steps(2, jump-none)" should set the property value
  • OK /css/css-transitions/parsing/transition-timing-function-computed.html
    • PASS [expected FAIL] subtest: Property transition-timing-function value 'steps(2, jump-start)'
    • PASS [expected FAIL] subtest: Property transition-timing-function value 'steps(2, jump-end)'
    • PASS [expected FAIL] subtest: Property transition-timing-function value 'steps(2, jump-both)'
    • PASS [expected FAIL] subtest: Property transition-timing-function value 'steps(2, jump-none)'
  • OK /css/css-transitions/parsing/transition-timing-function-valid.html
    • PASS [expected FAIL] subtest: e.style['transition-timing-function'] = "steps(2, jump-start)" should set the property value
    • PASS [expected FAIL] subtest: e.style['transition-timing-function'] = "steps(2, jump-end)" should set the property value
    • PASS [expected FAIL] subtest: e.style['transition-timing-function'] = "steps(2, jump-both)" should set the property value
    • PASS [expected FAIL] subtest: e.style['transition-timing-function'] = "steps(2, jump-none)" should set the property value
  • OK [expected TIMEOUT] /dom/nodes/moveBefore/continue-css-transition-left-pseudo.html
    • FAIL [expected TIMEOUT] subtest: Node.moveBefore should preserve CSS transition state on pseudo-elements (left)

      promise_test: Unhandled rejection with value: object "TypeError: document.querySelector(...).moveBefore is not a function"
      

  • OK [expected TIMEOUT] /dom/nodes/moveBefore/continue-css-transition-transform-pseudo.html
    • FAIL [expected TIMEOUT] subtest: Node.moveBefore should preserve CSS transition state on pseudo-elements (transform)

      promise_test: Unhandled rejection with value: object "TypeError: document.querySelector(...).moveBefore is not a function"
      

  • OK [expected TIMEOUT] /dom/nodes/moveBefore/continue-css-transition-transform.html
    • FAIL [expected TIMEOUT] subtest: Node.moveBefore should preserve CSS transition state (transform)

      promise_test: Unhandled rejection with value: object "TypeError: document.querySelector(...).moveBefore is not a function"
      

@github-actions

github-actions Bot commented Mar 6, 2026

Copy link
Copy Markdown

⚠️ Try run (#22767317286) failed!

@TimvdLippe

Copy link
Copy Markdown
Contributor

FYI @lukewarlow about moveBefore tests

@xiaochengh xiaochengh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just let me try to understand the situation: these keywords are already implemented in Servo, and the only thing we need to do is to enable parsing?

@yezhizhen

yezhizhen commented Mar 7, 2026

Copy link
Copy Markdown
Member Author

the only thing we need to do is to enable parsing

@xiaochengh Indeed. They were tested with examples in #43060.
The moment you discover that only some keyword are supported make you wonder how is that possible,
since these are all just animation with discrete easing functions.
We even support continuous cubic-beizer timing function, which is more complex.

before-fix.mp4
post-fix.mp4

@yezhizhen

yezhizhen commented Mar 7, 2026

Copy link
Copy Markdown
Member Author

these keywords are already implemented in Servo

@xiaochengh The animation progress calculation is done In Stylo instead of Servo: relevant stylo code

All servo did is retrieving the computed animation_declarations:

context.animations.get_animation_declarations(
&AnimationSetKey::new_for_non_pseudo(node.opaque()),
context.current_time_for_animations,

@yezhizhen yezhizhen force-pushed the fix-jump branch 2 times, most recently from 215f4c2 to 314b365 Compare March 7, 2026 05:45
@yezhizhen yezhizhen changed the title Enable jump-start, jump-both, jump-end, jump-none step-position css: Enable jump-start, jump-both, jump-end, jump-none step-position Mar 7, 2026
@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Mar 7, 2026
@yezhizhen

yezhizhen commented Mar 7, 2026

Copy link
Copy Markdown
Member Author

@Loirooriol Do you think we should add 4 ref tests? My idea is to use comibination of negative delay (necessary to distinguish between jump-none and jump-end) to test certain frame.

Right now these tests are written with Web Animations API, which we don't support... None of the passing tests involve actual animation rendering.

test(function(t) {
var target = createDiv(t);
target.style.position = 'absolute';
var anim = target.animate([ { left: '0px', easing: 'step-end' },
{ left: '100px' } ],
{ duration: 1000,
fill: 'forwards',
easing: 'cubic-bezier(0, 1.5, 1, 1.5)' });
// The bezier function produces values greater than 1 (but always less than 2)
// in (0.23368794, 1)
anim.currentTime = 0;
assert_equals(getComputedStyle(target).left, '0px');

@Loirooriol

Copy link
Copy Markdown
Contributor

Sounds good. Indeed using paused animations with a negative delay, you can check the outcome at the desired %

@yezhizhen

Copy link
Copy Markdown
Member Author

Sounds good. Indeed using paused animations with a negative delay, you can check the outcome at the desired %

Speaking of which, we have another bug: #43080, that blocks us from testing multiple % in one test.. Guess we just test one single critical then..

@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Mar 8, 2026
@yezhizhen yezhizhen requested a review from Loirooriol March 8, 2026 08:01
@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

🤖 Opened new upstream WPT pull request (web-platform-tests/wpt#58352) with upstreamable changes.

@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Mar 9, 2026
@yezhizhen yezhizhen requested a review from Loirooriol March 9, 2026 09:18
@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#58352).

@servo-highfive servo-highfive removed the S-awaiting-review There is new code that needs to be reviewed. label Mar 9, 2026
github-merge-queue Bot pushed a commit to servo/stylo that referenced this pull request Mar 9, 2026
This enables `jump-start`, `jump-end`, `jump-none`, `jump-both`.

The feature is left here 7 years ago. As tested with examples, all
`step-easing-function`s work as expected.

Servo PR: servo/servo#43061

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>>
@servo-highfive servo-highfive added the S-awaiting-review There is new code that needs to be reviewed. label Mar 9, 2026
@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#58352).

@yezhizhen

yezhizhen commented Mar 9, 2026

Copy link
Copy Markdown
Member Author

Merging after upstream task-cluster finishes.

EDIT: DCO never started..

@yezhizhen yezhizhen enabled auto-merge March 9, 2026 10:28
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
@servo-wpt-sync

Copy link
Copy Markdown
Collaborator

📝 Transplanted new upstreamable changes to existing upstream WPT pull request (web-platform-tests/wpt#58352).

@yezhizhen yezhizhen added this pull request to the merge queue Mar 9, 2026
@servo-highfive servo-highfive added the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Mar 9, 2026
Merged via the queue into servo:main with commit c1aaaaf Mar 9, 2026
30 checks passed
@yezhizhen yezhizhen deleted the fix-jump branch March 9, 2026 12:34
@servo-highfive servo-highfive removed the S-awaiting-merge The PR is in the process of compiling and running tests on the automated CI. label Mar 9, 2026
minghuaw added a commit to minghuaw/servo that referenced this pull request Mar 9, 2026
…osition (servo#43061) (linux-wpt)

{"fail_fast": false, "matrix": [{"name": "Linux (WPT)", "workflow": "linux", "wpt": true, "profile": "release", "unit_tests": false, "build_libservo": false, "bencher": false, "coverage": false, "build_args": "", "wpt_args": "", "number_of_wpt_chunks": 20}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

S-awaiting-review There is new code that needs to be reviewed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

We support start and end but not its alias jump-start, jump-end for step-easing-function

6 participants