From cf8949da83f40d75acdaba11e2e3062cafd8ce15 Mon Sep 17 00:00:00 2001 From: Delan Azabani Date: Mon, 4 Aug 2025 09:53:02 +0800 Subject: [PATCH 1/8] blog: This month in Servo (July 2025) --- _posts/2025-08-15-this-month-in-servo.md | 31 + commits.txt | 3535 ++++++++++++++++++++++ 2 files changed, 3566 insertions(+) create mode 100644 _posts/2025-08-15-this-month-in-servo.md create mode 100644 commits.txt diff --git a/_posts/2025-08-15-this-month-in-servo.md b/_posts/2025-08-15-this-month-in-servo.md new file mode 100644 index 000000000..dd3b04e09 --- /dev/null +++ b/_posts/2025-08-15-this-month-in-servo.md @@ -0,0 +1,31 @@ +--- +layout: post +tags: blog +title: "This month in Servo: and more!" +date: 2025-08-15 +summary: ao!! wrrrrao!! +categories: +--- + + + + diff --git a/commits.txt b/commits.txt new file mode 100644 index 000000000..c3f5ddaef --- /dev/null +++ b/commits.txt @@ -0,0 +1,3535 @@ +>>> 2025-07-01T06:08:31Z +https://github.com/servo/servo/pull/37801 (@dependabot[bot], @dependabot[bot], #37801) build(deps): bump ohos-vsync-sys from 0.1.2 to 0.1.4 (#37801) + # Bumps [ohos-vsync-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.2 to 0.1.4. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-vsync-sys&package-manager + # =cargo&previous-version=0.1.2&new-version=0.1.4)](https://docs.github.com/en/github/managing-security-vulnerabilities/ab + # out-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37800 (@dependabot[bot], @dependabot[bot], #37800) build(deps): bump android_logger from 0.15.0 to 0.15.1 (#37800) + # Bumps [android_logger](https://github.com/rust-mobile/android_logger-rs) from 0.15.0 to 0.15.1. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=android_logger&package-manager + # =cargo&previous-version=0.15.0&new-version=0.15.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/ + # about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37798 (@dependabot[bot], @dependabot[bot], #37798) build(deps): bump hilog-sys from 0.1.4 to 0.1.6 (#37798) + # Bumps [hilog-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.4 to 0.1.6. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hilog-sys&package-manager=carg + # o&previous-version=0.1.4&new-version=0.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-d + # ependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37795 (@dependabot[bot], @dependabot[bot], #37795) build(deps): bump ohos-window-manager-sys from 0.1.0 to 0.1.2 (#37795) + # Bumps [ohos-window-manager-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.0 to 0.1.2. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-window-manager-sys&packag + # e-manager=cargo&previous-version=0.1.0&new-version=0.1.2)](https://docs.github.com/en/github/managing-security-vulnerabi + # lities/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37797 (@dependabot[bot], @dependabot[bot], #37797) build(deps): bump hitrace-sys from 0.1.4 to 0.1.6 (#37797) + # Bumps [hitrace-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.4 to 0.1.6. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hitrace-sys&package-manager=ca + # rgo&previous-version=0.1.4&new-version=0.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37793 (@dependabot[bot], @dependabot[bot], #37793) build(deps): bump ohos-deviceinfo-sys from 0.1.3 to 0.1.5 (#37793) + # Bumps [ohos-deviceinfo-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.3 to 0.1.5. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-deviceinfo-sys&package-ma + # nager=cargo&previous-version=0.1.3&new-version=0.1.5)](https://docs.github.com/en/github/managing-security-vulnerabiliti + # es/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37791 (@dependabot[bot], @dependabot[bot], #37791) build(deps): bump xcomponent-sys from 0.3.1 to 0.3.3 (#37791) + # Bumps [xcomponent-sys](https://github.com/openharmony-rs/ohos-sys) from 0.3.1 to 0.3.3. + # Changelog + # Sourced from xcomponent-sys's changelog. + # Changelog + # v0.8.2 + # Update bindings up to API-18. + # v0.8.1 + # Update bindings to API-15 + # v0.8.0 + # Bump ohos-image-kit-sys to 0.3.0 (Result signature change, see 0.7.0 release notes.) + # v0.7.1 + # Fix API level propagation for native window, native image and native buffer. + # Add Pasteboard (ohos-pasteboard-sys) + # v0.7.0 (2025-06-06) + # Breaking + # Update the signature of functions returning Error codes with zero representing the Ok value to + # an equivalent Result<(), NonZeroErrcode> type. See the changelogs of the individual crates. + # Add + # Abilitykit (ohos-abilitykit-sys) + # Multimodal Input Kit (ohos-input-sys) + # Rawfile (ohos-rawfile-sys) + # Window Manager (ohos-window-manager-sys) + # Update + # Update bindings for OpenHarmony 5.0.2 (API-14) + # v0.6.0 (2025-01-09) + # Breaking + # napi: napi_property_descriptor, napi_node_version, napi_extended_error_info no longer derive Copy/Clone. + # xcomponent: The constant OH_NATIVE_XCOMPONENT_OBJ is now a CStr instead of raw byte string + # native_window: Duplicate bindings for native_buffer types were removed. Use the bindings from native_buffer instead. + # native_buffer: OH_NativeBuffer_MetadataType is now a wrapper around c_int instead of c_uint. + # Add + # Made vsync bindings also available as dedicated ohos-vsync-sys crate. No user facing changes. + # Updated all bindings for API-13. + # ... (truncated) + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=xcomponent-sys&package-manager + # =cargo&previous-version=0.3.1&new-version=0.3.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/ab + # out-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37790 (@dependabot[bot], @dependabot[bot], #37790) build(deps): bump ab_glyph_rasterizer from 0.1.8 to 0.1.9 (#37790) + # Bumps [ab_glyph_rasterizer](https://github.com/alexheretic/ab-glyph) from 0.1.8 to 0.1.9. + # Release notes + # Sourced from ab_glyph_rasterizer's releases. + # ab-glyph-rasterizer-0.1.9 + # Fix draw_line_scalar index oob panic scenario (2). + # Commits + # 6c0b057 Release ab_glyph 0.2.30, ab_glyph_rasterizer 0.1.9 + # e85f951 Add support for reading the italic angle (#114) + # 2d97b03 Fix draw_line_scalar index oob panic scenario (#116) + # aebec12 Update 1.88 lints + # 9fccd72 Update dev-dependencies + # 195deb2 Fix clippy::needless_lifetimes lint (#113) + # ff76a7e Fix typos (#112) + # e0c65ca Release ab_glyph 0.2.29 + # 2daf5ab Update ttf-parser to 0.25 + # 1a02ae8 Add bench lto + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ab_glyph_rasterizer&package-ma + # nager=cargo&previous-version=0.1.8&new-version=0.1.9)](https://docs.github.com/en/github/managing-security-vulnerabiliti + # es/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37789 (@dependabot[bot], @dependabot[bot], #37789) build(deps): bump ab_glyph from 0.2.29 to 0.2.30 (#37789) + # Bumps [ab_glyph](https://github.com/alexheretic/ab-glyph) from 0.2.29 to 0.2.30. + # Release notes + # Sourced from ab_glyph's releases. + # ab-glyph-0.2.30 + # Add Font::italic_angle for accessing the slant angle. + # Commits + # 6c0b057 Release ab_glyph 0.2.30, ab_glyph_rasterizer 0.1.9 + # e85f951 Add support for reading the italic angle (#114) + # 2d97b03 Fix draw_line_scalar index oob panic scenario (#116) + # aebec12 Update 1.88 lints + # 9fccd72 Update dev-dependencies + # 195deb2 Fix clippy::needless_lifetimes lint (#113) + # ff76a7e Fix typos (#112) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ab_glyph&package-manager=cargo + # &previous-version=0.2.29&new-version=0.2.30)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37788 (@dependabot[bot], @dependabot[bot], #37788) build(deps): bump ohos-abilitykit-sys from 0.1.0 to 0.1.2 (#37788) + # Bumps [ohos-abilitykit-sys](https://github.com/openharmony-rs/ohos-sys) from 0.1.0 to 0.1.2. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-abilitykit-sys&package-ma + # nager=cargo&previous-version=0.1.0&new-version=0.1.2)](https://docs.github.com/en/github/managing-security-vulnerabiliti + # es/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37783 (@yezhizhen, #37783) [WebDriver] Implement XPath Locator Strategy (#37783) + # 1. Implement XPath Locator Strategy + # 2. Use it for "Find Element(s)", "Find Element(s) from Element", "Find Element(s) from Shadow Root" + # Testing: `tests\wpt\tests\webdriver\tests\classic\find_element*\find.py` +https://github.com/servo/servo/pull/37784 (@CarePackage17, #37784) Enable LinuxSampler to be used on Android (#37784) + # This enables `background_hang_monitor` to work on Android. Relevant + # Zulip thread: [#general > Android stack walking questions @ + # 💬](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Android.20stack.20walking.20questions/near/526369 + # 883) + # Testing: Manually tested on a Pixel 6a with Android 16 with following page: + # ```html + # Infinite Loop Test + # Will it print? That is the question. + # console.log("hello. you're about to loop infinitely."); + # while (true) { + # //do nothing, just block the thread + # } + # ``` + # Fixes: #23136 +https://github.com/servo/servo/pull/37764 (@rodio, #37764) Set the placeholder canvas element of offscreenCanvas to a weak reference in transferControlToOffscreen() (#37764) + # Set the placeholder canvas element of offscreenCanvas to a weak reference in transferControlToOffscreen() + # Testing: I do not understand how to test it, suggestions appreciated + # Fixes: https://github.com/servo/servo/issues/35626 +https://github.com/servo/servo/pull/37758 (@Loirooriol, #37758) layout: Fix block SizeConstraint for replaced elements (#37758) + # #37433 didn't handle intrinsic contributions. This patch computes the correct SizeConstraint to be used as the + # ConstraintSpace's block size when computing intrinsic inline sizes. + # Testing: Adding new test + # Fixes: #37478 +https://github.com/servo/servo/pull/37756 (@Loirooriol, #37756) layout: Small refactoring for replaced elements' sizing logic (#37756) + # Add methods to retrieve the natural, default and fallback sizes per each axis (inline or block), rather than + # computing both simultaneously. Sometimes we only want one size, and I think it's clearer this way. + # Testing: Unnecessary (no behavior change) +https://github.com/servo/servo/pull/37761 (@Loirooriol, #37761) layout: Remove wrong depends_on_block_constraints logic (#37761) + # `FlexContainer::layout()` was forcing `depends_on_block_constraints` to true for `flex-direction: column`. However, + # it doesn't make sense to do that only for `column` but not for `column-reverse`. Also no test is complaining, + # so I'm just removing that logic. + # Testing: no behavior change is intended, so just existing test coverage +>>> 2025-07-02T06:09:21Z +https://github.com/servo/servo/pull/37794 (@MichaelMcDonnell, #37794) Add alt-d shortcut to select address bar text (#37794) + # I usually use the alt-d in shortcut in Firefox to select the text in the address bar. Firefox supports both alt-d + # and ctrl-l. This change adds the alt-d shortcut so you can use either. + # Testing: I tested it by running Servo and pressing alt-d. I don't know if there is a way to create a test for it? +https://github.com/servo/servo/pull/37796 (@dependabot[bot], @dependabot[bot], #37796) build(deps): bump ohos-ime-sys from 0.2.0 to 0.2.2 (#37796) + # Bumps [ohos-ime-sys](https://github.com/openharmony-rs/ohos-sys) from 0.2.0 to 0.2.2. + # Changelog + # Sourced from ohos-ime-sys's changelog. + # v0.2.2 (2024-08-18) + # Added + # Added bindings for native_vsync (behind the vsync feature flag) + # v0.2.1 + # Fixed + # ohos-drawing-sys is now an optional dependency. Usage was already guarded behind the drawing + # feature. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-ime-sys&package-manager=c + # argo&previous-version=0.2.0&new-version=0.2.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/abou + # t-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37817 (@Loirooriol, #37817) Fix testharnessreport-servo.js to stop polluting with global variables (#37817) + # For example, if a test uses `let props = ...` then this was triggering an exception because testharnessreport-servo.js + # already created a global variable named `props`. + # Testing: some wpt tests no longer result in ERROR +https://github.com/servo/servo/pull/37821 (@Loirooriol, #37821) Fix typo in test name (#37821) + # quiks -> quirks + # Testing: just renaming a test +https://github.com/servo/servo/pull/37814 (@Loirooriol, #37814) layout: Only include quirks-mode.css in actual quirks mode (#37814) + # This stylesheet was being included both in quirks mode and in limited quirks mode. It should only be the former. + # Testing: adding new test. + # Part of #37813 +https://github.com/servo/servo/pull/37815 (@mrobinson, #37815) layout: Remove `TryFrom for NonReplacedContents` (#37815) + # This implementation is quite confusing as it makes it harder to tell + # that we are just looking for the case that `Contents` contains + # `NonReplacedContents`. + # Testing: This shouldn't have any functional change, so is covered by + # existing tests. +https://github.com/servo/servo/pull/37630 (@sagudev, #37630) canvas: Do not draw arc/ellipse with small sweep (#37630) + # While raqote does already passes this test, but small line is still visible and this PR will fix this. Vello will + # not work correctly without this. + # ![slika](https://github.com/user-attachments/assets/195cd2c8-bea4-46d8-bf34-9c2d0b2e996e) + # Testing: `/html/canvas/element/path-objects/2d.path.arc.twopie.1.html` +https://github.com/servo/servo/pull/37712 (@yezhizhen, #37712) webdriver: Greatly improve execution speed for all tests using `SetWindowSize` (#37712) + # 1. Remove the unnecessary new thread which use GetWindowRect command and blocks for 500ms. Previously this is + # necessary because constellation forward "resize" to embedder, and WebDriver wait for a constant sufficient time to + # `GetWindowRect` in the new thread. This caused long delay because there are many subtests and SetWindowRect is + # called between each. + # 2. Remove `resize_timeout` + # 3. Return current dimension instead of 0 from embedder when it fails to resize. + # 4. Do resizing as long as one of width/height is `Some`, according to spec. + # Testing: All Conformance test with new passing cases. + # Fixes: https://github.com/servo/servo/pull/37663#issuecomment-2999120615 +>>> 2025-07-03T06:05:28Z +https://github.com/servo/servo/pull/37818 (@MichaelMcDonnell, #37818) Fix DBus warning when running `mach` (#37818) + # I get the following warning message I run ./mach build: + # ```console + # Could not generate notification: No module named 'dbus' + # ``` + # I asked in the Zulip chat[1] if anyone was still using the feature and + # it sounds like most people do not use it anymore. It has been broken a + # while too and no one has stepped up to fix it. + # Gnome Terminal will automatically show a notification when a long + # running command is done. Some other terminals can also be configured to + # automatically show a notification when a long running command is done. + # I think it is safe to remove the feature. + # [1] + # https://servo.zulipchat.com/#narrow/channel/263398-general/topic/DBus.20warning.20when.20running.20.60.2E.2Fmach.20build + # .60 + # Testing: I manually tested it on Linux by running ./mach bootstrap followed by ./mach build +https://github.com/servo/servo/pull/37835 (@dependabot[bot], @dependabot[bot], #37835) build(deps): bump tokio from 1.45.1 to 1.46.0 (#37835) + # Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.45.1 to 1.46.0. + # Release notes + # Sourced from tokio's releases. + # Tokio v1.46.0 + # 1.46.0 (July 2nd, 2025) + # Fixed + # net: fixed TcpStream::shutdown incorrectly returning an error on macOS (#7290) + # Added + # sync: mpsc::OwnedPermit::{same_channel, same_channel_as_sender} methods (#7389) + # macros: biased option for join! and try_join!, similar to select! (#7307) + # net: support for cygwin (#7393) + # net: support pope::OpenOptions::read_write on Android (#7426) + # net: add Clone implementation for net::unix::SocketAddr (#7422) + # Changed + # runtime: eliminate unnecessary lfence while operating on queue::Local<T> (#7340) + # task: disallow blocking in LocalSet::{poll,drop} (#7372) + # Unstable + # runtime: add TaskMeta::spawn_location tracking where a task was spawned (#7417) + # runtime: removed borrow from LocalOptions parameter to runtime::Builder::build_local (#7346) + # Documented + # io: clarify behavior of seeking when start_seek is not used (#7366) + # io: document cancellation safety of AsyncWriteExt::flush (#7364) + # net: fix docs for recv_buffer_size method (#7336) + # net: fix broken link of RawFd in TcpSocket docs (#7416) + # net: update AsRawFd doc link to current Rust stdlib location (#7429) + # readme: fix double period in reactor description (#7363) + # runtime: add doc note that on_*_task_poll is unstable (#7311) + # sync: update broadcast docs on allocation failure (#7352) + # time: add a missing panic scenario of time::advance (#7394) + # #7290: tokio-rs/tokio#7290 + # #7307: tokio-rs/tokio#7307 + # #7311: tokio-rs/tokio#7311 + # #7336: tokio-rs/tokio#7336 + # #7340: tokio-rs/tokio#7340 + # #7346: tokio-rs/tokio#7346 + # #7352: tokio-rs/tokio#7352 + # #7363: tokio-rs/tokio#7363 + # #7364: tokio-rs/tokio#7364 + # #7366: tokio-rs/tokio#7366 + # #7372: tokio-rs/tokio#7372 + # #7389: tokio-rs/tokio#7389 + # #7393: tokio-rs/tokio#7393 + # ... (truncated) + # Commits + # 3f1f268 chore: prepare Tokio v1.46.0 (#7437) + # 3e890cc rt(unstable): add spawn Location to TaskMeta (#7417) + # 69290a6 net: derive Clone for net::unix::SocketAddr (#7422) + # e2b1758 fuzz: cfg fuzz tests under cfg(test) (#7428) + # b7a75b5 net: update AsRawFd doc link to current Rust stdlib location (#7429) + # 6b705b3 net: allow pipe::OpenOptions::read_write on Android (#7426) + # 3636fd0 net: fix broken link of RawFd in TcpSocket docs (#7416) + # 2506c9f benches: revert "properly gate unix benches" (#7412) + # b3a1448 sync: improve docs of tokio_util::sync::CancellationToken (#7408) + # 013f323 docs: add a missing panic scenario of time::advance (#7394) + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio&package-manager=cargo&pr + # evious-version=1.45.1&new-version=1.46.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dep + # endabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37822 (@Loirooriol, #37822) Upgrade Stylo to 2025-07-01 (#37822) + # This continues #37444 + # Changelog: + # - No-op change because of https://github.com/servo/stylo/pull/186: + # https://github.com/servo/stylo/compare/7e2201c32c991d20faaf05a67aaee2c715361e8e..0a5440a8afa32501c27c9eca4deea9bc4f0477 + # 2d + # - Upstream: + # https://github.com/servo/stylo/compare/0a5440a8afa32501c27c9eca4deea9bc4f04772d...fe9eadf47bc771d5f7e4ab5908370400dea47 + # 568 + # - Servo fixups: + # https://github.com/servo/stylo/compare/e8dbccb2542040aa871c7824b4ab4d3c48ecd4fb...31a2c9cfa9a8fe8e980ada1a7502d07397a03 + # 873 + # Stylo tracking issue: https://github.com/servo/stylo/issues/211 +https://github.com/servo/servo/pull/37833 (@mrobinson, @Loirooriol, #37833) layout: Improve and expand category names for layout profiling (#37833) + # This improves naming of layout categories and adds tracing for each + # layout phase. + # Testing: This just adds / adjusts profiling categories, so doesn't need tests. +https://github.com/servo/servo/pull/37830 (@Narfinger, #37830) OHOS CI: Robustness of speedometer (#37830) + # OHOS CI: If speedometer does not finish we currently abort the whole job. + # This fixes this behaviour by adding an emtpy file and continuing the job. + # Runs with errors will now look like this. Notice annotation. + # https://github.com/Narfinger/servo/actions/runs/16026933009 + # Successful run: + # https://github.com/Narfinger/servo/actions/runs/16027530625 + # Signed-off-by: Narfinger + # Testing: Tested on CI. +https://github.com/servo/servo/pull/37819 (@spookyvision, @e+github@mail.taugt.net, #37819) bhm: Add backtrace demangling (#37819) + # This PR adds backtrace demangling to background hang monitor, thereby removing a `TODO` in the component source. + # The required `rustc-demangle` crate dependency is gated behind `#[cfg(feature = "sampler")]` as it is my understanding + # that the surrounding code is only called when `sampler` is enabled. + # Testing: testing was done manually - I suppose a substring match for a known demangled string could be used for + # adding a proper test case, and checking `RUSTFLAGS` to discern whether `v0` demangling should be expected? Open + # to suggestions. Manual testing was done by printf debugging (not part of the PR): + # ```diff + # diff --git a/components/background_hang_monitor/tests/hang_monitor_tests.rs + # b/components/background_hang_monitor/tests/hang_monitor_tests.rs + # index a35ef7bfd..1ebd7d001 100644 + # --- a/components/background_hang_monitor/tests/hang_monitor_tests.rs + # +++ b/components/background_hang_monitor/tests/hang_monitor_tests.rs + # @@ -61,6 +61,7 @@ fn test_hang_monitoring() { + # // Check for a permanent hang alert. + # match background_hang_monitor_receiver.recv().unwrap() { + # HangMonitorAlert::Hang(HangAlert::Permanent(component_id, _annotation, _profile)) => { + # + println!("{:?}", _profile); + # let expected = MonitoredComponentId(TEST_PIPELINE_ID, MonitoredComponentType::Script); + # assert_eq!(expected, component_id); + # }, + # ``` + # here is the output of running the test cases on my Linux (pop!_OS 2024) system with both legacy mangling (the + # default) and "v0": + # ``` + # ❯ cargo test --features background_hang_monitor/sampler --package background_hang_monitor -- --nocapture + # Compiling background_hang_monitor v0.0.1 (/tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor) + # Finished `test` profile [unoptimized + debuginfo] target(s) in 1.07s + # Running tests/hang_monitor_tests.rs (/tmp/cargo/debug/deps/hang_monitor_tests-2ef5768739c27dd6) + # running 6 tests + # Some(HangProfile backtrace: + # - as core::ops::function::FnOnce>::call_once::h2649f14f1b1c150d + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/alloc/src/boxed.rs:1993 + # - as core::ops::function::FnOnce>::call_once::hb2ade58cb34e1bc4 + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/alloc/src/boxed.rs:1993 + # - std::sys::pal::unix::thread::Thread::new::thread_start::ha07e360225fa3528 + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/sys/pal/unix/thread.rs:106 + # - core::ops::function::FnOnce::call_once{{vtable.shim}}::hfed2d99b0f690670 + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/s + # rc/ops/function.rs:250 + # - std::panicking::try::h72c6a91b66ed940c + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panicking.rs:547 + # - std::panic::catch_unwind::h977d45286c990a5c + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panic.rs:358 + # - std::thread::Builder::spawn_unchecked_::{{closure}}::h3e66aedadec0e66b + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/thread/mod.rs:562 + # - __rust_try + # - std::panicking::try::do_call::h638036fc728c36b1 + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panicking.rs:584 + # - as core::ops::function::FnOnce>::call_once::hff781dc648b37712 + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/s + # rc/panic/unwind_safe.rs:272 + # - std::thread::Builder::spawn_unchecked_::{{closure}}::{{closure}}::h676d8813fe1265ec + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/thread/mod.rs:564 + # - std::sys::backtrace::__rust_begin_short_backtrace::h3225fcf5f71669b6 + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/sys/backtrace.rs:152 + # - + # background_hang_monitor::background_hang_monitor::HangMonitorRegister::init::{{closure}}::hfdbd + # 05eb9a4d2c1f + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:61 + # - + # background_hang_monitor::background_hang_monitor::BackgroundHangMonitorWorker::run::h33cc7072a6 + # 114a19 + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:480 + # - + # background_hang_monitor::background_hang_monitor::BackgroundHangMonitorWorker::perform_a_hang_m + # onitor_checkpoint::hda50a6aa6d103807 + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:562 + # - ::suspend_and_sample_thread::h0bd3d9753717c480 + # at /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/sampler_linux.rs:172 + # - backtrace::backtrace::libunwind::trace::h4b1b880a458591ce + # at + # /home/ace/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/li + # bunwind.rs:117 + # - backtrace::backtrace::trace_unsynchronized::hfdd102bb42227ed3 + # at + # /home/ace/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/mo + # d.rs:66) + # test test_hang_monitoring ... ok + # test test_hang_monitoring_exit_signal3 ... ok + # test test_hang_monitoring_unregister ... ok + # test test_hang_monitoring_exit_signal1 ... ok + # test test_hang_monitoring_exit_signal4 ... ok + # test test_hang_monitoring_exit_signal2 ... ok + # test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.14s + # ``` + # ``` + # ❯ RUSTFLAGS="-Csymbol-mangling-version=v0" cargo test --features background_hang_monitor/sampler --package + # background_hang_monitor -- --nocapture + # Compiling background_hang_monitor v0.0.1 (/tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor) + # Finished `test` profile [unoptimized + debuginfo] target(s) in 1.64s + # Running tests/hang_monitor_tests.rs (/tmp/cargo/debug/deps/hang_monitor_tests-9a8a75f69169c1ff) + # running 6 tests + # Some(HangProfile backtrace: + # - as core::ops::function::FnOnce>::call_once::h2649f14f1b1c150d + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/alloc/src/boxed.rs:1993 + # - as core::ops::function::FnOnce>::call_once::hb2ade58cb34e1bc4 + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/alloc/src/boxed.rs:1993 + # - std::sys::pal::unix::thread::Thread::new::thread_start::ha07e360225fa3528 + # at /rustc/4d91de4e48198da2e33413efdcd9cd2cc0c46688/library/std/src/sys/pal/unix/thread.rs:106 + # - ::spawn_unchecked_::init::{closure#0}, ()>::{closure#1} as + # core[3b140760090fa97d]::ops::function::FnOnce>::call_once::{shim:vtable#0} + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/s + # rc/ops/function.rs:250 + # - std[cba35227022cdb8c]::panicking::try::::spawn_unchecked_::init::{closure#0}, + # ()>::{closure#1}::{closure#0}>> + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panicking.rs:547 + # - std[cba35227022cdb8c]::panic::catch_unwind::::spawn_unchecked_::init::{closure#0}, + # ()>::{closure#1}::{closure#0}>, ()> + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panic.rs:358 + # - ::spawn_unchecked_::::init::{closure#0}, ()>::{closure#1} + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/thread/mod.rs:562 + # - __rust_try + # - std[cba35227022cdb8c]::panicking::try::do_call::::spawn_unchecked_::init::{closure#0}, + # ()>::{closure#1}::{closure#0}>, ()> + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/panicking.rs:584 + # - ::spawn_unchecked_::init::{closure#0}, ()>::{closure#1}::{closure#0}> as + # core[3b140760090fa97d]::ops::function::FnOnce>::call_once + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/s + # rc/panic/unwind_safe.rs:272 + # - ::spawn_unchecked_::::init::{closure#0}, ()>::{closure#1}::{closure#0} + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/thread/mod.rs:564 + # - std[cba35227022cdb8c]::sys::backtrace::__rust_begin_short_backtrace::::init::{closure#0}, + # ()> + # at + # /home/ace/.rustup/toolchains/1.85.0-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/sr + # c/sys/backtrace.rs:152 + # - ::init::{closure#0} + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:61 + # - ::run + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:480 + # - ::perform_a_hang_monitor_checkpoint + # at + # /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/background_hang_monitor. + # rs:562 + # - ::suspend_and_sample_thread + # at /tmp/aec.25_06_30_20_04_42.P8A/servo/components/background_hang_monitor/sampler_linux.rs:172 + # - backtrace[ecf2c71ec589035a]::backtrace::libunwind::trace + # at + # /home/ace/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/li + # bunwind.rs:117 + # - + # backtrace[ecf2c71ec589035a]::backtrace::trace_unsynchronized::::suspend_and_sample_thread::{clo + # sure#0}> + # at + # /home/ace/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/backtrace-0.3.75/src/backtrace/mo + # d.rs:66) + # test test_hang_monitoring ... ok + # test test_hang_monitoring_exit_signal1 ... ok + # test test_hang_monitoring_exit_signal4 ... ok + # test test_hang_monitoring_exit_signal3 ... ok + # test test_hang_monitoring_exit_signal2 ... ok + # test test_hang_monitoring_unregister ... ok + # test result: ok. 6 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 3.13s + # ``` +https://github.com/servo/servo/pull/37832 (@mrobinson, #37832) layout: Stop using Rayon in single-threaded mode (#37832) + # In layout, some parts of the code were still using parallel iterators + # from Rayon even when single-thread layout was activated. This change + # modifies those parts to use non-parallel iterators when + # `LayoutContext::use_rayon` is not active. + # Testing: It's very hard to make an automated test for this, but I've manually + # verified this by building with tracing and observing that layout runs only on + # a single thread now when loading https://servo.org. +https://github.com/servo/servo/pull/37831 (@Loirooriol, #37831) script: Remove the quirk of flooring rowSpan by 1 (#37831) + # Only Firefox has this quirk, Chrome and Safari don't. So it's simpler to just remove it. + # Testing: tested by WPT +https://github.com/servo/servo/pull/37812 (@yezhizhen, #37812) webdriver: Get the window position as well as the size when resolving "Get Window Rect" (#37812) + # 1. Rename `GetWindowSize` to `GetWindowRect` + # 2. Return the WindowRect in device pixels correctly. Previously, it returns `(0, 0, ScreenWidth, ScreenHeight)` + # which is a static value. + # 3. Add `fn window_rect` to `WindowPortsMethods`. Implement it for both Headless Window and Headed Window. + # Testing: Tested manually with powershell script. Result is now dynamic and reflects the truth. + # Fixes: Task 1 & 2 of https://github.com/servo/servo/issues/37804 +https://github.com/servo/servo/pull/37820 (@Loirooriol, #37820) script: Only enforce rowSpan >= 1 in actual quirks mode (#37820) + # We were also enforcing that in limited-quirks mode, but no other browser does that. In fact, Blink and WebKit don't + # have this quirk at all, so we should consider removing it too, but for now restrict it to quirks mode like Firefox. + # Testing: adding new tests + # Part of #37813 +https://github.com/servo/servo/pull/37828 (@tharkum, #37828) htmlimageelement: Reject decode promises on the current request mutation (#37828) + # Follow the HTML specification and reject the pending image decode promises + # on any current request mutation. + # https://html.spec.whatwg.org/multipage/#updating-the-image-data (step 18) + # https://html.spec.whatwg.org/multipage/#dom-img-decode (step 3) + # Fulfill and reject image decode promises by queueing + # a global tasks on the DOM manipulation task source. + # Testing: Improvements in the following tests + # - html/semantics/embedded-content/the-img-element/decode/* +https://github.com/servo/servo/pull/37826 (@PotatoCP, #37826) webdriver: enable getting closed shadow root (#37826) + # Previously, when getting element shadow root, we are using + # [GetShadowRoot](https://dom.spec.whatwg.org/#dom-element-shadowroot). This is a getter which only allows javascript + # to access shadow root with `open` mode. + # In [webdriver spec](https://www.w3.org/TR/webdriver2/#dfn-get-element-shadow-root), particularly step 5, it seems + # that they imply for us to get the shadow root without going through the above getter. + # P.S. Other browser seems to also allows getting closed shadow root, like Chromium here: + # https://chromium-review.googlesource.com/c/chromium/src/+/5923865. + # Testing: Covered in webdriver WPT test that access closed shadow root. +https://github.com/servo/servo/pull/37759 (@sagudev, #37759) canvas: use `Transform2D` instead of `Transform3D` when possible (#37759) + # While this makes our implementation deviate slightly from the specification, this clarifies + # an invariant with the code itself. This helps to resolve some confusion as seen in + # https://github.com/servo/servo/issues/37695#issuecomment-3013823350. + # Testing: This should not change behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37736 (@simonwuelker, #37736) deps: Bump `html5ever` and friends to version `0.35.0` (#37736) + # Companion PR for https://github.com/servo/html5ever/pull/637. + # Testing: Covered by existing web platform tests +https://github.com/servo/servo/pull/37809 (@tharkum, #37809) canvas: Unify retrieving image data from the HTMLImageElement (#37809) + # Currently, HTMLImageElement uses as an image source + # (ImageBitmapSource, CanvasImageSource, TexImageSource) + # in various canvas2D/WebGL operations, and there is a small + # inconsistency in how we get the image data of the 'img' element: + # usability checking and retrieving the image data from the image cache. + # To simplify and avoid state inconsistency between the window's image + # cache and the 'img' element, let's retrieve the image data (as a raster) + # from the HTMLImageElement itself. + # Testing: No expected changes in testing results, except the + # 'drawimage_svg_image_with_foreign_object_does_not_taint.html' + # which is 'false' passed because drawing of the non supported vector image + # is silently skip instead of throwing the 'InvalidState' exception anymore. +https://github.com/servo/servo/pull/37498 (@PotatoCP, @sagudev, #37498) CI: WebDriver test on try (#37498) + # Add webdriver test on the workflow with `--product servodriver`. This will make tracking progression/regression + # in webdriver development easier. + # However, since webdriver test is still unstable, the webdriver test is only enabled on try. + # To run try: `./mach try wd`, `./mach try webdriver` + # Testing: This PR add webdriver test on try +>>> 2025-07-04T06:09:13Z +https://github.com/servo/servo/pull/37858 (@dependabot[bot], @dependabot[bot], #37858) build(deps): bump async-channel from 2.3.1 to 2.4.0 (#37858) + # Bumps [async-channel](https://github.com/smol-rs/async-channel) from 2.3.1 to 2.4.0. + # Release notes + # Sourced from async-channel's releases. + # v2.4.0 + # Add Sender::same_channel() and Receiver::same_channel(). (#98) + # Add portable-atomic feature to support platforms without atomics. (#106) + # Changelog + # Sourced from async-channel's changelog. + # Version 2.4.0 + # Add Sender::same_channel() and Receiver::same_channel(). (#98) + # Add portable-atomic feature to support platforms without atomics. (#106) + # Commits + # c250f28 Release 2.4.0 (#108) + # c950c6e Fix description of recv_blocking (#107) + # 9a96317 Support portable atomic (#106) + # 3ce7937 Fix clippy::needless_lifetimes warning + # e4132e3 ci: Use reusable workflows for fmt and security_audit + # 43459d1 ci: Use "v2.0.0" branch for audit check + # 1623170 Fix grammar in description of WeakSender and WeakReceiver + # 74b2c74 Add example usage for fn same_channel in Sender and Receiver + # 681541a Add a fn to check if two senders or two receivers use the same underlying cha... + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-channel&package-manager= + # cargo&previous-version=2.3.1&new-version=2.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/abo + # ut-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37857 (@dependabot[bot], @dependabot[bot], #37857) build(deps): bump zune-jpeg from 0.4.18 to 0.4.19 (#37857) + # Bumps [zune-jpeg](https://github.com/etemesi254/zune-image) from 0.4.18 to 0.4.19. + # Release notes + # Sourced from zune-jpeg's releases. + # v0.1.0 + # No release notes provided. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zune-jpeg&package-manager=carg + # o&previous-version=0.4.18&new-version=0.4.19)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37851 (@Loirooriol, @mrobinson, #37851) layout: Add incremental box tree construction for table column (#37851) + # This change extends incremental box tree updates to table columns. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37767 (@sagudev, @mrobinson, #37767) pixels: Ensure expected formats when accesing bytes of snapshot (#37767) + # I introduced snapshot in #36119 to pack raw bytes and metadata together, now we take the next step and require + # for user to always specify what kind of byte data they want when calling `as_bytes` or `to_vec` (basically joining + # transform and data). There are also valid usages when one might require just one property of bytes (textures can + # generally handle both RGBA and BGRA). There are also valid usages of using just raw bytes (when cropping). This + # PR tries to make such usages more obvious. + # This will make it easier to fix stuff around 2d canvas (we do not want to assume any bytes properties in abstraction). + # Testing: Code is covered by WPT tests. +https://github.com/servo/servo/pull/37839 (@MichaelMcDonnell, #37839) servoshell: Select address bar text on click (#37839) + # In Firefox, clicking on the address bar selects all the text. This makes Servo to do the same. I reworked the code + # so that the shortcut only changes the focus. That means that either clicking or the shortcut changes the focus + # which in turn selects the text. + # Testing: I tested it manually by clicking in the address bar and using the shortcuts and noticing that the text + # was selected. +https://github.com/servo/servo/pull/37369 (@Narfinger, @gterzian, #37369) Add a basic caching mechanism for ImageKeys. (#37369) + # This creates a new method in shared/compositing/lib to generate image keys that are send over the webview. This + # does not immediately return the keys but goes over the constellation to receive the keys from the IOCompositor. To + # make this more efficient, we now cache the keys in image_cache in a simple FIFO order. The old blocking method + # stays intact for now but got renamed to make the blocking clear. + # The blocking calls that are left are in: + # - `components/canvas/canvas_data.rs` + # - `components/script/dom/htmlmediaelement.rs` + # Testing: WPT tests should cover this as this doesn't change any functionality. + # Fixes: Was mentioned in https://github.com/servo/servo/issues/37161#issuecomment-2915750051 and part of + # https://github.com/servo/servo/issues/37086 +https://github.com/servo/servo/pull/37752 (@mrobinson, @Loirooriol, #37752) libservo|compositor: Have scroll offset directionality match that of WebRender and the web (#37752) + # Previously, our Servo-specific spatial tree scroll offsets were opposite to + # that of WebRender and also the web platform. This is due to the fact, + # likely, that `winit` wheel directionality is also flipped. This change + # has both the Servo spatial tree and the API take offsets that are + # consistent with the web. + # Any possible changes to the meaning of wheel directionality will be + # handled in a followup change. + # This is a breaking change to the Servo API. + # Testing: This change updates unit tests. +https://github.com/servo/servo/pull/37850 (@Loirooriol, @mrobinson, #37850) layout: Add incremental box tree construction for table cell (#37850) + # This change extends incremental box tree updates to table cells. In addition, for simplicity this refactors + # `BoxSlot::take_layout_box()` into `BoxSlot::take_layout_box_if_undamaged()`. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37176 (@yezhizhen, #37176) layout: Ensure that the last transition for a property take precedence (#37176) + # This change bumps stylo to servo/stylo#214, to fix an issue where transition + # properties defined earlier on the list of transitions were taking preference over + # those defined later. + # Testing: This fixes a couple WPT tests. + # Fixes: #37164 +https://github.com/servo/servo/pull/37849 (@mrobinson, @Loirooriol, #37849) layout: Add incremental box tree construction for table caption (#37849) + # This change extends incremental box tree updates to table captions. In + # addition, calls to `LayoutBox::invalidate_cached_fragment()` are moved + # to the damage calculation traversal. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37837 (@Loirooriol, #37837) layout: Implement `list-style-position` quirk (#37837) + # In quirks mode, the ::marker of a bare `` should be `list-style-position: inside`, + # Testing: Some WPT improvement +https://github.com/servo/servo/pull/37751 (@mrobinson, @Loirooriol, @ibluegalaxy_taoj@163.com, #37751) layout: Add a first pass at incremental box tree construction (#37751) + # This change: + # - Adds a new type of LayoutDamage that signifies that a box needs its + # children recollected, because one or more of them need to be rebuilt. + # - During restyle damage propagation, propagate this new damage upward in + # the tree. Then box tree construction should be able to preserve any + # still-valid box tree nodes from box slots. + # - During BlockLevelBox job finalization, if a box slot is valid and + # there is not LayoutDamage to the element, use the old box slot, + # ensuring that its fragment cache is invalidated. + # Testing: This should not change observable behavior and thus is covered + # by existing WPT tests. +>>> 2025-07-05T06:04:14Z +https://github.com/servo/servo/pull/37888 (@jschwe, #37888) Revert "layout: Add incremental box tree construction for inline floats and abspos" (#37888) + # This reverts commit 19ceccc8eb983bd87e3f8fca97d61c6dde87b4e7 due to a significant increase in resident memory usage + # (See https://github.com/servo/servo/issues/37887). + # Testing: This is a revert due to a regression +https://github.com/servo/servo/pull/37863 (@sagudev, #37863) canvas: Use snapshot in canvas backends (#37863) + # This removes assumption about pixel format from backend abstraction to actual backend implementation. This is + # important for vello. + # Testing: WPT tests +https://github.com/servo/servo/pull/37876 (@longvatrong111, #37876) webdriver: Properly insert the user agent into the capabilities data structure (#37876) + # Add user agent into webdriver capabilities. + # Testing: + # `/mach test-wpt -r --product servodriver ./tests/wpt/tests/webdriver/tests/classic/new_session/response.py` +https://github.com/servo/servo/pull/37864 (@Loirooriol, #37864) layout: Unify logic for laying out replaced and non-replaced in a BFC (#37864) + # The logic for laying out block-level replaced elements wasn't taking floats into account when resolving a `stretch` + # inline size. By handling them with the same logic as non-replaced elements, we fix that problem, and reduce the + # amount of code. + # Testing: Adding new tests + # Fixes: #37861 +https://github.com/servo/servo/pull/37884 (@dependabot[bot], @dependabot[bot], #37884) build(deps): bump cc from 1.2.27 to 1.2.28 (#37884) + # Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.27 to 1.2.28. + # Release notes + # Sourced from cc's releases. + # cc-v1.2.28 + # Other + # Recognize mlibc environment (#1488) + # Fix clippy warnings about not using variables in format! strings (#1489) + # Changelog + # Sourced from cc's changelog. + # 1.2.28 - 2025-07-04 + # Other + # Recognize mlibc environment (#1488) + # Fix clippy warnings about not using variables in format! strings (#1489) + # Commits + # 8f0143a chore: release v1.2.28 (#1491) + # 6f0dd80 Recognize mlibc environment (#1488) + # d3c85ef Fix clippy warnings about not using variables in format! strings (#1489) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previ + # ous-version=1.2.27&new-version=1.2.28)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depend + # abot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37584 (@sagudev, #37584) Support WPT subsuites in agregating and flake detection (#37584) + # Handle subsuites in wpt flake detection and aggregation as outlined in + # https://github.com/servo/servo/issues/37319#issuecomment-2969528022. Based on #37540. + # Testing: Manual CI run with vello_canvas subsuite: https://github.com/sagudev/servo/actions/runs/16021200215 +https://github.com/servo/servo/pull/37842 (@sagudev, #37842) canvas: Join `Path` and `PathBuilder` into `Path` (#37842) + # Dealing with both path and builder makes code complicated and this is backend internal specific anyway (we often + # do conversions between the two just so we get specific functionality). Now I joined both into single abstractions + # `Path`, that has all what one needs and let raqote backend deal with path/pathbuilder coversions. + # Motivation: Simplification and in Vello there is only [BezPath](https://docs.rs/kurbo/0.11.2/kurbo/struct.BezPath.html) + # so we use it as both path and pathbuilder. + # Reviewable per commit. + # Testing: Existing WPT tests +https://github.com/servo/servo/pull/37669 (@longvatrong111, #37669) Move webdriver actions commands to servoshell (#37669) + # Move webdriver actions commands to servoshell. + # Testing: Test with webdriver enable in the CI + # [Test result 1](https://github.com/longvatrong111/servo/actions/runs/15875355256) + # [Test result 2](https://github.com/longvatrong111/servo/actions/runs/15875356595) + # [Test result 3](https://github.com/longvatrong111/servo/actions/runs/15875361886) + # Fixes: https://github.com/servo/servo/issues/37370 +https://github.com/servo/servo/pull/37880 (@tharkum, #37880) canvas: Add OffscreenCanvas 'transferToImageBitmap' method (#37880) + # Follow the HTML speficication and add missing 'transferToImageBitmap' + # method to OffscreenCanvas interface. + # https://html.spec.whatwg.org/multipage/#dom-offscreencanvas-transfertoimagebitmap + # Testing: Improvements in the following tests + # - html/canvas/offscreen/compositing/2d.composite.grid* + # - html/canvas/offscreen/fill-and-stroke-styles/2d.gradient* + # - html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas* + # - html/canvas/offscreen/reset/2d.reset* + # - html/canvas/offscreen/text/2d.text* + # Fixes (partially): #34111 +https://github.com/servo/servo/pull/37879 (@yezhizhen, @mrobinson, #37879) embedder: Improve documentation for various places that talk about "available screen size" (#37879) + # Testing: Just add comment. It turns out difficult to achieve, see https://github.com/rust-windowing/winit/issues/2494. + # Fixes: Nothing. Provide some guidance to #37878 +https://github.com/servo/servo/pull/37856 (@yezhizhen, #37856) Rename original `window_resizeTo.html` to `window_resize_event.html` & Fix wrong usage of `innerHeight` & add new test (#37856) + # 1. rename original `window_resizeTo.html` to `window_resize_event.html` to reflect the purpose. Also change + # {innerWidth, innerHeight} to {outerWidth, outerHeight} to match spec. + # 2. Add a new test `window_resizeTo.html` for https://github.com/servo/servo/pull/37848 + # Testing: new test always fails because of https://github.com/servo/servo/issues/37824, which gives inaccurate + # outerHeight. +https://github.com/servo/servo/pull/37868 (@ibluegalaxy_taoj@163.com, #37868) layout: Add incremental box tree construction for inline floats and abspos (#37868) + # This changes extend the incremental box tree construction for inline out-of-flow-box, including the + # `InlineItem::OutOfFlowAbsolutelyPositionedBox` and `InlineItem::OutOfFlowFloatBox`. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37741 (@jerensl, #37741) Merge`ruff.toml` into `pyproject.toml` (#37741) + # add a pyproject.toml config file that includes the settings for ruff +https://github.com/servo/servo/pull/37874 (@jerensl, #37874) Remove `cargo-update`, `update-cargo`, `grep`, `ndk-stack`, and `ndk-gdb` mach commands (#37874) + # Remove some seldomly used `mach commands: + # - `ndk-stack` and `ndk-gdb`: These commands have bit rotted completely, so need to be reimplemented. Remove them + # for now to make them less confusing. + # - `cargo-update` / `update-cargo`: This command just calls `cargo` directly so isn't really necessary. + # - `grep`: There are much better grep tools now such as `rg` that make these kind of special-cases obsolete. In + # addition, we can improve the default behavior of `git grep` by using the git attributes feature. + # These commands are being removed in order to implement Python type checking the Servo repository. + # Testing: This just removes some mach command so shouldn't need tests. +https://github.com/servo/servo/pull/37866 (@ibluegalaxy_taoj@163.com, #37866) layout: Add incremental box tree construction for inline atomics (#37866) + # This changes extend the incremental box tree construction for inline atomic + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37873 (@yezhizhen, #37873) servoshell: Set `dom_testing_html_input_element_select_files_enabled` when WebDriver is enabled (#37873) + # Testing: `.\tests\wpt\tests\webdriver\tests\classic\execute_script\collections.py` can now run to the end when + # running either locally or `try`. + # Fixes: #37870 +https://github.com/servo/servo/pull/37779 (@kongbai1996, #37779) compositor|script: Update script's active_touch_points when hit tests on compositor fail (#37779) + # [RootCause]:Tochdown executes normally, but touchup fails during hittest and does not send a touchup event to + # the script, causing the script to save an incorrect number of active_touch_points. The application receives an + # incorrect event.touches.length, causing a logic error and preventing the carousel from sliding. + # [Solution]: + # When hit test on compositor fails, we also need to send the EmbedderToConstellationMessage::ForwardInputEvent message + # to constellation. In the script's handle_touch_event, if it exits early, we also need to update active_touch_points. + # Testing: + # Fixes: #37763 +https://github.com/servo/servo/pull/37854 (@ibluegalaxy_taoj@163.com, #37854) Layout: Continue support incremental box tree reconstruction for flex&taffy level box (#37854) + # Layout: Continue support incremental box tree reconstruction for flex&taffy level box + # This change reuse the flex/taffy level box from old box slot if the box slot is valid and there is no LayoutDamage + # to the element. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/37803 (@jan.varga@gmail.com, #37803) storage: Isolate sessionStorage per top-level browsing context and copy sessionStorage when creating a new auxiliary browsing context (#37803) + # This pull request introduces changes to the storage subsystem to: + # - Isolate sessionStorage per top-level browsing context (WebViewId), in + # addition to origin. + # - Copy sessionStorage when creating a new auxiliary browsing context without + # noopener, as required by the corresponding spec + # These changes bring Servo closer to spec compliance, matching expected browser + # behavior. + # Testing: This work affects observable behavior. As a result, some previously + # failing WPT tests now pass. No new tests are added, since the behavior is + # already covered by existing web-platform-tests. + # Fixes: #21291 +https://github.com/servo/servo/pull/37848 (@yezhizhen, #37848) servoshell: Make `fn request_resize` resize window w.r.t. outer_size accurately (#37848) + # `toolbar_height` is already part of `inner_size`, caused wrongly calculated `outer_size`. Even worse, it tried to + # `request_inner_size` with the already wrong `outer_size`. + # This PR make sure resize is accurate by first calculate the title/border height, and then compute the `inner_size` + # for `request_inner_size`. This is necessary because no direct `request_outer_size` is available. + # Testing: As manually tested, set window size WebDriver command no longer overshoot. This is also shared by + # [window.resizeTo](https://drafts.csswg.org/cssom-view/#dom-window-resizeto) JS method. WPT test would be + # necessary. (But that one is intermittent TIMEOUT. So created new one in https://github.com/servo/servo/pull/37856) + # WebDriver test will be postponed after https://github.com/web-platform-tests/wpt/pull/53421 is merged and synced + # to Servo. + # Fixes: Task 3 of https://github.com/servo/servo/issues/37804 +https://github.com/servo/servo/pull/37847 (@PotatoCP, #37847) Webdriver: Implement calculate the absolute position for Get Element Rect (#37847) + # Implementing [calculate the absolute position](https://w3c.github.io/webdriver/#dfn-calculate-the-absolute-position) + # and make [Get Element Rect](https://w3c.github.io/webdriver/#get-element-rect) conforms the spec . + # Testing: Covered in webdriver WPT, especially for pointer test that needs to find the element rect. +https://github.com/servo/servo/pull/37862 (@simonwuelker, #37862) Don't explicitly handle dirty roots that are shadow roots (#37862) + # Dirty roots are never shadow roots, since we use the flat tree for invalidation. The flat tree does not contain + # shadow roots. + # Reverts https://github.com/servo/servo/pull/35132. When that patch was submitted we used the DOM tree for invalidation, + # so it was possible to encounter shadow roots. + # Testing: Covered by `shadow-dom/untriaged/events/event-dispatch/test-003.html` +https://github.com/servo/servo/pull/37865 (@simonwuelker, #37865) Don't increment node revision twice when attaching shadow root to element (#37865) + # `Node::dirty` already increments the version. `Node::rev_version` traverses all ancestors, so it can end up being + # fairly expensive. + # Testing: I'm not sure about WPT coverage but I think this change is trivial enough to merge without tests. +https://github.com/servo/servo/pull/37867 (@pewsheen, #37867) refactor(webdriver): move `webdriver_port` option to servoshell pref (#37867) + # Move `webdriver_port` option from servo config options to servoshell preference. + # Testing: run `./mach run` with/without `--webdriver` option and see if the webdriver server runs on the port + # (default: 7000) + # Fixes: https://github.com/servo/servo/issues/37843 +https://github.com/servo/servo/pull/37786 (@tharkum, #37786) canvas: Add OffscreenCanvas 'convertToBlob' method (#37786) + # Follow the HTML speficication and add missing 'convertToBlob' method + # to OffscreenCanvas interface. + # https://html.spec.whatwg.org/multipage/#dom-offscreencanvas-converttoblob + # Testing: Improvements in the following tests + # - html/canvas/offscreen/manual/convert-to-blob/offscreencanvas.convert.to.blob* + # - html/canvas/offscreen/manual/wide-gamut-canvas/2d.color.space.p3.convertToBlobp3.canvas.html + # Fixes: #24272 +>>> 2025-07-06T06:03:49Z +https://github.com/servo/servo/pull/37900 (@MichaelMcDonnell, #37900) Fix unused import `TouchEventType` warning (#37900) + # I'm getting an unused import warning when I use Rust-Analyzer in VS Code. I also fixed the license text which I + # think had gotten changed by accident. + # Testing: I built and ran the example with `cargo build --example winit_minimal` in the `components/servo` + # folder. There were some unused code warnings but they don't show up in Rust-Analyzer's output and I suspect they + # are used by other code. +https://github.com/servo/servo/pull/37899 (@sagudev, #37899) script: Also update canvas contents when laying out right after / during long parsing (#37899) + # Before #37703 we were actually doing update rendering of canvases/images as part of `allow_layout_if_necessary` + # so let's keep doing that until we fix this properly as this will be much more involved and we want usable canvases + # in the mean time. + # Testing: Manual testing + WPT tests + # Fixes: #37891 +https://github.com/servo/servo/pull/37778 (@uthmaniv, #37778) Send WillNavigate earlier during navigation startup (#37778) + # The will-navigate message tells the devtools client to expect a navigation for a browsing context. This makes + # the network monitor clear any previous entries and show the requests for the new page that is loaded. In order to + # support this correctly, we need to send the navigation notification from the constellation instead of the script + # thread, otherwise we silently ignore navigations triggered by the browser URL bar. + # Testing: Ran servo in devtools mode , now the requests appear for new loaded page + # Fixes: https://github.com/servo/servo/issues/37334 +https://github.com/servo/servo/pull/37892 (@ibluegalaxy_taoj@163.com, #37892) layout: Add incremental box tree construction for inline floats and abspos (#37892) + # Layout: Add incremental box tree construction for inline floats and abspos + # Due to false positives in the memory benchmark on CI, the previous PR + # [37868](https://github.com/servo/servo/pull/37868) reverted. Now it is resubmitted. +>>> 2025-07-07T06:05:34Z +https://github.com/servo/servo/pull/37901 (@servo-wpt-sync, @sagudev, #37901) Sync WPT with upstream (06-07-2025) (#37901) + # Automated downstream sync of changes from upstream as of 06-07-2025 + # [no-wpt-sync] +>>> 2025-07-08T06:05:10Z +https://github.com/servo/servo/pull/37925 (@Loirooriol, #37925) Use hyper-util with client-legacy feature (#37925) + # This fixes `./mach clippy -r -p layout`. + # Testing: Unneeded (no change in behavior) + # Fixes: #37922 +https://github.com/servo/servo/pull/37924 (@dependabot[bot], @dependabot[bot], #37924) build(deps): bump content-security-policy from `dc1fd32` to `e8d4883` (#37924) + # Bumps [content-security-policy](https://github.com/servo/rust-content-security-policy) from `dc1fd32` to `e8d4883`. + # Commits + # e8d4883 Fix display of policies + # See full diff in compare view + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37931 (@dependabot[bot], @dependabot[bot], #37931) build(deps): bump cc from 1.2.28 to 1.2.29 (#37931) + # Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.28 to 1.2.29. + # Release notes + # Sourced from cc's releases. + # cc-v1.2.29 + # Other + # Fix target parsing for powerpc (#1490) + # Changelog + # Sourced from cc's changelog. + # 1.2.29 - 2025-07-05 + # Other + # Fix target parsing for powerpc (#1490) + # Commits + # d40950a chore: release v1.2.29 (#1493) + # 72fd965 Fix target parsing for powerpc (#1490) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previ + # ous-version=1.2.28&new-version=1.2.29)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depend + # abot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37930 (@dependabot[bot], @dependabot[bot], #37930) build(deps): bump cfg-expr from 0.20.0 to 0.20.1 (#37930) + # Bumps [cfg-expr](https://github.com/EmbarkStudios/cfg-expr) from 0.20.0 to 0.20.1. + # Release notes + # Sourced from cfg-expr's releases. + # 0.20.1 + # Changed + # PR#80 updated the builtin target list to 1.88.0. + # Changelog + # Sourced from cfg-expr's changelog. + # [0.20.1] - 2025-07-07 + # Changed + # PR#80 updated the builtin target list to 1.88.0. + # Commits + # cdfe878 Release 0.20.1 + # 16204ea Update CHANGELOG + # c881a19 Update to 1.88.0 (#80) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cfg-expr&package-manager=cargo + # &previous-version=0.20.0&new-version=0.20.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37929 (@dependabot[bot], @dependabot[bot], #37929) build(deps): bump async-channel from 2.4.0 to 2.5.0 (#37929) + # Bumps [async-channel](https://github.com/smol-rs/async-channel) from 2.4.0 to 2.5.0. + # Release notes + # Sourced from async-channel's releases. + # v2.5.0 + # Add Sender::closed() (#102) + # Changelog + # Sourced from async-channel's changelog. + # Version 2.5.0 + # Add Sender::closed() (#102) + # Commits + # 35a63c4 Release 2.5.0 + # b665e04 Add Sender::closed future (#102) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-channel&package-manager= + # cargo&previous-version=2.4.0&new-version=2.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/abo + # ut-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37928 (@dependabot[bot], @dependabot[bot], #37928) build(deps): bump blocking from 1.6.1 to 1.6.2 (#37928) + # Bumps [blocking](https://github.com/smol-rs/blocking) from 1.6.1 to 1.6.2. + # Release notes + # Sourced from blocking's releases. + # v1.6.2 + # Fix build failure with minimal-versions. (#71) + # Changelog + # Sourced from blocking's changelog. + # Version 1.6.2 + # Fix build failure with minimal-versions. (#71) + # Commits + # 6c4edde Release 1.6.2 + # 8f621a9 Fix build failure with minimal-versions + # 588b575 Add minimal-versions check to CI + # fa3854c Fix clippy::uninlined_format_args warning + # 0af62f8 ci: Use reusable workflows for fmt and security_audit + # 34d9472 ci: Use "v2.0.0" branch for security check + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=blocking&package-manager=cargo + # &previous-version=1.6.1&new-version=1.6.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37927 (@dependabot[bot], @dependabot[bot], #37927) build(deps): bump hyper-util from 0.1.14 to 0.1.15 (#37927) + # Bumps [hyper-util](https://github.com/hyperium/hyper-util) from 0.1.14 to 0.1.15. + # Release notes + # Sourced from hyper-util's releases. + # v0.1.15 + # tl;dr + # Add header casing options to auto::Builder. + # Fix proxy::Socksv5 to check for enough bytes before parsing ipv6 responses. + # Fix including client-proxy in the full feature set. + # What's Changed + # ci: pin tracing-core in msrv job by @​seanmonstar in hyperium/hyper-util#203 + # Cleanup deadcode in client by @​howardjohn in hyperium/hyper-util#202 + # refactor(socks): deduplicate and reuse shared logic by @​0x676e67 in hyperium/hyper-util#205 + # refactor: include client-proxy in full feature by @​seanmonstar in hyperium/hyper-util#206 + # refactor(client): remove old body delay_eof code by @​seanmonstar in hyperium/hyper-util#208 + # feat(builder): support header case methods by @​AndreyErmilov in hyperium/hyper-util#207 + # fix(socks): check for right length before parsing ProxyRes by @​seanmonstar in hyperium/hyper-util#210 + # Prepare v0.1.15 by @​seanmonstar in hyperium/hyper-util#211 + # New Contributors + # @​AndreyErmilov made their first contribution in hyperium/hyper-util#207 + # Full Changelog: https://github.com/hyperium/hyper-util/compare/v0.1.14...v0.1.15 + # Changelog + # Sourced from hyper-util's changelog. + # 0.1.15 (2025-07-07) + # Add header casing options to auto::Builder. + # Fix proxy::Socksv5 to check for enough bytes before parsing ipv6 responses. + # Fix including client-proxy in the full feature set. + # Commits + # 9669ff1 v0.1.15 + # bfa1cf1 fix(socks): check for right length before parsing ProxyRes (#210) + # 0ea2613 feat(server): support header case methods on auto::Builder (#207) + # d891931 refactor(client): remove old body delay_eof code (#208) + # 1f11a12 refactor: include client-proxy in full feature (#206) + # 57c26fa refactor(client): deduplicate and reuse shared socks logic (#205) + # 42bb42f refactor: cleanup deadcode in client (#202) + # d9107d0 ci: pin tracing-core in msrv job (#203) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hyper-util&package-manager=car + # go&previous-version=0.1.14&new-version=0.1.15)](https://docs.github.com/en/github/managing-security-vulnerabilities/abou + # t-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37926 (@dependabot[bot], @dependabot[bot], #37926) build(deps): bump tokio from 1.46.0 to 1.46.1 (#37926) + # Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.46.0 to 1.46.1. + # Release notes + # Sourced from tokio's releases. + # Tokio v1.46.1 + # 1.46.1 (July 4th, 2025) + # This release fixes incorrect spawn locations in runtime task hooks for tasks spawned using tokio::spawn rather + # than Runtime::spawn. This issue only effected the spawn location in TaskMeta::spawned_at, and did not effect task + # locations in Tracing events. + # Unstable + # runtime: add TaskMeta::spawn_location tracking where a task was spawned (#7440) + # #7440: tokio-rs/tokio#7440 + # Commits + # ab3ff69 chore: prepare to release v1.46.1 (#7444) + # a0d5b8a runtime(unstable): fix task hook spawn locations for tokio::spawn (#7440) + # a1ee3ef chore: fix some minor typos in the comments (#7442) + # 171cd14 changelog: fix typo in pipe::OpenOptions for 1.46.0 (#7439) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio&package-manager=cargo&pr + # evious-version=1.46.0&new-version=1.46.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dep + # endabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37923 (@dependabot[bot], @dependabot[bot], #37923) build(deps): bump rgb from 0.8.50 to 0.8.51 (#37923) + # Bumps [rgb](https://github.com/kornelski/rust-rgb) from 0.8.50 to 0.8.51. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rgb&package-manager=cargo&prev + # ious-version=0.8.50&new-version=0.8.51)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depen + # dabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37917 (@Loirooriol, #37917) layout: Require specific layout info in `BoxFragment::new()` (#37917) + # It was very easy to forget about using `.with_specific_layout_info()` to set the specific layout info, so it's + # better to make it a parameter. + # In fact this already happened in the past: #36993 fixed the missing specific layout info for flex items. + # This patch fixes it for floats and atomic inlines. It also propagates it in other cases where not doing so was + # not a big deal because the specific layout info was None, but that was a fragile assumption. + # Testing: Various WPT improvements + # Fixes: #37898 +https://github.com/servo/servo/pull/37916 (@yezhizhen, #37916) servoshell: Fix typo in `window-size` command-line argument help (#37916) + # null +https://github.com/servo/servo/pull/37886 (@longvatrong111, #37886) servoshell: Do handle prompts and other requests in headless mode when WebDriver is active (#37886) + # Webdriver CI uses headless window, which skips the handling for alert box. + # It leads to unexpected `OK` in test results, which should be still timeout. + # This PR removes the skip, so test result in local and CI are synchronized. + # Testing: + # 7 unexpected `OK` are removed + # https://github.com/longvatrong111/servo/actions/runs/16079192271 + # compared to CI on main: + # https://github.com/longvatrong111/servo/actions/runs/16078898742 + # Fixes: https://github.com/servo/servo/issues/37875 + # Partially fixes: https://github.com/servo/servo/issues/37387 +https://github.com/servo/servo/pull/37686 (@atbrakhi, @delan, @simonwuelker, @me@doggirl.gay, #37686) Devtools: send error replies instead of ignoring messages (#37686) + # Client messages, which are always requests, are dispatched to Actor instances one at a time via + # Actor::handle_message. Each request must be paired with exactly one reply from the same actor the request was sent to, + # where a reply is a message with no type (if a message from the server has a type, it’s a notification, not a reply). + # Failing to reply to a request will almost always permanently break that actor, because either the client gets stuck + # waiting for a reply, or the client receives the reply for a subsequent request as if it was the reply for the current + # request. If an actor fails to reply to a request, we want the dispatcher (ActorRegistry::handle_message) to send + # an error of type `unrecognizedPacketType`, to keep the conversation for that actor in sync. Since replies come in + # all shapes and sizes, we want to allow Actor types to send replies without having to return them to the dispatcher. + # This patch adds a wrapper type around a client stream that guarantees request/reply invariants. It allows + # the dispatcher to check if a valid reply was sent, and guarantees that if the actor tries to send a reply, + # it’s actually a valid reply (see ClientRequest::is_valid_reply). It does not currently guarantee anything + # about messages sent via the TcpStream released via ClientRequest::try_clone_stream or the return value of + # ClientRequest::reply. We also send `unrecognizedPacketType`, `missingParameter`, `badParameterType`, and `noSuchActor` + # messages per the [protocol](https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#error-packets) + # [docs](https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#packets). + # Testing: automated tests all pass, and manual testing looks ok + # Fixes: #37683 and at least six bugs, plus one with a different root cause, plus three with zero impact +https://github.com/servo/servo/pull/37905 (@TimvdLippe, #37905) Implement initial version of ReportingObserver (#37905) + # The specification moved around lately with how it defines its reports and report bodies. They became dictionaries, + # but are currently missing some fields [1]. + # Most tests won't be passing yet, since the `Reporting-Endpoints` header isn't used yet. In fact, the specification + # leaves it up to the browser to figure out when to run this task [2]. I am not sure if there some background + # scheduling we can do here. + # Confirmed with content-security-policy/reporting-api/ report-to-directive-allowed-in-meta.https.sub.html that the + # callback is invoked. The test doesn't pass, since + # the `describe_scripted_caller` is empty for HTML elements. Thus the `source_file` is empty, whereas it should be + # equivalent to the current document URL. + # Part of #37328 + # Signed-off-by: Tim van der Lippe + # [1]: https://github.com/w3c/reporting/issues/286 + # [2]: https://w3c.github.io/reporting/#report-delivery +https://github.com/servo/servo/pull/37912 (@abdelrahman1234567, #37912) Differentiate console message behavior based on target OS (#37912) + # Printing using log macro for Android and OhOS, while retaining original stderr behavior for other platforms. + # Fixes: #37877 +>>> 2025-07-09T06:07:48Z +https://github.com/servo/servo/pull/37893 (@yezhizhen, #37893) servoshell: Use DeviceIndependentPixel for WebDriver Rect related requests (#37893) + # [Spec](https://w3c.github.io/webdriver/#set-window-rect) expects CSS pixel for input and output. Previously, + # we use Device Pixel for them instead. + # Testing: Tested manually with different screen DPR and compared with other browsers. + # Fixes: Task 4 of https://github.com/servo/servo/issues/37804 +https://github.com/servo/servo/pull/37829 (@mrobinson, #37829) layout: When setting post-layout / renderer scroll offsets limit by scroll area (#37829) + # Previously when scroll offsets were restored to a new scroll tree + # post-layout or when receiving scroll offsets from the compositor, they + # were not clamped to the available scroll area. This change fixes that. + # Testing: This change fixes some WPT subtests. +https://github.com/servo/servo/pull/37934 (@yezhizhen, #37934) servoshell: Fix `screen_geometry` for headed_window (#37934) + # This function is used to compute `screenLeft`, `screenTop`, `screenY`, `screenX`. Previously, + # it wrongly computes viewport position instead of window position, which didn't match + # https://github.com/servo/servo/blob/f7c86c439388c29be74161383241787e3f2fa5de/components/shared/embedder/lib.rs#L717-L720 + # Testing: More webdriver test would pass once #37893 is merged. + # Fixes: the position part of #37824. +https://github.com/servo/servo/pull/37940 (@yezhizhen, #37940) WebDriver Chore: use enum instead of compile time constant for `browsing_context_script_command` (#37940) + # This reduces unnecessary generated code and binary size. See + # https://github.com/servo/servo/pull/37712#discussion_r2171957828 + # Testing: No Behaviour change +https://github.com/servo/servo/pull/37889 (@sagudev, #37889) script: join `compositor_requested_update_the_rendering` into `should_trigger_script_thread_animation_tick` (#37889) + # This will help us make "update the rendering" a proper task. + # Testing: Existing WPT tests. + # try run: https://github.com/sagudev/servo/actions/runs/16085256131 +https://github.com/servo/servo/pull/37941 (@mrobinson, @Loirooriol, #37941) layout: Store most anonymous pseudo-elements in box slots (#37941) + # Previously, anonymous boxes, such for anonymous table parts were not + # associated with their non-pseudo ancestor DOM nodes. This presents a + # problem when it comes time to clear layout data during incremental + # layouts. This change reworks the way that pseudo-elements in general are + # stored in their non-pseudo ancestor DOM nodes, allowing for any number + # to be placed there. + # This trades a bit of performance for space, as just adding a vector to + # the node would add something like 24 bytes of storage to every node. + # This change should have a neutral runtime memory usage. + # Testing: This shouldn't change observable behavior and is thus covered by + # existing WPT tests. It will allow tests to pass in a subsequent PR. +https://github.com/servo/servo/pull/37872 (@tharkum, #37872) canvas: Make OffscreenCanvas transferable (without placeholder) (#37872) + # Follow the specification and make OffscreenCanvas objects are transferable, + # but not in case if there are a weak reference to placeholder canvas element. + # To handle it properly need to implement dedicated frame provider/dispatcher + # between canvas element (script thread) and offscreen canvas (dedicated worker thread). + # https://html.spec.whatwg.org/multipage/#the-offscreencanvas-interface:transferable-objects + # Testing: Improvements in the following tests + # - html/canvas/element/drawing-images-to-the-canvas/2d.drawImage.detachedcanvas.html + # - html/canvas/offscreen/manual/convert-to-blob/offscreencanvas.convert.to.blob* + # - html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer* + # - html/infrastructure/safe-passing-of-structured-data/transfer-errors.window.js + # Part of #24276 +https://github.com/servo/servo/pull/37881 (@Narfinger, #37881) OHOS CI: Allow benchmarking of files and show smaps (#37881) + # OHOS CI: Now we can benchmark specific files. These files need to be in + # the runs.json and in the supprt/hitrace-bench folder. + # A simple testcase of parsing html from string is included (taken from https://github.com/servo/servo/issues/37223). + # We copy all files in + # support/hitrace-bench into the hap of the phone. + # These files can use the console.log javascript command to get their + # measured output. + # Additionally, this now supports reporting resident-accordings-to-smaps which is a slightly different memory than + # resident. + # This needs update to hitrace-bench 0.7 which will be completed once the + # PR is marked ready. + # Testing: On action runner here: https://github.com/Narfinger/servo/actions/runs/16118101025/job/45477031813 +https://github.com/servo/servo/pull/37921 (@Loirooriol, #37921) layout: Remove clearance parameter from `BoxFragment::new()` (#37921) + # Clearance only applies to block-level boxes, so it was unnecessary to require it as a parameter. Instead, in block + # layout we can set it using the new `.with_clearance()` method. + # Testing: Unnecessary (no behavior change) +https://github.com/servo/servo/pull/37915 (@Narfinger, #37915) OHOS CI: Install the required hitrace-bench version (#37915) + # OHOS CI: Install the required hitrace-bench version if it is not already + # installed. This allows us to see the hitrace-bench version in the commit + # history without it being reinstalled on CI all the time. + # This does not change the version of hitrace-bench in this PR. + # This needs another update of the docker images to get the correct build tools installed. + # Succesful run: https://github.com/Narfinger/servo/actions/runs/16115943664/job/45469959328 + # And here a run where it installs the given version: + # https://github.com/Narfinger/servo/actions/runs/16116949656/job/45473231784 + # Testing: Tested on CI. +https://github.com/servo/servo/pull/37908 (@PotatoCP, #37908) Webdriver: Keyboard Action use `webview::notify_input_event` instead of directly sent to constellation (#37908) + # Previously, we KeyboardAction will be forwarded to constellation by the embedder. Now we use + # `webview.notify_input_event`, which will send `WebDriverCommandMsg::ForwardInputEvent` for KeyboardAction + # Fixes: part of https://github.com/servo/servo/issues/37370 +https://github.com/servo/servo/pull/37903 (@jschwe, #37903) mach: macos: Don't let gstreamer override symbols (#37903) + # Using DYLD_FALLBACK_LIBRARY_PATH means we first try to link to the normal libraries and only fallback to looking + # up symbols in gstreamer if the symbols were not found elsewhere. + # This prevents some linking issues. + # Testing: Covered by existing tests. Fix for issue #37811 manually verified by the reporter. +>>> 2025-07-10T06:12:58Z +https://github.com/servo/servo/pull/37913 (@longvatrong111, #37913) webdriver: Implement support for simple dialogs (#37913) + # Implement webdriver user prompt: accept alert, dismiss alert, get alert text. + # Tests: + # https://github.com/longvatrong111/servo/actions/runs/16175408035 + # https://github.com/longvatrong111/servo/actions/runs/16175409545 +https://github.com/servo/servo/pull/37974 (@servo-wpt-sync, #37974) Sync WPT with upstream (10-07-2025) (#37974) + # Automated downstream sync of changes from upstream as of 10-07-2025 + # [no-wpt-sync] +https://github.com/servo/servo/pull/37963 (@Narfinger, #37963) OHOS CI allow profile (#37963) + # OHOS CI: We now allow a profile flag. The profile name will be prepended to all measurements. + # This allows us to distinguish different build profiles in bencher. + # Additionally we are more robust on duplicated entries for some measurements. + # Testing: Tested on CI with a run here: https://github.com/Narfinger/servo/actions/runs/16168150429/job/45635086884 + # Fixes: https://github.com/servo/servo/issues/37890 +https://github.com/servo/servo/pull/37897 (@Loirooriol, #37897) layout: Unify layout logic for replaced and non-replaced floats&atomics (#37897) + # Laying out a float or atomic inline will now use the same logic regardless of whether it's replaced or not. + # This reduces the amount of code, and should have no observable effect. + # Testing: Unneeded (no behavior change) + # This part of #37942 +https://github.com/servo/servo/pull/37965 (@TimvdLippe, #37965) Add support for Reporting-Endpoints (#37965) + # Does not yet handle failures of endpoints, which requires us to update metadata. I don't see that metadata being + # used anywhere, so I am not sure if there is WPT coverage for it. + # Part of #37238 +https://github.com/servo/servo/pull/37954 (@ibluegalaxy_taoj@163.com, #37954) layout: remove the finished animations to avoid to mark their dom nodes dirty (#37954) + # Remove the finished animations to avoid marking their dom nodes dirty. The mainly change happens at [stylo PR + # 216](https://github.com/servo/stylo/pull/216). + # In Servo's current animation implementation, the finished animations are retained and continue to mark their + # corresponding DOM nodes as dirty. This can lead to a significant number of unnecessary and expensive reflow + # operations. For example, during page scrolling, the dirtied state from finished animations forces the whole reflow + # process on every update_the_rendering cycle, severely impacting scroll performance. + # The [code comments in stylo repo](https://github.com/servo/stylo/blob/main/style/matching.rs#L752-L755) + # stated that retaining finished animations was necessary to correctly compute the final frame state for + # [animation-fill-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/animation-fill-mode). However, test + # results—including those from WPT test cases and manual verification—indicate that this functionality is already + # guaranteed without this overhead. +https://github.com/servo/servo/pull/37949 (@jdm, #37949) WPT upstreamer: Make all failed merge operations leave a comment. (#37949) + # The WPT exporter currently assumes that removing a label from a github PR will never fail. This is obviously false + # and the result is a silent failure. By moving the operation inside the existing try block we ensure that a comment + # will be posted if any part of the merge step fails. + # Testing: Untested; did not feel worth the time investment to determine if the existing test harness can mock this + # particular situation. + # Fixes: #37914 +https://github.com/servo/servo/pull/37957 (@mrobinson, @Loirooriol, #37957) layout: Skip box tree construction when possible (#37957) + # When a style change does not chang the structure of the box tree, it is + # possible to skip box tree rebuilding for an element. This change adds + # support for reusing old box trees when no element has that type of + # damage. In order to make this happen, there needs to be a type of + # "empty" `LayoutDamage` that just indicates that a fragment tree layout + # is necessary. + # This is the first step toward incremental fragment tree layout. + # Testing: This should not change observable behavior and thus is covered by + # existing WPT tests. Performance numbers to follow. +https://github.com/servo/servo/pull/37962 (@Loirooriol, #37962) layout: Unify layout logic for replaced and non-replaced flex items (#37962) + # Laying out a flex item will now use the same logic regardless of whether it's replaced or not. + # This reduces the amount of code, and should have no observable effect. + # Testing: Unneeded (no behavior change) + # This part of #37942 +https://github.com/servo/servo/pull/37427 (@stevennovaryo, #37427) script: Use an implemented pseudo-element to for`type=color` `::color-swatch` (#37427) + # Implement internal pseudo element, which would be resolved as a "Implemented Pseudo Element" within style + # computation. This is an concrete element that would has a primary style after the style computation, but could + # match and style resolved like an pseudo element. Therefore, it would have a different behavior compared to how + # does `pseudo`s that `ServoLayoutNode` had. Where they would not have a concrete element behind it. Note that, due + # to the nature of these pseudo elements residing inside a UA widget, these pseudo elements would therefore not be + # accessible in JavaScript by default. + # This kind of element is required in order to implement the [form control pseudo + # element](https://drafts.csswg.org/css-forms-1/#pseudo-elements) like `::placeholder`, `::color-swatch`, + # `::field-text`, etc. + # See [this docs](https://hackmd.io/@ChaKweTiau/BJ3zRdLQlg) for more details of the implementation. + # Then, the implemented pseudo element is utilized to implement style matching for input `type=text`. + # Servo's side of: https://github.com/servo/stylo/pull/212 + # Testing: No WPT regression. +https://github.com/servo/servo/pull/37938 (@Loirooriol, #37938) layout: Move `BoxFragment`'s block-level info into a dedicated struct (#37938) + # `BoxFragment` had 2 fields that are only relevant for block-level boxes: `clearance` and a boxed + # `block_margins_collapsed_with_children`. + # This moves both pieces of data into a new `BlockLevelLayoutInfo` struct, which is boxed. + # As a result, the size of `BoxFragment` is reduced from 272 to 264 bytes. + # Testing: Unneeded (no behavior change) +https://github.com/servo/servo/pull/37964 (@tharkum, #37964) script: Propagate a pending JS exception on structured cloning (#37964) + # During the object (de)serialization steps on structured cloning + # https://html.spec.whatwg.org/multipage/#safe-passing-of-structured-data + # it is possible to throw a JS exception. + # `self.postMessage({ get whatever() { throw customError } }));` + # Require to propagate a pending JS exception and not throw the default "DataCloneError" DOM exception. + # Testing: Improvements in the following tests + # - html/infrastructure/safe-passing-of-structured-data/* + # - html/webappapis/structured-clone/structured-clone.any.js* + # - wasm/serialization/arraybuffer/transfer.window.js + # - webmessaging/without-ports/026.html + # - workers/semantics/structured-clone/dedicated.html +https://github.com/servo/servo/pull/37718 (@wusyong, #37718) WebGL2: support TexImage3D (#37718) + # Add TexImage3D method to WebGL2RenderingContext + # Testing: conformance2 should pass. Also it should get http://webglsamples.org/WebGL2Samples/#texture_2d_array and + # http://webglsamples.org/WebGL2Samples/#texture_3d running. + # Fixes: #26511 + # Now Servo can run texture_2d_array and texture_3d samples! + # ![圖片](https://github.com/user-attachments/assets/41b87563-08b8-4db3-b503-12f3a61dbed7) + # ![圖片](https://github.com/user-attachments/assets/3c62a4de-35ea-488d-b2e5-00e3aed52090) + # And it can now run three.js too! + # ![圖片](https://github.com/user-attachments/assets/d880aa92-a154-4895-aa06-b7919d1fc869) +https://github.com/servo/servo/pull/37663 (@longvatrong111, @mrobinson, #37663) webdriver: Evaluate script commands via the `WebView` API in servoshell (#37663) + # Let `WebDriverCommandMsg::ScriptCommand` goes through embedder first. + # Give `embedder` the ability to release `webdriver` from waiting for a response of `ExecuteScript`. + # Tests: https://github.com/longvatrong111/servo/actions/runs/16071375821 + # No regression compared to CI run on main branch. + # Fixes: https://github.com/servo/servo/issues/37370 + # cc: @xiaochengh +https://github.com/servo/servo/pull/37952 (@michael.wu1107@gmail.com, @xiaochengh, #37952) Update webidl files for TextEncoder and TextDecoder (#37952) + # This PR updates the webidl files for `TextEncoder` and `TextDecoder`. For `TextDecoder.webidl`, the type + # `AllowSharedBufferSource`, as defined in the latest spec, is replaced with `BufferSource` as servo currently does + # not support `ShareArrayBuffer` + # Testing: This update does not introduce any change to the generated rust binding, so the existing testing would suffice +https://github.com/servo/servo/pull/37959 (@Narfinger, #37959) OHOS: Make IME more robust against errors (#37959) + # OHOS: Allow ime to be more robust against errors. For example, when a system popup is in front, no keyboard can + # be displayed, hence, erroring out. Before we panicked, now we just log the error and continue. + # This should hopefully fix some of the recent ohos ci errors. + # Testing: Tested on a certain CI device that shows a popup. +https://github.com/servo/servo/pull/37948 (@tharkum, #37948) script: Allow to throw a custom exception on structured cloning (#37948) + # The structured cloning with transfer list + # https://html.spec.whatwg.org/multipage/#structuredserializewithtransfer + # throws a "DataCloneError" DOM expection by default if serialization/transferral + # is not possible, but a platform object can throw a custom excepton on its serialization/transfer steps. + # One example is OffscreenCanvas, which can throw + # an "InvalidStateError" exception if the context mode is not none on transfer steps. + # https://html.spec.whatwg.org/multipage/#the-offscreencanvas-interface:transfer-steps + # Testing: Improvements in the following tests + # - html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transferrable* + # Fixes: #37919 +https://github.com/servo/servo/pull/37933 (@jschwe, #37933) Update mozjs to 128.13 (#37933) + # Bump to the latest Spidermonkey 128 ESR version. + # Companion PR to https://github.com/servo/mozjs/pull/590 + # Testing: Covered by existing tests +https://github.com/servo/servo/pull/37961 (@yezhizhen, #37961) servoshell: Consider both OS decoration width and height when resizing (#37961) + # Previously, we only consider OS decoration height. But when testing #37960, I find that the decoration width is + # also non-zero. + # Testing: Need to wait W3C spec change https://github.com/web-platform-tests/wpt/pull/53421 related to webdriver + # rectangle. When combined with #37960, this can fix at least `window_resizeTo.html`. +https://github.com/servo/servo/pull/37958 (@jerensl, #37958) Remove `test-android-startup` mach command (#37958) + # Remove seldomly used `mach commands: + # - `test-android-startup`: This command is used for minimal testing of Servo in Android + # These commands are being removed in order to implement Python type checking the Servo repository. + # Testing: This just removes some mach command so shouldn't need tests. +https://github.com/servo/servo/pull/37943 (@Loirooriol, #37943) layout: Unify layout logic for replaced and non-replaced abspos (#37943) + # Laying out an absolutely or fixedly positioned box will now use the same logic regardless of whether it's replaced + # or not. + # This reduces the amount of code, and should have no observable effect. + # Testing: Unneeded (no behavior change) + # This part of #37942 +>>> 2025-07-11T06:03:53Z +https://github.com/servo/servo/pull/37977 (@PotatoCP, #37977) Webdriver: limit tick action duration to ECMA maximum safe integer (#37977) + # Workaround to prevent `webdriver/tests/classic/perform_actions/invalid.py` from TIMEOUT. I don't see the spec + # telling us to limit this number, so I assume the correct fix is to handle it on parsing. + # Testing: `webdriver/tests/classic/perform_actions/invalid.py`. +https://github.com/servo/servo/pull/37747 (@michael.wu1107@gmail.com, @xiaochengh, #37747) script: Update name validation for attribute, element, and doctype (#37747) + # A recent update in the spec (https://github.com/whatwg/dom/pull/1079) introduced new rules for name + # validation of attribute, element, and doctype. This PR implements the new name validation rules in + # `components/script/dom/bindings/domname.rs`. The old XML name validation rules are not fully removed because there + # remains a few usage of it in `ProcessingInstructions` and `xpath`. + # Testing: Covered by WPT tests + # Fixes: #37746 +https://github.com/servo/servo/pull/37981 (@Loirooriol, #37981) layout: Lay out grid items with a consistent tentative block size (#37981) + # When laying out a grid item, the tentative block size that is used to determine the intrinsic inline sizes was + # different than the one used in the containing block for the contents. The latter is now used for both cases. + # Testing: A test is now passing. +https://github.com/servo/servo/pull/37988 (@dependabot[bot], @dependabot[bot], #37988) build(deps): bump clap from 4.5.40 to 4.5.41 (#37988) + # Bumps [clap](https://github.com/clap-rs/clap) from 4.5.40 to 4.5.41. + # Changelog + # Sourced from clap's changelog. + # [4.5.41] - 2025-07-09 + # Features + # Add Styles::context and Styles::context_value to customize the styling of [default: value] like notes in the --help + # Commits + # 92fcd83 chore: Release + # aca91b9 docs: Update changelog + # 8434510 Merge pull request #5869 from tw4452852/patch-1 + # 33b1fc3 fix(complete): Fix env leakage in elvish dynamic completion + # e5f1f48 chore: Release + # 9466a55 docs: Update changelog + # d74b793 Merge pull request #5865 from gifnksm/nushell-completion-value-types + # ecbc775 fix(nu): Set argument type based on ValueHint + # 6784054 Merge pull request #5857 from epage/empty + # cca5f32 test(complete): Show empty option-value behavior + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&pre + # vious-version=4.5.40&new-version=4.5.41)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depe + # ndabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37684 (@arihant2math, #37684) [IndexedDB] Key ranges implementation (#37684) + # Improves the implementation of keys to a point where key ranges can be implemented as well. +https://github.com/servo/servo/pull/37990 (@dependabot[bot], @dependabot[bot], #37990) build(deps): bump xml-rs from 0.8.26 to 0.8.27 (#37990) + # Bumps [xml-rs](https://github.com/kornelski/xml-rs) from 0.8.26 to 0.8.27. + # Changelog + # Sourced from xml-rs's changelog. + # Version 0.8.27 + # Added detection of invalid <? in attributes + # Commits + # cb01aad Bump + # be66722 Remove accidental whitespace + # e481000 Also flag "<?" as error inside attribute values + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=xml-rs&package-manager=cargo&p + # revious-version=0.8.26&new-version=0.8.27)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37989 (@dependabot[bot], @dependabot[bot], #37989) build(deps): bump rustls from 0.23.28 to 0.23.29 (#37989) + # Bumps [rustls](https://github.com/rustls/rustls) from 0.23.28 to 0.23.29. + # Commits + # 4e0b5fe Bump version to 0.23.29 + # b854079 Propagate context for webpki signature algorithm errors + # c84675e key_schedule: minimise lifetime of resumption secret + # 788b0df key_schedule: erase master secret in traffic state + # d2c64f0 key_schedule: separate ops not using current secret + # e5998cd key_schedule: add state for derivations before finish + # 9620bec tls13::key_schedule: move KeySchedule struct down + # 373ad88 tls13::key_schedule: move SecretKind down + # efa2066 Improve compactness of Debug impl for extensions + # a5433a1 Correct calculation of ServerHello ECH confirmation + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls&package-manager=cargo&p + # revious-version=0.23.28&new-version=0.23.29)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37987 (@dependabot[bot], @dependabot[bot], #37987) build(deps): bump rustls-webpki from 0.103.3 to 0.103.4 (#37987) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls-webpki&package-manager= + # cargo&previous-version=0.103.3&new-version=0.103.4)](https://docs.github.com/en/github/managing-security-vulnerabilities + # /about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37979 (@yezhizhen, #37979) Chore: cleanup unused `EmbedderMsg::WebDriverCommand` (#37979) + # Also fix doc for `WebDriverCommandMsg::GetWindowRect`. + # Testing: No behaviour change. +https://github.com/servo/servo/pull/37911 (@PotatoCP, #37911) Webdriver: Send Keys use `webview::notify_input_event` (#37911) + # Previously, we SendKeys will be forwarded to constellation by the embedder. Now we use webview.notify_input_event, + # which will send WebDriverCommandMsg::ForwardInputEvent for the KeyboardEvent and CompositionEvent. + # Fixes: part of https://github.com/servo/servo/issues/37370 +https://github.com/servo/servo/pull/37637 (@rayguo17, #37637) add support for apng and webp animated image decoding (#37637) + # Add support for APNG animated image decoding. Rework `load_from_memory` image decoding api, to handle all the + # image format that currently supported. + # Testing: This change should allow `apng` and `webp` format image start moving, and should make some WPT test + # related to APNG pass. + # Partially address: https://github.com/servo/servo/issues/37493 + # [wpt try run](https://github.com/rayguo17/servo/actions/runs/15840339570) + # cc @xiaochengh +https://github.com/servo/servo/pull/37971 (@Loirooriol, #37971) layout: Remove `IndependentNonReplacedContents` (#37971) + # With the work to unify the layout logic for replaced and non-replaced boxes (#37942), I think the + # `IndependentNonReplacedContents` enum does no longer make much sense. + # Therefore, this removes `IndependentNonReplacedContents`, merging its values into + # `IndependentFormattingContextContents`. + # The methods defined on `IndependentFormattingContextContents` can now be on `IndependentFormattingContext`, in + # particular this implies that the layout results of a replaced box will now be cached. + # Testing: Unneeded (no behavior change) + # This part of #37942 +https://github.com/servo/servo/pull/37975 (@yezhizhen, @jdm, #37975) servoshell: Enable headless event loop for Windows (#37975) + # Testing: For windows, it now passes `/_mozilla/mozilla/window_resizeTo.html` in headless mode but fails in headed + # window as expected in https://github.com/servo/servo/pull/37899#issuecomment-3052566865. + # Fixes: #37973 + # Fixes: #26431 + # Fixes: #20365 + # Signed-off-by: Euclid Ye yezhizhenjiakang@gmail.com + # Co-authored-by: Josh Matthews josh@joshmatthews.net +>>> 2025-07-12T11:08:50Z +https://github.com/servo/servo/pull/37802 (@jdm, #37802) layout: Reverse vertical orientation of gradients using corner directions. (#37802) + # Found and manually tested by comparing rendering between Firefox and Servo. + # Testing: Existing WPT coverage is sufficient. + # Fixes: #37782 +https://github.com/servo/servo/pull/37960 (@yezhizhen, @mrobinson, #37960) script: Get the window rectangle from the `WebViewDelegate` instead of via the compositor (#37960) + # Previously, `screenX`, `screenY`, `outerHeight`, `outerWidth`, `moveBy`, `resizeBy` ask compositor for window + # rectangle, which then return "inner" rectangle after consulting Embedder. + # This PR + # 1. removes `GetClientWindowRect` from compositor, and directly let script ask embedder. + # 2. add `window_size` to `ScreenGeometry` + # 3. add a lot of docs to `ScreenGeometry` + # Testing: `tests\wpt\mozilla\tests\mozilla\window_resizeTo.html` can now pass for Headed Window. + # Fixes: #37824 +https://github.com/servo/servo/pull/38011 (@dependabot[bot], @dependabot[bot], #38011) build(deps): bump winnow from 0.7.11 to 0.7.12 (#38011) + # Bumps [winnow](https://github.com/winnow-rs/winnow) from 0.7.11 to 0.7.12. + # Changelog + # Sourced from winnow's changelog. + # [0.7.12] - 2025-07-11 + # Features + # Add impl Accumulate for VecDeque + # Commits + # a0360f6 chore: Release + # 15bc372 docs: Update changelog + # 6c193ed Merge pull request #802 from molarmanful/vecdeque-accumulate + # 5db615d feat(stream): Implement Accumulate for VecDeque + # f226010 Merge pull request #800 from Kijewski/pr-chars + # 73ce9fa Implement \<&str as Stream>::next_token() without panics + # 18f20ee Merge pull request #796 from epage/docs + # fa51dd4 docs(ref): Clarify distinction between parse and parse_next + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=winnow&package-manager=cargo&p + # revious-version=0.7.11&new-version=0.7.12)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38009 (@dependabot[bot], @dependabot[bot], #38009) build(deps): bump h2 from 0.3.26 to 0.3.27 (#38009) + # Bumps [h2](https://github.com/hyperium/h2) from 0.3.26 to 0.3.27. + # Changelog + # Sourced from h2's changelog. + # 0.3.27 (July 11, 2025) + # Fix notifying wakers when detecting local stream errors. + # Commits + # f6237ac v0.3.27 + # f61332e refactor: change local reset counter to use type system more + # 3f1a8e3 style: fix anonymous lifetime syntax + # 778aa7e fix: notify_recv after send_reset() in reset_on_recv_stream_err() to ensure l... + # be10b77 ci: pin more deps for MSRV job (#817) + # c0d9feb ci: pin deps for MSRV + # 5ccd9cf lints: fix unexpected cfgs warnings + # e6e3e9c fix: return a WriteZero error if frames cannot be written (#783) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=h2&package-manager=cargo&previ + # ous-version=0.3.26&new-version=0.3.27)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depend + # abot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38008 (@dependabot[bot], @dependabot[bot], #38008) build(deps): bump aws-lc-rs from 1.13.1 to 1.13.2 (#38008) + # Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.13.1 to 1.13.2. + # Release notes + # Sourced from aws-lc-rs's releases. + # aws-lc-rs v1.13.2 + # What's Changed + # aws-lc-sys v0.30.0 is aligned w/ AWS-LC v1.55.0 by @​justsmth in aws/aws-lc-rs#838 + # expose algorithm used to create ecdsa keypair by @​soundofspace in aws/aws-lc-rs#834 + # Change 'try_sign' to pub in ED25519 module by @​theswiftfox in aws/aws-lc-rs#832 + # Build improvements + # Fix target-specific env variable usage by @​justsmth in aws/aws-lc-rs#810 + # Improved support for msys2 and "prebuilt-nasm" by @​justsmth in aws/aws-lc-rs#830 + # Issues Being Resolved + # Failed to Build aws-lc-sys 0.29.0 on Windows with target x86_64-pc-windows-gnu -- aws/aws-lc-rs#835 + # Failed to Build aws-lc-sys 0.29.0 on Windows -- aws/aws-lc-rs#833 + # MSYS2 - "No rule to make target" for libaws_lc_0_29_0_crypto.a -- aws/aws-lc-rs#814 + # Other Merged PRs + # Disallow external bindgen when AWS_LC_SYS_EXTERNAL_BINDGEN=0 by @​justsmth in aws/aws-lc-rs#808 + # Test w/ CMake 4.0 release by @​justsmth in aws/aws-lc-rs#756 + # Fix CI for i686-pc-windows-gnu by @​justsmth in aws/aws-lc-rs#809 + # Fix spelling errors by @​atouchet in aws/aws-lc-rs#817 + # Ensure ConstPointers don't outlive parent by @​justsmth in aws/aws-lc-rs#693 + # Fix CI for riscv64gc-unknown-linux-gnu by @​justsmth in aws/aws-lc-rs#816 + # Prepare aws-lc-fips-sys v0.13.7 by @​justsmth in aws/aws-lc-rs#823 + # Fix CI by @​justsmth in aws/aws-lc-rs#825 + # Prepare aws-lc-sys v0.30.0 by @​justsmth in aws/aws-lc-rs#829 + # New Contributors + # @​atouchet made their first contribution in aws/aws-lc-rs#817 + # @​theswiftfox made their first contribution in aws/aws-lc-rs#832 + # @​soundofspace made their first contribution in aws/aws-lc-rs#834 + # Full Changelog: https://github.com/aws/aws-lc-rs/compare/v1.13.1...v1.13.2 + # Commits + # e2e9e82 Align aws-lc-sys v0.30.0 w/ AWS-LC v1.55.0 (#838) + # 880d381 Test msys2 w/ prebuilt-nasm (#830) + # a2ed335 expose algorithm used to create ecdsa keypair (#834) + # db7d6cd Change 'try_sign' to pub in ED25519 module (#832) + # f0a6350 Prepare aws-lc-sys v0.30.0 (#829) + # 378163b Fix CI (#825) + # f031c04 Prepare aws-lc-fips-sys v0.13.7 (#823) + # 8b8122b Fix CI for riscv64gc-unknown-linux-gnu (#816) + # 6cd8ac8 Ensure ConstPointers don't outlive parent (#693) + # 25a6040 Fix spelling errors (#817) + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=carg + # o&previous-version=1.13.1&new-version=1.13.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38001 (@servo-wpt-sync, #38001) Sync WPT with upstream (11-07-2025) (#38001) + # Automated downstream sync of changes from upstream as of 11-07-2025 + # [no-wpt-sync] +https://github.com/servo/servo/pull/38003 (@mukilan, #38003) ci: revert to non-relative import in export script (#38003) + # Fixes #37999. + # Testing: This has been tested on [my + # fork](https://github.com/mukilan/servo/actions/runs/16224926807/job/45814509714?pr=5). + # Signed-off-by: Mukilan Thiyagarajan +https://github.com/servo/servo/pull/37985 (@Loirooriol, #37985) layout: Unify layout logic for replaced and non-replaced grid items (#37985) + # Laying out a grid item will now use the same logic regardless of whether it's replaced or not. + # This reduces the amount of code, and should have no observable effect (but hard to say since and I don't understand + # Taffy). + # Testing: Unneeded (no behavior change) + # This part of #37942 +https://github.com/servo/servo/pull/37953 (@jerensl, #37953) Mach: introduce Pyrefly for Python type checking, starting with the wpt folder (#37953) + # This is the first stage of adopting Pyrefly. It introduces the Python folder and focuses on fixing issues around it. + # Testing: *Describe how this pull request is tested or why it doesn't require tests* + # Fixes: *Link to an issue this pull requests fixes or remove this line if there is no issue* +https://github.com/servo/servo/pull/37997 (@mrobinson, #37997) script: Wrapping unsafe code in `unsafe` blocks for basic DOM types (#37997) + # There is a new default cargo clippy lint, `unsafe_op_in_unsafe_fn`, + # which requires unsafe code to be wrapped in unsafe blocks, even inside + # functions marked as unsafe. The lint is disabled as much of our code + # doesn't fulfill this contract. The thing itself is pretty useful in + # order to gradually remove unsafety, so this change starts adding + # `unsafe` blocks so we can eventually enable this lint. + # Testing: This doesn't change behavior so existings tests should suffice. + # Fixes: This is part of #35955. +https://github.com/servo/servo/pull/37994 (@Narfinger, #37994) Do not duplicate console messages on OHOS/Android (#37994) + # Console messages on OHOS/Android targets were duplicated. + # Originally messages were on the debug level directed to stdout and then + # redirected to the logger. https://github.com/servo/servo/pull/37912 + # changed this behavior recently. + # Testing: Tested by looking at the debug log of certain things. ohos-speedometer for example. +https://github.com/servo/servo/pull/37995 (@Narfinger, #37995) OHOS: Fix speedometer hang sometimes. (#37995) + # This fixes the speedometer hang on CI. + # Sometimes on CI we have the servoshell app not being in the foreground (because popups have higher priority). Then, + # for some reason the eventloop does not get pumped after some time. + # This fixes this and is consistent with the current code in android. + # Here is a succesful run https://github.com/Narfinger/servo/actions/runs/16214904687/job/45782241427. This needs + # also https://github.com/servo/servo/pull/37994 to be successful but these two PR are independent. + # Testing: Having the usb popup on the screen while running speedometer without this changes hangs consistently + # (until input which calls present_if_needed). With this change the hang does not occur anymore. + # Fixes: I think https://github.com/servo/servo/issues/37727 is the same issue and I confirmed that in the above + # case testinput does nothing useful. We will see if this occurs again. +https://github.com/servo/servo/pull/37970 (@TimvdLippe, @jdm, #37970) Return correct source position for element CSP violations (#37970) + # The scripted_caller only has information if the context is coming + # from a script. If an element fetch listener processes CSP + # violations, then this information doesn't exist. Instead, we should + # use the global URL and the line number. WPT tests don't appear + # to expect a column number, as they are all zero. Not all elements + # are updated, as I am not actually sure all of them need it. + # The source position remains an Option, since there are also code + # paths that don't correspond to element or script sources. Maybe + # in the future we can always determine the source position, but + # let's take small steps towards that. + # Part of #4577 +https://github.com/servo/servo/pull/37885 (@webbeef, #37885) Avoid rooting/unrooting in Node::rev_version (#37885) + # The iterator produced by Node::inclusive_ancestors roots the items but rev_version just drop and unroot them right + # away. This patch makes it possible to work on the Node references instead to avoid rooting. + # *Describe the changes that this pull request makes here. This will be the commit message.* + # Testing: *Describe how this pull request is tested or why it doesn't require tests* + # Fixes: *Link to an issue this pull requests fixes or remove this line if there is no issue* +https://github.com/servo/servo/pull/37955 (@longvatrong111, #37955) script_thread: handle_unfocus_msg ignores unfocus request of top-level document (#37955) + # `ScriptThread::handle_unfocus_msg` ignores unfocus request of top-level document + # Fix errors in webdriver navigation commands, which may request unfocus on top-level documents. + # Testing: + # `tests/wpt/meta/webdriver/tests/classic/back/back.py` + # `tests/wpt/meta/webdriver/tests/classic/forward/forward.py` +https://github.com/servo/servo/pull/37668 (@sagudev, @mrobinson, #37668) canvas: Properly bound all image pattern axis by inserting clip (#37668) + # Before we only handled no-repeat for rect, this means we rendered https://sagudev.github.io/briefcase/no-repeat.html + # incorrectly (like firefox). Now if one of the axis is bounded (does not repeat) we clip it and let other axis be + # unbounded (technically we clip it to end of canvas). + # This is also needed for vello backend. + # Testing: Tests in WPT exists and another test is added. +https://github.com/servo/servo/pull/37715 (@kkoyung, #37715) Implement cookie expiry date parsing algorithm (#37715) + # The cookie-rs library parses the cookie expiry date based on the format from RFC 2616 (for HTTP/1.1), which is + # stricter than the format from RFC 6265 (for HTTP cookie). + # This patch implements the cookie expiry date algorithm from RFC 6265. When Cookie::parse fails in parsing the + # expiry date, we try to parse the expiry again with this algorithm, to provide extra compatibility with legacy systems. + # Testing: Pass a WPT test that was expected to fail before, and add a unit test. + # Fixes: #36452 +>>> 2025-07-13T06:04:16Z +https://github.com/servo/servo/pull/38026 (@servo-wpt-sync, #38026) Sync WPT with upstream (13-07-2025) (#38026) + # Automated downstream sync of changes from upstream as of 13-07-2025 + # [no-wpt-sync] +https://github.com/servo/servo/pull/38020 (@yezhizhen, #38020) script: Get the screen metrics from the `WebViewDelegate` instead of via the compositor (#38020) + # Similar to #37960, previously, `AvailHeight`, `AvailWidth`, `Height`, `Width` ask compositor for screen metrics. This + # PR moves the request to embedder. + # This simplifies code, and reduces workload of compositor, which is busier most of time. + # Testing: No behaviour change. Updated some tests. `Width/Height` matches other browsers. +https://github.com/servo/servo/pull/38018 (@jdm, #38018) script: Minimize layout queries for window scroll offsets. (#38018) + # These changes reduce the number of times we need to query layout for the same information when creating mouse/pointer + # events. + # Testing: No new tests required for maintaining existing behaviour. +https://github.com/servo/servo/pull/37575 (@jdm, #37575) net: Split read-only and read-write IndexedDB operations into separate enums (#37575) + # This change allows the compiler to recognize if any read-only operations are missing an implementation when + # processing a readonly transaction. + # Testing: The existing behaviour is unchanged, so current tests suffice. The new code is unused and cannot be tested. + # Fixes: part of #6963 +https://github.com/servo/servo/pull/38002 (@TimvdLippe, #38002) Fix reporting when only the report-only CSP header is present (#38002) + # This was a bit confusing at first, but the report-only only + # had an effect if it was used in conjunction with the regular + # CSP header. This is incorrect, as the report-only header + # can be present on its own. + # Additionally, there was double-logic for parsing the CSP list + # values, since we can only concatenate CSP lists if we have + # an initial value, which requires a concrete policy value. + # Therefore, abstract that way by looping over both headers and + # handling the case where initially it is `None` and, if the + # CSP header is not present, still `None` when we parse + # the `report-only` header. + # Additionally, update a WPT test. It was expecting the image + # to load, yet was showing the fail image. + # Part of #4577 +https://github.com/servo/servo/pull/37967 (@sagudev, #37967) canvas: Use wrapped `kurbo::BezPath` for path everywhere (#37967) + # This PR removes existing path(segment) abstractions in favor of `kurbo::BezPath`, well actually wrapped + # `kurbo::BezPath`, to ensure building of valid paths. This allows us better Path2D building in script and doing + # all validation and segmentation there and also allows us remove blocking is_point_in_path on Path2D as we can + # now do this in script. Current path is still done on canvas thread side as it will be harder to move to script + # (will be done as a follow up), but it now uses this new path abstraction. + # Using kurbo also allows us to ditch our manual svgpath parser with the one provided by kurbo. + # Same code is stolen from: https://github.com/servo/servo/pull/36821. + # Testing: Existing WPT tests + # Fixes: #37904 + # wpt run: https://github.com/sagudev/servo/actions/runs/16172191716 +https://github.com/servo/servo/pull/38012 (@atouchet, #38012) Use consistent spacing and alphabetize `dependabot.yml` (#38012) + # This uses consistent spacing for indentation. I'm not sure if it was causing any issues but it has been a problem + # before (#36642). Also reorder categories to be in alphabetical order. + # Testing: No testing for Dependabot file. +https://github.com/servo/servo/pull/37605 (@iamlockon, #37605) script: Add a Constraint `DOMException` for IndexedDB (#37605) + # Add Constraint DOMException to handle the name conflict error in `IDBDatabase::createObjectStore` method. + # Testing: `./mach test-wpt tests/wpt/tests/IndexedDB/`, but it seems there are many test failures even in main + # branch already ([related comment](https://github.com/servo/servo/pull/37605#issuecomment-2993889163)). + # Fixes: #37571 +https://github.com/servo/servo/pull/38016 (@sagudev, #38016) chore: Fix expectation of dom/xslt/large-cdata.html and disable HOS in CI (#38016) + # I've seen two multiple runs failing that reported this test as stable FAIL (and in worst case it's intermittent + # TIMEOUT, but it does not look like it). We also disable HOS in CI, because they currently do not work: [#general > + # CI runners @ 💬](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/CI.20runners/near/528443964) + # Testing: Just expectation fix. +>>> 2025-07-14T06:11:58Z +https://github.com/servo/servo/pull/38038 (@MichaelMcDonnell, #38038) Add Linux .desktop file (#38038) + # I'm trying to use Servo as a daily driver. I like to pin the most often used apps to the my taskbar (Dash to Panel + # in Gnome). I also launch apps from the menu (Arc Menu). Adding a .desktop file make it show up in the menu. I could + # not get pinning to work until I set the name with `winit`. This is because the name is used to match it with the + # icon. I used the Gnome Looking Glass (lg) command to determine that the name was not set. + # Testing: I followed the instructions that I put in the .desktop file. I copied the .desktop file to the right + # folder, set up a link to the svg icon, and adjusted the paths to point to the compiled executable. +https://github.com/servo/servo/pull/38039 (@atouchet, #38039) Update h2 and hyper (#38039) + # Update h2 and hyper. + # Testing: No tests for dependency updates. +https://github.com/servo/servo/pull/38037 (@atouchet, #38037) Update ahash and ppv-lite86 (#38037) + # Update ahash and ppv-lite86. + # Testing: No tests for dependency updates. +https://github.com/servo/servo/pull/38007 (@leo030303, @Loirooriol, #38007) layout: Fix bug where whitespace didn't have line decorations (#38007) + # This PR fixes the issue where underlines weren't appearing on whitespaces. This was due to whitespace being ignored + # in the `glyphs` function of `components/layout/display_list/mod.rs` when the fragment didn't have a selection. I + # added in a check to include the whitespace if there's a selection or if there are any line decorations. I also + # renamed the field from `ignore_whitespace` to `include_whitespace` to make it a bit clearer since it was being + # reversed everywhere it was used anyway. + # **Before:** + # **After:** + # Testing: `/css/css-text/white-space/pre-wrap-018.html` is now passing. Also verified manually by running + # `data:text/html;base64,PGRpdiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij5IZWxsbyBXb3JsZCE8L2Rpdj4= ` + # Fixes: https://github.com/servo/servo/issues/33463 +https://github.com/servo/servo/pull/38028 (@yezhizhen, #38028) mach (Windows): make `vswhere.exe` work properly (#38028) + # Previously, the args passed to `vswhere.exe` was wrong. There is no generic component + # ID called `Microsoft.VisualStudio.Component.Windows10SDK`, but always something like + # `Microsoft.VisualStudio.Component.Windows10SDK.19041` / `Microsoft.VisualStudio.Component.Windows11SDK.22621`. + # That's why users always had to manually setup environment variable `VSINSTALLDIR`, `VisualStudioVersion`. + # This QoL PR also makes `mach` compatible with Windows 11 SDK, and update README.md to be consistent with + # https://github.com/servo/book/pull/92. + # Testing: Tested locally and working fine after removing environment variables. +https://github.com/servo/servo/pull/38013 (@atouchet, @mukilan, #38013) Update polling and de-dupe hermit-abi (#38013) + # Update polling and de-dupe hermit-abi. + # Testing: No tests for dependency update. +https://github.com/servo/servo/pull/38019 (@jschwe, #38019) Re-enable HOS-CI (#38019) + # The self-hosted runners should be up and running again, so we can re-enable. + # Testing: If CI passes, it shows that the runners are there again. +>>> 2025-07-15T06:15:40Z +https://github.com/servo/servo/pull/38054 (@longvatrong111, #38054) webdriver: Allow script thread to fail to send response for `ExecuteScript` (#38054) + # When script thread executes script sent from webdriver, if an alert appears, webdriver can stop waiting for the + # script response and process the next command. + # This PR allows script thread to fail to send response for `ExecuteScript` if the channel is closed. + # cc: @xiaochengh +https://github.com/servo/servo/pull/38074 (@atouchet, #38074) Update jobserver (#38074) + # Update jobserver. + # Testing: No tests for dependency update. +https://github.com/servo/servo/pull/38027 (@jdm, #38027) IndexedDB: communicate transaction errors and async response data more precisely (#38027) + # Digging into several crashing tests revealed that committing transactions is a fallible operation. Propagating + # those errors led to exposing many new errors caused by the IDBRequest implementation assuming that all successful + # responses contained a structured clone. The end result is a bunch of new test failures that were previously hidden. + # Testing: Existing test coverage is sufficient. +https://github.com/servo/servo/pull/38004 (@gterzian, #38004) script: introduce safe wrappers for js val conversions (#38004) + # Introduce a safe wrapper trait for the unsafe `ToJSValConvertible`, and use it in `script/dom` where the default + # `T` implementation works. + # Part of https://github.com/servo/servo/issues/37951 +https://github.com/servo/servo/pull/37762 (@jdm, #37762) script: Reduce usage of Trusted in Node::insert. (#37762) + # These changes introduce a new kind of task that uses a variation of the `task!` syntax. Existing `task!` usages + # create task structs that have a `Send` bound, which requires the use of `Trusted` to reference a DOM object T + # inside of the task closure. The new syntax replaces the `Send` bound with a `JSTraceable` bound, which requires + # explicit capture clauses with types. This looks like: + # ```rust + # task!(ScriptPrepare: {script: DomRoot} |script| { + # script.prepare(CanGc::note()); + # }), + # ``` + # The capture clauses must list every value that will be referenced from the closure's environment—these values are + # moved into fields in the generated task structure, which allows them to be traced by the GC as part of a generated + # JSTraceable implementation. Since the closure itself is not a `move` closure, any attempts to reference values + # not explicitly captured will generate a borrow checker error since the closure requires the `'static` lifetime. + # Testing: Existing WPT tests exercise these code paths. I also attempted to write incorrect tasks that capture + # references or use values not explicitly captured, and the compiler correctly errors out. + # Fixes: part of #35517 +https://github.com/servo/servo/pull/38073 (@atouchet, #38073) Update core-foundation (#38073) + # Update core-foundation. + # Testing: No tests for dependency update. +https://github.com/servo/servo/pull/38058 (@euclid.ye@huawei.com, #38058) script: Improve `webdriver_handler::get_element_in_view_center_point` (#38058) + # 1. Some rounding was wrongly used which can be a source of inaccuracy. + # 2. Use `window.InnerWidth` instead of `body.ClientWidth` according to spec. + # Testing: Many new passing cases. + # Fixes: Part of #38042. +https://github.com/servo/servo/pull/38070 (@sebsebmc@gmail.com, #38070) Refactor and document cookie-list retrieval (#38070) + # This refactors some of the cookie retrieval mechanism to be less repetitive and separates the cookie-list from + # the cookie-string which will also be needed for Cookie Store. + # Testing: No new behavior, should be covered by existing WPT tests. +https://github.com/servo/servo/pull/38071 (@dependabot[bot], @dependabot[bot], #38071) build(deps): bump memmap2 from 0.9.5 to 0.9.7 (#38071) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=memmap2&package-manager=cargo& + # previous-version=0.9.5&new-version=0.9.7)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dep + # endabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38068 (@dependabot[bot], @dependabot[bot], #38068) build(deps): bump rgb from 0.8.51 to 0.8.52 (#38068) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rgb&package-manager=cargo&prev + # ious-version=0.8.51&new-version=0.8.52)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depen + # dabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38065 (@dependabot[bot], @dependabot[bot], #38065) build(deps): bump hermit-abi from 0.5.0 to 0.5.2 (#38065) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hermit-abi&package-manager=car + # go&previous-version=0.5.0&new-version=0.5.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38067 (@dependabot[bot], @dependabot[bot], #38067) build(deps): bump async-compression from 0.4.25 to 0.4.27 (#38067) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-compression&package-mana + # ger=cargo&previous-version=0.4.25&new-version=0.4.27)](https://docs.github.com/en/github/managing-security-vulnerabiliti + # es/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38047 (@arihant2math, #38047) script: Use Pythonic file names for code generation and use `functools.cache` (#38047) + # Renames the files to pythonic file names. Also replaces the bespoke caching function with the functools caching + # function which is functionally equivalent. +https://github.com/servo/servo/pull/38064 (@dependabot[bot], @dependabot[bot], #38064) build(deps): bump crc32fast from 1.4.2 to 1.5.0 (#38064) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=crc32fast&package-manager=carg + # o&previous-version=1.4.2&new-version=1.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-d + # ependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38046 (@webbeef, #38046) BroadcastChannel: cleanup routers when closing tabs (#38046) + # BroadcastChannel uses 2 hash maps in the constellation and they were not kept properly in sync. Also fixed a logic + # error where `Option>` was not considered empty when being `None`. + # Testing: These warnings should not happen anymore: + # [2025-07-14T03:54:22Z WARN constellation::constellation] No sender for broadcast router: (4,1) + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including ImageBitmap (should never happen). + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including MessagePort (should never happen). + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including OffscreenCanvas (should never happen). + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including ReadableStream (should never happen). + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including WritableStream (should never happen). + # [2025-07-14T03:33:59Z WARN constellation_traits::structured_data] Attempt to broadcast structured serialized data + # including TransformStream (should never happen). +https://github.com/servo/servo/pull/38055 (@mrobinson, #38055) compositor: Do not wait for animation termination to take screenshots (#38055) + # WPT tests are expected to create screenshots as soon as everything is + # loaded. If an animation is happening adding the "reftest-wait" class to + # the root element is appropriate way to delay the screenshot. Previously, the + # test harness was waiting for all animations to finish, but that is just + # leading to many timeouts. Removing that code fixes the timeouts. + # Two Servo-specific tests are also updated as they were written with + # Servo's previous behavior in mind. + # Testing: There are test result updates for this change. Many TIMEOUTS now either correctly + # PASS OR FAIL. + # Fixes: #36931. +https://github.com/servo/servo/pull/38057 (@ibluegalaxy_taoj@163.com, #38057) layout: dirty parent node with NodeDamage::ContentOrHeritage when text content changed (#38057) + # This change aims to reduce the scope of incremental box tree construction. Previously, when text content changed, + # the parent node would always be marked as requiring box tree reconstruction; now, it is adjusted to only mark the + # parent node as needing to recollect its box tree children. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/38050 (@tharkum, #38050) imagebitmap: Remove ImageBitmap from experimental web platform features (#38050) + # Enable by default the DOM "ImageBitmap" interface previously gated behind + # "dom.imagebitmap.enabled" preference as experimental web platform feature. + # https://html.spec.whatwg.org/multipage/imagebitmap-and-animations.html#imagebitmap + # NOTE: Non blocking non supported functionality: + # - vector HTMImageElement, bitmap/vector SVGImageElement + # - EXIF image orientation + # Testing: Covered by existing WPT tests + # Fixes: #34112 +https://github.com/servo/servo/pull/38045 (@yezhizhen, #38045) Chore: Fix warnings for openxr (#38045) + # These warnings have been there for quite a while and annoying. + # ``` + # Compiling webxr v0.0.1 (D:\servo\components\webxr) + # warning: variable does not need to be mutable + # --> components\webxr\openxr\mod.rs:557:17 + # | + # 557 | let mut context = contexts + # | ----^^^^^^^ + # | | + # | help: remove this `mut` + # | + # = note: `#[warn(unused_mut)]` on by default + # warning: field `profile_type` is never read + # --> components\webxr\openxr\interaction_profiles.rs:50:9 + # | + # 49 | pub struct InteractionProfile { + # | ------------------ field in this struct + # 50 | pub profile_type: InteractionProfileType, + # | ^^^^^^^^^^^^ + # | + # = note: `InteractionProfile` has derived impls for the traits `Debug` and `Clone`, but these are intentionally + # ignored during dead code analysis + # = note: `#[warn(dead_code)]` on by default + # ``` + # Testing: No behaviour change. +>>> 2025-07-16T06:18:14Z +https://github.com/servo/servo/pull/38103 (@atouchet, #38103) Update wasm-bindgen and associated dependencies (#38103) + # Update wasm-bindgen and associated dependencies. + # Testing: No tests for dependency updates. +https://github.com/servo/servo/pull/37682 (@arihant2math, #37682) [IndexedDB] Adhere better to the specification for idb object store related operations (#37682) + # Many object store related operations require the transaction to be checked: to ensure it is still active, and, + # if the operation is a write, that the transaction is not read-only. I've added the `check_transaction` method to + # perform these checks. + # Additionally `Clear` was still half-implemented, so I went ahead and implemented that. +https://github.com/servo/servo/pull/38095 (@euclid.ye@huawei.com, #38095) webdriver: improve perform pointermove & wheel actions with more accurate coordinates (#38095) + # 1. Create `get_origin_relative_coordinates` according to + # [spec](https://w3c.github.io/webdriver/#dfn-get-coordinates-relative-to-an-origin) to be reused + # 2. Add previously missing offset for PointerOrigin::Element + # 3. Refactor code for perform pointermove/wheel to be closer to spec. + # 4. Handle some issues with spec: https://github.com/w3c/webdriver/issues/1758 + # Testing: Several new passing cases as we are more precise with coordinates now. + # Fixes: Part of #38042. +https://github.com/servo/servo/pull/38076 (@jdm, #38076) indexeddb: Allow deleting unknown DBs. (#38076) + # The current behaviour is too strict according to the spec and is the cause of many intermittent test errors. + # Testing: Existing coverage is sufficient. + # Fixes: #37706 +https://github.com/servo/servo/pull/38077 (@webbeef, #38077) Refactor constellation broadcast channel (#38077) + # - Move the 2 hash maps used to manage channels in their own struct. + # - The constellation is still in charge of origin checks since it holds the pipeline information required. + # - BroadcastMsg is renamed to BroadcastChannelMsg for consistency. + # Testing: covered by existing tests. + # Fixes: #38060 +https://github.com/servo/servo/pull/37315 (@shubhamg13, #37315) renderer: Have the viewport meta element establish the initial zoom of new pages (#37315) + # This patch contains 2 components: + # 1. Instead of passing `self.pinch_zoom_level().get()` while checking `zoom_result`, initialize it in + # `combined_magnification`. Ideally, this part shouldn't have any effect on behavior. + # 2. Separates the logic for PinchZoom and ViewportZoom. So, when a new page is opened, it will start with its own + # viewport zoom scale (rather than the previous scale multiples). + # i.e `self.pinch_zoom_level().get() * 1.0 * magnification` + # ```rust + # let mut combined_magnification = 1.0; + # ... + # ScrollZoomEvent::ViewportZoom(magnification) => { + # combined_magnification *= magnification + # }, + # ... + # let pinch_zoom_result = match self.set_pinch_zoom_level(self.pinch_zoom_level().get() * combined_magnification) + # ``` + # Testing: This change adds a new WPT test. + # Fixes: #37314 +https://github.com/servo/servo/pull/38082 (@euclid.ye@huawei.com, #38082) servoshell: reduce duplication for conversion between physical/logical position/size (#38082) + # With helper functions introduced in #38020, this is now becoming reality. + # Testing: No behaviour change. + # Fixes: #37937 +https://github.com/servo/servo/pull/37950 (@longvatrong111, @jdm, #37950) Webdriver GoBack and GoForward commands wait for navigation complete (#37950) + # After sending `GoBack` or `GoForward` command, webdriver wait for the navigation complete. + # It can be achieved by waiting for `WebViewDelegate::notify_history_changed` + # Testing: + # `tests/wpt/meta/webdriver/tests/classic/back/back.py` + # `tests/wpt/meta/webdriver/tests/classic/forward/forward.py` +https://github.com/servo/servo/pull/37998 (@tharkum, #37998) canvas: Add initial support of ImageBitmapRenderingContext (#37998) + # Add support of the ImageBitmapRenderingContext as "bitmaprenderer" + # canvas context mode to RenderingContext/OffscreenRenderingContext + # https://html.spec.whatwg.org/multipage/#imagebitmaprenderingcontext + # It is initial implementation with public interface API but without + # any display presentation support for HTMLCanvasElement. + # Testing: Improvements in the following tests: + # - html/canvas/element/manual/imagebitmap/createImageBitmap-origin.sub.html + # - html/canvas/offscreen/manual/text/canvas.2d.offscreen* + # - html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas.transfer.to.imagebitmap.nocrash.html + # - imagebitmap-renderingcontext/* +https://github.com/servo/servo/pull/38081 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38081) Chore: Merge all moved webdriver command msg in constellation (#38081) + # Small clean up to shortened the code length and making it more neat. +https://github.com/servo/servo/pull/37935 (@longvatrong111, #37935) webdriver: Element click waits for navigation complete (#37935) + # Step 11 in https://w3c.github.io/webdriver/#dfn-element-click + # > [Try](https://w3c.github.io/webdriver/#dfn-try) to [wait for navigation to + # complete](https://w3c.github.io/webdriver/#dfn-wait-for-navigation-to-complete) with session. + # This fixes issue in which element_click triggers navigation, but incoming commands still interact with old page. + # Testing: + # https://github.com/longvatrong111/servo/actions/runs/16175767947 + # https://github.com/longvatrong111/servo/actions/runs/16175770044 +https://github.com/servo/servo/pull/37906 (@uthmaniv, #37906) Send early DevToolsHttpRequest and relocate response reporting to main_fetch (#37906) + # This change refactors how we notify DevTools about network activity so that all fetches (even those served from + # cache) appear correctly in the Network panel, and so that DevTools sees request metadata as soon as possible rather + # than waiting until the end of a full HTTP cycle. + # - Before, we only send DevTools events inside http_network_fetch, so cached responses (which skip that path) never + # show up. By emitting a minimal HttpRequest event at the very start of main_fetch (with URL, method, pipeline and + # browsing IDs), we guarantee every fetch shows up immediately. + # - Then, by moving HttpResponse notifications out of http_network_fetch into main_fetch (right after process_response + # and process_response_eof), we ensure DevTools gets status, header, and completion events for both network and cache + # hits. Leveraging nullable fields in NetworkEventActor lets us incrementally fill in timing, header, and body data + # later, improving DevTools’ visibility. + # Testing: Ran servo with `--devtools=6080` flag, cached responses now appear in the network panel + # Fixes: https://github.com/servo/servo/issues/37869 +https://github.com/servo/servo/pull/38078 (@jdm, #38078) tests: Force a blank config directory for each WPT test run. (#38078) + # This ensures a consistent state when running tests that can otherwise leave artifacts around + # (eg. localStorage/IndexedDB/cookies). + # Testing: Existing test coverage is sufficient. +>>> 2025-07-17T06:09:02Z +https://github.com/servo/servo/pull/38101 (@arihant2math, #38101) Move common indexeddb methods out of dom implementations (#38101) + # A lot of shared functions were scattered around the dom files; I moved them into `indexed_db.rs` for clarity. + # Fixes: Nothing to my knowledge, just a cleanup +https://github.com/servo/servo/pull/37846 (@arihant2math, #37846) net: Do not print SVG tree in `Debug` implementation of `VectorImageData` (#37846) + # Manually implement Debug LoadResult so that VectorImageData doesn't get logged. + # Testing: N/A + # Fixes: #37771 +https://github.com/servo/servo/pull/38119 (@sagudev, #38119) servoshell: Update egui to 0.32 (#38119) + # We also need to bump egui-file-dialog and accesskit_winit. Changes are done based on migration paths provided by egui. + # Testing: No tests for servoshell + # Fixes: #38117 +https://github.com/servo/servo/pull/38118 (@sagudev, #38118) CI: remove i686-linux-android (#38118) + # As discussed in [#general > Help solving android bindgen failure @ + # 💬](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Help.20solving.20android.20bindgen.20failure/near + # /529091066) + # Testing: Not needed, becuase we just remove from CI + # Will help with #37077. +https://github.com/servo/servo/pull/38097 (@sagudev, #38097) canvas: Use stored transform instead of querying canvas paint thread (#38097) + # We already store transform in context state, so let's just use this when querying instead of using IPC to ask + # canvas paint thread. + # Testing: Existing WPT tests + # work towards #38022 + # try run: https://github.com/sagudev/servo/actions/runs/16299182583 +https://github.com/servo/servo/pull/38099 (@gterzian, #38099) script: further use of safe to jsval (#38099) + # Remove size bound from safe to jsval trait, apply to script/dom, with the exception of windowproxy. + # Second part of https://github.com/servo/servo/issues/37951 + # Signed-off-by: gterzian + # *Describe the changes that this pull request makes here. This will be the commit message.* + # Testing: *Describe how this pull request is tested or why it doesn't require tests* + # Fixes: *Link to an issue this pull requests fixes or remove this line if there is no issue* +https://github.com/servo/servo/pull/38113 (@euclid.ye@huawei.com, #38113) webdriver: Reduce IPC for viewport boundary check (#38113) + # Testing: No behaviour change. +https://github.com/servo/servo/pull/38079 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38079) WebDriver: Implement some missing steps of wait for navigation to complete (#38079) + # Based on https://w3c.github.io/webdriver/#dfn-wait-for-navigation-to-complete. We still have not implement the + # timer parameter, but I think it makes sense to implement Step 8.4 of `Navigation To` first. +https://github.com/servo/servo/pull/38108 (@atouchet, #38108) Update non-breaking dependencies (#38108) + # Update non-breaking dependencies. + # Testing: No tests for dependency updates. +https://github.com/servo/servo/pull/38098 (@sagudev, #38098) canvas: Store current path only in user space (#38098) + # Before we stored path in user or device space and do conversions as needed, but that complicated things. + # So we got two options: + # 1. store path in device space: here we would need to add `Option` to each path command, and before each usage we + # need to invert current transform (as current transform is already applied by stroke/fill and we cannot just pass I, + # because we need scaling to make lines thicker) + # 2. store path in user space and do transform whenever we change the transform. There is no need to do inverse on uses. + # I chose option 2. because it's less complicated and will probably benefit performance (set transform typically + # called more rarely than path building/fill/stroke). + # In follow up PR I will move all of this to script, that's why PathBuilderRef was not removed yet. + # Testing: Existing WPT tests + # work towards #38022 + # try run: https://github.com/sagudev/servo/actions/runs/16304221495 +https://github.com/servo/servo/pull/38053 (@abdelrahman1234567, #38053) servoshell: Send all button events to the `WebView` regardless of what button is pressed (#38053) + # Sending all mouse button events (Left, Right, Middle, Back, Forward) to the constellation for processing. Before, + # only left and right mouse buttons were handled. + # Testing: There is no new test for this. Manually testing was done. We currently + # do not have a good way to test user interaction in servoshell. + # Fixes: #37996 +>>> 2025-07-18T06:06:26Z +https://github.com/servo/servo/pull/38154 (@sebsebmc@gmail.com, #38154) Add CookieStore pref and add baseline test expectations (#38154) + # This adds a preference to control the Cookie Store feature. Also enables the Cookie Store WPT tests with the + # preference and adds the expectations as a baseline. These tests are expected to be failing because we have not + # implemented the Cookie Store yet. + # Testing: Enables new WPT tests. +https://github.com/servo/servo/pull/38153 (@atouchet, #38153) Update tempfile (#38153) + # Update tempfile. + # Testing: No tests for dependency update. +https://github.com/servo/servo/pull/38140 (@longvatrong111, #38140) webdriver: Implement send alert text (#38140) + # Implement webdriver `SendAlertText` command + # Tests: + # https://github.com/longvatrong111/servo/actions/runs/16342669929 + # https://github.com/longvatrong111/servo/actions/runs/16342671477 + # cc: @xiaochengh +https://github.com/servo/servo/pull/38149 (@stevennovaryo, #38149) script: Impl safe `from_jsval` wrapper (#38149) + # Implement `SafeFromJSValConvertible`, a safe wrapper for `ToJSValConvertible`. And, replace unsafe `ToJSValConvertible` + # with `SafeFromJSValConvertible` in `script/dom` to reduce the amount of unsafe code in `script`. + # This would support the implementation of `AdoptedStylesheet` where we will need to have a setter/getter of sequence, + # that was implemented by `any` types. + # Part of https://github.com/servo/servo/issues/37951 +https://github.com/servo/servo/pull/38148 (@dependabot[bot], @dependabot[bot], #38148) build(deps): bump ab_glyph from 0.2.30 to 0.2.31 (#38148) + # Bumps [ab_glyph](https://github.com/alexheretic/ab-glyph) from 0.2.30 to 0.2.31. + # Release notes + # Sourced from ab_glyph's releases. + # ab-glyph-0.2.31 + # Add "gvar-alloc" feature enabled by default (activates ttf-parser "gvar-alloc" feature). + # Provides full gvar table support. + # Commits + # f963bca Release ab_glyph 0.2.31 + # a216ede Add "gvar-alloc" feature enabled by default (#118) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ab_glyph&package-manager=cargo + # &previous-version=0.2.30&new-version=0.2.31)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38147 (@dependabot[bot], @dependabot[bot], #38147) build(deps): bump zbus_macros from 5.8.0 to 5.9.0 (#38147) + # Bumps [zbus_macros](https://github.com/dbus2/zbus) from 5.8.0 to 5.9.0. + # Release notes + # Sourced from zbus_macros's releases. + # 🔖 zbus_macros 3.14.0. + # ✨ Allow unicast signals through the dbus_interface. Fixes #374. + # ⬆️ Bump our MSRV. More and more dependencies are requiring Rust 1.64.0, so let's bump our MSRV + # to match. + # 🔥 Drop manual Default impl of PropertyEmitsChangedSignal. After Rust 1.64, we can use the + # derive for this. + # ⏪️ Revert locking of winnow version. We've bumped our MSRV so there is no need for this + # workaround anymore. + # 🎨 Code comments should also adhere to 100 character limit. + # Commits + # 30487b8 Merge pull request #1434 from zeenix/zb-release + # 4b7928d 🔖 zb,zm: Release 5.9.0 + # d570c94 📝 CONTRIBUTING: Link to gimoji's web interface + # 0bf6e14 Merge pull request #1431 from zeenix/name-request-defaults + # ba2a407 🧵 zb: Remove deadlocks in Connection name request tasks + # 3d35496 🐛 zb: Allow name replacement by default + # 0ad37f3 📝 zb: Remove a bunch of unnecessary links + # 493a994 Merge pull request #1429 from valpackett/val/knrmmkqzrvyp + # f2fb16f 🧑‍💻 zb: add fdo::dbus::StartServiceReply type + # f93584d ⬆️ micro: Update winnow to v0.7.12 (#1428) + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zbus_macros&package-manager=ca + # rgo&previous-version=5.8.0&new-version=5.9.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/37982 (@euclid.ye@huawei.com, #37982) servoshell: Fix scroll speed for Desktop (#37982) + # According to discussion https://github.com/servo/servo/pull/34063#discussion_r2187147615, this PR + # 1. adds `PIXEL_DELTA_FACTOR` to increase scroll speed for `MouseScrollDelta::PixelDelta`, which is used by macOS + # and high-precision mouse. + # 2. adds `LINE_WIDTH` to increase x-axis scroll speed for `MouseScrollDelta::LineDelta`, which is used by Linux + # and Windows. + # 3. Increase mouse scroll speed in general to match other browsers + # 4. Reduce keyboard scroll offset to scroll exactly "one line", to match other browsers. + # Testing: Example in #35037 can now scroll in x-axis as fast as y-axis, similar to other browsers. + # Fixes: part of #38072. +https://github.com/servo/servo/pull/38144 (@dependabot[bot], @dependabot[bot], #38144) build(deps): bump zbus from 5.8.0 to 5.9.0 (#38144) + # Bumps [zbus](https://github.com/dbus2/zbus) from 5.8.0 to 5.9.0. + # Release notes + # Sourced from zbus's releases. + # 🔖 zbus 5.9.0 + # 🧵 Remove deadlocks in Connection name request tasks, resulting in leaks under certain + # circumstances. + # 🐛 When registering names, allow name replacement by default. + # ✨ Allow setting request name flags in connection::Builder. + # ✨ Proper Default impl for RequestNameFlags. This change is theoretically an API break for + # users who assumed the default value to be empty. + # 🧑💻 Add fdo::StartServiceReply type. In 6.0 this will be the return type of + # fdo::DBusProxy::start_service_by_name. For now, just provide a TryFrom<u32>. + # Commits + # 30487b8 Merge pull request #1434 from zeenix/zb-release + # 4b7928d 🔖 zb,zm: Release 5.9.0 + # d570c94 📝 CONTRIBUTING: Link to gimoji's web interface + # 0bf6e14 Merge pull request #1431 from zeenix/name-request-defaults + # ba2a407 🧵 zb: Remove deadlocks in Connection name request tasks + # 3d35496 🐛 zb: Allow name replacement by default + # 0ad37f3 📝 zb: Remove a bunch of unnecessary links + # 493a994 Merge pull request #1429 from valpackett/val/knrmmkqzrvyp + # f2fb16f 🧑‍💻 zb: add fdo::dbus::StartServiceReply type + # f93584d ⬆️ micro: Update winnow to v0.7.12 (#1428) + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zbus&package-manager=cargo&pre + # vious-version=5.8.0&new-version=5.9.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depend + # abot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38142 (@euclid.ye@huawei.com, #38142) webdriver chore: check browsing context existence before handling user prompt when required (#38142) + # Thanks to Trong with #38035, we can finally handle user prompt. This PR is mainly dirty work: + # 1. Add browsing context check before handling user prompt when required, according to spec. + # 2. Reduce IPC by removing redundant context existence check. + # 3. Add many missing docs. + # Testing: New passing cases and turn some ERROR into FAIL. +https://github.com/servo/servo/pull/38143 (@simonwuelker, #38143) Remove Document::set_allow_declarative_shadow_roots (#38143) + # This method is unused. `rustc` didn't complain because it was marked as `pub` (which it shouldn't have been). A + # few of the surrounding methods were also `pub`, which this change fixes. +https://github.com/servo/servo/pull/38110 (@euclid.ye@huawei.com, #38110) doc: Add doc for compositor/webview/embedder related to window/rect/inner_size/rendering_context (#38110) + # Add docs before actually fixing #38089, #38090, #37978, #38093. + # Testing: Just adding docs. +https://github.com/servo/servo/pull/38035 (@longvatrong111, #38035) webdriver: Add `handle any user prompts` step for all commands (#38035) + # - Add `handler any user prompt` step for all commands. + # - Enable webdriver tests which were blocked by `handle any user prompt` step. +https://github.com/servo/servo/pull/38033 (@TimvdLippe, #38033) Inherit CSP for blob workers (#38033) + # Workers created from Blobs inherit their CSP. Now we inherit the CSP and set the correct base API url. The base + # API url should be used when determining the + # report-uri endpoint. Otherwise, the blob URL would be used as a base, which is invalid and the report wouldn't be sent. + # Also create a helper method to concatenate two optionals of CSPList, which was used in several places. + # Part of #4577 +https://github.com/servo/servo/pull/38107 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38107) WebDriver: Set current browsing context for NavigateTo and Refresh command (#38107) + # Previously we didn't change the current browsing context id in our WebDriver Session after the commands `Navigate + # To` and `Refresh` +https://github.com/servo/servo/pull/38043 (@jerensl, @mukilan, #38043) Mach: add type check on python tidy folder (#38043) + # Introduce `python/tidy` folder in pyrefly type checker + # Testing: Manual testing via `./mach test-tidy` command +https://github.com/servo/servo/pull/38135 (@jerensl, #38135) remove test-wpt-android from mach command (#38135) + # This command is no longer work as we arleady remove `in_android_emulator` in this PR + # [37958](https://github.com/servo/servo/pull/37958) cause of `setup_configuration_for_android_target` is no longer + # exist in `python/servo` codebase + # These commands are being removed in order to implement Python type checking the Servo repository. + # Testing: This just removes some mach command so shouldn't need tests. +https://github.com/servo/servo/pull/38052 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38052) CI: Run webdriver tests using one process and 2 chunks (#38052) + # - Make the test more stable with setting one process only for each chunk, while still running it concurrently with + # different machine for each chunk. + # - Previously, there is an issue where the log files is too big to be uploaded to intermittent tracker. Now the + # log file should be smaller even if we have many errors, since we have multiple chunk. +https://github.com/servo/servo/pull/37947 (@abdelrahman1234567, #37947) script: Ensure that keyboard modifiers, screen point, and client point are set in WheelEvents (#37947) + # - Updating the WheelEvent initialization to correctly handle keyboard modifiers when the wheel event is triggered. The + # changes ensure that the modifiers (Ctrl, Alt, Shift, Meta) are properly set based on the current state of the + # keyboard when the wheel event is created. This is particularly important for scenarios where the wheel event is + # influenced by key presses, such as scrolling with the Ctrl key pressed to zoom in or out. + # - Updating the `screen_point` and `client_point` as it was always 0,0 before. Now, it shows the correct position + # of the mouse pointer while triggering the wheel event. + # Test: Manual Test case and existing WPT tests (classic/perform_actions/wheel.py[test_scroll_with_key_pressed]) + # Fixes: #37827 +>>> 2025-07-19T06:09:14Z +https://github.com/servo/servo/pull/38173 (@atouchet, #38173) Update rustc-hash and rustix (#38173) + # Update rustc-hash and rustix. + # Testing: No tests for dependency updates. +https://github.com/servo/servo/pull/38162 (@kkoyung, #38162) devtools: Use request destination as cause_type in NetworkEventActor (#38162) + # The cause_type in NetworkEventActor was derived from a hard-coded pattern match on the request URL file extension. + # This patch replaces the hard-coded pattern matching with the Destination field of Request, to provide a better + # alignment with the Fetch specification. + # Testing: Updated unit tests. + # Fixes: #38151 +https://github.com/servo/servo/pull/38172 (@dependabot[bot], @dependabot[bot], #38172) build(deps): bump webpki-roots from 1.0.1 to 1.0.2 (#38172) + # Bumps [webpki-roots](https://github.com/rustls/webpki-roots) from 1.0.1 to 1.0.2. + # Release notes + # Sourced from webpki-roots's releases. + # 1.0.2 + # Add "TrustAsia TLS ECC Root CA" and "TrustAsia TLS RSA Root CA" + # https://bugzilla.mozilla.org/show_bug.cgi?id=1972384 + # Add "SwissSign RSA TLS Root CA 2022 - 1" https://bugzilla.mozilla.org/show_bug.cgi?id=1845047 + # What's Changed + # Update dependencies by @​djc in rustls/webpki-roots#102 + # 1.0.2: track July 2025 CCADB changes by @​ctz in rustls/webpki-roots#103 + # Full Changelog: https://github.com/rustls/webpki-roots/compare/v/1.0.1...v/1.0.2 + # Commits + # 87222f0 1.0.2: track July 2025 CCADB changes + # 974587e Check MSRV in CI + # 3bd9fa5 Version Cargo.lock + # 769e56b Replace rustls-pemfile with PemObject API + # a639800 Scope certificate generation input + # 3e19303 Upgrade to rcgen 0.14 + # f3ea6fe Move all dependencies into workspace + # 944d375 Upgrade to webpki 0.103 + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpki-roots&package-manager=c + # argo&previous-version=1.0.1&new-version=1.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/abou + # t-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38171 (@dependabot[bot], @dependabot[bot], #38171) build(deps): bump clipboard-win from 5.4.0 to 5.4.1 (#38171) + # Bumps [clipboard-win](https://github.com/DoumanAsh/clipboard-win) from 5.4.0 to 5.4.1. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clipboard-win&package-manager= + # cargo&previous-version=5.4.0&new-version=5.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/abo + # ut-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38170 (@dependabot[bot], @dependabot[bot], #38170) build(deps): bump sysinfo from 0.36.0 to 0.36.1 (#38170) + # Bumps [sysinfo](https://github.com/GuillaumeGomez/sysinfo) from 0.36.0 to 0.36.1. + # Changelog + # Sourced from sysinfo's changelog. + # 0.36.1 + # Linux: Improve processor CPU usage computation. + # Commits + # fc31b41 Merge pull request #1559 from GuillaumeGomez/update + # 20d3d29 Update crate version to 0.36.1 + # 400387e Update CHANGELOG for 0.36.1 version + # d46ed5d Merge pull request #1558 from GuillaumeGomez/improve-processor-cpu-usage-comp... + # 44e64c5 Improve processors CPU usage computation on linux + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sysinfo&package-manager=cargo& + # previous-version=0.36.0&new-version=0.36.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-d + # ependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38169 (@dependabot[bot], @dependabot[bot], #38169) build(deps): bump cc from 1.2.29 to 1.2.30 (#38169) + # Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.29 to 1.2.30. + # Release notes + # Sourced from cc's releases. + # cc-v1.2.30 + # Other + # define _REENTRANT by default (#1496) + # Changelog + # Sourced from cc's changelog. + # 1.2.30 - 2025-07-18 + # Other + # define _REENTRANT by default (#1496) + # Commits + # 9df3ccc chore: release v1.2.30 (#1498) + # 59854df Solarish-ish: define _REENTRANT by default (#1496) + # c319011 Update rusqlite requirement from 0.36.0 to 0.37.0 (#1494) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previ + # ous-version=1.2.29&new-version=1.2.30)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depend + # abot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38150 (@simonwuelker, #38150) Implement `allow_declarative_shadow_roots` for async html parser (#38150) + # This method was previously unimplemented, so attaching declarative shadow roots was always allowed. + # Testing: CI does not run with the async html parser. Try run: + # https://github.com/simonwuelker/servo/actions/runs/16350173930/job/46196332473 + # Part of https://github.com/servo/servo/issues/37418 +https://github.com/servo/servo/pull/38134 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38134) Webdriver: Forward ErrorStatus for take element screenshot (#38134) + # Based on [spec](tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini), we should not + # expect the error to only be `ErrorStatus::StaleElementReference`. + # Testing: `tests/wpt/meta/webdriver/tests/classic/take_element_screenshot/screenshot.py.ini` +https://github.com/servo/servo/pull/38158 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38158) Webdriver: Allow error when selecting file at ElementSendKeys (#38158) + # Based on [spec](https://w3c.github.io/webdriver/#element-send-keys), + # > 5. Verify that each file given by the user exists. If any do not, return + # [error](https://w3c.github.io/webdriver/#dfn-error) with [error code](https://w3c.github.io/webdriver/#dfn-error-code) + # [invalid argument](https://w3c.github.io/webdriver/#dfn-invalid-argument). +https://github.com/servo/servo/pull/38123 (@arihant2math, #38123) Proper compare implementation for IndexedDBKeyType (#38123) + # This is needed by the IndexedDBKeyRange implementation. + # Doesn't fix anything since it isn't used at the moment. +https://github.com/servo/servo/pull/38114 (@sagudev, #38114) canvas: Move current_default_path to script CanvasState (#38114) + # This PR moves current path handling from canvas paint thread to script's `CanvasState`. Because we used manual + # impl for arcto and some prechecks for early fail before sending IPC we also needed to fix some bugs in Path impl. + # Testing: Existing WPT tests + # work towards #38022 + # try run: https://github.com/sagudev/servo/actions/runs/16316090028 +https://github.com/servo/servo/pull/38136 (@stevennovaryo, #38136) css: Refactor `StyleSheetInDocument` owner (#38136) + # Refactor `documentotshadowroot::StyleSheetInDocument`, renaming it into `ServoStylesheetInDocument` to avoid + # confusion with Stylo's `StylesheetInDocument` trait. + # To support constructed stylesheet. The `ServoStylesheetInDocument.owner` would contains enum of: + # - `Dom` - for stylesheet parsed from an element. + # - `Dom` - for constructed stylesheet. + # Testing: No WPT regression. + # Fixes: #38133 +>>> 2025-07-21T06:16:34Z +https://github.com/servo/servo/pull/38160 (@euclid.ye@huawei.com, #38160) WebDriver: Wait focus to complete when switching window (#38160) + # Previously the webdriver do not wait for focus to complete, which can cause some instability. + # No matter interact as human or webdriver, the focus chain always goes as: Embedder forwards -> Constellation + # (do some updates) -> Embedder (do some updates). +https://github.com/servo/servo/pull/38186 (@webbeef, #38186) Adjust CSP for top-level image documents (#38186) + # Allows loading of document images even when they have a sandbox CSP rule to align with other browsers. + # Testing: No wpt failures: https://github.com/webbeef/servo/actions/runs/16403138806 + # Fixes: #38180 +https://github.com/servo/servo/pull/38181 (@TimvdLippe, #38181) Add warning for reporting CSP violations (#38181) + # This should help debug cases like #38180 +https://github.com/servo/servo/pull/38179 (@jdm, #38179) compositing: Remove unused dependency. (#38179) + # There are no uses of `net` within the `compositing` crate. +https://github.com/servo/servo/pull/38048 (@TimvdLippe, #38048) Forward CSP violations from load_whole_resource to parent event loop (#38048) + # Any CSP violations happening when loading a worker should be reported + # on the global of the document that creates the worker. Since workers + # run in different threads, we can't pass in this parent global into + # the worker global scope. Instead, we need to send a message to the + # parent event loop to report it on the correct global. + # Part of https://github.com/servo/servo/issues/4577 + # Fixes https://github.com/servo/servo/issues/37027 +https://github.com/servo/servo/pull/38178 (@servo-wpt-sync, #38178) Sync WPT with upstream (20-07-2025) (#38178) + # Automated downstream sync of changes from upstream as of 20-07-2025 + # [no-wpt-sync] +>>> 2025-07-22T06:11:37Z +https://github.com/servo/servo/pull/38196 (@jschwe, #38196) dom: Optimize IFrameCollection::validate (#38196) + # The `IFrameCollection` was previously rebuilt too often. This PR tries to address the todo, to only rebuild the + # IFrameCollection when necessary. + # Testing: `CSS Selector Invalidation: :has() invalidation should not be O(n^2)` wpt-test changed status from timeout + # to failed. + # Fixes: #38131 (IFrameCollection::validate accounts for 30% of script time in DOM heavy scenarios) + # Co-authored-by: sharpshooter_pt +https://github.com/servo/servo/pull/38205 (@dependabot[bot], @dependabot[bot], #38205) build(deps): bump bytemuck_derive from 1.9.3 to 1.10.0 (#38205) + # Bumps [bytemuck_derive](https://github.com/Lokathor/bytemuck) from 1.9.3 to 1.10.0. + # Changelog + # Sourced from bytemuck_derive's changelog. + # bytemuck changelog + # 1.23.1 + # Added a windows-only ZeroableInOption impl for "stdcall" functions. + # 1.23 + # impl_core_error crate feature adds core::error::Error impl. + # More ZeroableInOption impls. + # 1.22 + # Add the pod_saturating feature, which adds Pod impls for Saturating<T> + # when T is already Pod. + # A bump in the minimum bytemuck_derive dependency from 1.4.0 to 1.4.1 to + # avoid a bug if you have a truly ancient cargo.lock file sitting around. + # Adds Send and Sync impls to BoxBytes. + # 1.21 + # Implement Pod and Zeroable for core::arch::{x86, x86_64}::__m512, __m512d and __m512i without nightly. + # Requires Rust 1.72, and is gated through the avx512_simd cargo feature. + # Allow the use of must_cast_mut and must_cast_slice_mut in const contexts. + # Requires Rust 1.83, and is gated through the must_cast_extra cargo feature. + # internal: introduced the maybe_const_fn macro that allows defining some function + # to be const depending upon some cfg predicate. + # 1.20 + # New functions to allocate zeroed Arc and Rc. Requires Rust 1.82 + # TransparentWrapper impls for core::cmp::Reverse and core::num::Saturating. + # internal: Simplified the library's fill_zeroes calls to write_bytes + # 1.19 + # Adds the #[track_caller] attribute to functions which may panic. + # 1.18 + # Adds the latest_stable_rust cargo feature, which is a blanket feature that turns all other features on that are + # both sound and compatible with Stable rust. + # 1.17.1 + # Adds #[repr(C)] to the union Transmute<A, B> type that's used internally + # for most of the transmutations. + # 1.17.0 + # Makes the must_cast versions of the by-value and by-ref casts be const. + # ... (truncated) + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bytemuck_derive&package-manage + # r=cargo&previous-version=1.9.3&new-version=1.10.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/ + # about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38204 (@dependabot[bot], @dependabot[bot], #38204) build(deps): bump serde_json from 1.0.140 to 1.0.141 (#38204) + # Bumps [serde_json](https://github.com/serde-rs/json) from 1.0.140 to 1.0.141. + # Release notes + # Sourced from serde_json's releases. + # v1.0.141 + # Optimize string escaping during serialization (#1273, thanks @​conradludgate) + # Commits + # 6843c36 Release 1.0.141 + # 6e2c210 Touch up PR 1273 + # 623d9b4 Merge pull request #1273 from conradludgate/optimise-string-escaping + # de70b7d use unreachable_unchecked for escape table. use a second match to roundtrip E... + # f2d940d replace start index with bytes slice reference + # cd55b5a Ignore mismatched_lifetime_syntaxes lint + # c1826eb Pin nightly toolchain used for miri job + # 8a56cfa Merge pull request #1248 from jimmycathy/master + # af3d80d chore: fix typo + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=serde_json&package-manager=car + # go&previous-version=1.0.140&new-version=1.0.141)](https://docs.github.com/en/github/managing-security-vulnerabilities/ab + # out-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38203 (@dependabot[bot], @dependabot[bot], #38203) build(deps): bump async-process from 2.3.1 to 2.4.0 (#38203) + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-process&package-manager= + # cargo&previous-version=2.3.1&new-version=2.4.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/abo + # ut-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38201 (@dependabot[bot], @dependabot[bot], #38201) build(deps): bump libredox from 0.1.4 to 0.1.6 (#38201) + # Bumps libredox from 0.1.4 to 0.1.6. + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libredox&package-manager=cargo + # &previous-version=0.1.4&new-version=0.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +>>> 2025-07-23T06:08:17Z +https://github.com/servo/servo/pull/38219 (@jschwe, #38219) ohos CI: Simplify getting the model name (#38219) + # Same output, but much easier and faster than sifting through the whole output of hdc bugreport. + # Testing: CI change: `./mach try` [run](https://github.com/servo/servo/actions/runs/16460283107) +https://github.com/servo/servo/pull/38198 (@ibluegalaxy_taoj@163.com, #38198) script: Use `NodeDamage::ContentOrHeritage` for slot changes (#38198) + # This change aims to reduce the scope of incremental box tree construction. Previously, when children of slot node + # changed, the slot would always be marked as requiring box tree reconstruction; now, it is adjusted to only mark + # the slot node as needing to recollect its box tree children. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/38209 (@euclid.ye@huawei.com, #38209) Implement setting position through webdriver for headed window (#38209) + # Previously, we pretend we are able to set position in response. Now we can really do it. + # Testing: Able to set position accurately when tested locally. + # Fixes: Task 5 of #37804. +https://github.com/servo/servo/pull/38217 (@dependabot[bot], @dependabot[bot], #38217) build(deps): bump io-uring from 0.7.8 to 0.7.9 (#38217) + # Bumps [io-uring](https://github.com/tokio-rs/io-uring) from 0.7.8 to 0.7.9. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=io-uring&package-manager=cargo + # &previous-version=0.7.8&new-version=0.7.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38165 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38165) WebDriver: Will Send Keys add documentation and modularize input file (#38165) + # Add comment for better documentation of `will_send_keys` and extract file input handling to a function. + # Testing: No behaviour change +https://github.com/servo/servo/pull/38164 (@sagudev, #38164) canvas: Make script/canvas thread boundry mostly stateless (#38164) + # This PR removes all `Set*` commands as we will send needed options on each request. This will allow us to remove + # most of state handling from canvas paint thread (currently it's still stateful). + # Testing: Existing WPT tests + # work towards #38022 + # try run: https://github.com/sagudev/servo/actions/runs/16413823963 +https://github.com/servo/servo/pull/38197 (@ibluegalaxy_taoj@163.com, #38197) Layout: minor optimizations and bugfix for non-functional details (#38197) + # This change adds some minor optimizations and bugfix for non-functional details with seperated commits: + # - fix the omission that stop use `Rayon` in single-thread mode + # - add trace for incremental box tree construction + # - fix the bug that failed to skip reflow entirely when there is no need for `restyle` and a fragment tree has + # already been built. + # - add trace for stylist preparation during reflow. In certain scenarios, this phase might take up a significant + # amount of time, such as when there are a large number of shadow trees. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/38192 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38192) WebDriver: Clean Up and Re-Update WPT Expectation (#38192) + # Previously, we have failing many subtests in `*/user_prompt.py` with prefix `capabilities0-*`. The name of the subtest + # was probably changed before, hence the failing expectation is not removed when we do `./mach update-wpt`. Here we + # reupdate the expectation. +https://github.com/servo/servo/pull/38212 (@euclid.ye@huawei.com, #38212) Remove Webdriver Server's access to Constellation (#38212) + # `WebDriverCommandMsg::TakeScreenshot` was the last thing blocking us from removing constellation access in webdriver + # server. Now we can happily remove it. + # Surprisingly, this reduces binary size by 185KB for release profile in Windows. #37737 removes a net total of 300 + # lines, but only reduced 98KB. + # Testing: No regression after testing. +https://github.com/servo/servo/pull/38210 (@sagudev, @jschwe, #38210) chore: Update kurbo to 0.11.3 (#38210) + # Some of the code we wrote is now also in upstream, mainly `BezPath.current_position` and euclid types conversions. + # Testing: Code is covered by existing WPT tests. +>>> 2025-07-24T06:06:00Z +https://github.com/servo/servo/pull/38238 (@euclid.ye@huawei.com, #38238) Reduce redundancy in servoshell webdriver message forwarding and add log for script::`handle_send_keys_non_typeable` (#38238) + # There was a new commit for after https://github.com/servo/servo/pull/38189#discussion_r2224805172, but that does + # not seem to update/stop MQ. + # Also removed `forward_webdriver_command` in servoshell according to + # https://github.com/servo/servo/pull/38212#discussion_r2221854327. +https://github.com/servo/servo/pull/38240 (@Narfinger, @schwenderjonathan@gmail.com, #38240) OHOS: Clean up some compile warnings (#38240) + # This cleans up some compile warnings about unused functions. + # Testing: Does not change functionality, OHOS and Linux still compile (hopefully the other builds too). +https://github.com/servo/servo/pull/38245 (@averyrudelphe@gmail.com, #38245) Remove unused resources (#38245) + # As previously discussed in #38229. To recap: `badcert.jpg` was made unused in + # 8422dac81196b5c754f009b79760b437e02ee406 and `tumbeast.png` and its associated file of `not-found.html` + # were superseded at some point by a message in `neterror.html` (if it were still used, it'd surely be + # [embedded](https://github.com/servo/servo/blob/main/components/shared/embedder/resources.rs).) + # This PR also removes two unnecessary spaces inside of the new tab's CSS file, ensuring a consistent 2 space + # indentation in the file and saving 2 bytes. + # Testing: Unnecessary, as this commit only removes unused assets (and fixes one style nit). +https://github.com/servo/servo/pull/38229 (@averyrudelphe@gmail.com, #38229) Optimize PNG images in resources folder (#38229) + # Losslessly optimizes the PNG images in the `resources` folder with: + # ``` + # oxipng -o max -a -s + # oxipng -o max --zopfli -a -s + # ``` + # Tests are unaffected by this commit in order to avoid potential breakages. + # As an aside: shouldn't `tumbeast.png` and `badcert.jpg` be removed? For `tumbeast.png`, the related page + # `resources/not-found.html` doesn't seem to be reachable by any means (the usual dry error message is used instead, + # as far as my testing goes, neither `about:not-found` nor `servo:not-found` work), and the only use of `badcert.jpg` + # (in `badcert.html`) got removed in 8422dac81196b5c754f009b79760b437e02ee406. + # Testing: Unnecessary. Since the optimized images haven't changed their extension, so long as Servo's PNG parsing + # is correct, there should be no change aside from reduced binary sizes. +https://github.com/servo/servo/pull/38241 (@dependabot[bot], @dependabot[bot], #38241) build(deps): bump hyper-util from 0.1.15 to 0.1.16 (#38241) + # Bumps [hyper-util](https://github.com/hyperium/hyper-util) from 0.1.15 to 0.1.16. + # Changelog + # Sourced from hyper-util's changelog. + # 0.1.16 (2025-07-22) + # Add impl Clone for proxy::Tunnel service. + # Fix proxy::Matcher to detect SOCKS4 schemes. + # Fix legacy::Client pool idle checker to trigger less aggresively, saving CPU. + # Commits + # 5cefcd8 v0.1.16 + # 0d4ca3f chore(cargo): move tokio/net feature to client (#218) + # 89b2cff fix(proxy): Fix SOCKS4 proxy protocol parsing and matching (#219) + # 39fd779 tests(client): fix flaky pool test (#220) + # 24714a3 fix(client): cap pool idle interval to a minimum (#217) + # f0dcda3 deps: allow socket2 0.6 (#213) + # dd63305 refactor(client): simplify pool idle task with async/await (#216) + # afd758b fix(client): don't spawn pool idle interval if timeout is 0 (#215) + # 9f7a5e0 feat(client): implement Clone for Tunnel (#212) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hyper-util&package-manager=car + # go&previous-version=0.1.15&new-version=0.1.16)](https://docs.github.com/en/github/managing-security-vulnerabilities/abou + # t-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38242 (@dependabot[bot], @dependabot[bot], #38242) build(deps): bump aws-lc-rs from 1.13.2 to 1.13.3 (#38242) + # Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.13.2 to 1.13.3. + # Release notes + # Sourced from aws-lc-rs's releases. + # aws-lc-rs v1.13.3 + # What's Changed + # Rename ML-DSA by @​justsmth in aws/aws-lc-rs#844 + # Other Merged PRs + # Skip aws-lc-rs "publish dryrun" job when -sys crates not published by @​justsmth in aws/aws-lc-rs#840 + # Full Changelog: https://github.com/aws/aws-lc-rs/compare/v1.13.2...v1.13.3 + # Commits + # 78258d2 Fix publish dryrun when -sys crates update (#840) + # 3efb4fa Rename ML-DSA (#844) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=carg + # o&previous-version=1.13.2&new-version=1.13.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38239 (@euclid.ye@huawei.com, #38239) cargo: Remove unused dependency (#38239) + # Remove unused `Cargo.toml` dependency to reduce binary size. + # Testing: Can still compile in different platforms. +https://github.com/servo/servo/pull/38236 (@delan, @atbrakhi, #38236) script: Add support for creating globals in isolated compartments (#38236) + # to use the [SpiderMonkey Debugger API](https://firefox-source-docs.mozilla.org/js/Debugger/), we need to call it + # from an internal debugger script that we will supply. this script must run in the same runtime as the debuggee(s), + # but in a separate [compartment](https://udn.realityripple.com/docs/Mozilla/Projects/SpiderMonkey/Compartments) + # ([more details](https://hacks.mozilla.org/2020/03/future-proofing-firefoxs-javascript-debugger-implementation/)). + # when creating two globals in the same runtime, Servo will generally try to reuse an existing compartment for the + # second global, and there are other places in script where we rely on this reuse. but for the debugger script, + # we can’t do this. + # this patch adds a `use_system_compartment` flag to global object descriptors, which isolates the global in its + # own compartment in both possible directions: + # - it forces the global to create a new compartment, preventing the reuse of any debuggee’s compartment + # - it fails the check in select_compartment(), preventing future debuggees from reusing the global’s compartment + # Testing: manually tested working in devtools debugger patch (#37667), where it will undergo automated tests +https://github.com/servo/servo/pull/38231 (@Narfinger, #38231) ohos CI: Add the build profile to speedometer results (#38231) + # OHOS CI now has the build profile before the test cases to distringuish dev, release, production and similar. + # Testing: Tested on CI with a run here: https://github.com/Narfinger/servo/actions/runs/16465984131/job/46543984398 + # Fixes: Same name in speedometer CI will have very different speeds because of different profiles. This will fix + # this behaviour. +https://github.com/servo/servo/pull/38189 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38189) webdriver: Implement element send keys command for non-typeable form control (#38189) + # Implement Step 8 of remote end steps of [Element Send keys](https://w3c.github.io/webdriver/#element-send-keys), + # specifically for non-typeable form control. +https://github.com/servo/servo/pull/37483 (@stevennovaryo, #37483) Reland Input `type=text` Shadow DOM With Performance Improvement (#37483) + # Depends on #37427. + # In addition to the changes introduced by https://github.com/servo/servo/pull/37065, there are several performance + # improvements and nits as follows: + # - Use the internal pseudo element for style matching, this will reduce the performance regression by ~66%. + # - Manual construction of the `Text` node inside a text container. This is followed by the modification of the inner + # `Text` node instead of using `SetTextContent` which is more expensive. + # - Use `implemented_pseudo_element` instead of `text_control_inner_editor` `NodeFlag` to handle the special cases + # that these elements should follow, specifically the: + # - focus delegation workaround; + # - selections; and + # - line height resolving. + # - More documentation. + # Servo's side of: https://github.com/servo/stylo/pull/217 + # Testing: No new unexpected WPT failure, except for the one introduced by https://github.com/servo/servo/pull/37065/. + # Fixes: #36307 #37205 +https://github.com/servo/servo/pull/38163 (@stevennovaryo, #38163) script: Implement `DocumentOrShadowDOM.adoptedStylesheet` with `FrozenArray` (#38163) + # Spec: https://drafts.csswg.org/cssom/#dom-documentorshadowroot-adoptedstylesheets + # Implement `DocumentOrShadowDOM.adoptedStylesheet`. Due to `ObservableArray` being a massive issue on its own, it + # will be as it was a `FrozenArray` at first. This approach is similar to how Gecko implement adopted stylesheet. + # See https://phabricator.services.mozilla.com/D144547#change-IXyOzxxFn8sU. + # All of the changes will be gated behind a preference `dom_adoptedstylesheet_enabled`. + # Adopted stylesheet is implemented by adding the setter and getter of it. While the getter works like a normal attribute + # getter, the setter need to consider the inner working of document and shadow root StylesheetSet, specifically + # the ordering and the invalidations. Particularly for setter, we will clear all of the adopted stylesheet within + # the StylesheetSet and readd them. Possible optimization exist, but the focus should be directed to implementing + # `ObservableArray`. + # More context about the implementations https://hackmd.io/vtJAn4UyS_O0Idvk5dCO_w. + # Testing: Existing WPT Coverage + # Fixes: https://github.com/servo/servo/issues/37561 +https://github.com/servo/servo/pull/38221 (@euclid.ye@huawei.com, @mrobinson, #38221) constellation: Eliminate long-standing inactive code path for `WebDriverData` (#38221) + # Cleaning up some dead code which has been here for 9 years. They are never detected by Lint because we still + # initialize them as `None` but never change afterwards. + # Testing: No regression. +https://github.com/servo/servo/pull/38215 (@rayguo17, #38215) Ohos: include build id in ohos built binary (#38215) + # add link-arg for ohos to include build id in its ELF binary. This could enable us to do debugging and size checking + # more easily. + # Testing: No test needed. + # Fixes: N/A + # cc @jschwe +>>> 2025-07-25T06:06:52Z +https://github.com/servo/servo/pull/37527 (@stevennovaryo, #37527) dom: Textual Input UA Shadow Dom (#37527) + # Depend on: + # - https://github.com/servo/servo/pull/37427 + # - https://github.com/servo/servo/pull/37483 + # Utilize input `type=text` for the display of all textual input. In which, consist + # of https://html.spec.whatwg.org/#the-input-element-as-a-text-entry-widget and + # https://html.spec.whatwg.org/#the-input-element-as-domain-specific-widgets inputs. + # For `password`, `url`, `tel`, and, `email` input, the appearance of input container is exactly the same as the + # `text` input. Other types of textual input simply extends `text` input by adding extra components inside the container. + # Testing: Servo textual input appearance WPT. +https://github.com/servo/servo/pull/38244 (@stevennovaryo, #38244) script: Implement `CSSStyleSheet.replace` (#38244) + # Implement `CSSStyleSheet.replace` + # [#dom-cssstylesheet-replace](https://drafts.csswg.org/cssom/#dom-cssstylesheet-replace) with disallow modification flag + # [#concept-css-style-sheet-disallow-modification-flag](https://drafts.csswg.org/cssom/#concept-css-style-sheet-disallow-m + # odification-flag). + # Basically it would behave like `replaceSync`, but we are running it asynchronously. + # Testing: Existing WPT coverage. + # Part of: https://github.com/servo/servo/issues/36162 +https://github.com/servo/servo/pull/38258 (@euclid.ye@huawei.com, #38258) servoshell: Respond resize with authentic result and Adjust minimum window size (#38258) + # - We no longer pretend that resize is always successful and simplify the result computation. + # - Adjust minimum window size to match other browsers and the test expectation. + # - Restrict some unnecessary access specifier. + # Testing: ` ./mach test-wpt -r "tests\wpt\tests\webdriver\tests\classic\set_window_rect\set.py" --log-raw "D:\servo + # test log\set.txt" --product servodriver {--headless}` + # Fixes: #37804 as Task 8 is last task. +https://github.com/servo/servo/pull/38214 (@sagudev, #38214) canvas: Fully stateless backend (#38214) + # I think this simplifies canvas backends greatly. Before there were many (needless) hoops from abstract to concrete + # (backend) and back, now we can do most stuff on abstract types. + # Testing: Existing WPT tests + # Fixes: #38022 + # try run: https://github.com/sagudev/servo/actions/runs/16450978211 +https://github.com/servo/servo/pull/38254 (@dependabot[bot], @dependabot[bot], #38254) build(deps): bump prettyplease from 0.2.35 to 0.2.36 (#38254) + # Bumps [prettyplease](https://github.com/dtolnay/prettyplease) from 0.2.35 to 0.2.36. + # Release notes + # Sourced from prettyplease's releases. + # 0.2.36 + # Preserve braces in use path::to::{self}; (#121, thanks @​charlyisidore) + # Commits + # 9ae9017 Release 0.2.36 + # 6e28f51 Merge pull request #121 from charlyisidore/use-self + # 27e359b Preserve braces in use std::fmt::{self}; dtolnay/prettyplease#120 + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=prettyplease&package-manager=c + # argo&previous-version=0.2.35&new-version=0.2.36)](https://docs.github.com/en/github/managing-security-vulnerabilities/ab + # out-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38249 (@euclid.ye@huawei.com, #38249) servoshell: Add window position for headless window (#38249) + # Add virtual `window_position` to headless window so that `moveTo` and WebDriver window command can work properly. + # Testing: `./mach test-wpt -r "tests\wpt\tests\webdriver\tests\classic\set_window_rect\set.py" --product servodriver + # --headless` + # Fixes: Task 7 of #37804. +https://github.com/servo/servo/pull/38252 (@dependabot[bot], @dependabot[bot], #38252) build(deps): bump owned_ttf_parser from 0.25.0 to 0.25.1 (#38252) + # Bumps [owned_ttf_parser](https://github.com/alexheretic/owned-ttf-parser) from 0.25.0 to 0.25.1. + # Release notes + # Sourced from owned_ttf_parser's releases. + # 0.25.1 + # Reduce size of published crate archive (148 KiB -> 9 KiB). + # Update min ttf-parser to 0.25.1. + # Changelog + # Sourced from owned_ttf_parser's changelog. + # 0.25.1 + # Reduce size of published crate archive (148 KiB -> 9 KiB). + # Update min ttf-parser to 0.25.1. + # Commits + # 3abee95 Release 0.25.1 + # 4759b55 Exclude test data and tools from published packages (#18) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=owned_ttf_parser&package-manag + # er=cargo&previous-version=0.25.0&new-version=0.25.1)](https://docs.github.com/en/github/managing-security-vulnerabilitie + # s/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38253 (@dependabot[bot], @dependabot[bot], #38253) build(deps): bump ipc-channel from 0.20.0 to 0.20.1 (#38253) + # Bumps [ipc-channel](https://github.com/servo/ipc-channel) from 0.20.0 to 0.20.1. + # Release notes + # Sourced from ipc-channel's releases. + # v0.20.1 + # What's Changed + # Merge thread_local declarations by @​jschwe in servo/ipc-channel#397 + # Remove receivers from Router IpcReceiverSet on channel close. by @​jdm in servo/ipc-channel#400 + # Full Changelog: https://github.com/servo/ipc-channel/compare/v0.20.0...v0.20.1 + # Commits + # 69d1d4b Publish 0.20.1. (#401) + # 4c2cbf8 bug: Drop macOS receivers from OsIpcReceiverSet on channel close. (#400) + # 59d6d80 Merge thread_local declarations (#397) + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ipc-channel&package-manager=ca + # rgo&previous-version=0.20.0&new-version=0.20.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/abo + # ut-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38208 (@Kenzie.Raditya.Tirtarahardja@huawei.com, @yezhizhen, @jdm, #38208) webdriver: Implement element clear (#38208) + # Initial Implementation of [Element Clear](https://w3c.github.io/webdriver/#element-clear). + # Testing: `tests/wpt/tests/webdriver/tests/classic/element_clear/` +https://github.com/servo/servo/pull/38222 (@stevennovaryo, #38222) script: Batch `scroll` event firing (#38222) + # The user interaction triggered `scroll` event was initially implemented in https://github.com/servo/servo/pull/36687. + # In triggering the `scroll` event, the event should be batched and triggered within update the rendering. This + # serves as a preparatory PR for the JS API triggered `scroll` event. + # Part of: #31665 +https://github.com/servo/servo/pull/38202 (@dependabot[bot], @dependabot[bot], #38202) build(deps): bump the servo-media-related group with 12 updates (#38202) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38152 (@leo030303, @hu.xiaocheng@huawei.com, @xiaochengh, #38152) Add dimension source attribute to HTMLImageElement (#38152) + # HTMLImageElement was missing the dimension source attribute, as step 9 from + # [here](https://html.spec.whatwg.org/multipage/images.html#updating-the-source-set) wasn't implemented. This meant + # that for an element like this: + # ```html + # + # Wikimedia Foundation + # ``` + # The `width` and `height` attributes of the source tag were being ignored. This broke stuff like these icons on + # the main page of Wikipedia. + # **Original:** + # **Fixed:** + # Testing: If there isn't an existing test that covers this I'll make one, waiting for the github runner to tell me + # whether this is covered and then I'll amend the PR +https://github.com/servo/servo/pull/38243 (@jdm, #38243) servo: Track async webview focus operations (#38243) + # https://github.com/servo/servo/pull/38160 added a webdriver-specific API to support waiting on focus operations + # to complete. These changes replace that with a generalized pattern, where a unique ID is created for each focus + # operation and the embedder can receive notifications about each focus operation when it is complete, regardless + # of whether the focus was actually changed. + # Testing: Existing test coverage from https://github.com/servo/servo/pull/38160/ is unchanged. +https://github.com/servo/servo/pull/38174 (@euclid.ye@huawei.com, #38174) servoshell: Consider window decorations when handling resize requests from web content (#38174) + # Also fix some docs. This is used by JS `resizeTo`, `resizeBy` and webdriver [set window + # rect](https://w3c.github.io/webdriver/#set-window-rect). + # Testing: Can now pass more tests for headed window. + # Fixes: Well.. Originally the attempt is to address https://github.com/servo/servo/issues/38093#issuecomment-3092284104. + # But it turns out as a more general problem to be fixed in another PR. +https://github.com/servo/servo/pull/38194 (@shubhamg13, @xiaochengh, #38194) Rename `viewport_zoom` to `pinch_zoom` (#38194) + # This change is in accordance with highlighting the usage of various zoom options. + # `pinch_zoom`: `Mobile-style` zoom using pinch gesture + # `page_zoom`: `Desktop-style` zoom (`Ctrl` + `+`/`-`) + # It just renames the variable `viewport_zoom` to `pinch_zoom` for better clarity + # Testing: Testing not required, as it's just renaming of variable . +https://github.com/servo/servo/pull/38235 (@Kenzie.Raditya.Tirtarahardja@huawei.com, #38235) script(webdriver): Check if element is keyboard interactable in element send keys (#38235) + # Step 7.6 of remote end steps of [Element Send Keys](https://w3c.github.io/webdriver/#element-send-keys) + # > If element is not [keyboard-interactable](https://w3c.github.io/webdriver/#dfn-keyboard-interactable), return + # [error](https://w3c.github.io/webdriver/#dfn-error) with [error code](https://w3c.github.io/webdriver/#dfn-error-code) + # [element not interactable](https://w3c.github.io/webdriver/#dfn-element-not-interactable). +>>> 2025-07-26T06:05:15Z +https://github.com/servo/servo/pull/36821 (@sagudev, #36821) canvas: Add vello backend (#36821) + # Add vello backend by implementing Backend traits in canvas crate (so this lives in canvas_paint_thread - embedded + # process). Current implementation uses normal wgpu, so we block on GPU work. Vello backend is gated behind `vello` + # feature and `dom_canvas_vello_enabled` pref. + # Feature-wise this backend is on on par with raqote (sometimes better sometimes worse), but performance wise it's worse. + # ## Known vello problems: + # - image roundtrip does not work (fixed in https://github.com/linebender/vello/pull/974) + # - https://github.com/linebender/vello/issues/1066 (fixed) + # - clip layers are not working properly: https://github.com/linebender/vello/issues/1061 + # - `/html/canvas/element/pixel-manipulation/2d.imageData.put.*` + # - `/html/canvas/element/path-objects/2d.path.clip.intersect.html` + # - https://github.com/linebender/vello/issues/1056 + # - `/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.html` + # - `kurbo::Cap::Butt` is defect (only visible with big lineWidth) https://github.com/linebender/vello/issues/1063 + # - `/html/canvas/element/line-styles/2d.line.cross.html` + # - `/html/canvas/element/line-styles/2d.line.miter.acute.html` + # - other lack of strong correct problems (https://github.com/linebender/vello/issues/1063#issuecomment-2998084736): + # - `/html/canvas/element/path-objects/2d.path.rect.selfintersect.html` + # - There is currently no way to do put image properly in vello as we would need to ignore all clips and other stuff + # (we try to work around this on best effort basis) https://github.com/linebender/vello/issues/1088 + # - `/html/canvas/element/pixel-manipulation/2d.imageData.put.*` + # - precision problems + # - `/html/canvas/element/path-objects/2d.path.stroke.scale2.html` + # - `/html/canvas/element/path-objects/2d.path.arc.scale.1.html` + # ## Known servo problems + # - bad performance due to blocking on GPU work + # - some get/put intensive tests `TIMEOUT` + # - proper shadow support (non-blocker as we already are living without it now) + # - support for rect shadow is there but unimplemented currently as that's the state in raqote + # Testing: `mach try vello` will run normal WPT (with raqote) + vello_canvas subsuite that runs only on + # `/html/canvas/element`. All subsuite expectations are stored separately. + # Fixes: #36823 + # Fixes: #35230 +https://github.com/servo/servo/pull/38268 (@arihant2math, @jdm, #38268) script: implement IDBKeyRange (#38268) + # #37684 provided the backend for this change. The key range interface just wraps a `IndexedDBKeyRange` and exposes + # the methods from it as per the spec. + # Spec: https://www.w3.org/TR/IndexedDB-2/#keyrange + # Testing: WPT tests (some regressions have been exposed, but that's fine) +https://github.com/servo/servo/pull/38274 (@sagudev, #38274) canvas: Make GetImageData simple and only IPC message to obtain pixels (#38274) + # Currently we had `GetImageData` and `SendPixels` to obtain pixels from script thread. This PR unifies those into + # single `GetImageData` that does not need canvas size and has optional rect (for obtaining sub image). + # Testing: Existing WPT tests +https://github.com/servo/servo/pull/38275 (@dependabot[bot], @dependabot[bot], #38275) build(deps): bump litrs from 0.4.1 to 0.4.2 (#38275) + # Bumps [litrs](https://github.com/LukasKalbertodt/litrs) from 0.4.1 to 0.4.2. + # Release notes + # Sourced from litrs's releases. + # v0.4.2 + # Fix incorrect byte string value with non-ASCII \xHH byte string escapes + # ByteStringLit::parse(r#"b"\xff""#).unwrap().value() would return [0xc3, 0xbf] instead of [0xff]. + # Remove CR LF normalization to align with spec + # This is technically a breaking change, but released with a minor version bump as it just aligns with the + # specification. It is extremely unlikely to affect any real world use case. + # Fix incorrect error span for out-of-range Unicode escapes + # Changelog + # Sourced from litrs's changelog. + # [0.4.2] - 2025-07-25 + # Fix incorrect byte string value with non-ASCII \xHH byte string escapes + # ByteStringLit::parse(r#"b"\xff""#).unwrap().value() would return [0xc3, 0xbf] instead of [0xff]. + # Remove CR LF normalization to align with spec + # This is technically a breaking change, but released with a minor version bump as it just aligns with the + # specification. It is extremely unlikely to affect any real world use case. + # Fix incorrect error span for out-of-range Unicode escapes + # Commits + # 1dc8a3e Bump version to 0.4.2 + # 8c55d08 Fix incorrect error span for out-of-range Unicode escapes + # 8fe8552 Fix bug with non-ASCII \xHH byte string escapes + # ed84018 Refactor escape code to make it more flexible for upcoming c-strings + # 15edbcd Remove CR LF normalization to align with spec + # d3cf292 Update CI workflow + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=litrs&package-manager=cargo&pr + # evious-version=0.4.1&new-version=0.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depen + # dabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38264 (@sagudev, #38264) canvas: Make pixel obtaining methods take &mut GenericDrawTarget (#38264) + # This will be needed for vello_cpu. While we could wrap it in RefCell for inner mut, but that would be less ergonomic + # and performant. + # Testing: Just refactoring, but the code is covered by WPT tests. +https://github.com/servo/servo/pull/38199 (@ibluegalaxy_taoj@163.com, #38199) layout: optimize the propagation and cleanup of RestyleDamage (#38199) + # This change optimizes `RestyleDamage` propagation and cleanup to reduce unnecessary box reconstruction and relayouts, + # while preventing damage from the current reflow affecting subsequent ones. Improvements include: + # - For box damage caused by `NodeDamage`, `RestyleDamage::RELAYOUT` is no longer marked immediately—avoiding + # erroneous propagation of `LayoutDamage::RECOLLECT_BOX_TREE_CHILDREN` to descendants during `RestyleDamage` propagation. + # - Clearing damage for nodes whose boxes will be preserved, preventing it from carrying over to the next reflow + # and increasing its workload. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. Although Servo + # lacks performance test cases, manual testing shows that this modification reduces reflow time by nearly 250ms, + # representing a decrease of approximately 25%. +https://github.com/servo/servo/pull/38257 (@leo030303, #38257) servoshell: Properly set `RenderingContext` size after resizing (#38257) + # The tab bar would disappear on resizes, this just reverts the change which introduced the bug. + # Testing: servoshell doesn't currently have tests, so this change does not come with a test. + # Fixes: https://github.com/servo/servo/issues/38255 +https://github.com/servo/servo/pull/38262 (@sagudev, #38262) canvas: Remove `Backend` trait (#38262) + # After #38214 `Backend` trait is only used as DrawTarget builder and as type holder. By moving types and DrawTarget + # creation into `GenericDrawTarget` trait, we can completely remove `Backend` trait. + # Testing: Just refactor, but code is covered by WPT tests. +https://github.com/servo/servo/pull/38084 (@ibluegalaxy_taoj@163.com, #38084) layout: Add incremental box tree construction for inline boxes (#38084) + # This changes extend the incremental box tree construction for inline boxes. Since an `InlineItem` can be split + # into multiple `InlineItem`s by a block element, the reason such an inline item is marked as damaged may simply be + # the removal of the block element or the need to reconstruct its box tree. Therefore, under the current LayoutDamage + # design, theoretically, even damaged inline items might still have some of their splits reusable. However, based + # on the principle of simplicity and effectiveness, this PR only considers reusing undamaged inline boxes. + # Testing: This should not change observable behavior and is thus covered by existing WPT tests. +https://github.com/servo/servo/pull/38269 (@arihant2math, #38269) script: Update indexeddb serialization (#38269) + # - Dates are now serialized as f64s (like how firefox does it) + # - Array buffers are serialized with structured cloning (this is not the most correct/efficent way to serialize them, + # however it is currently better than not supporting array buffers at all) + # - Array types are still unimplemented. + # Testing: WPT + # Fixes: Some panicking +https://github.com/servo/servo/pull/38250 (@Kenzie.Raditya.Tirtarahardja@huawei.com, @yezhizhen, #38250) script(webdriver): Send keys set caret at the end of content of text input (#38250) + # Remote end step of [element send keys](https://w3c.github.io/webdriver/#element-send-keys) + # > Step 8.2. Set the text insertion caret using [set selection + # range](https://w3c.github.io/webdriver/#dfn-set-selection-range) using current text length for both the start and + # end parameters. + # Also check if the element is already an active element before focusing (Step 7.7). + # Testing: `./tests/wpt/tests/webdriver/tests/classic/element_send_keys/form_controls.py` +https://github.com/servo/servo/pull/38260 (@arihant2math, #38260) script: Implement IDBFactory.cmp (#38260) + # Implements `IDBFactory.cmp`, most of the work was done by #38123. + # Testing: Covered by WPT (lots of flaky results: the appropriate tests are in + # tests/wpt/meta/IndexedDB/idlharness.any.js.ini) + # Fixes: None +>>> 2025-07-27T06:03:45Z +https://github.com/servo/servo/pull/38296 (@servo-wpt-sync, #38296) Sync WPT with upstream (27-07-2025) (#38296) + # Automated downstream sync of changes from upstream as of 27-07-2025 + # [no-wpt-sync] +https://github.com/servo/servo/pull/38276 (@Loirooriol, #38276) layout: Inline {default,natural}_{inline,block}_size methods (#38276) + # They only had one caller. + # Testing: Unnecessary (no behavior change) +https://github.com/servo/servo/pull/38294 (@sagudev, #38294) canvas: Respect FillRule (#38294) + # We just need to pass user provided FillRule via IPC to canvas paint thread, then pass it all down to backend, + # which will handle it. + # Testing: Added WPT tests. +https://github.com/servo/servo/pull/38280 (@arihant2math, #38280) script: Don't panic on IndexedDB put operation structured clone (#38280) + # Fixes panic by rethrowing exceptions. + # Testing: Covered by WPT + # Fixes: #38075 +https://github.com/servo/servo/pull/38278 (@arihant2math, #38278) script: Implement converting values to indexeddb key ranges (#38278) + # Implements https://www.w3.org/TR/IndexedDB-2/#convert-a-value-to-a-key-range. Part of #38187. + # Testing: Currently unused, doesn't change anything + # Fixes: None +https://github.com/servo/servo/pull/38283 (@sagudev, #38283) canvas: Use bytemuck to remove unsafe from raqote backend (#38283) + # This PR changes surface type from `Vec` to `Vec` as this is native type of raqote's backend. We used unsafe for + # `Vec` `Vec` casting that is replaced with bytemuck. Bytemuck is already in cargo lock. + # Testing: Existing WPT tests. +https://github.com/servo/servo/pull/38279 (@sagudev, #38279) canvas: Move peniko/kurbo conversions in separate file (#38279) + # This will allow reusing those conversions in vello_cpu backend. + # Testing: Just refactor +https://github.com/servo/servo/pull/38285 (@kkoyung, #38285) webdriver: configure Expires and SameSite in handle_add_cookie (#38285) + # Handler::handle_add_cookie did not configure the attributes "Expires" and "SameSite". This patch adds them. + # Testing: Passing WPT tests that were expected to fail. + # Fixes: https://github.com/servo/servo/pull/37715#issuecomment-3069734014 +https://github.com/servo/servo/pull/38271 (@euclid.ye@huawei.com, #38271) webdriver: Implement maximize window for both headless&headed window (#38271) + # - Implement [Maximize Window](https://w3c.github.io/webdriver/#maximize-window) + # - Previously, headless window screen size is same as inner size if not specified in preference. We make it double + # as required by the test to not have max window initially. + # - Some other random cleanup. + # Testing: webdriver Stress test for maximize window (headed + headless). +https://github.com/servo/servo/pull/38059 (@ibluegalaxy_taoj@163.com, #38059) layout: Correctly marking box damage when text-related style changed (#38059) + # This change aims to supplement the missing incremental box tree construction when text-related styles change. Since + # certain text style adjustments can alter visible text content and typography. Therefore, the parent nodes of such + # text are marked as needing to re-collect their box tree children to ensure the correct display of text. +>>> 2025-07-28T06:06:04Z +https://github.com/servo/servo/pull/38085 (@jerensl, #38085) mach: Add type check on `python/servo` directory (#38085) + # Introduce `python/servo` folder in pyrefly type checker + # Testing: Manual testing via `./mach test-tidy` command +https://github.com/servo/servo/pull/38282 (@sagudev, #38282) canvas: Add vello_cpu backend (#38282) + # vello_cpu does not have any tests timeouts, because we do not need download stuff from GPU as all work happens + # on CPU. So performance wise it's better then classic vello at least for our usecase. There are some vello bugs, + # but I think we will be able to sort them out within upstream, eventually. Interestingly enough there are no new + # PASS like they were with classic vello. + # Difference with raqote can be observed here: + # https://github.com/sagudev/servo/actions/runs/16549241085/attempts/1#summary-46802486798 + # ## Known vello problems: + # - https://github.com/linebender/vello/issues/1119 + # - https://github.com/linebender/vello/issues/1056 + # - `/html/canvas/element/fill-and-stroke-styles/2d.gradient.interpolate.coloralpha.html` + # - `kurbo::Cap::Butt` is defect (only visible with big lineWidth) https://github.com/linebender/vello/issues/1063 + # - `/html/canvas/element/line-styles/2d.line.cross.html` + # - `/html/canvas/element/line-styles/2d.line.miter.acute.html` + # - other lack of strong correct problems (https://github.com/linebender/vello/issues/1063#issuecomment-2998084736): + # - `/html/canvas/element/path-objects/2d.path.rect.selfintersect.html` + # - `putImageData(getImageData(...), ...)` is lossy (precision problems, might be due to ImageData being unmultiplied) + # - `/html/canvas/element/pixel-manipulation/2d.imageData.put.unchanged.html` + # Testing: Tested using vello_cpu_canvas subsuite +https://github.com/servo/servo/pull/38303 (@nicoburns, #38303) Disable serde feature of taffy dependency (#38303) + # Disables the serde of taffy. This feature doesn't seem to be actually being used. + # Testing: This would cause build errors if it was required. So if it builds it should be fine. +https://github.com/servo/servo/pull/38284 (@kkoyung, #38284) script_binding: wrapper of JSAutoStructuredCloneBuffer (#38284) + # Instead of using raw pointer of JSAutoStructuredCloneBuffer, use its wrapper JSAutoStructuredCloneBufferWrapper, + # which implements the Drop trait that can prevent leakage when structured cloning fails. + # Testing: Refactoring. Existing tests should be enough. + # Fixes: #37966 +>>> 2025-07-29T06:11:38Z +https://github.com/servo/servo/pull/38112 (@wuminghua7@huawei.com, #38112) Script: Implement `TextDecoderStream` (#38112) + # This PR implements the `TextDecoderStream`. Other than introducing the necessary mod and webidl files corresponding + # to `TextDecoderStream`, this PR also involves some changes in `TextDecoder` and `TrasnformStream`: + # - The common part that can be shared between `TextDecoder` and `TextDecoderStream` are extracted into a separate + # type `script::dom::textdecodercommon::TextDecoderCommon`. This type could probably use a different name because + # there is an interface called `TextDecoderCommon` in the spec (https://encoding.spec.whatwg.org/#textdecodercommon) + # which just gets included in `TextDecoder` and `TextDecoderStream`. + # - The three algorithms in `TransformStream` (`cancel`, `flush`, and `transform`) all have become `enum` that has a `Js` + # variant for a JS function object and a `Native` variant for a rust trait object. Whether the cancel algorithm needs + # this enum type is debatable as I did not find any interface in the spec that explicitly sets the cancel algorithm. + # Testing: Existing WPT tests `tests/wpt/tests/encoding/stream` should be sufficient + # Fixes: #37723 +https://github.com/servo/servo/pull/38319 (@uthmaniv, #38319) Make request parameter immutable in send_response_to_devtools and send_early_httprequest_to_devtools (#38319) + # - Changes request parameters to immutable borrow + # Testing: + # Fixes: https://github.com/servo/servo/issues/38300 +https://github.com/servo/servo/pull/38315 (@sagudev, #38315) canvas: Send CanvasClose to canvas thread from canvas state (#38315) + # Currently we only closed `CanvasRenderingContext2D` (and `OffscreenCanvasRenderingContext2D` because it wraps + # `CanvasRenderingContext2D`), but we didn't close last consumer of `CanvasState` which is `PaintRenderingContext`. To + # prevent any future leaks, let's just send `CanvasClose` in `CanvasState` drop. + # Testing: Existing WPT tests +https://github.com/servo/servo/pull/38314 (@yezhizhen, #38314) cargo: Remove last traces of webdriver from libservo (#38314) + # The feature which enables optional dependency & function is never used and can be safely removed. + # Testing: It can still builds. +https://github.com/servo/servo/pull/38191 (@jdm, #38191) chore: Add test for synthesized image documents with CSP headers. (#38191) + # Adds a regression test for https://github.com/servo/servo/pull/38186, verifying that the CSP header on the image + # is ignored when it's loaded as a document. +https://github.com/servo/servo/pull/38312 (@sagudev, #38312) canvas: Gate raqote backend behind feature (enabled for now) (#38312) + # We want to eventually remove raqote backend, but for now we can gate it behind a feature (still enabled by default + # in servoshell) like the rest of backends. `dom_canvas_backend=auto` will select first available backend. Builds + # on top of https://github.com/servo/servo/pull/38310 to support cases where no backend is available. + # Testing: It compiles with or without feature +https://github.com/servo/servo/pull/38232 (@delan, @atbrakhi, #38232) script: Implement jsglue traps for saveJobQueue() (#38232) + # in the [SpiderMonkey Debugger API](https://firefox-source-docs.mozilla.org/js/Debugger/), hooks like + # [onNewGlobalObject()](https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.html#onnewglobalobject-global) + # use an AutoDebuggerJobQueueInterruption to [switch to a new microtask + # queue](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/src/debugger/Debu + # gger.cpp#L2834-L2841) + # and avoid clobbering the debuggee’s microtask queue. this in turn + # relies on JobQueue::saveJobQueue(), which is [not yet implemented in + # RustJobQueue](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/src/jsglue.cpp#L83- + # L86). + # this patch bumps mozjs to servo/mozjs#595, which implements [saveJobQueue() and + # SavedJobQueue](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/public/Pr + # omise.h#L92-L114) + # for RustJobQueue by calling into Servo via two new JobQueueTraps that create and destroy extra “interrupt” + # queues for use by the debugger. + # SpiderMonkey [does not own external job + # queues](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/public/Promise.h + # #L117-L123), + # so the lifetime of these queues is managed in Servo, where they are stored in a Vec-based stack. stack-like behaviour + # is adequate for SpiderMonkey’s save and restore patterns, as far as we can tell, but we’ve added an assertion + # just in case. + # Testing: manually tested working in devtools debugger patch (#37667), where it will undergo automated tests + # Fixes: #38311 +https://github.com/servo/servo/pull/38225 (@longvatrong111, #38225) Rework webdriver session (#38225) + # Reimplement webdriver session for better match to spec: + # - Add `create_session`: [spec](https://www.w3.org/TR/webdriver2/#dfn-create-a-session) + # - Refactor `handle_new_session` + # - Replace `PageLoadStrategy` string by enum +https://github.com/servo/servo/pull/38310 (@sagudev, #38310) canvas: Make 2D context state creation failable and use `dom_canvas_backend` pref for backend selection (#38310) + # Before script just crashed in those cases because IPCSender was dropped, now we send `None` to tell script about + # the failure and fail getContext or registerPainter accordingly. + # This PR also unifies `dom_canvas_{backends}_enabled` prefs into `dom_canvas_backend` which is more flexible in + # multi-backends scenarios. + # Reviewable per commit. + # Testing: Added servo specific WPT test. +>>> 2025-07-30T06:24:47Z +https://github.com/servo/servo/pull/38351 (@Loirooriol, #38351) build(deps): bump Stylo to servo/stylo#215 (#38351) + # Bumps Stylo to "Vendor markupsafe; Add macOS and Windows CI jobs". + # Testing: Not needed (no behavior change). +https://github.com/servo/servo/pull/38340 (@dependabot[bot], @dependabot[bot], #38340) build(deps): bump wayland-backend from 0.3.10 to 0.3.11 (#38340) + # Bumps [wayland-backend](https://github.com/smithay/wayland-rs) from 0.3.10 to 0.3.11. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=wayland-backend&package-manage + # r=cargo&previous-version=0.3.10&new-version=0.3.11)](https://docs.github.com/en/github/managing-security-vulnerabilities + # /about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38336 (@sagudev, #38336) canvas: Use `create_similar_draw_target` for recreate (#38336) + # `create_similar_draw_target` is more performant then creating completely new target (this creates new wgpu device + # in vello backend). + # Testing: This change does not modify test results, but should increase performance. +https://github.com/servo/servo/pull/38344 (@dependabot[bot], @dependabot[bot], #38344) build(deps): bump libredox from 0.1.6 to 0.1.8 (#38344) + # Bumps libredox from 0.1.6 to 0.1.8. + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libredox&package-manager=cargo + # &previous-version=0.1.6&new-version=0.1.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-de + # pendabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38341 (@dependabot[bot], @dependabot[bot], #38341) build(deps): bump wayland-scanner from 0.31.6 to 0.31.7 (#38341) + # Bumps [wayland-scanner](https://github.com/smithay/wayland-rs) from 0.31.6 to 0.31.7. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=wayland-scanner&package-manage + # r=cargo&previous-version=0.31.6&new-version=0.31.7)](https://docs.github.com/en/github/managing-security-vulnerabilities + # /about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38343 (@dependabot[bot], @dependabot[bot], #38343) build(deps): bump rustc-demangle from 0.1.25 to 0.1.26 (#38343) + # Bumps [rustc-demangle](https://github.com/rust-lang/rustc-demangle) from 0.1.25 to 0.1.26. + # Release notes + # Sourced from rustc-demangle's releases. + # rustc-demangle-v0.1.26 + # Other + # Add new v0 demangling tags for pattern types + # Do not publish the native-c crate + # Use release-plz for releases + # Add a CI workflow to publish new releases after a tag is pushed + # Changelog + # Sourced from rustc-demangle's changelog. + # 0.1.26 - 2025-07-16 + # Other + # Add new v0 demangling tags for pattern types + # Do not publish the native-c crate + # Use release-plz for releases + # Add a CI workflow to publish new releases after a tag is pushed + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustc-demangle&package-manager + # =cargo&previous-version=0.1.25&new-version=0.1.26)](https://docs.github.com/en/github/managing-security-vulnerabilities/ + # about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38335 (@jerensl, #38335) mach: Make test-tidy line length check Unicode-aware (#38335) + # Currently, our implementation for each line-checking function reads the file as bytes, so we need to properly + # decode each line to UTF-8 before evaluating it. This ensures it is counted as a string and not as bytes + # Testing: I tested by changing the comment like the issue above and it not give an error + # Fixes: #38237 +https://github.com/servo/servo/pull/38332 (@averyrudelphe@gmail.com, #38332) Losslessly optimize Android resources (#38332) + # Losslessly optimizes the Android resources. These are the only non-test PNGs remaining in the project, to my knowledge. + # Testing: Unnecessary, since this only optimizes assets. +https://github.com/servo/servo/pull/38330 (@atbrakhi, @delan, #38330) devtools: Make contentType optional in source actor source responses (#38330) + # This is allowed by the [protocol + # docs](https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#loading-script-sources), and eliminates + # an unwrap(). + # Testing: does not get exercised yet, but will be used in #37667 + # Fixes: part of #36027 +https://github.com/servo/servo/pull/38326 (@sagudev, #38326) canvas: Fix the build of the vello backend (#38326) + # Multiple Into hoops cannot be resolved by compiler + # Testing: Just refactor. +https://github.com/servo/servo/pull/38166 (@mrobinson, #38166) compositor: Request reflow when doing a page zooming (#38166) + # Request a reflow when doing page zoom and only modify the scaling of the + # WebView scene after the first root pipeline display list with the new + # zoom is ready. In addition: + # - store zoom limits in `Scale` types + # - send `ViewportDetails` along with the display list so that we can + # detect when the root pipeline scale is ready. + # Testing: This is quite hard to test as it requires verification that + # contents are zoomed appropriately at the right time. + # Fixes: #38091. +https://github.com/servo/servo/pull/38318 (@Loirooriol, #38318) layout: Fix `depends_on_block_constraints` logic (#38318) + # The logic was wrong, sometimes we weren't setting it to true on flex containers that needed it, and then as a + # workaround we were setting it to to true on flex items that didn't need it. + # For example, this testcase had 5 cache misses when stretching the items, now we will avoid laying them out again: + # ```html + # ``` + # Also, the workaround wasn't always working, e.g. it failed to stretch the green element here: + # ```html + # ``` + # Testing: Adding new test + # Fixes: #38023 +https://github.com/servo/servo/pull/38261 (@yezhizhen, #38261) cargo: Use workspace dependency for `winit` and upgrade to 0.30.12 (#38261) + # Use workspace dependency to sync the `winit` version between examples & libservo. + # Upgrade winit to 0.30.12. + # Fixes: The hope is lost as it doesn't fix anything.. +https://github.com/servo/servo/pull/38290 (@Loirooriol, #38290) layout: Include spanned gutters when laying out contents of table cell (#38290) + # If a cell would e.g. span 2 columns, each 50px wide, separated by a 10px gutter, then we used to lay out the + # contents of the cell with a 100px wide containing block. Now we will include the size of the gutter. + # Testing: Adding new test + # Fixes: #38277 +https://github.com/servo/servo/pull/38307 (@yezhizhen, #38307) servoshell: Remove redundant `WindowEvent::Resized` handler (#38307) + # They are redundant as marked in #38174 as rendering related rect already updated in `minibrowser::update`. As a + # result, we are able to remove `window_rendering_context` and `inner_size` fields from `struct Window`. + # Testing: No regression/behaviour change in all tests running with headed window. + # Fixes: https://github.com/servo/servo/issues/38255#issuecomment-3117642340 +https://github.com/servo/servo/pull/38324 (@jerensl, #38324) mach: Fail on invalid argument in try_parser (#38324) + # This will block the command, print an error message about an invalid argument being passed to the ./mach try command, + # and return the exit code. + # Testing: `./mach try test-wpt` + # Fixes: #38193 +>>> 2025-07-31T06:13:16Z +https://github.com/servo/servo/pull/38329 (@longvatrong111, #38329) Implement webdriver element in view (#38329) + # Implement step 6 of `ElementClick`: https://w3c.github.io/webdriver/#dfn-element-click + # Tests: `tests/wpt/tests/webdriver/tests/classic/element_click/interactability.py` + # cc: @xiaochengh +https://github.com/servo/servo/pull/38376 (@sebsebmc@gmail.com, #38376) net: Add expiry limit to cookies and prevent panics from max-age (#38376) + # Based on RFC6256 expiration must be limited to 400 days. This also solves a bug I found where large max-age values + # could cause an overflow panic when adding. + # Testing: New unit test added. There doesn't appear to be a WPT test that relies on this under cookies/ but + # cookiestore/ does. +https://github.com/servo/servo/pull/38265 (@delan, @atbrakhi, #38265) script: Implement jsglue trap for runJobs() (#38265) + # in the [SpiderMonkey Debugger API](https://firefox-source-docs.mozilla.org/js/Debugger/), hooks like + # [onNewGlobalObject()](https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.html#onnewglobalobject-global) + # use an AutoDebuggerJobQueueInterruption to [switch to a new microtask + # queue](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/src/debugger/Debu + # gger.cpp#L2834-L2841) + # and avoid clobbering the debuggee’s microtask queue. this in turn + # relies on JobQueue::runJobs(), which is [not yet implemented in + # RustJobQueue](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/src/jsglue.cpp#L76- + # L78). + # this patch bumps mozjs to servo/mozjs#597, which implements + # [runJobs()](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/public/Promi + # se.h#L61-L76) + # for RustJobQueue by calling into Servo’s MicrotaskQueue::checkpoint() via a new function in JobQueueTraps. + # SpiderMonkey [does not own external job + # queues](https://github.com/servo/mozjs/blob/b14aebff23ac4d5b0652060ef949334bda08b22f/mozjs-sys/mozjs/js/public/Promise.h + # #L117-L123), + # so the lifetime of these queues is managed in Servo, where they are stored in a Vec-based stack. stack-like behaviour + # is adequate for SpiderMonkey’s save and restore patterns, as far as we can tell, but we’ve added an assertion + # just in case. + # Testing: manually tested working in devtools debugger patch (#37667), where it will undergo automated tests +https://github.com/servo/servo/pull/38372 (@dependabot[bot], @dependabot[bot], #38372) build(deps): bump rustls from 0.23.29 to 0.23.31 (#38372) + # Bumps [rustls](https://github.com/rustls/rustls) from 0.23.29 to 0.23.31. + # Commits + # 647ece1 Prepare 0.23.31 + # b2831e7 rustls-bench: short circuit single threaded tests + # 668231f Improve testing of non-blocking complete_io() + # 5e5d629 complete_io: make non-blocking error return reachable + # 2a852c0 Exit complete_io loop as soon as no progress is made + # 2f487cf rustls-test: withdraw FailsReads helper + # 41bfb22 rustls-test: add helper for non-blocking IO tests + # 0ccbc63 Cargo: rustls version 0.23.29 -> 0.23.30 + # 4c16f03 Fix: Do not try to call deframer on junk data + # 6b9df65 sign: make public_key_to_spki() public + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls&package-manager=cargo&p + # revious-version=0.23.29&new-version=0.23.31)](https://docs.github.com/en/github/managing-security-vulnerabilities/about- + # dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38371 (@dependabot[bot], @dependabot[bot], #38371) build(deps): bump zune-jpeg from 0.4.19 to 0.4.20 (#38371) + # Bumps [zune-jpeg](https://github.com/etemesi254/zune-image) from 0.4.19 to 0.4.20. + # Release notes + # Sourced from zune-jpeg's releases. + # v0.1.0 + # No release notes provided. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zune-jpeg&package-manager=carg + # o&previous-version=0.4.19&new-version=0.4.20)](https://docs.github.com/en/github/managing-security-vulnerabilities/about + # -dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38370 (@dependabot[bot], @dependabot[bot], #38370) build(deps): bump clap from 4.5.41 to 4.5.42 (#38370) + # Bumps [clap](https://github.com/clap-rs/clap) from 4.5.41 to 4.5.42. + # Release notes + # Sourced from clap's releases. + # v4.5.42 + # [4.5.42] - 2025-07-30 + # Fixes + # Include subcommand visible long aliases in --help + # Changelog + # Sourced from clap's changelog. + # [4.5.42] - 2025-07-30 + # Fixes + # Include subcommand visible long aliases in --help + # Commits + # 27cc4b7 chore: Release + # 16a4fc7 docs: Update changelog + # 07f9f15 Merge pull request #5874 from tetzng/fix-fish-completions + # 721deab chore: Release + # a4be55b docs: Update changelog + # fd5e691 Merge pull request #5877 from therealprof/features/use-btreemap-instead-of-so... + # 6604e79 Use BTreeMap instead of a sorted Vec + # 28e163a fix(complete): Remove {} and replace commas with newlines + # b5a47c4 chore: Release + # b154a7a docs: Update changelog + # Additional commits viewable in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&pre + # vious-version=4.5.41&new-version=4.5.42)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-depe + # ndabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38368 (@dependabot[bot], @dependabot[bot], #38368) build(deps): bump wayland-client from 0.31.10 to 0.31.11 (#38368) + # Bumps [wayland-client](https://github.com/smithay/wayland-rs) from 0.31.10 to 0.31.11. + # Commits + # See full diff in compare view + # [![Dependabot compatibility + # score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=wayland-client&package-manager + # =cargo&previous-version=0.31.10&new-version=0.31.11)](https://docs.github.com/en/github/managing-security-vulnerabilitie + # s/about-dependabot-security-updates#about-compatibility-scores) + # Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger + # a rebase manually by commenting `@dependabot rebase`. + # [//]: # (dependabot-automerge-start) + # [//]: # (dependabot-automerge-end) +https://github.com/servo/servo/pull/38338 (@sagudev, #38338) chore: Update vello to fix radials in vello_cpu (#38338) + # This update includes a fix for https://github.com/linebender/vello/issues/1124. + # Testing: Existing WPT tests + # try run: https://github.com/sagudev/servo/actions/runs/16599834725 +https://github.com/servo/servo/pull/38322 (@gterzian, #38322) background_hang_monitor: ensure workers run until monitored components do (#38322) + # Shut-down of the background hang monitor(bhm) is currently problematic: + # - it does not always run until the monitored script-thread does(see "BackgroundHangMonitor has gone away" mentioned + # in https://github.com/servo/servo/issues/34158). + # - it shuts-down before the constellation(good, so actually https://github.com/servo/servo/issues/24850 was "fixed" + # but in a way that introduced a new problem), but using a mechanism that allows it to shutdown before script(the + # problem above). + # - there are various mechanism(see the doc comments removed by this PR) in place which are meant to ensure a clean + # shutdown despite the above problems; those are complicated, and become unnecessary once those problems are fixed. + # All of the above is fixed by the changes in this PR, which ensure the bhm does not shut-down before script, and + # also maintains the invariant that it must shut-down before the constellation(in single-process mode) or before + # the main thread(in multi-process mode), but using a mechanism which allows it to keep running until script shuts-down. + # An unnecessary option around the exit signal is also removed. + # As a positive side-effect, it also ensures that any script-thread is shut-down before the constellation(because + # for the bhm worker to exit, the monitored script must have exited first), so this should also fix a host of other + # problems noted in https://github.com/servo/servo/issues/30849, but each should be confirmed independently(and various + # other improvements seem possible in their specific contexts, such as joining on script threads, and removing the + # `ScriptThreadMessage::ExitScriptThread`). + # Fixes: https://github.com/servo/servo/issues/24850 and part of https://github.com/servo/servo/issues/34158 + # Testing: Unit tests in `component/background_hang_monitor/tests`. Also manually tested loading "about-blank" + # in single- and multi-process mode. +https://github.com/servo/servo/pull/38346 (@averyrudelphe@gmail.com, @Loirooriol, #38346) layout: respect `image-rendering` on border images (#38346) + # Properly passes `image-rendering` down to border images. + # Testing: Covered by WPT tests. +https://github.com/servo/servo/pull/38350 (@Loirooriol, #38350) layout: Make `IndependentFormattingContext::contents` private (again) (#38350) + # This was done in #24871, but after some refactorings it became public. This makes it private again. As said in + # b2b3ea992c2f045a49d7264df18f5f85b2c913fb: + # > Privacy forces the rest of the code to go through methods + # > rather than matching on the enum, + # > reducing accidental layout-mode-specific behavior. + # It also avoids the risk of accidentally calling `layout()` on the inner layout-mode-specific struct, bypassing caching. + # Testing: Not needed (no behavior change) +https://github.com/servo/servo/pull/38349 (@Loirooriol, #38349) layout: Make a couple tracing reflect what they actually trace (#38349) + # `IndependentFormattingContext::layout` was being traced with name + # `IndependentFormattingContext::layout_with_caching`. Better use `IndependentFormattingContext::layout` instead. + # There was also a debug trace with name `NonReplaced cache miss`, but now this code also applies to replaced boxes, + # so I'm renaming it to `IndependentFormattingContext::layout cache miss`. + # Testing: Not needed (no behavior change) +https://github.com/servo/servo/pull/38359 (@delan, @atbrakhi, #38359) devtools: Fix source contents tests and fix a race (#38359) + # test_sources_list() relied on to test scripts loaded from multiple origins, but that file was deleted a couple + # of weeks ago. this patch adds a second internal web server, then replaces that load with scripts loaded from two + # distinct origins: and . + # fixing that test revealed an impl bug where inline module scripts containing `import` statements may never get + # their source contents populated. this is because the logic for populating source contents for inline scripts only + # applied to source actors created *before* we finished parsing the page. we assumed that inline scripts always + # block the parser, but this is not the case. this patch ensures that inline source contents can be populated for + # source actors created after parse. + # Testing: adds a new test, test_source_content_with_inline_module_import_external() + # Fixes: part of #36325 +https://github.com/servo/servo/pull/37871 (@stevennovaryo, @mrobinson, #37871) layout: Consider transform for bounding box queries (#37871) + # The recent changes that cached the Scroll Tree present an opportunity to calculate the queries that consider + # transform and scroll (dubbed as post composite queries) accurately. + # This PR propose a solution for this calculation by noting the lowest scroll tree nodes that would affect a + # fragment. To do this, each fragment would store a new attribute `spatial_tree_node` -- scroll tree node id that + # we could use for the query. This referencing is considered because the scroll tree node construction is managed + # by the fragment itself. Therefore it would ease the managing the possibly stale reference and future query cache + # invalidation considering the development of incremental layout. + # The bounding box query then could transform the bounding content rect of a fragment using the computed current + # transformation matrix. + # Fixes: https://github.com/servo/servo/issues/35768 + # Testing: Existing and new WPT +https://github.com/servo/servo/pull/38234 (@longvatrong111, #38234) Rework on webdriver wait for navigation complete (#38234) + # For current implementation, when a command may trigger a navigation, webdriver only waits for document readiness state. + # However, not all navigations make change in document. + # This PR handles more cases for waiting for a navigation, and apply to `element_click`. + # - Before sending a command which may trigger a navigation, `webdriver` sets `load status send` to `embedder`, + # `constelltation` and `script thread` to listen to `navigation events`. + # - Webdriver check if there is a navigation with `script thread`. + # - If the navigation is loading a new url, webdriver checks if the request is approved with `constellation`, then + # waits for document readiness state. + # - If the navigation is a hashchange, webdriver waits untill all new generated dom events have been processed. + # Testing: + # `tests/wpt/tests/webdriver/tests/classic/element_click/navigate.py` + # `tests/wpt/tests/webdriver/tests/classic/element_click/user_prompts.py` + # https://github.com/longvatrong111/servo/actions/runs/16488690749 + # cc: @xiaochengh +https://github.com/servo/servo/pull/37410 (@yezhizhen, #37410) webdriver: Keep constellation alive and Open new top-level browsing context with new session request when none is open (#37410) + # Keep Constellation alive even when all browsing context closed in WebDriver mode. In this case, when creating a + # new session, we would open a new top-level browsing context. + # Fixes: #37408 + # Testing: `./mach test-wpt -r .\tests\wpt\tests\webdriver\tests\classic\close_window\close.py --product servodriver` +>>> 2025-08-01T06:10:37Z From 4349534f401019589b6d291a2a6ca68a325038b1 Mon Sep 17 00:00:00 2001 From: Delan Azabani Date: Mon, 4 Aug 2025 10:40:33 +0800 Subject: [PATCH 2/8] Write about donations --- README.md | 34 +++++++++++++++++++----- _posts/2025-08-15-this-month-in-servo.md | 32 +++++++++++++++++++--- 2 files changed, 56 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index e8eb3ddd8..a3d4f31df 100644 --- a/README.md +++ b/README.md @@ -315,12 +315,6 @@ centsPerMonth += $$("table tbody tr") ``` - After running it on every page, the result is USD cents/month -LFX: - -- Go to - - You may need to open it in private browsing to avoid getting a 404, not sure why -- Manually add up the amounts for one month, stopping when you see the same donor repeated - thanks.dev: - Go to @@ -328,6 +322,34 @@ thanks.dev: - Go to - Click **For maintainers** - The number of donors is in “You currently have X donors.” +- If possible, make a payout: click **payouts**, click **withdraw**, click **withdraw** +- Click **income**, make sure the <select> is set to **gh/servo** +- Run this code in devtools, changing `Jul 25` to the **date** column text for last month: +```js +monthText = "Jul 25"; +columnHeadings = [...document.querySelectorAll("div")] + .filter(div => div.textContent == "amount") + .flatMap(div => [...div.parentNode.childNodes]); +if (new Set(columnHeadings.map(th => th.parentNode)).size != 1) + throw new Error("Unexpected columnHeadings values"); +headingRow = columnHeadings[0].parentNode; +// The parent is actually the whole page content area, not just the table >:( +contentArea = headingRow.parentNode; +dataRowStart = [...contentArea.childNodes].indexOf(headingRow) + 1; +dataRowEnd = [...contentArea.childNodes].length - 1; // Total row (fragile?) +dataRows = [...contentArea.childNodes].slice(dataRowStart, dataRowEnd); +if (!dataRows.every(tr => tr.childNodes.length == columnHeadings.length)) + throw new Error("Unexpected table structure"); +columnIndices = new Map(columnHeadings.map((th,i) => [th.textContent, i])); +getValue = (tr,columnName) => tr.childNodes[columnIndices.get(columnName)].textContent; +dataRows + .filter(tr => getValue(tr, "date").endsWith(` ${monthText}`)) + .map(tr => getValue(tr, "amount")) + .filter(amount => amount != "< $0.01") + .map(amount => parseInt(amount.match(/^[$]([0-9]+[.][0-9][0-9])$/)[1].replace(".",""))) + .reduce((p, q) => p + q) +``` +- The result is USD cents/month ## Triaging commits in nightlies for monthly updates diff --git a/_posts/2025-08-15-this-month-in-servo.md b/_posts/2025-08-15-this-month-in-servo.md index dd3b04e09..9933f6336 100644 --- a/_posts/2025-08-15-this-month-in-servo.md +++ b/_posts/2025-08-15-this-month-in-servo.md @@ -8,13 +8,37 @@ categories: --- +## Donations + +Thanks again for your generous support! +We are now receiving **4691 USD/month** (+5.0% over June) in recurring donations. +This helps cover the cost of our [self-hosted](https://ci0.servo.org) [CI](https://ci1.servo.org) [runners](https://ci2.servo.org) and one of our [latest Outreachy interns](https://www.outreachy.org/alums/2025-06/#:~:text=Servo)! + +Keep an eye out for [further improvements to our CI system](https://github.com/servo/servo/issues/38141) in the coming months, including [**ten-minute WPT builds**](https://github.com/servo/ci-runners/issues/21) and our new proposal for [**dedicated benchmarking runners**](https://github.com/servo/project/issues/160), all thanks to your support. + +Servo is also on [thanks.dev](https://thanks.dev), and already **22 GitHub users** (−3 from June) that depend on Servo are sponsoring us there. +If you use Servo libraries like [url](https://crates.io/crates/url/reverse_dependencies), [html5ever](https://crates.io/crates/html5ever/reverse_dependencies), [selectors](https://crates.io/crates/selectors/reverse_dependencies), or [cssparser](https://crates.io/crates/cssparser/reverse_dependencies), signing up for [thanks.dev](https://thanks.dev) could be a good way for you (or your employer) to give back to the community. + +
+
+
4691 USD/month
+
+
+
10000
+
+ +
+ +As always, use of these funds will be decided transparently in the Technical Steering Committee. +For more details, head to our [Sponsorship page]({{ '/sponsorship/' | url }}). +