Compare commits

...

1376 Commits

Author SHA1 Message Date
Jonathan Schwender
54d21b4136 CI: Use github environment to protect release workflow
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-10 08:44:11 +02:00
Tim van der Lippe
4b02f87cce script: Implement preserving ranges for moves during commands (#44041)
This ensures that the selection after the move is as expected.
It mostly fixes tests that had fully passing implementation, but
the after fontsize was incorrect, since the selection wasn't
properly updated.

Some new regressions were false positives.

Part of #25005

Testing: WPT

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-04-10 04:35:08 +00:00
dependabot[bot]
eb9784c9fb build: bump libredox from 0.1.15 to 0.1.16 (#44077)
Bumps libredox from 0.1.15 to 0.1.16.


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libredox&package-manager=cargo&previous-version=0.1.15&new-version=0.1.16)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-10 00:40:36 +00:00
Euclid Ye
560498923e script: Skip clearing subtree layout boxes of detached element when attaching shadow to it (#44052)
There is no layout boxes to clear in this case. For the example in
#43998,
this skips the traversal many times.

Testing: Should not change visible behaviour.
[Try](https://github.com/servo/servo/actions/runs/24131782865).

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-10 00:12:07 +00:00
Euclid Ye
8b61ca94fc script: Make Node::clean_up_style_and_layout_data work as named (#44072)
Do not `cancel_animations_for_node` for this function.
We can then reuse it more often.

Testing: Just a refactor.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-10 00:11:19 +00:00
elomscansio
65b917bd4f devtools: Replace new with register for NodeActor (#44071)
Added a `register` method to `NodeActor` following the same pattern used
by other actors in the devtools codebase. Updated
`NodeInfoToProtocol::get_or_register_node_actor` to use it instead of
constructing `NodeActor` directly.
Testing: 
Ran `./mach try linux-unit-tests` and `./mach test-devtools`. No new
failures introduced.

Fixes:part of  #43800

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-04-10 00:06:39 +00:00
rtjkro
f56c108625 font: Refactor font list generation on OpenHarmony platform (#44061)
font: Use `read_fonts` module to generate font list on OpenHarmony
platform. Specifically:

- `Family name` is obtained from the font's `name` table.
- `width` & `weight`  is obtained from the font's `os2` table.
- `style` is obtained from the font's `postscript` table.

Additionally, I'd like to mention that I plan to add a caching mechanism
to store the font list in the near future (as mentioned in the related
issue)

Reference: [TrueType reference
manual](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6.html)
Testing: No behavior changes expected.
Fixes: Part of [#43596](https://github.com/servo/servo/issues/43596)

---------

Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
2026-04-09 16:18:28 +00:00
elomscansio
11cea2f023 devtools: Replace new with register for PageStyleActor (#44068)
Added a `register` method to `PageStyleActor` following the same pattern
used by other actors in the devtools codebase. Updated
`InspectorActor::register` to use it instead of constructing
`PageStyleActor` directly.
  Testing: 
Ran `./mach try linux-unit-tests` and `./mach test-devtools`. No new
failures introduced.

  Fixes:part of  #43800

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
Signed-off-by: eri <eri@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-09 16:07:20 +00:00
atbrakhi
9e5e5603df devtools: Use DebuggerValue in console (#44064)
Use same `DebuggerValue` in console actor as well. This helps us have
single source of truth!

Testing: Added a new test
Fixes: part of https://github.com/servo/servo/issues/39858

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-09 14:25:02 +00:00
Martin Robinson
f45223568e servoshell: Ignore requests to focus unknown WebViews via keyboard shortcuts (#44070)
Instead of panicking when pressing a keyboard shortcut for an uknown
WebView, just silently ignore the request. This code path is only
followed when using keyboard shortcuts, so this isn't going to hide any
unexpected behavior.

Testing: We do not have testing at this level of servoshell.
Fixes: #44056.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-09 14:09:07 +00:00
Messi II Innocent R.
4029f196e6 media: Clean up shadow root content when removing controls (#43983)
When media controls are removed (either by removing the controls
attribute or by removing the element from the DOM), the shadow root's
children are now cleared. This breaks the reference cycle between the js
mediacontrols instance and the media element, the event listeners and
this.media reference in the controls script would otherwise keep the
element alive and prevent garbage collection.

I tested the controls and it renders correctly and deleting a video with
controls doesn't crash.

Fixes: #43828

Signed-off-by: Messi002 <rostandmessi2@gmail.com>
2026-04-09 13:21:03 +00:00
CynthiaOketch
c52726eda0 devtools: Replace new with register for HighlighterActor (#44067)
Added a `register` method to `HighlighterActor` following the same
pattern used by other actors in the devtools codebase. Updated
`InspectorActor::register` to use it instead of onstructing
`HighlighterActor` directly.
  Testing: 
Ran `./mach try linux-unit-tests` and `./mach test-devtools`. No new
failures introduced.

  Fixes:part of  #43800

---------

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-04-09 12:40:40 +00:00
atbrakhi
f32cc3dc51 devtools: Make isAsync and isGenerator optional (#44023)
Make `isAsync` and `isGenerator` optional

Testing: Current tests as passing
Fixes:  part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Signed-off-by: eri <eri@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-09 11:52:09 +00:00
Oriol Brufau
e9fbed1d74 fonts: Use ICU's Language instead of Stylo's XLang (#44057)
Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-04-09 10:53:44 +00:00
Euclid Ye
4c6d13d11e servoshell (Windows): Add CJK fonts for egui (#44055)
We configure fonts for Windows referring to [doc
example](https://docs.rs/egui/latest/egui/struct.FontDefinitions.html).
There is a [discussion](https://github.com/emilk/egui/discussions/1344)
on this about various ways.

Testing: Not possible to write automated test.
Before: 
<img width="232" height="109" alt="image"
src="https://github.com/user-attachments/assets/be9f3724-9ee5-4157-bd9d-313b519d1e57"
/>

After: 
<img width="243" height="67" alt="image"
src="https://github.com/user-attachments/assets/e748389f-48e3-48c1-bdaf-23c49837a1c6"
/>

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-09 10:43:41 +00:00
atbrakhi
3c4b8c61ea devtools: Handle different number values and their types (#44022)
Handle different number values and their types

Testing: Current tests are passing
Fixes:  part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-09 10:42:05 +00:00
Martin Robinson
718c8913af script/constellation: Rename and consolidate cross-Document focus messaging (#44020)
There are two times that Servo needs to ask other `Document`s to either
focus or blur.

- During processing of the "focusing steps". When a new element gains
  focus this may cause focus to be lost or gained in parent `<iframe>`s.
- When calling `focus()` on a DOM Window from another origin.

In both of these cases we need to request that a `Document` gain or lose
focus via the Constellation, but in the second case we may have a
`BrowsingContextId` of the `<iframe>` gaining focus and a
`FocusSequence`. This change splits those cases into two kinds of
messages.

Finally, run the entire focusing steps when calling `window.focus()`
instead of going to the constellation immediately. This will be
important in a followup changes where messaging order is made more
consistent.

Testing: This should not change behavior so is covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-09 08:59:47 +00:00
Taym Haddadi
553f125773 IndexedDB: Align IDBDatabase.transaction validation with the IndexedDB spec (#44059)
Testing: Existing WPT test pass.
part of https://github.com/servo/servo/issues/40983

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-09 08:59:05 +00:00
elomscansio
ae5abfbdea mach: remove shorthand support for direct test file paths in mach test-unit (#43951)
This PR removes support for passing direct test file paths (e.g.,
`./mach test-unit <test_file.rs>`) to `mach test-unit`.

Previously, this shorthand was supported in `test-unit` but was
subsequently broken in #39897. Supporting this behavior now requires
extracting test names from a generic parameter list, which is
error-prone due to the presence of arbitrary arguments and inconsistent
argument ordering.

With this change, `mach test-unit` aligns more closely with standard
Cargo test patterns. Users are expected to specify test modules or
patterns instead (e.g., `./mach test-unit <module>::` or using
Cargo-compatible arguments).

This simplifies the implementation and avoids maintaining fragile logic
for shorthand support that was not widely used.

---

### Testing

* Ran `./mach test-unit` with various valid patterns and module-based
inputs
* Verified that tests execute correctly across supported use cases
* Confirmed that removal of direct file path support does not affect
standard workflows

---

Fixes: #41065

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-04-09 07:41:31 +00:00
Gae24
a0d397bd1a script: Queue a networking task to proceed when a pending module fetch is terminated (#44042)
Our implementation of [fetch a single module
script](https://html.spec.whatwg.org/multipage/webappapis.html#fetch-a-single-module-script)
was missing the task queueing steps:
```
5. If moduleMap[(url, moduleType)] is "fetching", wait in parallel until that entry's value changes,
   then queue a task on the networking task source to proceed with running the following steps.

6. If moduleMap[(url, moduleType)] exists, run onComplete given moduleMap[(url, moduleType)], and return.
```
Instead we appended a `PromiseNativeHandler`, which would run
`on_complete` when resolved, on the promise of the pending fetch.

Testing: This change shouldn't be observable since modules are evaluated
in sync, but it's required for #39417.

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-04-09 07:27:53 +00:00
dependabot[bot]
046ed0f236 build: bump tokio from 1.51.0 to 1.51.1 in the tokio-rs-related group (#44048)
Bumps the tokio-rs-related group with 1 update:
[tokio](https://github.com/tokio-rs/tokio).

Updates `tokio` from 1.51.0 to 1.51.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tokio/releases">tokio's
releases</a>.</em></p>
<blockquote>
<h2>Tokio v1.51.1</h2>
<h1>1.51.1 (April 8th, 2026)</h1>
<h3>Fixed</h3>
<ul>
<li>sync: fix semaphore reopens after forget (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8021">#8021</a>)</li>
<li>net: surface errors from <code>SO_ERROR</code> on <code>recv</code>
for UDP sockets on Linux (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8001">#8001</a>)</li>
</ul>
<h3>Fixed (unstable)</h3>
<ul>
<li>metrics: fix <code>worker_local_schedule_count</code> test (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8008">#8008</a>)</li>
<li>rt: do not leak fd when cancelling io_uring open operation (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7983">#7983</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/tokio/issues/7983">#7983</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7983">tokio-rs/tokio#7983</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8001">#8001</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8001">tokio-rs/tokio#8001</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8008">#8008</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8008">tokio-rs/tokio#8008</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8021">#8021</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8021">tokio-rs/tokio#8021</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="98df02d7a4"><code>98df02d</code></a>
chore: prepare Tokio v1.51.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8023">#8023</a>)</li>
<li><a
href="3ea11e2a5f"><code>3ea11e2</code></a>
sync: fix semaphore reopens after forget (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8021">#8021</a>)</li>
<li><a
href="c79121391d"><code>c791213</code></a>
rt: do not leak fd when cancelling io_uring open operation (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7983">#7983</a>)</li>
<li><a
href="ad8c59add6"><code>ad8c59a</code></a>
net: surface errors from <code>SO_ERROR</code> on <code>recv</code> for
UDP sockets on Linux (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8001">#8001</a>)</li>
<li><a
href="654d38b132"><code>654d38b</code></a>
metrics: fix <code>worker_local_schedule_count</code> test (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8008">#8008</a>)</li>
<li><a
href="857ba80933"><code>857ba80</code></a>
docs: improve contributing docs on how to specify crates dependency
versions ...</li>
<li><a
href="95b9342da7"><code>95b9342</code></a>
chore: remove path deps for tokio-macros 2.7.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8007">#8007</a>)</li>
<li>See full diff in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-1.51.0...tokio-1.51.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio&package-manager=cargo&previous-version=1.51.0&new-version=1.51.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 06:50:01 +00:00
Tim van der Lippe
1c849a362d script: Fix computation of "fontsize" command value (#44039)
The initial interpretation of "convert the font size to the value in
pixels" was completely off. I thought it meant the existing font
elements in the DOM, but instead it implied that you would have to
convert these into pixels according to the HTML size table.

Therefore, use the implementation in Stylo to convert the html size to a
keyword and then compute the value for the keyword.

To make that work, we need to compute the pixel size as fallback when
resolving the CSS value on the node. We check if it were pixels and then
go through the conversion. If they aren't pixels, we can skip all that
logic and directly convert, saving a few cycles.

Part of #25005

Testing: WPT

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-04-09 06:38:42 +00:00
dependabot[bot]
5eb2ffc623 build: bump thin-vec from 0.2.14 to 0.2.15 (#44051)
Bumps [thin-vec](https://github.com/gankra/thin-vec) from 0.2.14 to
0.2.15.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/mozilla/thin-vec/blob/main/RELEASES.md">thin-vec's
changelog</a>.</em></p>
<blockquote>
<h1>Version 0.2.15 (2025-02-19)</h1>
<ul>
<li>Support AutoTArrays created from rust in Gecko FFI mode.</li>
<li>Add extract_if.</li>
<li>Add const new() support behind feature flag.</li>
<li>Fix <code>thin_vec</code> macro not being hygienic when
recursing</li>
<li>Improve extend() performance.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="70bcca0960"><code>70bcca0</code></a>
chore: Bump version to v0.2.15</li>
<li><a
href="322423b7a6"><code>322423b</code></a>
Fix miri error on extract_if().</li>
<li><a
href="eca5334c29"><code>eca5334</code></a>
Don't make push_unchecked public.</li>
<li><a
href="90e23c39cc"><code>90e23c3</code></a>
Minor nits, go back to call push_reserved push_unchecked.</li>
<li><a
href="ee9d6bb28f"><code>ee9d6bb</code></a>
Optimize extend() to avoid unnecessary capacity checks</li>
<li><a
href="7fd47080c0"><code>7fd4708</code></a>
feat: add const_new feature for const ThinVec::new()</li>
<li><a
href="beb652d66b"><code>beb652d</code></a>
Merge pull request <a
href="https://redirect.github.com/gankra/thin-vec/issues/75">#75</a>
from jtracey/patch-1</li>
<li><a
href="6f3da2525d"><code>6f3da25</code></a>
Merge pull request <a
href="https://redirect.github.com/gankra/thin-vec/issues/73">#73</a>
from emilio/auto-array-tweaks</li>
<li><a
href="d3d7475118"><code>d3d7475</code></a>
gecko: Keep the auto-bit across relocations.</li>
<li><a
href="faa01eb790"><code>faa01eb</code></a>
Merge pull request <a
href="https://redirect.github.com/gankra/thin-vec/issues/66">#66</a>
from GnomedDev/extract-if</li>
<li>Additional commits viewable in <a
href="https://github.com/gankra/thin-vec/compare/v0.2.14...v0.2.15">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=thin-vec&package-manager=cargo&previous-version=0.2.14&new-version=0.2.15)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 00:38:28 +00:00
dependabot[bot]
071c35e5a2 build: bump zerofrom-derive from 0.1.6 to 0.1.7 (#44049)
Bumps [zerofrom-derive](https://github.com/unicode-org/icu4x) from 0.1.6
to 0.1.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/unicode-org/icu4x/blob/main/CHANGELOG.md">zerofrom-derive's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>icu 2.2.x</h2>
<p>Several crates have had patch releases in the 2.2 stream:</p>
<ul>
<li>Components
<ul>
<li>(2.2.1) <code>icu_calendar</code>
<ul>
<li>Fix extended year calculations in Gregorian-like and Coptic-like
calendars (unicode-org#7849)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>icu4x 2.2</h2>
<ul>
<li>Components
<ul>
<li>General
<ul>
<li>Use HTTPS links in docs (unicode-org#7212)</li>
<li>Update MSRV to 1.86 (unicode-org#7576)</li>
<li>Updated to CLDR 48.2 (unicode-org#7792)</li>
<li>Replace <code>experimental</code> features with
<code>unstable</code> features (unicode-org#7566)</li>
<li>Add categories and keywords to Cargo.toml for all components
(unicode-org#7737)</li>
</ul>
</li>
<li><code>icu_calendar</code>
<ul>
<li>Add <code>Date::try_new</code>, which replaces
<code>Date::try_new_from_codes</code>, and takes typed year/month
values. (unicode-org#7773, unicode-org#7764)</li>
<li>New methods: <code>Date::try_new</code> (and primarily-internal
<code>Calendar::new_date</code>)</li>
<li>New types: <code>InputYear</code>, <code>DateNewError</code></li>
<li>Handle possible <code>Overflow</code> values on individual calendars
(unicode-org#7795)</li>
<li>New <code>Date::try_from_fields</code> API for fully general date
construction from various choices of year and month values
(unicode-org#7798)</li>
<li>New methods: <code>Date::try_from_fields()</code></li>
<li>New types: <code>DateFields</code>,
<code>DateFromFieldsOptions</code>, <code>Overflow</code>,
<code>MissingFieldsStrategy</code>,
<code>DateFromFieldsError</code></li>
<li>New associated method: <code>Calendar::from_fields()</code></li>
<li>New Date arithmetic APIs for adding and subtracting dates
(unicode-org#7798, unicode-org#7355, unicode-org#7257)</li>
<li>New methods: <code>Date::try_add_with_options</code>,
<code>Date::try_added_with_options</code>,
<code>Date::try_until_with_options</code></li>
<li>New types: <code>DateDuration</code>, <code>DateAddOptions</code>,
<code>DateDifferenceOptions</code>, <code>DateDurationUnit</code>,
<code>DateDurationParseError</code>, <code>DateAddError</code>,
<code>MismatchedCalendarError</code></li>
<li>New associated items: <code>Calendar::add</code>,
<code>Calendar::until</code>,
<code>Calendar::DateCompatibilityError</code></li>
<li>Introduce a new <code>Month</code> type, preferred over using month
codes (unicode-org#7147, unicode-org#7756)
<ul>
<li>New type: <code>Month</code></li>
<li>New method: <code>MonthInfo::to_input()</code></li>
</ul>
</li>
<li>Introduce year/date ranges to all APIs, documented on the APIs
themselves. <code>Date</code> now has a fundamental range (ISO years
between ±999,999), and most constructors enforce a stricter range of
±9999 years for input years. (unicode-org#7676, unicode-org#7062,
unicode-org#7629, unicode-org#7753, unicode-org#7219,
unicode-org#7227)</li>
<li>Add constructors with <code>Month</code> for lunisolar calendars
(unicode-org#7485)</li>
<li>New methods: <code>Date::try_new_korean_traditional()</code>,
<code>Date::try_new_chinese_traditional()</code>,
<code>Date::try_new_hebrew_v2()</code></li>
<li>Expose <code>LeapStatus</code> on <code>MonthInfo</code>
(unicode-org#7667)</li>
<li>New method: <code>MonthInfo::leap_status()</code></li>
<li>New enum: <code>LeapStatus</code></li>
<li>(Unstable) Integrate with <code>chrono</code>, <code>jiff</code>,
and <code>time</code> (unicode-org#7617, unicode-org#7711)</li>
<li>New impls: <code>From&lt;chrono::NaiveDate&gt;</code>,
<code>From&lt;jiff::civil::Date&gt;</code>,
<code>From&lt;time::Date&gt;</code> for
<code>Date&lt;Gregorian&gt;</code></li>
<li>Replace <code>Date::day_of_week</code> by <code>Date::weekday</code>
(unicode-org#7288)
<ul>
<li>New method: <code>Date::weekday()</code></li>
</ul>
</li>
<li>Deprecate <code>Date::new_from_iso</code>/<code>Date::to_iso</code>
(unicode-org#7287)</li>
<li>Deprecate <code>Date::extended_year()</code> (use
<code>Date::year().extended_year()</code>) (unicode-org#7289)</li>
<li>Remove <code>YearInfo: PartialEq</code> bound
(unicode-org#7743)</li>
<li>Start producing Meiji era only after Meiji 6 (unicode-org#7503)</li>
</ul>
</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/unicode-org/icu4x/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerofrom-derive&package-manager=cargo&previous-version=0.1.6&new-version=0.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-09 00:37:01 +00:00
dependabot[bot]
ceb8cf07c1 build: bump cryptography from 46.0.6 to 46.0.7 (#44045)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.6
to 46.0.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.7 - 2026-04-07</p>
<pre><code>
* **SECURITY ISSUE**: Fixed an issue where non-contiguous buffers could
be
  passed to APIs that accept Python buffers, which could lead to buffer
  overflow. **CVE-2026-39892**
* Updated Windows, macOS, and Linux wheels to be compiled with OpenSSL
3.5.6.
<p>.. _v46-0-6:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="622d672e42"><code>622d672</code></a>
46.0.7 release (<a
href="https://redirect.github.com/pyca/cryptography/issues/14602">#14602</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.6...46.0.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=uv&previous-version=46.0.6&new-version=46.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-08 22:40:19 +00:00
Martin Robinson
b8ef264268 layout: Integrate more details into FontAndScriptInfo (#43974)
This will be needed for ensuring that shaped text is valid during
relayout. It duplicates some information, but the hope is that when all
of these change are done, there will be many fewer individual shaped
segments of text.

Testing: This should not really change observable behavior so is covered
by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-08 21:37:44 +00:00
Tim van der Lippe
eca6eb2b4e script: Further implement fontsize command (#44030)
While debugging test failures, I discovered that I had reversed the
`is_allowed_child` arguments. That made a bunch more tests pass, but
then also started to fail tests as we weren't clearing the previous
value and computing loose equivalence.

Therefore, this PR fixes the reversal and implements the relevant parts
of some algorithms as to not regress too much. There are two new
failures related to how integers should be parsed, but tackling that
separately.

Part of #25005

Testing: WPT

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-08 18:51:48 +00:00
Jonathan Schwender
516dba791f allocator: Add libc Heap information on macos (#44037)
Despite using `jemalloc` by default on macos as the Rust global
allocator, the default system allocator will still be used by some C/C++
libraries.
Using `malloc_zone_statistics` on macos allows us to get information
about the system allocator heap usage.
Since the macos statistic also provides information about reserved, but
currently unused memory, we also expose that and attempt to calculate
the same metric on Linux, which should be
arena (Non-mmapped space allocated (bytes)) + hblkhd (Space allocated in
mmapped regions (bytes)) See
https://man7.org/linux/man-pages/man3/mallinfo.3.html

Loading `servo.org` in a debug build on macOS and then navigating to
about:memory, I see 31MB system-heap-allocated and 92 MB
system-heap-reserved.

Testing: Manually tested on macOS. Not tested on Linux.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-08 18:23:49 +00:00
CynthiaOketch
1174dfe3d2 script: Remove pointless import renames in components/script/dom/request.rs (#44025)
CacheMode, CredentialsMode, Destination, RedirectMode, and Referrer were
imported with NetTraitsRequest* aliases to avoid naming conflicts. These
conflicts no longer exist; their original names do not clash with any
other imports or types in this file, so the aliases are restored.

Testing: Pure refactor with no behavior change. Ran `./mach try
linux-unit-tests` to verify existing tests continue to pass.
Fixes: #42981

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-04-08 17:26:51 +00:00
Simon Wülker
695b8ee913 script: Claim blob before loading <video> poster frame (#44035)
Refer to https://github.com/servo/servo/pull/43746 for a description of
the problem. This change ensures that video posters can be loaded from
blob URLs, even if the URL is revoked right after.

Testing: This change adds a test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-08 17:03:56 +00:00
atbrakhi
e50cfa7af6 devtools: Fix recursion in debugger (#44024)
Fix recursion causing panic in debugger

Testing: Current tests are passing, also manual testing 
Fixes: part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-08 15:29:20 +00:00
Taym Haddadi
78c9fe2a4c IndexedDB: Align IndexedDB binary key conversion with the spec (#44009)
IndexedDB: Align IndexedDB binary key conversion with the spec

Testing: covered by WPT test.

part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-08 10:26:52 +00:00
Freya Arbjerg
adde320fb0 paint: Add minimum size checks for RenderingContext (#44011)
Returns an error on `RenderingContext` constructors when size is 0 in
either dimension. Also adds panics to resize functions in the same case.

Testing: Added a unit test for the new error on
`SoftwareRenderingContext::new()`.
Fixes: https://github.com/servo/servo/issues/36061

Signed-off-by: Freya Arbjerg <git@arbjerg.dev>
Co-authored-by: Martin Robinson <martin@abandonedwig.info>
2026-04-08 10:18:21 +00:00
TIN TUN AUNG
280d984d3b media: Implement Player for ohos backend (#43208)
Implement Player Trait in ohos backend using Harmony OS MediaKit's[
AVPlayer](https://developer.huawei.com/consumer/en/doc/harmonyos-references/capi-avplayer-h).

The modular design of `VideoSink`, `InnerPlayer`, and `MediaSource` is
taken from the GStreamer backend.
Only support HarmonyOS SDK API 21, because the
`OH_AVPlayer_SetDataSource` only started to be exposed on API 21.

Testing: N/A, as there are no platform specific task.
Fixes: N/A, now we can play video on HarmonyOS phone using `<video>`

---------

Signed-off-by: rayguo17 <rayguo17@gmail.com>
2026-04-08 08:48:10 +00:00
Simon Wülker
1b336760ae mozjs: Rebuild from source if jitspew feature is enabled (#44010)
The `IONFLAGS` environment variable configure logging for the JIT, but
it must be enabled in spidermonkey at compile time. The prebuilt mozjs
binaries don't enable it, so we must build from source.

Companion PR for https://github.com/servo/mozjs/pull/728

Testing: We don't have tests for the build process

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-08 08:40:07 +00:00
Euclid Ye
712b4f9bc2 script: Reduce ShadowRoot::bind_to_tree complexity from O(2^N) to O(N) (#44016)
During traversal, exclude shadow roots.

Analysis:
Each shadow root is processed twice:
- via host: Element::bind_to_tree()
-  Via iterator

In total, this would be
```math
\sum_{i=0}^{N-1} 2^i = 2^N - 1
```

Testing: Added a test.
Fixes: https://github.com/servo/servo/issues/43998

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: webbeef <me@webbeef.org>
2026-04-08 08:20:20 +00:00
Jonathan Schwender
0ea14d1b60 release: Fix result check for cancelled workflows (#44017)
If the entire workflow was cancelled we also need to check for
`cancelled()`. Simply checking needs.*.result is not sufficient - it was
observed that the success branch was still entered when only checking
needs.

Testing: Tested manually, by cancelling [this
workflow](https://github.com/servo/servo/actions/runs/24119740924/job/70371050119)
which resulted in a draft release publish (failure branch)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Mukilan Thiyagarajan <mukilanthiagarajan@gmail.com>
2026-04-08 05:58:58 +00:00
Bennet Bleßmann
cff186777c devtools: remove impl JsonPacketStream for TcpStream (#44006)
Removes the `impl JsonPacketStream for TcpStream` that was supposed to
be removed as part of servo/servo#43472

> Testing: [..] Removing the JsonPacketStream implementation for
TcpStream should discourage regressions due to improper use of raw
streams.

Confirmed in
https://github.com/servo/servo/pull/43472#issuecomment-4201684071

Testing: no new test needed as this only removes code

Signed-off-by: Bennet Bleßmann <bennet.blessmann+github@googlemail.com>
2026-04-08 01:09:46 +00:00
rovertrack
ba4f031f86 script: Pass &CStr to get_callable_property (#44008)
Fixes: #43968 
made get callable property accept ` &CStr ` instead of `&str`

Testing: no behaviour change expected, so existing WPT tests are
sufficient.

Signed-off-by: Rover track <rishan.pgowda@gmail.com>
2026-04-08 00:56:47 +00:00
dependabot[bot]
b561212988 build: bump async-signal from 0.2.13 to 0.2.14 (#44015)
Bumps [async-signal](https://github.com/smol-rs/async-signal) from
0.2.13 to 0.2.14.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/async-signal/releases">async-signal's
releases</a>.</em></p>
<blockquote>
<h2>v0.2.14</h2>
<ul>
<li>Fix build error on haiku. (<a
href="https://redirect.github.com/smol-rs/async-signal/issues/59">#59</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/async-signal/blob/master/CHANGELOG.md">async-signal's
changelog</a>.</em></p>
<blockquote>
<h1>Version 0.2.14</h1>
<ul>
<li>Fix build error on haiku. (<a
href="https://redirect.github.com/smol-rs/async-signal/issues/59">#59</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d750e57adc"><code>d750e57</code></a>
Release 0.2.14</li>
<li><a
href="eb72cfd64a"><code>eb72cfd</code></a>
Fix build error on haiku</li>
<li><a
href="1ffadd3db8"><code>1ffadd3</code></a>
Update signal-hook requirement from 0.3.14 to 0.4.1 (<a
href="https://redirect.github.com/smol-rs/async-signal/issues/57">#57</a>)</li>
<li><a
href="a43dca7fd1"><code>a43dca7</code></a>
Fix clippy::io_other_error warning</li>
<li><a
href="c00258a4a6"><code>c00258a</code></a>
Bump MSRV to 1.85</li>
<li><a
href="3fdfdee177"><code>3fdfdee</code></a>
ci: Use taiki-e/checkout-action action</li>
<li><a
href="0f8053d9af"><code>0f8053d</code></a>
ci: Use cargo-hack's --rust-version flag for msrv check</li>
<li>See full diff in <a
href="https://github.com/smol-rs/async-signal/compare/v0.2.13...v0.2.14">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-signal&package-manager=cargo&previous-version=0.2.13&new-version=0.2.14)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-08 00:52:05 +00:00
dependabot[bot]
0941407c8f build: bump fastrand from 2.3.0 to 2.4.1 (#44013)
Bumps [fastrand](https://github.com/smol-rs/fastrand) from 2.3.0 to
2.4.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/fastrand/releases">fastrand's
releases</a>.</em></p>
<blockquote>
<h2>v2.4.1</h2>
<ul>
<li>Fix build failure with <code>js</code> feature. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/125">#125</a>)</li>
</ul>
<h2>v2.4.0</h2>
<ul>
<li>Bump MSRV to 1.63. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/104">#104</a>)</li>
<li>Improve quality of f32/f64 generation. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/103">#103</a>)</li>
<li>Add <code>f{32,64}_inclusive</code> and
<code>Rng::f{32,64}_inclusive</code>. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/103">#103</a>)</li>
<li>Make <code>Rng::with_seed</code> const. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/107">#107</a>)</li>
<li>Update <code>getrandom</code> to 0.3. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/104">#104</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/fastrand/blob/master/CHANGELOG.md">fastrand's
changelog</a>.</em></p>
<blockquote>
<h1>Version 2.4.1</h1>
<ul>
<li>Fix build failure with <code>js</code> feature. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/125">#125</a>)</li>
</ul>
<h1>Version 2.4.0</h1>
<ul>
<li>Bump MSRV to 1.63. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/104">#104</a>)</li>
<li>Improve quality of f32/f64 generation. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/103">#103</a>)</li>
<li>Add <code>f{32,64}_inclusive</code> and
<code>Rng::f{32,64}_inclusive</code>. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/103">#103</a>)</li>
<li>Make <code>Rng::with_seed</code> const. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/107">#107</a>)</li>
<li>Update <code>getrandom</code> to 0.3. (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/104">#104</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="728a5b503f"><code>728a5b5</code></a>
Release 2.4.1</li>
<li><a
href="0c619f6a39"><code>0c619f6</code></a>
Fix build failure with js feature</li>
<li><a
href="a4077e2373"><code>a4077e2</code></a>
ci: Add missing js feature test</li>
<li><a
href="1fd5bbb300"><code>1fd5bbb</code></a>
Release 2.4.0 (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/116">#116</a>)</li>
<li><a
href="074345b7e7"><code>074345b</code></a>
chore: make some documents clearer (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/115">#115</a>)</li>
<li><a
href="ce9a48c2ee"><code>ce9a48c</code></a>
chore: update dependencies to latest versions and bump MSRV to 1.63 (<a
href="https://redirect.github.com/smol-rs/fastrand/issues/104">#104</a>)</li>
<li><a
href="978dde1cad"><code>978dde1</code></a>
ci: Use reusable workflows for clippy</li>
<li><a
href="8561f13c21"><code>8561f13</code></a>
bench: Add benchmark of f32()</li>
<li><a
href="1def02cb23"><code>1def02c</code></a>
Fix rustdoc::broken_intra_doc_links warning</li>
<li><a
href="c2cbdd4965"><code>c2cbdd4</code></a>
Remove manual doc(cfg(..))</li>
<li>Additional commits viewable in <a
href="https://github.com/smol-rs/fastrand/compare/v2.3.0...v2.4.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fastrand&package-manager=cargo&previous-version=2.3.0&new-version=2.4.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-08 00:41:56 +00:00
Taym Haddadi
ac4df79bd6 Make localStorage and sessionStorage throw on opaque origins (#44002)
Testing: covered by WPT test.
Fixes #43999

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-07 20:41:10 +00:00
Josh Matthews
9334d3094b script: Use the global's origin when claiming blob tokens. (#44004)
`global.api_base_url().origin()` returns a unique opaque origin when the
base URL is an opaque origin. When we use the global's origin instead,
requests for claimed blobs can now pass the same-origin check.

Testing: Newly passing tests.
Fixes: #43326
Fixes: #43973

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-04-07 19:40:15 +00:00
Kelechi Ebiri
a7e4b80b31 script: Support sprintf-style substitutions in console methods (#43897)
Implement the Console Formatter operation for all console methods.
Fixes: #43827

---------

Signed-off-by: Kelechi Ebiri <ebiritg@gmail.com>
2026-04-07 18:55:36 +00:00
Abbas Olanrewaju Sarafa
66d232e1e7 Remove introduction_type_override field from HTMLScriptElement (#44003)
Removed ```introduction_type_override``` field from
```HTMLScriptElement``` & passed the new variable to
```fetch_inline_module_script```

Testing: No testing required, compiles successfully.
Fixes: #43980

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-07 18:36:21 +00:00
Simon Wülker
37a1f93b91 url: Let origins of file:// URLs be potentially trustworthy (#43989)
The origin of a `file` URL is unspecified. Engines act like they're
opaque except in a few special cases - one of which is the "is
potentially trustworthy" algorithm. This change allows consumers of
`servo-url` to distinguish between regular opaque origins and file
origins. Then we use that to mark file origins as "potentially
trustworthy" which is what the spec wants.

For now we can get away without changes to the `url` crate (the one used
in the wider ecosystem, not just servo), but I'm unsure if that will be
the case in the future.

Testing: This change adds a test
Fixes: https://github.com/servo/servo/issues/42540

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-07 18:29:30 +00:00
Alex Feyerke
f977c06f9d Modernize and improve the Android UI (#43795)
Modernize and improve the Android UI, and add browsing history panel.

---------

Signed-off-by: Alex Feyerke <alex@neighbourhood.ie>
2026-04-07 16:39:19 +00:00
Euclid Ye
8b1619ba1d script/net: Make URL List closer to spec (#43987)
[Redirected](https://fetch.spec.whatwg.org/#dom-response-redirected)
should be decided by the URL List.
Currently it does not. We add some TODO, fill URL in more places
according to spec.

Testing: This should not change behaviour, as URL list is mostly used by
[Redirected](https://fetch.spec.whatwg.org/#dom-response-redirected). If
we do it now, we get test failures as URL list is not fully set in all
spec steps.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-07 14:55:40 +00:00
Oriol Brufau
0615c394b9 stylo: Enable multiple color arguments in color-mix() (#43890)
Bumps Stylo to https://github.com/servo/stylo/pull/348

Testing: 2 WPT improve

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-04-07 14:08:50 +00:00
Narfinger
3612ba9e5b OHOS CI: Fix parsefromstring (#42995)
ParseFromString currently complains that it matches multiple trace
lines. The reason for that is a bit unclear as it should only produce
one alert. Local testing shows that it produces multiple (even for one
run). This should at least give us the metric back.

Testing: This is currently untested. As it is a small CI change that
can't break a broken test it should be fine.
Fixes: https://github.com/servo/servo/issues/42992

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-04-07 13:48:17 +00:00
Abubakar Abdulazeez Usman
750fb41bdb devtools: Include layer rules in CSS panel using rule tree (#43912)
DevTools was collecting CSS rules by walking stylesheets and matching
selector text. This ignored cascade order and did not correctly handle
rules inside layer blocks.

This change uses computed values (rule tree) to get the actual applied
rules in cascade order. It then maps those rules back to CSSStyleRule
using the declaration block identity, and walks the CSSOM to get
selector text and layer ancestry.

This fills ancestor_data with layer names and lets the inspector show
layered rules correctly.


Testing: 
- Verified using the minimized testcase from the issue

- Verified on https://www.sharyap.com/

- Confirmed that rules inside layer blocks are now shown with correct
order and hierarchy.


Fixes: #43541

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-04-07 11:26:12 +00:00
Simon Wülker
57adfc136f script: Remove FIXME about deprecated performance.timing (#43996)
`performance.timing` is not going anywhere anytime soon. Deprecating it
is none of servo's concern. The spec links are also outdated.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-07 11:16:35 +00:00
eri
4f13fcc38d devtools: Pass steppingType to onPop hook (#43995)
Fixes crashes when stepping in certain situations.

Testing: Ran `mach test-devtools` and manual testing
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-04-07 09:57:20 +00:00
Messi II Innocent R.
88a08d775c Don't crash if rustup is not installed (#43982)
Check if rustup is available before calling it. 

If it is not found, skip the step with a warning instead of crashing.
This allows users who installed Rust through their distribution's
package manager (without rustup) to build Servo without errors.

Three places were updated:

- In command_base.py I added a skip automatic target installation for
cross-compilation
- In base.py, I added the skip toolchain installation
- In, bootstrap_commands.py , it is a skip clean-nightlies if rustup not
found

Fixes: #43871

Signed-off-by: Messi002 <rostandmessi2@gmail.com>
2026-04-07 09:42:55 +00:00
Narfinger
8a38c5e217 servoshell: Port from sig to signal_hook_registry (#43891)
Testing: We do not currently have a way to test signal handling in the
servoshell binary, so this change does not include tests.
Fixes: #43836

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-04-07 08:28:36 +00:00
atbrakhi
7a559ba459 devtools: Fix worker targets in debugger tab (#43981)
Firefox DevTools client determines target type by checking if the actor
contains specific substring. For workers it
[requires](https://searchfox.org/firefox-main/source/devtools/client/fronts/watcher.js#65)
`/workerTarget` in the actor name to create a `WorkerTargetFront`.

Testing: Manual testing
Fixes: #36727


<img width="1084" height="558" alt="Screenshot 2026-04-06 at 21 47 59"
src="https://github.com/user-attachments/assets/207a8368-0f8a-48a6-ab7e-a5ee3750381f"
/>

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-04-07 07:49:43 +00:00
dependabot[bot]
793f0c8ec8 build: bump zerofrom from 0.1.6 to 0.1.7 (#43986)
Bumps [zerofrom](https://github.com/unicode-org/icu4x) from 0.1.6 to
0.1.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/unicode-org/icu4x/blob/main/CHANGELOG.md">zerofrom's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>icu 2.2.x</h2>
<p>Several crates have had patch releases in the 2.2 stream:</p>
<ul>
<li>Components
<ul>
<li>(2.2.1) <code>icu_calendar</code>
<ul>
<li>Fix extended year calculations in Gregorian-like and Coptic-like
calendars (unicode-org#7849)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>icu4x 2.2</h2>
<ul>
<li>Components
<ul>
<li>General
<ul>
<li>Use HTTPS links in docs (unicode-org#7212)</li>
<li>Update MSRV to 1.86 (unicode-org#7576)</li>
<li>Updated to CLDR 48.2 (unicode-org#7792)</li>
<li>Replace <code>experimental</code> features with
<code>unstable</code> features (unicode-org#7566)</li>
<li>Add categories and keywords to Cargo.toml for all components
(unicode-org#7737)</li>
</ul>
</li>
<li><code>icu_calendar</code>
<ul>
<li>Add <code>Date::try_new</code>, which replaces
<code>Date::try_new_from_codes</code>, and takes typed year/month
values. (unicode-org#7773, unicode-org#7764)</li>
<li>New methods: <code>Date::try_new</code> (and primarily-internal
<code>Calendar::new_date</code>)</li>
<li>New types: <code>InputYear</code>, <code>DateNewError</code></li>
<li>Handle possible <code>Overflow</code> values on individual calendars
(unicode-org#7795)</li>
<li>New <code>Date::try_from_fields</code> API for fully general date
construction from various choices of year and month values
(unicode-org#7798)</li>
<li>New methods: <code>Date::try_from_fields()</code></li>
<li>New types: <code>DateFields</code>,
<code>DateFromFieldsOptions</code>, <code>Overflow</code>,
<code>MissingFieldsStrategy</code>,
<code>DateFromFieldsError</code></li>
<li>New associated method: <code>Calendar::from_fields()</code></li>
<li>New Date arithmetic APIs for adding and subtracting dates
(unicode-org#7798, unicode-org#7355, unicode-org#7257)</li>
<li>New methods: <code>Date::try_add_with_options</code>,
<code>Date::try_added_with_options</code>,
<code>Date::try_until_with_options</code></li>
<li>New types: <code>DateDuration</code>, <code>DateAddOptions</code>,
<code>DateDifferenceOptions</code>, <code>DateDurationUnit</code>,
<code>DateDurationParseError</code>, <code>DateAddError</code>,
<code>MismatchedCalendarError</code></li>
<li>New associated items: <code>Calendar::add</code>,
<code>Calendar::until</code>,
<code>Calendar::DateCompatibilityError</code></li>
<li>Introduce a new <code>Month</code> type, preferred over using month
codes (unicode-org#7147, unicode-org#7756)
<ul>
<li>New type: <code>Month</code></li>
<li>New method: <code>MonthInfo::to_input()</code></li>
</ul>
</li>
<li>Introduce year/date ranges to all APIs, documented on the APIs
themselves. <code>Date</code> now has a fundamental range (ISO years
between ±999,999), and most constructors enforce a stricter range of
±9999 years for input years. (unicode-org#7676, unicode-org#7062,
unicode-org#7629, unicode-org#7753, unicode-org#7219,
unicode-org#7227)</li>
<li>Add constructors with <code>Month</code> for lunisolar calendars
(unicode-org#7485)</li>
<li>New methods: <code>Date::try_new_korean_traditional()</code>,
<code>Date::try_new_chinese_traditional()</code>,
<code>Date::try_new_hebrew_v2()</code></li>
<li>Expose <code>LeapStatus</code> on <code>MonthInfo</code>
(unicode-org#7667)</li>
<li>New method: <code>MonthInfo::leap_status()</code></li>
<li>New enum: <code>LeapStatus</code></li>
<li>(Unstable) Integrate with <code>chrono</code>, <code>jiff</code>,
and <code>time</code> (unicode-org#7617, unicode-org#7711)</li>
<li>New impls: <code>From&lt;chrono::NaiveDate&gt;</code>,
<code>From&lt;jiff::civil::Date&gt;</code>,
<code>From&lt;time::Date&gt;</code> for
<code>Date&lt;Gregorian&gt;</code></li>
<li>Replace <code>Date::day_of_week</code> by <code>Date::weekday</code>
(unicode-org#7288)
<ul>
<li>New method: <code>Date::weekday()</code></li>
</ul>
</li>
<li>Deprecate <code>Date::new_from_iso</code>/<code>Date::to_iso</code>
(unicode-org#7287)</li>
<li>Deprecate <code>Date::extended_year()</code> (use
<code>Date::year().extended_year()</code>) (unicode-org#7289)</li>
<li>Remove <code>YearInfo: PartialEq</code> bound
(unicode-org#7743)</li>
<li>Start producing Meiji era only after Meiji 6 (unicode-org#7503)</li>
</ul>
</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/unicode-org/icu4x/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerofrom&package-manager=cargo&previous-version=0.1.6&new-version=0.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-07 01:00:46 +00:00
dependabot[bot]
d596c5dc9e build: bump cc from 1.2.58 to 1.2.59 (#43985)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.58 to 1.2.59.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.59</h2>
<h3>Fixed</h3>
<ul>
<li><em>(ar)</em> deterministic archives with <code>D</code> modifier
(<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1697">#1697</a>)</li>
</ul>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1698">#1698</a>)</li>
<li>Fix target abi parsing for sanitiser targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1695">#1695</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.58...cc-v1.2.59">1.2.59</a>
- 2026-04-03</h2>
<h3>Fixed</h3>
<ul>
<li><em>(ar)</em> deterministic archives with <code>D</code> modifier
(<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1697">#1697</a>)</li>
</ul>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1698">#1698</a>)</li>
<li>Fix target abi parsing for sanitiser targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1695">#1695</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f4c5ac7a7e"><code>f4c5ac7</code></a>
chore(cc): release v1.2.59 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1699">#1699</a>)</li>
<li><a
href="9cfcecbb9d"><code>9cfcecb</code></a>
Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1698">#1698</a>)</li>
<li><a
href="025d046f99"><code>025d046</code></a>
fix(ar): deterministic archives with <code>D</code> modifier (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1697">#1697</a>)</li>
<li><a
href="fe32d6834a"><code>fe32d68</code></a>
Fix target abi parsing dor sanitiser targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1695">#1695</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.58...cc-v1.2.59">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.58&new-version=1.2.59)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-07 00:54:38 +00:00
Simon Wülker
0ddc7a08d0 script: Lock blob URL entry during XHR open() (#43977)
This is a followup to https://github.com/servo/servo/pull/43746 that
applies the same fix to XHR. Refer to that PR for a description of the
problem.

Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-06 19:46:52 +00:00
Babalola Taiwo J
6279f7bdef devtools: Rename ThreadActor variable names (#43955)
Renames local variables holding a `ThreadActor` instance to
`thread_actor`, following the `{}_actor` convention for actor variables
as described in #43606.

Changes:
- `actors/thread.rs`: `actor` → `thread_actor` in
`ThreadActor::register()`
- `lib.rs`: `thread` → `thread_actor` in
`handle_notifyscriptinterrupted` and `handle_create_frame_actor`

Part of #43606.

Signed-off-by: thebabalola <t.babalolajoseph@gmail.com>
Signed-off-by: eri <eri@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-06 19:42:05 +00:00
Abbas Olanrewaju Sarafa
02a350d864 layout: Rename confusing ``SequentialLayoutState::collapse_margins`` (#43978)
Renamed ```SequentialLayoutState::collapse_margins``` to
```commit_margin``` in ```float.rs```, ```mod.rs``` &
```inline/mod.rs```

Testing: No testing required - just renaming. Compiles successfully.
Fixes: #43941

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 19:10:28 +00:00
Babalola Taiwo J
f38de75888 devtools: Rename SourceActor variable names (#43959)
Renames local variable holding a `SourceActor` instance to
`source_actor`, following the `{}_actor` convention for actor variables
as described in #43606.

Changes:
- `actors/source.rs`: `actor` → `source_actor` in
`SourceActor::register()`

Part of #43606.

Signed-off-by: thebabalola <t.babalolajoseph@gmail.com>
2026-04-06 16:01:26 +00:00
Babalola Taiwo J
a7870df4c7 devtools: Rename WorkerActor variables and add register method (#43963)
Renames local variable `worker` to `worker_actor` in `lib.rs` and
`root.rs`, following the `{}_actor` convention for actor struct
variables and `{}_name` for actor name string variables established in
#43606.

Also adds a `WorkerActor::register()` method (part of #43800), replacing
the inline struct construction in `lib.rs` with a consistent pattern
pattern matching other actors like `ThreadActor` and `SourceActor`.

**Changes:**
- `actors/worker.rs`: Add `WorkerActor::register()` method
- `actors/root.rs`: Rename `worker` → `worker_actor` in
`listServiceWorkerRegistrations` handler
- `lib.rs`: Replace inline struct construction with
`WorkerActor::register()` call

**Testing:** No testing required, compiles successfully.

Fixes: Part of #43606
Fixes: Part of #43800

Signed-off-by: thebabalola <t.babalolajoseph@gmail.com>
2026-04-06 15:37:58 +00:00
Jonathan Schwender
d21fc8238a profile: Add debug_span and minor refactoring (#43971)
Add an internal macro to avoid duplication, and use that to implement
the existing two `trace` and `info` macros and add `debug_span`. We skip
`warn` and `error` (from the tracing-rs library), since those names
don't fit our profiling usage too well, and 3 different levels should
also be enough. If we need more levels in the future we could still add
more macros than (after deciding on better names than warn and error)

Testing: Servo is built with the tracing feature in CI (for HarmonyOS)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-06 15:22:49 +00:00
Simon Wülker
e73c010bb1 Force callers to claim blob url before making a fetch request (#43746)
`blob` URLs have a implicit blob URL entry attached, which stores the
data contained in the blob. The specification requires this entry to be
resolved as the URL is parsed. We only resolve it inside `net` when
loading the URL. That causes problems if the blob entry has been revoked
in the meantime - see https://github.com/servo/servo/issues/25226.

Ideally we would want to resolve blobs at parse-time as required. But
because `ServoUrl` is such a fundamental type, I've not managed to do
this change without having to touch hundreds of files at once.

Thus, we now require passing a `UrlWithBlobClaim` instead of a
`ServoUrl` when `fetch`-ing. This type proves that the caller has
acquired the blob beforehand.

As a temporary escape hatch, I've added
`UrlWithBlobClaim::from_url_without_having_claimed_blob`. That method
logs a warning if its used unsafely. This method is currently used in
most places to keep this change small. Only workers now acquire the blob
beforehand.

Testing: A new test starts to pass
Part of https://github.com/servo/servo/issues/43326
Part of https://github.com/servo/servo/issues/25226

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-04-06 14:21:55 +00:00
Tim van der Lippe
324fed274a script: Pass &mut JSContext to Clipboard API's (#43975)
Part of #40600
Follow-up to #43943

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-06 13:47:17 +00:00
Tim van der Lippe
cac1a7f0fc script: Add basic implementation of font-size command (#43287)
This makes the most basic tests pass for the font-size command. Future
PR's will continue the work,
but since this is already large enough, this is a good save point.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-06 13:23:36 +00:00
Euclid Ye
cb2dd62e62 net: Improve HTTP fetch compliance (#43970)
Most notably, implement step 5 and removes the incorrect place for it.
Part of follow up to #43798

Testing:
[Try](https://github.com/yezhizhen/servo/actions/runs/24021988217/job/70054752138)

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-06 12:28:52 +00:00
Abbas Olanrewaju Sarafa
3d0cfe34bb storage: Make add_new_environment return a Result instead of panicking (#43949)
Removed the ```.unwrap()``` in ```add_new_environment``` causing the
storage thread to panic on SQLite failures

Testing: Ran ```./mach test-wpt tests/wpt/tests/webstorage/```
Result; 
```
▶ TIMEOUT [expected OK] /webstorage/storage_local_setitem_quotaexceedederr.window.html

Ran 53 tests finished in 63.9 seconds.
  • 52 ran as expected.
  • 1 tests timed out unexpectedly
```
Fixes: #43880

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 12:25:52 +00:00
Martin Robinson
82c2f1434e fonts: Clean up application of word-spacing (#43899)
Let `word_spacing` be optional in `ShapingOptions` like
`letter_spacing`. In addition, send `None` for Canvas rendering instead
of the width of the space character. It is supposed to represent *extra*
space added between words. Finally, remove duplicated code that applied
word and letter spacing for the fast shaper. This can just reuse the
code from the Harfbuzz shaper.

Testing: This causes some canvas tests to start passing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-06 09:20:34 +00:00
Taym Haddadi
12ab179b05 IndexedDB: Fix object-store key range handling (#43901)
Fix object-store key range handling

Testing: key range handling wpt test fixed.
Fixes: part of #40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-06 09:15:27 +00:00
Abbas Olanrewaju Sarafa
00aa8c0e85 devtools: Replace new with register for LayoutInspectorActor (#43954)
Replaced new with register for LayoutInspectorActor in walker.rs &
layout.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 09:13:33 +00:00
Abbas Olanrewaju Sarafa
c938e97b3c devtools: Replace new with register for TargetConfigurationActor (#43915)
Replaced new with register for TargetConfigurationActor in
target_configuration.rs & watcher.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 09:12:17 +00:00
elomscansio
a7bc4a6fa9 script: implement render-blocking option for script fetch and load events (#43741)
Implement render-blocking option for script fetch and load events

## Testing: 
### Test summary on main branch
```bash
  ▶ OK [expected CRASH] /html/semantics/scripting-1/the-script-element/moving-between-documents/move-back-createHTMLDocument-success-external-module.html

Ran 470 tests finished in 217.9 seconds.
  • 453 ran as expected.
  • 4 tests crashed unexpectedly
  • 1 tests timed out unexpectedly
  • 11 tests unexpectedly okay
  • 2 tests had unexpected subtest results

/home/elomscansio/.local/share/uv/python/cpython-3.11.15-linux-x86_64-gnu/lib/python3.11/multiprocessing/resource_tracker.py:254: UserWarning: resource_tracker: There appear to be 3 leaked semaphore objects to clean up at shutdown
  warnings.warn('resource_tracker: There appear to be %d '

```

### Test summary for this commits
```bash

Ran 470 tests finished in 488.0 seconds.
  • 397 ran as expected.
  • 15 tests crashed unexpectedly
  • 27 tests timed out unexpectedly
  • 11 tests unexpectedly okay
  • 28 tests had unexpected subtest results

```
Fixes: #43697
Fixes: #43354

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
Signed-off-by: elomscansio <163124154+elomscansio@users.noreply.github.com>
Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
Co-authored-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-04-06 08:08:43 +00:00
Abbas Olanrewaju Sarafa
414a97c2e3 devtools: Replace new with register for AccessibleWalkerActor (#43967)
Replaced new with register for AccessibleWalkerActor in accessibility.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 07:26:54 +00:00
dependabot[bot]
5184707255 build: bump tokio from 1.50.0 to 1.51.0 in the tokio-rs-related group across 1 directory (#43960)
Bumps the tokio-rs-related group with 1 update in the / directory:
[tokio](https://github.com/tokio-rs/tokio).

Updates `tokio` from 1.50.0 to 1.51.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tokio/releases">tokio's
releases</a>.</em></p>
<blockquote>
<h2>Tokio v1.51.0</h2>
<h1>1.51.0 (April 3rd, 2026)</h1>
<h3>Added</h3>
<ul>
<li>net: implement <code>get_peer_cred</code> on Hurd (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7989">#7989</a>)</li>
<li>runtime: add <code>tokio::runtime::worker_index()</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7921">#7921</a>)</li>
<li>runtime: add runtime name (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7924">#7924</a>)</li>
<li>runtime: stabilize <code>LocalRuntime</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7557">#7557</a>)</li>
<li>wasm: add wasm32-wasip2 networking support (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7933">#7933</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>runtime: steal tasks from the LIFO slot (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7431">#7431</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>docs: do not show &quot;Available on non-loom only.&quot; doc label
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7977">#7977</a>)</li>
<li>macros: improve overall macro hygiene (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7997">#7997</a>)</li>
<li>sync: fix <code>notify_waiters</code> priority in
<code>Notify</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7996">#7996</a>)</li>
<li>sync: fix panic in <code>Chan::recv_many</code> when called with
non-empty vector on closed channel (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7991">#7991</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/tokio/issues/7431">#7431</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7431">tokio-rs/tokio#7431</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7557">#7557</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7557">tokio-rs/tokio#7557</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7921">#7921</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7921">tokio-rs/tokio#7921</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7924">#7924</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7924">tokio-rs/tokio#7924</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7933">#7933</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7933">tokio-rs/tokio#7933</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7977">#7977</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7977">tokio-rs/tokio#7977</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7989">#7989</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7989">tokio-rs/tokio#7989</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7991">#7991</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7991">tokio-rs/tokio#7991</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7996">#7996</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7996">tokio-rs/tokio#7996</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7997">#7997</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/7997">tokio-rs/tokio#7997</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0af06b7bab"><code>0af06b7</code></a>
chore: prepare Tokio v1.51.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8005">#8005</a>)</li>
<li><a
href="01a7f1dfab"><code>01a7f1d</code></a>
chore: prepare tokio-macros v2.7.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8004">#8004</a>)</li>
<li><a
href="eeb55c733b"><code>eeb55c7</code></a>
runtime: steal tasks from the LIFO slot (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7431">#7431</a>)</li>
<li><a
href="1fc450aefb"><code>1fc450a</code></a>
runtime: stabilize <code>LocalRuntime</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7557">#7557</a>)</li>
<li><a
href="324218f9bb"><code>324218f</code></a>
Merge tag 'tokio-1.47.4' (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8003">#8003</a>)</li>
<li><a
href="aa65d0d0b8"><code>aa65d0d</code></a>
chore: prepare Tokio v1.47.4 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8002">#8002</a>)</li>
<li><a
href="bf18ed452d"><code>bf18ed4</code></a>
sync: fix panic in <code>Chan::recv_many</code> when called with
non-empty vector on clo...</li>
<li><a
href="43134f1e57"><code>43134f1</code></a>
wasm: add wasm32-wasip2 networking support (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7933">#7933</a>)</li>
<li><a
href="b4c3246d33"><code>b4c3246</code></a>
macros: improve overall macro hygiene (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7997">#7997</a>)</li>
<li><a
href="7947fa4bd7"><code>7947fa4</code></a>
rt: add runtime name (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7924">#7924</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-1.50.0...tokio-1.51.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 07:16:38 +00:00
niya
06921b0725 devtools: rename the remaining NodeActor variables (#43969)
- Renames variables containing the `NodeActor` name to `node_name`

Testing: Manually tested with `mach test-devtools` 
Fixes: #43606 as described
[here](https://github.com/servo/servo/issues/43606#issuecomment-4189623228)
for `NodeActor`

---------

Signed-off-by: Niya Gupta <niyabits@disroot.org>
2026-04-06 07:05:26 +00:00
Martin Robinson
73c64b6182 servoshell: Only dismiss the most-recently opened IME (#43932)
Servo may hide and show IME when handling `blur` and `focus` events, but
those events can be fired asynchronously when `<iframe>`s are involved.
This change ensures that we only dismiss the IME when it was the
most-recently opened one, making it so that an asynchronously fired
'blur' event for another control doesn't dismiss a newly opened one.

Testing: We don't really have testing for this level of servoshell.

Signed-off-by: Martin Robinson <mrobinson@fastmail.fm>
Co-authored-by: Martin Robinson <mrobinson@fastmail.fm>
2026-04-06 07:02:26 +00:00
Abbas Olanrewaju Sarafa
9799656127 devtools: Replace new with register for PauseActor (#43957)
Replaced new with register for PauseActor in pause.rs & lib.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-06 05:20:01 +00:00
Abbas Olanrewaju Sarafa
b8cff58b6c devtools: Replace new with register for WatcherActor (#43911)
Replaced new with register for WatcherActor in browsing_context &
watcher.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-04-06 05:14:13 +00:00
Tim Miller
3b128b37e3 script: Fix GC tracing of compiled JSScript pointers in ClassicScript (#43933)
Stores the compiled JSScript pointer in a rooted location that is
traceable by the GC. This fixes a crash observed in an experimental C#
Servo binding that could not be reproduced in servoshell.

Testing: No automated deterministic way to trigger this problem.

---------

Signed-off-by: Tim Miller <innerlogic4321@gmail.com>
2026-04-06 04:44:37 +00:00
Euclid Ye
0353f11ee2 script/mach: Increase stack size of ScriptThread/StyleThread to 8MiB to match recursion depth of other browsers (#43888)
TL;DR: We increase stack size of `ScriptThread` to 8MiB, and set Stylo
stack size environment var
to 8 MiB for all builds. This only reserves virtual memory space which
is
basically unlimited for 64-bit machine,
matches the recursion depth of Chromium for the example, which also uses
8MiB.

Stylo stack increase is necessary to prevent overflow when
refreshing/navigating to the example,
probably because initial load restyle incrementally but not refresh.

Testing: Added a Servo-specific test.

---
For example in #43845, we get stack overflow when we got more than 394
nested shadow roots.
For Chromium, it happens for more than 1631: 
<img width="290" height="127" alt="image"
src="https://github.com/user-attachments/assets/b3d75627-4e80-4586-9b85-4b58d8a0cd33"
/>
For Firefox, it overflows for more than 1052.

Initially I thought we didn't implement this optimally, and have
unnecessary recursion depth.
But the real reason is explained in Rust std:
> The default stack size is platform-dependent and subject to change.
Currently, it is 2 MiB on all Tier-1 platforms.

For Chromium, the visual studio dumpbin shows the stack size :
```
Dump of file C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe
OPTIONAL HEADER VALUES
          800000 size of stack reserve
```
This is hex value, which is $8*16^5$, exactly 8MiB.

After we make the same change in Servo, we are fine at 1601 and
overflows at 1602.
This matches Chromium behaviour, defeating firefox, and should not
create much overhead,
as this only reserves virtual memory space: 
I tried to increase the value to 512MiB, but task manager still says
73MB RAM used,
and we won't crash even with 10000 nested shadow roots. 
But that is just for more evidence and uncalled for.

Fixes: #43845

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-06 03:10:11 +00:00
dependabot[bot]
da9b9d9aa0 build: bump semver from 1.0.27 to 1.0.28 (#43966)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [semver](https://github.com/dtolnay/semver) from 1.0.27 to 1.0.28.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>1.0.28</h2>
<ul>
<li>Documentation improvements</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7625c7aa3f"><code>7625c7a</code></a>
Release 1.0.28</li>
<li><a
href="fd404d082c"><code>fd404d0</code></a>
Merge pull request 351 from czy-29/master</li>
<li><a
href="f75f26e984"><code>f75f26e</code></a>
The <code>doc_auto_cfg</code> and <code>doc_cfg</code> features have
been merged</li>
<li><a
href="9e2bfa2ec8"><code>9e2bfa2</code></a>
Enable <code>serde</code> on <code>docs.rs</code> and automatically add
<code>serde</code> flag to the docs</li>
<li><a
href="8591f2344b"><code>8591f23</code></a>
Unpin CI miri toolchain</li>
<li><a
href="66bdd2ce5f"><code>66bdd2c</code></a>
Pin CI miri to nightly-2026-02-11</li>
<li><a
href="324ffce5d9"><code>324ffce</code></a>
Switch from cargo bench to criterion</li>
<li><a
href="34133a568a"><code>34133a5</code></a>
Update actions/upload-artifact@v5 -&gt; v6</li>
<li><a
href="7f935ffc72"><code>7f935ff</code></a>
Update actions/upload-artifact@v4 -&gt; v5</li>
<li><a
href="c07fb91353"><code>c07fb91</code></a>
Switch from test::black_box to std::hint::black_box</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/semver/compare/1.0.27...1.0.28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=semver&package-manager=cargo&previous-version=1.0.27&new-version=1.0.28)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 00:56:15 +00:00
dependabot[bot]
2a47b3dcef build: bump libz-sys from 1.1.25 to 1.1.28 (#43962)
Bumps [libz-sys](https://github.com/rust-lang/libz-sys) from 1.1.25 to
1.1.28.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libz-sys/releases">libz-sys's
releases</a>.</em></p>
<blockquote>
<h2>1.1.28</h2>
<p>This release is mainly for testing the new <code>maint</code> tool to
prevent wrong releases in future.</p>
<p>It also adds a macOS fix for when the <code>cc</code> based build
script is used.</p>
<h2>1.1.27</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump actions/download-artifact from 8.0.0 to 8.0.1 in the
github-actions group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/263">rust-lang/libz-sys#263</a></li>
<li>fix(zlib): remove unnecessary defines by <a
href="https://github.com/weihanglo"><code>@​weihanglo</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/264">rust-lang/libz-sys#264</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/weihanglo"><code>@​weihanglo</code></a>
made their first contribution in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/264">rust-lang/libz-sys#264</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.25...1.1.27">https://github.com/rust-lang/libz-sys/compare/1.1.25...1.1.27</a></p>
<h2>1.1.26 [YANKED]</h2>
<h2>YANKED</h2>
<p>These didn't contain the actual source code and thus wasn't
functional.</p>
<h2>What's Changed</h2>
<ul>
<li>Bump actions/download-artifact from 8.0.0 to 8.0.1 in the
github-actions group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/263">rust-lang/libz-sys#263</a></li>
<li>fix(zlib): remove unnecessary defines by <a
href="https://github.com/weihanglo"><code>@​weihanglo</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/264">rust-lang/libz-sys#264</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/weihanglo"><code>@​weihanglo</code></a>
made their first contribution in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/264">rust-lang/libz-sys#264</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.25...1.1.26">https://github.com/rust-lang/libz-sys/compare/1.1.25...1.1.26</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="346d882bef"><code>346d882</code></a>
bump version to 1.1.28 for macOS arm build fix via CC</li>
<li><a
href="7b4f21928c"><code>7b4f219</code></a>
cargo fmt and clippy</li>
<li><a
href="613d426250"><code>613d426</code></a>
Create a new <code>maint</code> tool to prevent common publishing
mistakes (<a
href="https://redirect.github.com/rust-lang/libz-sys/issues/265">#265</a>)</li>
<li><a
href="e4f06f16f4"><code>e4f06f1</code></a>
fix(zng): use crc32_armv8 for ARM cc builds</li>
<li><a
href="847cabf870"><code>847cabf</code></a>
bump to 1.1.27 for re-release after 1.1.26 was yanked</li>
<li><a
href="613a5cbca2"><code>613a5cb</code></a>
adapt <code>cargo-zng</code> script to deal with Cargo.lock file (by
ignoring it)</li>
<li><a
href="a2f22b1b51"><code>a2f22b1</code></a>
bump patch level prior to release</li>
<li><a
href="580d147321"><code>580d147</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/264">#264</a>
from weihanglo/freebsd</li>
<li><a
href="817bbc0c6d"><code>817bbc0</code></a>
fix(zlib): remove unnecessary defines</li>
<li><a
href="232b03a9f9"><code>232b03a</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/263">#263</a>
from rust-lang/dependabot/github_actions/github-actio...</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.25...1.1.28">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libz-sys&package-manager=cargo&previous-version=1.1.25&new-version=1.1.28)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 00:41:52 +00:00
dependabot[bot]
56cc25aaf0 build: bump arc-swap from 1.9.0 to 1.9.1 (#43961)
Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.9.0 to
1.9.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md">arc-swap's
changelog</a>.</em></p>
<blockquote>
<h1>1.9.1</h1>
<ul>
<li>One more SeqCst :-| (<a
href="https://redirect.github.com/vorner/arc-swap/issues/204">#204</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f100e6c2ee"><code>f100e6c</code></a>
One more SeqCst</li>
<li>See full diff in <a
href="https://github.com/vorner/arc-swap/compare/v1.9.0...v1.9.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arc-swap&package-manager=cargo&previous-version=1.9.0&new-version=1.9.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 00:37:16 +00:00
dependabot[bot]
ae1d4b56cf build: bump glib from 0.22.3 to 0.22.4 in the gstreamer-related group (#43958)
Bumps the gstreamer-related group with 1 update:
[glib](https://github.com/gtk-rs/gtk-rs-core).

Updates `glib` from 0.22.3 to 0.22.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib's
releases</a>.</em></p>
<blockquote>
<h2>0.22.4</h2>
<pre><code>Bilal Elmoussaoui:
      glib: Allow setting FINAL/DEPRECATED flags
      ci: Only run compile tests on glib crate
      Fix typos job
<p>Ignacio Casal Quinteiro:
glib-win32: fix export of function</p>
<p>Sebastian Dröge:
Update gir / gir-files
Regenerate with latest gir / gir-files
rustfmt: Update to 2024 edition
glib: Make sure to acquire the main context and make it thread default
in <code>MainContext::block_on()</code>
glib: Add various <code>#[allow(deprecated)]</code> to
<code>glib::wrapper!</code> for when the parent class/interface is
deprecated
Update versions to 0.22.4
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="48b79229f2"><code>48b7922</code></a>
Revert &quot;gio: Add &quot;D-Bus&quot; and &quot;DBus&quot; to
Cargo.toml keywords and description&quot;</li>
<li><a
href="42be84cb2e"><code>42be84c</code></a>
Update versions to 0.22.4</li>
<li><a
href="0835bbce70"><code>0835bbc</code></a>
glib: Add various <code>#[allow(deprecated)]</code> to
<code>glib::wrapper!</code> for when the par...</li>
<li><a
href="dc7961a302"><code>dc7961a</code></a>
gio: Add &quot;D-Bus&quot; and &quot;DBus&quot; to Cargo.toml keywords
and description</li>
<li><a
href="8377bd2cc7"><code>8377bd2</code></a>
glib-win32: fix export of function</li>
<li><a
href="d77af0b6c3"><code>d77af0b</code></a>
Fix typos job</li>
<li><a
href="9ea24d8403"><code>9ea24d8</code></a>
ci: Only run compile tests on glib crate</li>
<li><a
href="a9d5040cb4"><code>a9d5040</code></a>
glib: Allow setting FINAL/DEPRECATED flags</li>
<li><a
href="aae7fcb22c"><code>aae7fcb</code></a>
glib: Make sure to acquire the main context and make it thread default
in `Ma...</li>
<li><a
href="fac3d07f2a"><code>fac3d07</code></a>
rustfmt: Update to 2024 edition</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.22.3...0.22.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=glib&package-manager=cargo&previous-version=0.22.3&new-version=0.22.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-06 00:17:52 +00:00
Sharan Poojari
57b86edb89 layout: Fix line breaking opportunities for Chinese and Japanese (#43744)
Enable `CJK-aware` line breaking in inline layout so Chinese/Japanese
text gets proper wrap opportunities instead of overflowing containers.

Testing: some WPT are now passing

---------

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-04-05 23:15:54 +00:00
Abbas Olanrewaju Sarafa
674bd2567c devtools: Replace new with register for TabDescriptorActor (#43909)
Replaced new with register for TabDescriptorActor in browsing_context &
tab.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-05 21:47:40 +00:00
Tim van der Lippe
a1c8896eda script: Pass &mut JSContext to reflect_node_with_proto (#43952)
A lot (and I mean, really a lot) depends on these constructors.
Therefore, this is the one spaghetti ball that I could extract and
convert all `can_gc` to `cx`. There are some new introductions of
`temp_cx` in the callbacks of the servo parser, but we already had some
in other callbacks.

Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-05 18:07:30 +00:00
rovertrack
621f6b0cf7 servo: Use _ prefixed names for unused arguments for public API functions (#43947)
updated all methods that were using underscore in arguments

- `WebViewDelegate`
   - `notify_cursor_changed`: Added _cursor.
   - `notify_traversal_complete`: Added _traversal_id.
   - `notify_input_event_handled`: Added _event_id and _result.
   - `notify_fullscreen_state_changed`: Added _is_fullscreen.
   - `request_move_to`: Added _point.
   - `request_create_new`: Added _request.
   - `request_permission:` Added _request.
   - `show_bluetooth_device_dialog`: Added _request.
 - `WebXrRegistry`
    - `register`: Added _registry

Testing: No tests necessary as this is just renaming argument.
Fixes: #43894

Signed-off-by: Rover track <rishan.pgowda@gmail.com>
2026-04-05 16:03:51 +00:00
Muhammad Mostafa
bb368dbb12 script: Add error messages in StaticRange (#43260)
Adds specific InvalidNodeType error messages in StaticRange for
Constructor().

Part of [#40756](https://github.com/servo/servo/issues/40756)

Signed-off-by: Mohamed Mostafa <mohamedmoustafaa1998@gmail.com>
2026-04-05 12:40:03 +00:00
Tim van der Lippe
46582ec41d script: Remove CanGc::note() from create.rs (#43946)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-05 12:28:12 +00:00
Tim van der Lippe
496d808ab1 script: Pass &mut JSContext to consume_stream (#43944)
Migrates all but one `CanGc::note()` to `cx`. The
last one requires `invoke_script_environment_preparer` to have a safe
hook in mozjs.

Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-05 11:31:21 +00:00
Tim van der Lippe
1fd77d022e script: Pass &mut JSContext to make_atomic_setter (#43942)
Part of #42812

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-05 11:26:55 +00:00
Tim van der Lippe
cf1b104b1a script: Pass &mut JSContext to RoutedPromiseListener (#43943)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-05 11:18:25 +00:00
Martin Robinson
9da7484061 script: Support deleting words with backspace in textual inputs (#43940)
This change makes it so that when you press alt or control (depending on
the platform) while backspacing, entire words are deleted. This matches
the behavior of the major desktop platforms.

Testing: This change adds a Servo-specific test for this behavior as
well
as for normal backspacing.

Signed-off-by: Martin Robinson <mrobinson@fastmail.fm>
Co-authored-by: Martin Robinson <mrobinson@fastmail.fm>
2026-04-05 10:28:31 +00:00
Taym Haddadi
6d6d1d371e IndexedDB: Fix fire-success/error event exception handling and explicit commit (#43914)
Fix fire-success/error event exception handling and explicit commit

Testing: fire-success/error event wpt test fixed.
Fixes: part of #40983

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-05 07:26:34 +00:00
webbeef
0b5688fdfa parser: add a pretty printer for top-level json documents (#43702)
This adds a new resource implementing a simple pretty printer for json
documents.

Testing: build this branch and launch with `./mach run
https://httpbin.org/json`

<img width="1044" height="1064" alt="image"
src="https://github.com/user-attachments/assets/42680c4b-2971-482a-af2b-9017f0f81752"
/>

---------

Signed-off-by: webbeef <me@webbeef.org>
Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Co-authored-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-04-05 06:50:52 +00:00
Kingsley Yung
623ce59383 script: Move Web Crypto interfaces to script/dom/webcrypto (#43939)
Move interfaces defined by the Web Crypto specification to the
`script/dom/webcrypto/` from `script/dom/`. This includes `Crypto`,
`CryptoKey` and `SubtleCrypto` (with its submodules).

Testing: No behavior changes.
Fixes: Part of #38901

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-05 06:42:00 +00:00
Jonathan Schwender
e6ed6954b4 bootstrap: Sync packages with book (#43931)
This commit removes some unneeded lines from README.md in the
linux_packages folder. This will trigger `book-export` to run, since it
creates a diff in that folder.
Since the export only happens if there is a diff, and there have been
not changes since the auto sync PR landed, the formatting related
changes never got upstreamed (sorting the packages).

This also duplicates as a test of the #43920 (merged), to be absolutely
sure that it works as intended.

Testing: not required / in a way this is a test of our book-export
action.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-05 06:36:49 +00:00
Abbas Olanrewaju Sarafa
2476d98f34 devtools: Replace new with register for ThreadConfigurationActor (#43916)
Replaced new with register for ThreadConfigurationActor in
thread_configuration.rs & watcher.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-05 06:15:27 +00:00
Euclid Ye
bb94d98bb2 mach: Set up build mode (Side effect: Stylo thread stack size reduced to 512 KiB again for most build) (#43930)
Previously the mode is always "". Now we set it to the real profile.
Note that previously, all the build has 2MiB stylo thread stack size,
which is unintended.
What we wanted is to make it so for debug build, and 8MiB for ASAN.

Now, those other than debug/ASAN would have 512KiB default stack size
again.

Testing: Manually tested and printed the mode at
0b6b97384d/python/servo/command_base.py (L419-L420).
Fixes: #43927

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-05 01:51:58 +00:00
Servo WPT Sync
ff9e242de9 Sync WPT with upstream (05-04-2026) (#43938)
Automated downstream sync of changes from upstream as of 05-04-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-04-05 01:39:41 +00:00
Jambong Ralpher
54987adba2 Automatically generate CONTENT_EVENT_HANDLER_NAMES from WebIDL (#43848)
Replaced the hand-written CONTENT_EVENT_HANDLER_NAMES list in
eventtarget.rs with an auto-generated version. A new
ContentEventHandlerNames method in codegen.py iterates through WebIDL
descriptors whose prototype chain includes Node, collects attribute
members with EventHandler callback types, and generates a sorted,
duplicate free Rust array. The list is included from eventtarget.rs
eliminating manual maintenance and ensuring it stays in sync
automatically.

Testing: Build passes with cargo build -j2 -p servo-script. The
generated ContentEventHandlerNames.rs produces the same set of event
handler names as the previous hand-written list. No new runtime tests
are needed since this is a compile time change.

Fixes: #43611

Signed-off-by: staysafe020 <jambongralpher@gmail.com>
2026-04-04 20:52:41 +00:00
Abbas Olanrewaju Sarafa
7c05e1556f devtools: Replace new with register for ProcessActor (#43923)
Replaced new with register for ProcessActor in process.rs & root.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 13:17:20 +00:00
Abbas Olanrewaju Sarafa
3af1abc013 devtools: Replace new with register for AccessibilityActor (#43907)
Replaced new with register for AccessibilityActor in browsing_context &
accessibility.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 13:14:16 +00:00
Jonathan Schwender
06f6320609 ci: Secure book-sync secrets with environment (#43920)
We defined a github environment `book-sync` which contains the required
secrets.
After merging this PR we can remove the secrets from the per-repository
secrets, which reduces the scope the secrets are available in, and has
the added restriction of only being available on protected branches.

Testing: Prior to this PR, the functionality was tested on the
`environments` branch and discussed in the maintainers chat. After this
PR is merged, a manual check should be done to ensure the book-export
workflow still continues to work as expected.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-04 11:34:27 +00:00
Tim van der Lippe
a683c03140 script: Pass &mut JSContext to make_int_setter (#43928)
Part of #42638

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-04 11:23:37 +00:00
Martin Robinson
953206e7c4 script: Add an initial implementation of relatedTarget forfocus/blur events (#43926)
This is an initial implementation for `relatedTarget` of `focus` and
`blur` events. As the code doesn't yet follow the specification this is
a bit tricky to associate with specification text, but this should be
correct. A later change will adapt the code to the "focusing steps" part
of the specification.

In addition, a duplicated call to `Element::set_focus_state` is removed.

Testing: This gets one more WPT test passing.

Signed-off-by: Martin Robinson <mrobinson@fastmail.fm>
Co-authored-by: Martin Robinson <mrobinson@fastmail.fm>
2026-04-04 10:32:22 +00:00
Ashwin Naren
3718abd626 Prevent panic on client storage directory conflict (#43918)
Instead of erroring out, it makes sense to open an in memory database so
that the thread can keep functioning.

Fixes:
https://servo.zulipchat.com/#narrow/channel/263398-general/topic/WPT.20regression

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-04-04 10:24:24 +00:00
Abbas Olanrewaju Sarafa
571562c092 devtools: Replace new with register for NetworkEventActor (#43925)
Replaced new with register for NetworkEventActor in network_event.rs &
lib.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 09:24:45 +00:00
Abbas Olanrewaju Sarafa
86dca5f7dd devtools: Replace new with register for BrowsingContextActor (#43924)
Replaced new with register for BrowsingContextActor in
browsing_context.rs & lib.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 09:23:36 +00:00
Jonathan Schwender
42ba33d7ef mach: Fix typo in allocator feature name (#43922)
This name was mistyped during the rename of the servo crates to be
`servo-` prefixed.

Testing: Manual testing with `./mach build --with-asan`. This is not run
in CI.

Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-04-04 09:15:58 +00:00
Abbas Olanrewaju Sarafa
0b6b97384d devtools: Replace new with register for PerformanceActor (#43921)
Replaced new with register for PerformanceActor in performance.rs &
root.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 08:27:26 +00:00
Abbas Olanrewaju Sarafa
b886d57024 devtools: Replace new with register for ThreadActor (#43910)
Replaced new with register for ThreadActor in browsing_context,
thread.rs & lib.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 07:47:23 +00:00
Abbas Olanrewaju Sarafa
f161acbdaf devtools: Replace new with register for BreakpointListActor (#43917)
Replaced new with register for BreakpointListActor in breakpoint.rs &
watcher.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 06:50:16 +00:00
Tim van der Lippe
20265ced1d script: Allow for implicit cx for setters (#43524)
Rather than specifying a cx for every single CSS property from Stylo, we
instead make it implicit. This allows us to remove the `CanGc::note()`
from the macro and pass in the `cx` as normal.

We can use a similar approach for setters in other elements where we use
the setter macros.

Part of #42812

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-04 06:46:13 +00:00
Abbas Olanrewaju Sarafa
4876a49eba devtools: Replace new with register for CssPropertiesActor (#43908)
Replaced new with register for CssPropertiesActor in browsing_context &
css_properties.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
Co-authored-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-04-04 05:57:41 +00:00
Abbas Olanrewaju Sarafa
2ce06e370d devtools: Replace new with register for NetworkParentActor (#43913)
Replaced new with register for NetworkParentActor in network_parent.rs &
watcher.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 04:59:45 +00:00
Abbas Olanrewaju Sarafa
410f4a4270 devtools: Replace new with register for ReflowActor (#43906)
Replaced new with register for ReflowActor in browsing_context &
reflow.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-04 04:56:07 +00:00
yvt
c6bb3cc363 Implement the IDL security check (#28583)
<https://heycam.github.io/webidl/#es-operations>
<https://html.spec.whatwg.org/multipage/#integration-with-idl>

This PR implements the IDL security check, which is an important (but
not only) mechanism to restrict cross-origin DOM accesses.

This implementation follows WebKit's behavior and not the specification
for the following reasons:

 - Neither Gecko nor WebKit implements the specification's behavior.
- This would require a relatively elaborate mechanism *just* to have
access to the target object's `CrossOriginProperties`.

---
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [ ] These changes fix #___ (GitHub issue number if applicable)

---
- [x] There are tests for these changes OR
- [ ] These changes do not require tests because ___

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-04-04 04:18:08 +00:00
Simon Sapin
894327e5d9 Don’t print passing unit tests (#43902)
This removes from the output of `./mach test-unit` hundreds of lines
like:

```
        PASS [   0.011s] style_tests str::test_str_join_empty
```

Signed-off-by: Simon Sapin <simon@igalia.com>
2026-04-04 01:59:05 +00:00
xtqqczze
c8c200cf96 build(deps): bump rustix from 1.1.2 to 1.1.4 (#43898)
Signed-off-by: xtqqczze <45661989+xtqqczze@users.noreply.github.com>
2026-04-04 00:55:03 +00:00
Taym Haddadi
2c5f981d46 indexeddb: abort pending worker upgrade and delete new db on rollback (#42998)
Abort pending upgrade requests when a worker closes, correctly roll back
newlyy created databases by deleting backend state on old_version == 0.

Testing: IndexedDB/worker-termination-aborts-upgrade.window.js.ini test
pass.
part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-03 22:32:13 +00:00
Martijn Gribnau
9b69acb88b Replace normal struct instantiation with register for WalkerActor (#43881)
Part of a larger refactor to name all actors and variables consistently,
#43800.

Testing: not necessary beyond `mach test-devtools` per #43800 / #43606
Fixes: `#43800` ((not linking because it's one of many PR's).

Signed-off-by: Martijn Gribnau <garm@ilumeo.com>
2026-04-03 19:04:12 +00:00
Martin Robinson
c0d0a87b01 script: Modernize the HTMLElement WebIDL (#43904)
The WebIDL file for `HTMLElement` was quite out of date. This change
makes it match the current HTML specification and also moves `blur()` to
`HTMLOrSVGElement` as it is in the spec. The implementation is just a
copy of the one for `HTMLElement` as we do for `focus()`.

Testing: This should not change behavior (other than adding a `blur()`
method
for SVG -- which we don't support), so should be covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-03 18:25:33 +00:00
Martin Robinson
b9df62427b script: Expose legacy table cellSpacing, cellPadding, and align DOM properties (#43903)
We support these setting these as attributes on the `<table>` element
itself, so I suppose it also makes sense to support their DOM APIs as
well. This trades a teensy bit of code for compatability with a some old
web content.

Testing: This causes a handful of reflection subtests to start passing.
There
isn't much testing for the behavior of the attributes, but this is
legacy
behavior so it sort of makes sense.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-03 18:09:13 +00:00
Shubham Gupta
4e315eba20 paint: Use viewport meta tag's min-scale and max-scale to clamp pinch zoom (#40098)
**Note: Targeting Mobile devices only.**

Clamp Pinch Zoom factor using `viewport`' scale range parsed from
`<meta>` tag.

## **Behavior in Servo with this PR**

Zoom Type |  Device Type | Meta Supported |Range 
-- | -- | -- | -- 
Pinch Zoom |  Mobile | Yes |Parsed from <meta> 
Pinch Zoom |  Desktop | No |Default

## **Observed behavior in Chrome**:

Device Type | Viewport Meta Support (pref) | Pinch Zoom (No Reflow) |
Zoom (using keyboard)
-- | -- | -- | --
Mobile (Android) | Yes | Clamped within Viewport Meta Range | Applied to
Pinch Zoom*
Desktop (Touch Screen) | No | Clamped within Default Range | Same as
Zoom (using menu)

## References from Chromium:
- Defination of
[page_scale_delta](https://source.chromium.org/chromium/chromium/src/+/main:cc/trees/layer_tree_host_client.h;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=39?gsn=page_scale_delta&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dcc%2Ftrees%2Flayer_tree_host_client.h%23SKME3VsvfEmKrf_3d5aQckyeMEaDxgiGETVRCM1Haac);
-
[WebViewImpl::ApplyViewportChanges](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/exported/web_view_impl.cc;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=4108?gsn=ApplyViewportChanges&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dthird_party%2Fblink%2Frenderer%2Fcore%2Fexported%2Fweb_view_impl.cc%23ll5snmeunTDzY4PwOwxyrNwNc4EI13SFfZnHIWuBsNw)
->
[SetPageScaleFactorAndLocation](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/exported/web_view_impl.cc;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=2430?gsn=SetPageScaleFactorAndLocation&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dthird_party%2Fblink%2Frenderer%2Fcore%2Fexported%2Fweb_view_impl.cc%23wJPsxPYe-aA-buH8xy-IKLTHLqtZ_IgGsuARSYerlUE)
->
[SetScaleAndLocation](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/visual_viewport.cc;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=513?gsn=SetScaleAndLocation&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dthird_party%2Fblink%2Frenderer%2Fcore%2Fframe%2Fvisual_viewport.cc%23u-DPCmPBwcQcKi3oKJ1duPI83otfHDXzsQI8KMYusaA)
->
[DidSetScaleOrLocation](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/visual_viewport.cc;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=543?gsn=DidSetScaleOrLocation&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dthird_party%2Fblink%2Frenderer%2Fcore%2Fframe%2Fvisual_viewport.cc%23cUPTZHhvInyEDOapVOzXmCPKg9DO_tYGVZY7y0D9EBw)
->
[ClampToConstraints](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/page_scale_constraints.cc;drc=56c66e417c83e2096a4e4e8a5c4ab7bbd525c9f3;bpv=1;bpt=1;l=60?gsn=ClampToConstraints&gs=KYTHE%3A%2F%2Fkythe%3A%2F%2Fchromium.googlesource.com%2Fcodesearch%2Fchromium%2Fsrc%2F%2Fmain%3Flang%3Dc%252B%252B%3Fpath%3Dthird_party%2Fblink%2Frenderer%2Fcore%2Fframe%2Fpage_scale_constraints.cc%23hQCpRu6_p6TTaFLTpDMnO_d-g3SnRpG-p5UlazTZlK8)

Testing: New WPT Test Added:
`wpt/visual-viewport/viewport-scale-clamped.html`



Fixes: #40390 (Observed Inconsistent behavior with Chrome Android)

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-04-03 11:50:31 +00:00
Narfinger
6cece2de59 servo: Add WebView::load_request and UrlRequest to the API (#43338)
This is the continuation of https://github.com/servo/servo/pull/43310
with permission from https://github.com/longvatrong111 to continue the
work as they are currently busy.

This changes the previous PR by having a a new URLRequest object that
can have more parameters. Currently we only implement headers.


Testing: We only have unit tests for the embedder API and I am not sure
how they would look like in this case.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: batu_hoang <longvatrong111@gmail.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-04-03 11:09:30 +00:00
Abbas Olanrewaju Sarafa
b95dbb8721 devtools: Replace new with register for ConsoleActor (#43896)
Replace new with register for ConsoleActor in console & lib.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-03 10:50:21 +00:00
Martin Robinson
f5c23cd711 servoshell: Only send ImeEvent::Dismissed when the user dismisses the IME (#43872)
We receive the `Ime::Disabled` event both when the user dismisses the
IME and
when Servo itself dismisses it (for instance, when changing focus on the
page).
Servo will blur the current element upon receiving
`ImeEvent::Dismissed`,
leading to spurious focus behavior. Address this by only sending this
message
to Servo when it was triggered by the user (as best as we can tell).
This
problem was revealed by improvements in the internal focus APIs.

This is a bit of a bandaid until we have a more robust IME API. There
are
still missing pieces in both Servo and in winit.

Testing: This is a bit tricky to test as it depends a lot on when
messages are
sent to servoshell from winit / the windowing system and when Servo
processes
focus events.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-03 10:41:49 +00:00
Martin Robinson
e3c894b12e servo: Remove WebViewDelegate::play_gamepad_haptic_effect and WebViewDelegate::stop_gamepad_haptic_effect (#43895)
This functionality was moved to the `GamepadDelegate`, but the old
delegate methods were never removed. They are currently unused.

Testing: This change just removes dead code, so no tests are necessary.
Fixes: #43743

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-03 10:23:08 +00:00
Simon Wülker
a9dd2b3d15 servo: Fix rustdoc warnings (#43892)
One warning remains:
```
warning: public documentation for `intercept` links to private item `InterceptedWebResourceLoad`
   --> components/servo/webview_delegate.rs:240:11
    |
240 |     /// [`InterceptedWebResourceLoad`].
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^ this item is private
    |
    = note: this link resolves only because you passed `--document-private-items`, but will break without
    = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default

warning: `servo` (lib doc) generated 1 warning
```

I think that's a false positive, because `InterceptedWebResourceLoad`
*is* public.

Testing: We don't run `./mach doc` in CI, so there's no way to test this

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-03 10:19:38 +00:00
Abbas Olanrewaju Sarafa
91ede77766 devtools: Replace new with register for DeviceActor (#43893)
Replace new with register for DeviceActor in device & root.rs

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-03 10:18:04 +00:00
Babalola Taiwo J
ac712151b5 script: Fix assertion failure when stringifying cross-origin location object (#43844)
This fixes the assertion failure (`!JS_IsExceptionPending(*cx)`) that
happens when `console.log()` is called on a cross-origin location object
(e.g. `console.log(frame.contentWindow.location)`).

The problem was that `maybe_stringify_dom_object` calls `ToString` on
cross-origin objects, which throws a JS exception via the
`DissimilarOriginLocation` stringifier. That exception was never
cleared, so subsequent JS API calls would hit the assertion.

The fix refactors `console_argument_from_handle_value` using an
inner/outer function pattern based on @jdm's suggestion:
- The inner function returns `Result<ConsoleArgument, ()>` and returns
`Err(())` when `console_object_from_handle_value` returns `None` for an
object, instead of falling through to `stringify_handle_value` which
could trigger the same crash
- The outer function catches the `Err`, reports any pending JS exception
via `report_pending_exception`, and returns a fallback `ConsoleArgument`

Fixes #43530

---

- [x] `./mach build -d` does not report any errors
- [x] `./mach fmt` produces no changes
- [x] There are tests for these changes

---------

Signed-off-by: thebabalola <t.babalolajoseph@gmail.com>
2026-04-03 10:15:05 +00:00
Sam
e6782a5bda script: Support auto generating all types of cx (#43174)
This will be useful in the future but for now we just always emit old
cx.

Testing: None
Work for #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-04-03 08:43:58 +00:00
Abbas Olanrewaju Sarafa
c5c26230a2 devtools: Replace new with register for StyleSheetsActor (#43889)
Replaced new with register for StyleSheetsActor in browsing_context &
stylesheets

Testing: No testing required, compiles successfully.
Fixes: Part of #43800

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-03 07:00:54 +00:00
Kingsley Yung
c1e9e04868 script: Implement SubtleCrypto.supports (#43703)
Implement the `SubtleCrypto.supports` method in our WebCrypto API. The
*check support for an algorithm* algorithm is also implemented to
support the functionality of the `SubtleCrypto.supports` method.

The `SubtleCrypto.supports` method has two overloads. One of them has a
union containing a non-object value at the distinguishing index. Our
`codegen.py` currently does not support unions of non-object values at
distinguish index. So, `codegen.py` is also patched to extend its
support to unions of objects, strings, numbers and boolean values.

Specification of `SubtleCrypto.supports`:

https://wicg.github.io/webcrypto-modern-algos/#SubtleCrypto-method-supports
Specification of "check support for an algorithm":

https://wicg.github.io/webcrypto-modern-algos/#dfn-check-support-for-algorithm

Testing:
- Pass WPT tests related to `supports` method.
- Add new tests for IDL operation overloading with unions of various
types.

Fixes: Part of #40687

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-03 06:52:26 +00:00
Euclid Ye
b47ab9c500 net: Set "request-includes-credentials" and URL list of response for "HTTP-network-or-cache fetch" (#43798)
Part of #33616

Implement step 11, 13 of [HTTP-network-or-cache
fetch](https://fetch.spec.whatwg.org/#concept-http-network-or-cache-fetch)

Testing: The value should be used in
https://fetch.spec.whatwg.org/#cross-origin-resource-policy-internal-check,
which will be done in a follow up. Right now it is not used.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-03 06:49:10 +00:00
treetmitterglad
0054b71d38 Fix error message for illegal HTML element constructors (#41107) (#43882)
Changes the error message for illegal HTML element constructors like
`new HTMLElement()` from `new.target must not be the active function
object` to `Illegal constructor.`, matching Chrome, Firefox, and the
HTML spec.

Ran `./mach test-wpt tests/wpt/tests/custom-elements`. 180 tests passed
as expected, 1 pre-existing unrelated crash in `HTMLMediaElement`.

#41107

Signed-off-by: Eli Bowman <asdfup@protonmail.com>
2026-04-03 01:41:56 +00:00
Josh Matthews
b386708c93 script: Move eventsource out of event module. (#43884)
The EventSource interface is unrelated to the other code in the event
module.

Testing: Just moving code around; no runtime impact.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-04-03 01:40:49 +00:00
CynthiaOketch
1385107eb9 wpt: Enable /infrastructure tests (#20889) (#43879)
Added the top-level `/infrastructure` WPT directory to `include.ini`,
which was previously excluded by the root `skip: true` default.

- Skipped `[reftest]` as I was unsure whether the failures indicate a
real bug in Servo's reftest engine
- Skipped `[testdriver][bidi]` as BiDi WebDriver is not supported
- Added metadata for known expected failures (service workers, shared
workers, expected-fail harness tests, etc.)
- Removed stale metadata for tests that now pass


Testing: 
  Ran` ./mach test-wpt infrastructure/ ` before and after the change.
                                                                  
  Before: 114 ran as expected, 69 unexpected results.
  After: 166 ran as expected. Remaining 15 unexpected results are
  all in /infrastructure/reftest/ which is skipped in include.ini.

Fixes: #20889

---------

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-04-03 00:46:22 +00:00
Oriol Brufau
b0582911db Upgrade Stylo to 2026-04-01 (#43878)
This continues  #43045

Changelog:
- Upstream:
74ddab4091...6de1071549
- Servo fixups:
9f2f4f3f1b...6cfce6f329

Stylo tracking issue: https://github.com/servo/stylo/issues/347

Summary of improvements:
 - Adding support for the CSS-wide `revert-rule` keyword
- `::details-content` becomes element-backed, thus accepting nested
pseudo-elements like `::details-content::before`.
- Custom properties can now be registered using dashed idents in their
syntax
 - Various `attr()` improvements

Testing: Various WPT improvements

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-04-03 00:03:25 +00:00
niya
b1fc99bc6c refactor: rename PropertyIteratorActor related variable names (#43876)
Rename variables associated with `PropertyIteratorActor`

Testing: Tested locally with `mach test-devtools`

Fixes: A part of #43606

Signed-off-by: Niya Gupta <niyabits@disroot.org>
2026-04-02 19:06:09 +00:00
niya
ff4122bc51 devtools: rename ObjectActor and SymbolIteratorActor variables names (#43875)
Rename variables associated with `ObjectActor` and `SymbolIteratorActor`

Testing: Tested locally with mach test-devtools

Fixes: A part of https://github.com/servo/servo/issues/43606

Signed-off-by: Niya Gupta <niyabits@disroot.org>
2026-04-02 17:52:01 +00:00
Martin Robinson
87627c4c74 script: Also set the focus state on focused area's shadow hosts (#43873)
The specification says that `:focus` should be active on all shadow
hosts of ancestors of focused areas. This change does that by exposing a
new `DocumentFocusHandler::set_focused_element` method and also using it
during the "removing steps." This is important because unlike the
"focusing steps" `set_focused_element` does not cause focus and blur
events.

Testing: This leads to a progression in results on 8 WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-02 17:21:16 +00:00
Kelechi Ebiri
e1f4c1f869 stylo: Update Stylo to remove PseudoElement::DetailsSummary. (#43849)
Companion PR for servo/stylo#345
Fixes: #43812

Signed-off-by: Kelechi Ebiri <ebiritg@gmail.com>
2026-04-02 17:14:52 +00:00
Martin Robinson
ed8576b163 script: Move all focus-related code to components/script/document/focus.rs and create DocumentFocusHandler (#43868)
This continues the work to split up the large DOM structs. In this case
we create a helper struct to store focus-related state much like
`DocumentEventHandler`.

Testing: This is mostly code motion, so should be covered by existing
tests.
Fixes: #43720

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-02 14:11:32 +00:00
Abbas Olanrewaju Sarafa
782dce68c4 Used encoding-parsing algorithm in follow_hyperlink (#43822)
Used encoding-parsing algorithm in follow_hyperlink

Testing: Ran ```./mach test-wpt
tests/wpt/tests/html/semantics/links/links-created-by-a-and-area-elements```
Result;
```
Running 11 tests in web-platform-tests

Ran 11 tests finished in 74.9 seconds.
  • 11 ran as expected.
```

Second test;
```./mach test-wpt tests/wpt/tests/html/semantics/links/links-created-by-a-and-area-elements/anchor-src-encoding.html```
Result;
```
web-platform-test
~~~~~~~~~~~~~~~~~
Ran 2 checks (1 subtests, 1 tests)
Expected results: 2
Unexpected results: 0
OK
```

Fixes: #43508

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-04-02 13:45:08 +00:00
Jonathan Schwender
78ffbe8caa servo-hyper-serde: Use the workspace version (#43866)
`hyper_serde` currently has no dependants on crates.io. We give up the
independant versioning and simplify our setup by using the same version
as our workspace. The new crate is servo-hyper-serde.

Testing: Not required, policy change.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-02 12:25:12 +00:00
elomscansio
1e213e59b2 script: Move MutationObserver DOM interfaces to script/dom/mutationobserver (#43865)
Moves MutationObserver interfaces into script/dom/mutationobserver/
module from script/dom/.

Testing: Just a refactor shouldn't need any testing.
Fixes: Part of https://github.com/servo/servo/issues/38901

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-04-02 11:52:56 +00:00
Martin Robinson
33f74feffd script: Fully implement DocumentOrShadowRoot#activeElement (#43861)
`DocumentOrShadowRoot#activeElement` should return retargeted results.
What that means is that if the DOM anchor of the `Document`'s focused
focusable area is within a shadow root, `Document#activeElement` should
return the shadow host. This change implements that behavior, properly
returning the `activeElement` from both `Document` and `ShadowRoot`.

Testing: This causes a decent number of WPT tests and subtests to start
passing. One subtest starts to fail, because it uses the `autofocus`
attribute
which we do not yet support.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-02 11:12:30 +00:00
atbrakhi
9a43d43c32 devtools: Merge preview and scopes (#43860)
Before we had seperate parsing functions for preview and scopes. In this
change we merge them into one.

Testing: current tests are passing, also tested manually.
Fixes: #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-04-02 10:02:38 +00:00
Martin Robinson
5b743ef1f4 script: Run the focusing steps when navigating to a fragment (#43859)
When navigating to a fragment the specification says to run the focusing
steps. This is possible now that the focusing steps are properly
exposed. This change also adds support for the fallback option, which is
used when the focus target is not associated with a focuable area. In
this case the fallback is to focus the viewport.

Testing: This change adds a new WPT for this behavior, which was
seemingly not tested before.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-02 09:34:05 +00:00
Narfinger
f7d77754ff base: Implement MallocSizeOf for some more types (#43858)
This implements MallocSizeOf for a couple more types and removes some
"ignore_malloc_size_of" throughout the codebase.
- std::path::PathBuf
- tokio::sync::oneshot::Sender
- http::HeaderMap (with a reasonable approximation of iterating over all
headers)
- data_url::Mime by looking at the inner type
- http::Method: Is an enum internally
- urlpattern::Urlpattern: Iterating over all public fields that are
strings as an approximation.

Testing: We cannot test if MallocSizeOf is correct currently.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-04-02 08:13:08 +00:00
Tim van der Lippe
5fdd425dd2 script: Align navigate more with spec steps (#43857)
This moves step 23 to the end of the algorithm and also updates the spec
steps related to JavaScript navigations.

Testing: WPT

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-04-02 08:11:07 +00:00
Euclid Ye
beed34612c devtools: Update outdated TODO (#43851)
These were here 10 years ago.

1. All Actor names are already immutable: 
- All actor implementations store a name: String field set at
construction and never mutate it.
- The name is only used as key by `ActorRegistry` to look up
2. There is no `register_later`

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-02 07:37:16 +00:00
dependabot[bot]
12fb7f415d build: bump hyper from 1.8.1 to 1.9.0 (#43856)
Bumps [hyper](https://github.com/hyperium/hyper) from 1.8.1 to 1.9.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper/releases">hyper's
releases</a>.</em></p>
<blockquote>
<h2>v1.9.0</h2>
<h2>Features</h2>
<ul>
<li><strong>client:</strong>
<ul>
<li>expose HTTP/2 current max stream count (<a
href="https://redirect.github.com/hyperium/hyper/issues/4026">#4026</a>)
(<a
href="d51cb71569">d51cb715</a>)</li>
<li>add HTTP/2 <code>max_local_error_reset_streams</code> option (<a
href="https://redirect.github.com/hyperium/hyper/issues/4021">#4021</a>)
(<a
href="577874591c">57787459</a>)</li>
</ul>
</li>
<li><strong>error:</strong> add 'Error::is_parse_version_h2' method (<a
href="393c77c711">393c77c7</a>)</li>
<li><strong>http1:</strong> add UpgradeableConnection::into_parts (<a
href="e21205cfe4">e21205cf</a>)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><strong>ffi:</strong> validate null pointers before dereferencing in
request/response functions (<a
href="https://redirect.github.com/hyperium/hyper/issues/4038">#4038</a>
(<a
href="28e73ccd23">28e73ccd</a>)</li>
<li><strong>http1:</strong>
<ul>
<li>allow keep-alive for chunked requests with trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4043">#4043</a>)
(<a
href="7211ec25ef">7211ec25</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4044">#4044</a>)</li>
<li>use case-insensitive matching for trailer fields (<a
href="https://redirect.github.com/hyperium/hyper/issues/4011">#4011</a>)
(<a
href="3b344cac9f">3b344cac</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4010">#4010</a>)</li>
<li>use httparse config for Servers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4002">#4002</a>)
(<a
href="bcb8ec5766">bcb8ec57</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/3923">#3923</a>)</li>
</ul>
</li>
<li><strong>http2:</strong>
<ul>
<li>cancel sending client request body on response future drop (<a
href="https://redirect.github.com/hyperium/hyper/issues/4042">#4042</a>)
(<a
href="5b17a69ebc">5b17a69e</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4040">#4040</a>)</li>
<li>non-utf8 char in Connection header may cause panic when calling
to_str (<a
href="https://redirect.github.com/hyperium/hyper/issues/4019">#4019</a>)
(<a
href="c36ca8a5c5">c36ca8a5</a>)</li>
</ul>
</li>
</ul>
<h2>Refactors and chores</h2>
<ul>
<li>docs(error): add more information about is_incomplete_message by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/3978">hyperium/hyper#3978</a></li>
<li>Run cargo-audit in CI to check for known vulnerabilities in
dependencies. by <a
href="https://github.com/f0rki"><code>@​f0rki</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/3246">hyperium/hyper#3246</a></li>
<li>refactor(http1): simplify match of Token parse error by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/3981">hyperium/hyper#3981</a></li>
<li>refactor(http1): use saturating_sub instead of manual impl by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/3983">hyperium/hyper#3983</a></li>
<li>refactor(http1): replace many args of Chunked::step with struct by
<a href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a>
in <a
href="https://redirect.github.com/hyperium/hyper/pull/3982">hyperium/hyper#3982</a></li>
<li>docs: fix comment in <code>put_slice()</code> by <a
href="https://github.com/coryan"><code>@​coryan</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/3986">hyperium/hyper#3986</a></li>
<li>test(lib): fix unused warnings due to feature gating test imports by
<a href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a>
in <a
href="https://redirect.github.com/hyperium/hyper/pull/3997">hyperium/hyper#3997</a></li>
<li>docs: improve Read trait and ReadBufCursor documentation by <a
href="https://github.com/majiayu000"><code>@​majiayu000</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4000">hyperium/hyper#4000</a></li>
<li>fix: use h1 parser config when parsing server req by <a
href="https://github.com/0xPoe"><code>@​0xPoe</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4002">hyperium/hyper#4002</a></li>
<li>test(server): fix flaky disable_keep_alive_mid_request by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4009">hyperium/hyper#4009</a></li>
<li>chore(ci): update to actions/checkout@v6 by <a
href="https://github.com/tottoto"><code>@​tottoto</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4005">hyperium/hyper#4005</a></li>
<li>chore(ci): update to cargo-check-external-types 0.4.0 by <a
href="https://github.com/tottoto"><code>@​tottoto</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4006">hyperium/hyper#4006</a></li>
<li>update copyright year to 2026 by <a
href="https://github.com/jasmyhigh"><code>@​jasmyhigh</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4007">hyperium/hyper#4007</a></li>
<li>refactor: avoid unwrap examples by <a
href="https://github.com/0xPoe"><code>@​0xPoe</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4001">hyperium/hyper#4001</a></li>
<li>fix(http1): use case-insensitive matching for trailer fields by <a
href="https://github.com/HueCodes"><code>@​HueCodes</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4011">hyperium/hyper#4011</a></li>
<li>chore: convert bug report template to GitHub form by <a
href="https://github.com/njg7194"><code>@​njg7194</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4015">hyperium/hyper#4015</a></li>
<li>chore(ci): force toml mode in yq selecting msrv by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4020">hyperium/hyper#4020</a></li>
<li>fix: non-utf8 char may cause panic when calling to_str by <a
href="https://github.com/cuiweixie"><code>@​cuiweixie</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4019">hyperium/hyper#4019</a></li>
<li>feat(http2/client): add <code>max_local_error_reset_streams</code>
option by <a
href="https://github.com/ffuugoo"><code>@​ffuugoo</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4021">hyperium/hyper#4021</a></li>
<li>chore: drop pin-utils dependency by <a
href="https://github.com/tottoto"><code>@​tottoto</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4023">hyperium/hyper#4023</a></li>
<li>[minor] doc: Fix HTTP/2 max concurrent stream link by <a
href="https://github.com/dentiny"><code>@​dentiny</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4037">hyperium/hyper#4037</a></li>
<li>fix(ffi): validate null pointers before dereferencing in
request/resp… by <a
href="https://github.com/DhruvaD1"><code>@​DhruvaD1</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4038">hyperium/hyper#4038</a></li>
<li>h2: expose current max stream count by <a
href="https://github.com/howardjohn"><code>@​howardjohn</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4026">hyperium/hyper#4026</a></li>
<li>fix(http1): allow keep-alive for chunked requests with trailers by
<a href="https://github.com/wi-adam"><code>@​wi-adam</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4043">hyperium/hyper#4043</a></li>
<li>fix(http2): cancel pipe_task and send RST_STREAM on response future
drop by <a
href="https://github.com/mmishra100"><code>@​mmishra100</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4042">hyperium/hyper#4042</a></li>
<li>Add APIs to allow switching an HTTP1 connection to HTTP2 if H2
preface is seen by <a
href="https://github.com/pborzenkov"><code>@​pborzenkov</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/3996">hyperium/hyper#3996</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper/blob/master/CHANGELOG.md">hyper's
changelog</a>.</em></p>
<blockquote>
<h2>v1.9.0 (2026-03-31)</h2>
<h4>Bug Fixes</h4>
<ul>
<li><strong>ffi:</strong> validate null pointers before dereferencing in
request/response functions (<a
href="https://redirect.github.com/hyperium/hyper/issues/4038">#4038</a>
(<a
href="28e73ccd23">28e73ccd</a>)</li>
<li><strong>http1:</strong>
<ul>
<li>allow keep-alive for chunked requests with trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4043">#4043</a>)
(<a
href="7211ec25ef">7211ec25</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4044">#4044</a>)</li>
<li>use case-insensitive matching for trailer fields (<a
href="https://redirect.github.com/hyperium/hyper/issues/4011">#4011</a>)
(<a
href="3b344cac9f">3b344cac</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4010">#4010</a>)</li>
<li>use httparse config for Servers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4002">#4002</a>)
(<a
href="bcb8ec5766">bcb8ec57</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/3923">#3923</a>)</li>
</ul>
</li>
<li><strong>http2:</strong>
<ul>
<li>cancel sending client request body on response future drop (<a
href="https://redirect.github.com/hyperium/hyper/issues/4042">#4042</a>)
(<a
href="5b17a69ebc">5b17a69e</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4040">#4040</a>)</li>
<li>non-utf8 char in Connection header may cause panic when calling
to_str (<a
href="https://redirect.github.com/hyperium/hyper/issues/4019">#4019</a>)
(<a
href="c36ca8a5c5">c36ca8a5</a>)</li>
</ul>
</li>
</ul>
<h4>Features</h4>
<ul>
<li><strong>client:</strong>
<ul>
<li>expose HTTP/2 current max stream count (<a
href="https://redirect.github.com/hyperium/hyper/issues/4026">#4026</a>)
(<a
href="d51cb71569">d51cb715</a>)</li>
<li>add HTTP/2 <code>max_local_error_reset_streams</code> option (<a
href="https://redirect.github.com/hyperium/hyper/issues/4021">#4021</a>)
(<a
href="577874591c">57787459</a>)</li>
</ul>
</li>
<li><strong>error:</strong> add 'Error::is_parse_version_h2' method (<a
href="393c77c711">393c77c7</a>)</li>
<li><strong>http1:</strong> add UpgradeableConnection::into_parts (<a
href="e21205cfe4">e21205cf</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0d6c7d5469"><code>0d6c7d5</code></a>
v1.9.0</li>
<li><a
href="e21205cfe4"><code>e21205c</code></a>
feat(http1): add UpgradeableConnection::into_parts</li>
<li><a
href="393c77c711"><code>393c77c</code></a>
feat(error): add 'Error::is_parse_version_h2' method</li>
<li><a
href="5b17a69ebc"><code>5b17a69</code></a>
fix(http2): cancel sending client request body on response future drop
(<a
href="https://redirect.github.com/hyperium/hyper/issues/4042">#4042</a>)</li>
<li><a
href="7211ec25ef"><code>7211ec2</code></a>
fix(http1): allow keep-alive for chunked requests with trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4043">#4043</a>)</li>
<li><a
href="d51cb71569"><code>d51cb71</code></a>
feat(client): expose HTTP/2 current max stream count (<a
href="https://redirect.github.com/hyperium/hyper/issues/4026">#4026</a>)</li>
<li><a
href="28e73ccd23"><code>28e73cc</code></a>
fix(ffi): validate null pointers before dereferencing in
request/response fun...</li>
<li><a
href="e13e783927"><code>e13e783</code></a>
docs(client): fix HTTP/2 max concurrent stream link to spec (<a
href="https://redirect.github.com/hyperium/hyper/issues/4037">#4037</a>)</li>
<li><a
href="8ba900853b"><code>8ba9008</code></a>
chore(dependencies): drop pin-utils dependency (<a
href="https://redirect.github.com/hyperium/hyper/issues/4023">#4023</a>)</li>
<li><a
href="577874591c"><code>5778745</code></a>
feat(client): add HTTP/2 <code>max_local_error_reset_streams</code>
option (<a
href="https://redirect.github.com/hyperium/hyper/issues/4021">#4021</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/hyperium/hyper/compare/v1.8.1...v1.9.0">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 05:55:40 +00:00
Kelechi Ebiri
ed78dadacb doc: explain how to create a WebView (#43712) (#43787)
Added a "Creating a WebView" section to the `WebView` doc comment
explaining that `WebViewBuilder` is the correct way to create a
`WebView`, with a usage example. Also expanded the `WebViewBuilder` doc
comment to be more descriptive.
Fixes: #43712

Signed-off-by: Kelechi Ebiri <ebiritg@gmail.com>
2026-04-02 05:22:41 +00:00
dependabot[bot]
8bda09c65a build: bump libc from 0.2.183 to 0.2.184 (#43854)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.183 to 0.2.184.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.184</h2>
<h3>MSRV</h3>
<p>This release increases the MSRV of <code>libc</code> to 1.65. With
this update, you can now always use the
<code>core::ffi::c_*</code> types with <code>libc</code> definitions,
since <code>libc</code> has been changed to reexport from
<code>core</code> rather than redefining them. (This <em>usually</em>
worked before but had edge cases.)
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4972">#4972</a>)</p>
<h3>Added</h3>
<ul>
<li>BSD: Add <code>IP_MINTTL</code> to bsd (<a
href="https://redirect.github.com/rust-lang/libc/pull/5026">#5026</a>)</li>
<li>Cygwin: Add <code>TIOCM_DSR</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5031">#5031</a>)</li>
<li>FreeBSD: Added <code>xfile</code> structe and file descriptor types
(<a
href="https://redirect.github.com/rust-lang/libc/pull/5002">#5002</a>)</li>
<li>Linux: Add CAN netlink bindings (<a
href="https://redirect.github.com/rust-lang/libc/pull/5011">#5011</a>)</li>
<li>Linux: Add <code>struct ethhdr</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4239">#4239</a>)</li>
<li>Linux: Add <code>struct ifinfomsg</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5012">#5012</a>)</li>
<li>Linux: Define <code>max_align_t</code> for riscv64 (<a
href="https://redirect.github.com/rust-lang/libc/pull/5029">#5029</a>)</li>
<li>NetBSD: Add missing <code>CLOCK_</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5020">#5020</a>)</li>
<li>NuttX: Add <code>_SC_HOST_NAME_MAX</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5004">#5004</a>)</li>
<li>VxWorks: Add <code>flock</code> and <code>F_*LCK</code> constants
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4043">#4043</a>)</li>
<li>WASI: Add all <code>_SC_*</code> sysconf constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5023">#5023</a>)</li>
</ul>
<h3>Deprecated</h3>
<p>The remaining fixed-width integer aliases, <code>__uint128_t</code>,
<code>__uint128</code>, <code>__int128_t</code>, and
<code>__int128</code>,
have been deprecated. Use <code>i128</code> and <code>u128</code>
instead. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4343">#4343</a>)</p>
<h3>Fixed</h3>
<ul>
<li><strong>breaking</strong> Redox: Fix signal action constant types
(<a
href="https://redirect.github.com/rust-lang/libc/pull/5009">#5009</a>)</li>
<li>EspIDF: Correct the value of <code>DT_*</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5034">#5034</a>)</li>
<li>Redox: Fix locale values and add <code>RTLD_NOLOAD</code>, some TCP
constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5025">#5025</a>)</li>
<li>Various: Use <code>Padding::new(&lt;zeroed&gt;)</code> rather than
<code>Padding::uninit()</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5036">#5036</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li><strong>potentially breaking</strong> Linux: Add new fields to
<code>struct ptrace_syscall_info</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4966">#4966</a>)</li>
<li>Re-export <code>core::ffi</code> integer types rather than
redefining (<a
href="https://redirect.github.com/rust-lang/libc/pull/5015">#5015</a>)</li>
<li>Redox: Update <code>F_DUPFD</code>, <code>IP</code>, and
<code>TCP</code> constants to match relibc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4990">#4990</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.184/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.183...0.2.184">0.2.184</a>
- 2026-04-01</h2>
<h3>MSRV</h3>
<p>This release increases the MSRV of <code>libc</code> to 1.65. With
this update, you can now always use the
<code>core::ffi::c_*</code> types with <code>libc</code> definitions,
since <code>libc</code> has been changed to reexport from
<code>core</code> rather than redefining them. (This <em>usually</em>
worked before but had edge cases.)
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4972">#4972</a>)</p>
<h3>Added</h3>
<ul>
<li>BSD: Add <code>IP_MINTTL</code> to bsd (<a
href="https://redirect.github.com/rust-lang/libc/pull/5026">#5026</a>)</li>
<li>Cygwin: Add <code>TIOCM_DSR</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5031">#5031</a>)</li>
<li>FreeBSD: Added <code>xfile</code> structe and file descriptor types
(<a
href="https://redirect.github.com/rust-lang/libc/pull/5002">#5002</a>)</li>
<li>Linux: Add CAN netlink bindings (<a
href="https://redirect.github.com/rust-lang/libc/pull/5011">#5011</a>)</li>
<li>Linux: Add <code>struct ethhdr</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4239">#4239</a>)</li>
<li>Linux: Add <code>struct ifinfomsg</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5012">#5012</a>)</li>
<li>Linux: Define <code>max_align_t</code> for riscv64 (<a
href="https://redirect.github.com/rust-lang/libc/pull/5029">#5029</a>)</li>
<li>NetBSD: Add missing <code>CLOCK_</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5020">#5020</a>)</li>
<li>NuttX: Add <code>_SC_HOST_NAME_MAX</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5004">#5004</a>)</li>
<li>VxWorks: Add <code>flock</code> and <code>F_*LCK</code> constants
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4043">#4043</a>)</li>
<li>WASI: Add all <code>_SC_*</code> sysconf constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5023">#5023</a>)</li>
</ul>
<h3>Deprecated</h3>
<p>The remaining fixed-width integer aliases, <code>__uint128_t</code>,
<code>__uint128</code>, <code>__int128_t</code>, and
<code>__int128</code>,
have been deprecated. Use <code>i128</code> and <code>u128</code>
instead. (<a
href="https://redirect.github.com/rust-lang/libc/pull/4343">#4343</a>)</p>
<h3>Fixed</h3>
<ul>
<li><strong>breaking</strong> Redox: Fix signal action constant types
(<a
href="https://redirect.github.com/rust-lang/libc/pull/5009">#5009</a>)</li>
<li>EspIDF: Correct the value of <code>DT_*</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5034">#5034</a>)</li>
<li>Redox: Fix locale values and add <code>RTLD_NOLOAD</code>, some TCP
constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/5025">#5025</a>)</li>
<li>Various: Use <code>Padding::new(&lt;zeroed&gt;)</code> rather than
<code>Padding::uninit()</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/5036">#5036</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li><strong>potentially breaking</strong> Linux: Add new fields to
<code>struct ptrace_syscall_info</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4966">#4966</a>)</li>
<li>Re-export <code>core::ffi</code> integer types rather than
redefining (<a
href="https://redirect.github.com/rust-lang/libc/pull/5015">#5015</a>)</li>
<li>Redox: Update <code>F_DUPFD</code>, <code>IP</code>, and
<code>TCP</code> constants to match relibc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4990">#4990</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b1fd610c7e"><code>b1fd610</code></a>
chore: Release libc 0.2.184</li>
<li><a
href="f596819d7c"><code>f596819</code></a>
ci: Don't enforce cargo-semver-checks</li>
<li><a
href="4645f60c3a"><code>4645f60</code></a>
linux: update ptrace_syscall_info struct</li>
<li><a
href="14cbbec353"><code>14cbbec</code></a>
types: Remove <code>Padding::uninit</code></li>
<li><a
href="b5dcda885f"><code>b5dcda8</code></a>
pthread: Use <code>Padding::new(\&lt;zeroed&gt;)</code> rather than
<code>Padding::uninit()</code></li>
<li><a
href="bbb1c5d350"><code>bbb1c5d</code></a>
types: Add a <code>new</code> function to <code>Padding</code></li>
<li><a
href="df06e43309"><code>df06e43</code></a>
Fix locale values and add RTLD_NOLOAD, some TCP constants</li>
<li><a
href="078f5c6b3c"><code>078f5c6</code></a>
newlib/espidf: Move DT_* to espidf/mod.rs</li>
<li><a
href="d32b83db3c"><code>d32b83d</code></a>
Add IP_MINTTL to bsd</li>
<li><a
href="939e0ec2a8"><code>939e0ec</code></a>
Define max_align_t for riscv64-linux</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.183...0.2.184">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.183&new-version=0.2.184)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 04:51:16 +00:00
dependabot[bot]
eb296b77f6 build: bump the wayland-related group with 5 updates (#43853)
Bumps the wayland-related group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [wayland-client](https://github.com/smithay/wayland-rs) | `0.31.13` |
`0.31.14` |
| [wayland-cursor](https://github.com/smithay/wayland-rs) | `0.31.13` |
`0.31.14` |
| [wayland-protocols](https://github.com/smithay/wayland-rs) | `0.32.11`
| `0.32.12` |
| [wayland-protocols-plasma](https://github.com/smithay/wayland-rs) |
`0.3.11` | `0.3.12` |
| [wayland-protocols-wlr](https://github.com/smithay/wayland-rs) |
`0.3.11` | `0.3.12` |

Updates `wayland-client` from 0.31.13 to 0.31.14
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-cursor` from 0.31.13 to 0.31.14
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols` from 0.32.11 to 0.32.12
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols-plasma` from 0.3.11 to 0.3.12
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols-wlr` from 0.3.11 to 0.3.12
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-02 04:44:54 +00:00
treetmitterglad
a81b15d5a5 devtools: Rename NodeActor variables in walker.rs (#43847)
Standardize variable naming in `WalkerActor` (`walker.rs`), renaming
`node` → `node_name` in `find_child` to follow the `{}_name` convention.

Testing: `./mach test-devtools`, all 60 tests pass.

Fixes: Part of #43606

Signed-off-by: Eli Bowman <asdfup@protonmail.com>
2026-04-01 23:27:27 +00:00
niya
6150b1b2c0 devtools: rename NodeActor related variables (#43841)
Rename variables associated with `NodeActor`

Testing: Tested locally with mach test-devtools

Fixes: A part of https://github.com/servo/servo/issues/43606

---------

Signed-off-by: Niya Gupta <niyabits@disroot.org>
2026-04-01 23:13:52 +00:00
Messi II Innocent R.
ce61f2eaa9 Fix child disappearing with mixed overflow clip/visible. (#43620)
Fix child element disappearing when parent has mixed overflow
clip/visible

When a parent element clips overflow on one axis but not the other (e.g.
overflow-y: clip with overflow-x: visible), the non-clipped axis was
using f32::MIN/f32::MAX. On screens with a device pixel ratio above 1,
this causes child elements to disappear.

The fix uses LayoutRect::max_rect() instead.

Testing: Reproduced the bug using --device-pixel-ratio 2 on Linux and
the child disappears on main branch but renders correctly with this fix.


fixes: #43599

Signed-off-by: Messi002 <rostandmessi2@gmail.com>
2026-04-01 22:38:51 +00:00
Oriol Brufau
827129a1a9 layout: Update group index when reusing table-column box (#43846)
Even if we can reuse the box, its column group index may have changed,
e.g. due to the removal of a previous column group. So just update it.

Testing: Adding crash test
Fixes: #39142

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-04-01 21:44:26 +00:00
Martin Robinson
a486ed525e script: Move "scroll into view" call out of "focusing steps" (#43842)
`HTMLOrSVGElement#focus` specifies the "scroll into view" steps should
be run after focusing. This was happening implicitly as part of the
`Document`'s implementation of the "focusing steps." That behavior is
not in the specification, so this change moves the scrolling call to
where it is specified. Along with making the code match the
specification, this change simplifies it as well.

Testing: This should not modify behavior, so existing tests should
suffice.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-01 21:40:13 +00:00
Simon Wülker
155016354c script: Implement PerformanceMeasureOptions (#43753)
The relevant changes are in `Performance::Measure`, the rest are
comments I added.

Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-01 20:15:16 +00:00
Simon Wülker
8791236c7a script: Let wheel, keyboard- and pointerevents be composed when fired by the user agent (#43799)
Addtionally, this updates lots of outdated spec links for mouse-related
things that have moved from the uievents spec to the pointerevents spec.

Testing: This change adds new tests

Part of https://github.com/servo/servo/issues/35997
Fixes https://github.com/servo/servo/issues/37772

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-04-01 19:59:10 +00:00
niya
305276c55a devtools: rename LongStringActor name variables (#43838)
Changes `name` to `long_string_name`
`long_string` to `long_string_actor`

Testing: Tested locally with mach test-devtools

Fixes: A part of #43606

---------

Signed-off-by: Niya Gupta <niyabits@disroot.org>
Co-authored-by: Niya Gupta <niyabits@disroot.org>
2026-04-01 16:44:09 +00:00
Martin Robinson
ceac966c34 script: Remove focus transaction concept (#43834)
For years Servo has had the concept of a focus transaction which was
used only to allow falling back to focusing the viewport when focusing a
clicked element failed. As this concept isn't part of the specification,
this change removes it.

Instead, a `FocusableArea` (a specification concept) is passed to
the `Document` focusing code. A `FocusableArea` might also be the
`Document`'s viewport.

As part of this change, some focus-related methods are moved to `Node`
from `Element` as the `Document` is not an `Element`.  This brings the
code closer to implementing the "focusing steps" from the specification.

Testing: This should not change behavior and is thus covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-01 15:12:21 +00:00
Euclid Ye
5fb3877f9f layout/script: Free memory earlier by consuming instead of draining the temporary container if it is unused (#43826)
Follow up of https://github.com/servo/servo/pull/43226
This also allows us to remove some `mut` declaration.
Fix some unintended Chinese quotation mark.

Testing: This is a micro-optimization which does not change visible
behaviour.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-04-01 13:46:53 +00:00
Jonathan Schwender
a463495c90 webgpu: Fix feature guard (#43831)
Remove the dependency on the `webgpu` crate if the feature is disabled.

Note: This doesn't seem to improve the binary size in production mode,
so presumably dead code elimination is already working well.
Nevertheless, it's preferable to correctly feature guard and it should
save a bit of compile-time (when not building with the webgpu feature).


Testing: `webgpu` feature is enabled by default in CI, and we test
`--no-default-features` too in the HOS build in CI. `cargo tree -p servo
--no-default-features` does not show webgpu anymore after this change.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-01 13:41:12 +00:00
eri
187206dc5a devtools: Show variable values in scopes (#43792)
<img width="312" height="307" alt="image"
src="https://github.com/user-attachments/assets/30c8cd9a-9712-4b53-9487-37c289a14520"
/>

Testing: Ran mach test-devtools and manual testing
Part of: #36027
Depends on: #43791

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-04-01 13:08:18 +00:00
Mukilan Thiyagarajan
069aa65d54 config: Add documentation for the public API. (#43802)
Testing: No code changes, so no testing is required.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-04-01 11:50:19 +00:00
Martin Robinson
9cb65e242e script: Use TextInputWidget to implement <textarea> shadow DOM (#43770)
In addition to making it so that textual `<input>` and `<textarea>`
share a common shadow DOM structure, this allows styling the
`<textarea>` placeholder. It is now properly shown in grey.

Testing: This fixes a few WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-04-01 11:41:28 +00:00
eri
c121a46c4f CODEOWNERS: Add atbrakhi and eerii as DevTools owners (#43832)
We have been working on the DevTools code and would like to have
notifications of new patches so we can review them.

Signed-off-by: eri <eri@igalia.com>
2026-04-01 10:10:54 +00:00
Shubham Gupta
ef3e8f7123 wpt: Add more tests to css-device-adapt to verify clamp behavior. (#43715)
Add more tests with values other than non-default values. 
Earlier tests were curated around default value. So, we never know if
anything is wrong.

Testing: Add more tests and update test expectations. Tests fail right
now, which will be dealt with in next patches. It requires two PRs to
properly fix.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-04-01 10:08:16 +00:00
shuppy
4041256e24 a11y: Miscellaneous cleanups to our accessibility code (#43772)
this patch cleans up a few minor issues in our accessibility code:

- we remove the initial synchronous TreeUpdate in
[WebView::set_accessibility_active()](https://doc.servo.org/servo/struct.WebView.html#method.set_accessibility_active).
it’s not actually necessary, because AccessKit only requires that
subtree updates happen after the graft node is created in the parent,
but those subtree updates can be delayed indefinitely. removing it
simplifies our API a bit.

- we rename notify_accessibility_tree_id() to
notify_document_accessibility_tree_id(), and do the same to the
underlying ConstellationToEmbedderMsg variant. this helps clarify that
we’re referring to the (active top-level) document’s accessibility tree.

- we make that method pub(crate) too. it doesn’t need to be pub.

- we remove the label property from webview-to-pipeline graft nodes.
properties set on graft nodes are only visible in the accesskit_consumer
API, not in the platform accessibility API, and we don’t need it in our
tests, so there’s no longer any reason to keep setting it.

Testing: updated the relevant libservo accessibility tests
Fixes: part of #4344

Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-04-01 09:58:05 +00:00
shuppy
805519deac servoshell: Activate accessibility in all webviews (#43558)
this patch plumbs the webview accessibility trees (#43029, #43556) into
servoshell. we add a global flag in servoshell, which is set when the
platform activates accessibility and cleared when the platform
deactivates accessibility. the flag in turn [activates
accessibility](https://doc.servo.org/servo/struct.WebView.html#method.set_accessibility_active)
in existing and new webviews.

Testing: none in this patch, but will be covered by end-to-end platform
a11y tests in WPT
Fixes: part of #4344, extracted from our work in #42338

Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-04-01 09:46:48 +00:00
eri
fdadd1d31d devtools: Improve encoding of ObjectActor (#43791)
Remove a duplicate `ObjectPreview` and use `ObjectActor::encode` for
serialization.

Testing: Ran mach test-devtools and manual tests.
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-04-01 09:45:18 +00:00
Jonathan Schwender
d0be4e845d release: Bump version number to 0.1 (#43797)
In preparation for the next release, bump the version number to 0.1. 0.1
will be an LTS release, which receives extended support in terms of
security updates (e.g. spidermonkey security updates). Please keep in
mind that as always no specific guarantees or response times are given,
and any updated are provided on a best effort basis.

Previously some projects had a demo integration of servo based on some
version of servo, and then never or rarely updated it. Providing an LTS
release offers an option to embedders to integrate servo, while reducing
API churn and having a somewhat fixed schedule to adhere to in terms of
upgrades. Currently, the plan is for a new LTS release every 6 months,
with additional documentation regarding API changes and recommended
migration patterns (best-effort and subject to change).

Testing: No functional changes. Additional testing will be performed
post-merge on the newly created release branch.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-01 09:18:50 +00:00
Jonathan Schwender
15cc2686da servo: Fix gstreamer_plugins feature guard (#43830)
Testing: gstreamer feature is enable in CI, and we test both mac and
windows, which guard the elements in the module.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-01 08:22:32 +00:00
Shubham Gupta
23e69b0658 wpt: Delete viewport-apply-initial-scale-after-navigation.html (#43701)
Scenario proposed should be best tested using unit tests.

Testing: TODO (Waiting for #43160)
Fixes: #41582

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-04-01 08:07:27 +00:00
CynthiaOketch
4f67866cbe devtools: Rename new_registered to register and standardize variable names for SourceActor (#43810)
Part of #43800 and #43606.

I removed the `new` method from `SourceActor` entirely, as it was only
used internally by `new_registered`. I renamed `new_registered` to
`register`, inlined the struct construction directly using `Self { ...
}`, and updated the registration call to use
`registry.register::<Self>(actor)` to match the standard pattern
established across other actors.

I also standardized variable names throughout `SourceActor` and its call
sites to follow the conventions set in #43606:
- Renamed `name` and `source` to `source_name` and `source_actor`
respectively in `SourceManager::find_source`
- Renamed `actor_name` to `source_name` in `SourceManager::source_forms`
- Renamed `actor_name` to `source_name` in
`handle_update_source_content` in lib.rs

Testing: Built with cargo and ran ./mach test-devtools. 59/60 tests
pass; the one failure (test_manual_pause) is a pre-existing intermittent
timeout unrelated to these changes.


Fixes: part of  #43606 and #43800

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-04-01 07:58:42 +00:00
niya
4ef7097dc1 devtools: Rename BreakpointListActor Variable Names (#43825)
- Changes `breakpoint_list` to `breakpoint_list_actor`

Testing: Tested locally with `mach test-devtools`

Fixes: A part of #43606

---------

Signed-off-by: Niya Gupta <niyabits@disroot.org>
Co-authored-by: Niya Gupta <niyabits@disroot.org>
2026-04-01 07:38:09 +00:00
webbeef
2518f97dac script: Remove useless upcast::<Element> calls (#43824)
upcast::<Type>() is costly in general, but in some cases we can avoid
that call and use a direct field access instead.

Testing: no test change expected.

Signed-off-by: webbeef <me@webbeef.org>
2026-04-01 07:33:04 +00:00
Jonathan Schwender
f4877c190e Embed default resources in Servo applications using a servo-default-resources crate (#43182)
This PR considers the following constraints:

- Resources must be available when building servo via a published
crates.io package (i.e. no `../../../resources/<file>` file references).
- Minimal setup when writing tests (`nextest` spawns each test in its
own process, so we don't want to explicitly initialize the resource
handler for every `#[test]` fn)
- Use local resources when developing locally
- Support loading the resources from a proper resource directory if the
embedder wishes so, including via a custom mechanism, not necessarily as
files

(File) Resources that are only accessed from servoshell are out of scope
of this PR, since it mainly focusses on unblocking publishing `libservo`
to crates.io.

Baking the resources into the binary by default simplifies the setup a
lot. We already supported that before, but only for testing purposes and
explicitly not for production builds.

Using [`inventory`](https://crates.io/crates/inventory) adds a simple
way for the embedder to replace the default baked in resources, while
also keeping the test usage of baked in resources simple.

rippy.png is also referenced from image_cache - We simply duplicate it,
since the image is small, to avoid adding unnecessarily complex
solutions like adding a dedicated crate.


Testing: Covered by existing tests. [mach try
full](https://github.com/jschwe/servo/actions/runs/23811669469)
Fixes: Part of #43145

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-04-01 07:16:28 +00:00
niya
05946163f2 devtools: Rename PauseActor Variable Names (#43820)
- `PauseActor` is passed as a generic for only `new_name`
- Update the variable `pause` to `pause_name`

**Testing**: Tested locally with `mach test-devtools`

```
Ran 60 tests in 74.781s

OK (expected failures=6)
```

**Fixes**: A part of #43606

Signed-off-by: Niya Gupta <niyabits@disroot.org>
Co-authored-by: Niya Gupta <niyabits@disroot.org>
2026-04-01 06:03:17 +00:00
Josh Matthews
c1bddb3801 script: Use snapshot of navigation target when navigating. (#43807)
This set of changes introduces a type matching the spec's "target
snapshot params" and uses it as part of determining the origin of new
documents. This has a side benefit of making our sandbox flag
determination more accurate, which leads to a bunch of sandboxing tests
passing as well as some new failures due to spec confusion about
origins.

Testing: Many new passing tests.
Part of the long road to #43149

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-04-01 04:45:12 +00:00
Taym Haddadi
c4d32e15cf indexeddb: fix structured cloning for transaction state, File, and FileList (#43805)
Testing: covered by WPT test.
Fixes: #43804

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-04-01 02:40:58 +00:00
dependabot[bot]
31b273dbb2 build: bump zerocopy from 0.8.47 to 0.8.48 (#43816)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.47 to
0.8.48.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="aa7c31671c"><code>aa7c316</code></a>
Release 0.8.48 (<a
href="https://redirect.github.com/google/zerocopy/issues/3157">#3157</a>)</li>
<li><a
href="fa6fa90177"><code>fa6fa90</code></a>
[zerocopy] Re-enable big endian aarch64 types (<a
href="https://redirect.github.com/google/zerocopy/issues/3073">#3073</a>)</li>
<li><a
href="61b2407b73"><code>61b2407</code></a>
[hermes] Release 0.1.0-alpha.7 (<a
href="https://redirect.github.com/google/zerocopy/issues/3151">#3151</a>)</li>
<li><a
href="b2c394cfa9"><code>b2c394c</code></a>
[hermes] Clone <code>hermes</code> branch at bb0e9f9f (<a
href="https://redirect.github.com/google/zerocopy/issues/3149">#3149</a>)</li>
<li><a
href="a5bc780b51"><code>a5bc780</code></a>
[hermes] Add auto-approval for <code>Cargo.lock</code> and
<code>vendor</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3150">#3150</a>)</li>
<li><a
href="b29cc75f25"><code>b29cc75</code></a>
[ci] Add <code>all-jobs-succeed</code> job in
<code>auto-approve.yml</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3147">#3147</a>)</li>
<li><a
href="10ce7672d5"><code>10ce767</code></a>
[hermes] Add description to README (<a
href="https://redirect.github.com/google/zerocopy/issues/3148">#3148</a>)</li>
<li><a
href="d01f773e99"><code>d01f773</code></a>
[ci] Disambiguate &quot;All checks succeeded&quot; jobs by name (<a
href="https://redirect.github.com/google/zerocopy/issues/3145">#3145</a>)</li>
<li><a
href="19006f87d0"><code>19006f8</code></a>
[hermes] Initial commit (<a
href="https://redirect.github.com/google/zerocopy/issues/3144">#3144</a>)</li>
<li><a
href="c6b794933a"><code>c6b7949</code></a>
[CI] Bump the all-actions group with 6 updates (<a
href="https://redirect.github.com/google/zerocopy/issues/3143">#3143</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/google/zerocopy/compare/v0.8.47...v0.8.48">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.47&new-version=0.8.48)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 00:57:36 +00:00
dependabot[bot]
1369f85038 build: bump uuid from 1.22.0 to 1.23.0 (#43818)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.22.0 to 1.23.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.23.0</h2>
<h2>What's Changed</h2>
<ul>
<li>feat: add support for 'hyphenated' format in the serde module by <a
href="https://github.com/FrenchDilettante"><code>@​FrenchDilettante</code></a>
in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/865">uuid-rs/uuid#865</a></li>
<li>Fix a number of bugs in time-related code by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/872">uuid-rs/uuid#872</a></li>
<li>Reword invalid char error message by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/873">uuid-rs/uuid#873</a></li>
<li>Impl cleanups by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/874">uuid-rs/uuid#874</a></li>
<li>Use LazyLock to synchronize v1/v6 context initialization by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/875">uuid-rs/uuid#875</a></li>
<li>Prepare for 1.23.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/876">uuid-rs/uuid#876</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/FrenchDilettante"><code>@​FrenchDilettante</code></a>
made their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/865">uuid-rs/uuid#865</a></li>
</ul>
<h2>Special thanks</h2>
<p><a href="https://github.com/meng-xu-cs"><code>@​meng-xu-cs</code></a>
raised a series of bugs against the timestamp logic in <code>uuid</code>
using automated tooling. The issues themselves were reasonably and
responsibly presented and the end result is a better <code>uuid</code>
library for everyone. Thanks!</p>
<h1>Deprecations</h1>
<p>This release includes the following deprecations:</p>
<ul>
<li><code>Context</code>: Renamed to <code>ContextV1</code></li>
<li><code>Timestamp::from_gregorian</code>: Renamed to
<code>Timestamp::from_gregorian_time</code></li>
</ul>
<h1>Change to <code>Version::Max</code></h1>
<p><code>Version::Max</code>'s <code>u8</code> representation has
changed from <code>0xff</code> to <code>0x0f</code> to match the value
returned by <code>Uuid::get_version_num</code>.</p>
<h1>Change to <code>Uuid::get_version</code> for the max UUID</h1>
<p><code>Uuid::get_version</code> will only return
<code>Some(Version::Max)</code> if the UUID is actually the max UUID
(all bytes are <code>0xff</code>). Previously it would return
<code>Some</code> if only the version field was <code>0x0f</code>. This
change matches the behaviour of the nil UUID, which only returns
<code>Some(Version::Nil)</code> if the UUID is the nil UUID (all bytes
are <code>0x00</code>).</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0">https://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="00ab922d53"><code>00ab922</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/876">#876</a> from
uuid-rs/cargo/v1.23.0</li>
<li><a
href="726ba45fe3"><code>726ba45</code></a>
prepare for 1.23.0 release</li>
<li><a
href="996dadea02"><code>996dade</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/875">#875</a> from
uuid-rs/fix/context-ordering</li>
<li><a
href="e14047993b"><code>e140479</code></a>
simplify a use stmt</li>
<li><a
href="8ed9142847"><code>8ed9142</code></a>
reorganize and document more v7 context internals</li>
<li><a
href="e09a3225a8"><code>e09a322</code></a>
use LazyLock to synchronize v1/v6 context initialization</li>
<li><a
href="0f260cc671"><code>0f260cc</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/874">#874</a> from
uuid-rs/chore/impl-cleanups</li>
<li><a
href="1419e91097"><code>1419e91</code></a>
clean up and refactor main lib tests</li>
<li><a
href="ceeaf4b7b5"><code>ceeaf4b</code></a>
ensure we don't overflow on counters less than 12</li>
<li><a
href="63bc8f52e5"><code>63bc8f5</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/873">#873</a> from
uuid-rs/fix/error-msg</li>
<li>Additional commits viewable in <a
href="https://github.com/uuid-rs/uuid/compare/v1.22.0...v1.23.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.22.0&new-version=1.23.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 00:56:07 +00:00
dependabot[bot]
c056b71664 build: bump simd-adler32 from 0.3.8 to 0.3.9 (#43815)
Bumps [simd-adler32](https://github.com/mcountryman/simd-adler32) from
0.3.8 to 0.3.9.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/mcountryman/simd-adler32/commits/v0.3.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=simd-adler32&package-manager=cargo&previous-version=0.3.8&new-version=0.3.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 00:42:28 +00:00
dependabot[bot]
36922eed85 build: bump the wayland-related group with 3 updates (#43814)
Bumps the wayland-related group with 3 updates:
[wayland-backend](https://github.com/smithay/wayland-rs),
[wayland-scanner](https://github.com/smithay/wayland-rs) and
[wayland-sys](https://github.com/smithay/wayland-rs).

Updates `wayland-backend` from 0.3.14 to 0.3.15
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-scanner` from 0.31.9 to 0.31.10
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-sys` from 0.31.10 to 0.31.11
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 00:27:29 +00:00
Martin Robinson
d3c39bb68c script: Add support for ShadowRoot.delegatesFocus and start implementing the focusing steps (#43811)
This change has two main interdependent parts:

1. It starts to align Servo's focus code with what is written in the
   HTML specification. This is going to be a gradual change, so there
   are still many parts that do not match the specification yet. Still,
   this adds the major pieces.
2. It adds initial support for the `ShadowRoot.delegatesFocus` property
   which controls how focusing a shadow DOM root can delegate focus to
   one of its children.

Testing: This causes a few WPT tests to start passing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-31 21:23:47 +00:00
Nico Burns
dc7487573f Implement direction property for CSS Grid (#42118)
Implement the `direction` property for CSS Grid:

- Upgrade to [Taffy
v0.10.0](github.com/DioxusLabs/taffy/releases/tag/v0.10.0)
- Add conversion function from Stylo's `Direction` enum to Taffy's
`Direction` enum
- Update assertions

---------

Signed-off-by: Nico Burns <nico@nicoburns.com>
2026-03-31 18:20:57 +00:00
Kingsley Yung
4d0c29c2c7 script: Require HMAC comparison to be constant time (#43773)
We should compare HMAC signatures in constant time when validating
user-provided signatures, to prevent leaking timing information
proportional to the number of matching bytes. The WebCrypto
specification has also updated to require to use constant-time
comparison in HMAC signatures.

We update our implementation accordingly. Since we are still using the
`aws-lc-rs` crate for our HMAC implementation, we use the function
`verify_slices_are_equal` provided by `aws_lc_rs::constant_time` to
guarantees the comparison is constant-time.

Specification Update:
c962bc7ebb
Testing: Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-31 18:18:05 +00:00
Martin Robinson
fe9386ed7a script: Remove the special inner editor click focus workaround (#43803)
This workaround was only necessary when click focusing didn't look up
the ancestry chain for an applicable focusable area. Now that this
happens (via the code directly after), the workaround is no longer
necessary.

Testing: This should not change behvior so is covered by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-31 15:14:38 +00:00
eri
a2980c07fa devtools: Replace new with register for PreferenceActor (#43801)
Testing: Compilation is enough
Part of: #43800

Signed-off-by: eri <eri@igalia.com>
2026-03-31 14:52:50 +00:00
niya
d9efd44c4c script: move fullscreen functionality to script/dom/fullscreen (#43771)
# Checklist

Relevant methods in Document are:

- [x] enter_fullscreen
- [x] exit_fullscreen
- [x] get_allow_fullscreen

Relevant method in DocumentOrShadowRoot is:
- [x] get_fullscreen_element

Relevant methods in Element are:

- [x] fullscreen_element_ready_check

Relevant structs in element.rs are:

- [x] ElementPerformFullscreenExit
- [x] ElementPerformFullscreenEnter

Testing: The PR moves functions around and we don't need to modify any
tests
Fixes: #43719

---------

Signed-off-by: Niya Gupta <niyabits@disroot.org>
Co-authored-by: Niya Gupta <niyabits@disroot.org>
2026-03-31 14:14:23 +00:00
nortti0
11687b3263 Port Servo to FreeBSD (#43116)
Add the minimum amount of FreeBSD-specific code to Servo, where no
platform-neutral fallback exists.

Testing: I've succesfully built and run Servo on FreeBSD with these
changes (and some fixes to dependencies). There's no functional change
to any other targets. This pull request was created with Servo running
on FreeBSD.
Fixes: #11625

---------

Signed-off-by: Juhani Krekelä <juhani@krekelä.fi>
Co-authored-by: Juhani Krekelä <juhani@krekelä.fi>
2026-03-31 14:11:13 +00:00
Tim van der Lippe
26a1942a33 Add script to show stale intermittent issues (#41739)
This script shows any issue which has not received any updates for over
a month. This means it is no longer intermittent and therefore can be
closed.

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-31 14:09:20 +00:00
Servo WPT Sync
54bc366160 Sync WPT with upstream (31-03-2026) (#43789)
Automated downstream sync of changes from upstream as of 31-03-2026
[no-wpt-sync]

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
Co-authored-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-03-31 09:37:26 +00:00
Steven Novaryo
9caea2d16f base: Tidy up the usage of PipelineNamespaceId (#43790)
Use constant variable to define the `PipelineNamespaceId` for
`Constellation` and `Embedder`, and fix the comment describing the
declaration `next_pipeline_namespace_id`.

Testing: A successful build should be enough for the minimal
refactoring.

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-03-31 08:52:08 +00:00
Steven Novaryo
01689d241a layout: Persist ExternalScrollId for ::before and ::after pseudo element. (#43231)
In general, for a normal `BoxFragment`, a `ExternalScrollId` is created
by directly using the `OpaqueNode::id` which is the heap address of the
`Node`. But for a `BoxFragment` from a `::before` or `::after` pseudo
element, we are using the next unused id (starting from zero) with an
increment of two.

This patch modifies so that we are using the bitwise or of
`OpaqueNode::id` and `FragmentType` as the `ExternalScrollId`. With
these changes, the `ExternalScrollId` for the pseudo elements would
remain the same after reflow (instead of getting a new scroll id).

Testing: New WPT test
Fixes: #43308

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-03-31 06:13:06 +00:00
Kelechi Ebiri
bb667737a9 script: Let Console::internal_warn take String instead of DOMString (#43780)
All callers were constructing a DOMString only to have it immediately
converted back to String inside internal_warn, resulting in an
unnecessary allocation and clone. This changes the parameter type to
String and updates all call sites to pass the result of format! or
.to_string() directly.

Fixes: #43091

---------

Signed-off-by: Kelechi Ebiri <ebiritg@gmail.com>
2026-03-31 06:02:13 +00:00
webbeef
5db86cc5f0 layout: remove noisy debug println (#43785)
These were forgotten in 17a7ee037b

Testing: no testing needed

Signed-off-by: webbeef <me@webbeef.org>
2026-03-31 01:38:14 +00:00
dependabot[bot]
efe01668ea build: bump cc from 1.2.57 to 1.2.58 (#43783)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.57 to 1.2.58.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.58</h2>
<h3>Other</h3>
<ul>
<li>Update Compile-time Requirements to add info about clang-cl.exe (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1693">#1693</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.57...cc-v1.2.58">1.2.58</a>
- 2026-03-27</h2>
<h3>Other</h3>
<ul>
<li>Update Compile-time Requirements to add info about clang-cl.exe (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1693">#1693</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="bf119a1581"><code>bf119a1</code></a>
chore(cc): release v1.2.58 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1694">#1694</a>)</li>
<li><a
href="8b8d71f0ec"><code>8b8d71f</code></a>
Update Compile-time Requirements to add info about clang-cl.exe (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1693">#1693</a>)</li>
<li><a
href="8c6b2d7cad"><code>8c6b2d7</code></a>
Update rusqlite requirement from 0.38.0 to 0.39.0 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1691">#1691</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.57...cc-v1.2.58">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.57&new-version=1.2.58)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-31 00:38:41 +00:00
Abbas Olanrewaju Sarafa
4f316b7f84 script: Remove unnecessary Window::unminify_css field (#43778)
Initialize unminified_css_dir directly in Window::new instead of storing
a separate unminify_css bool and lazily setting the dir in
init_document.

Testing: Ran ```./mach run --unminify-css google.com``` also checked
```ls unminified-css/``` result was ```www.google.com www.gstatic.com```
Fixes: #43730

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 20:57:28 +00:00
Budiman Arbenta
35c3731c46 script: Implement <input type=range> widget's layout (#41562)
Implement the layout of `<input type="range">`. Support automatically
calculating the position of thumb based on the current input value, and
the size of range-track and range-thumb. Added a
document.has_script_or_layout_blocker function to detect whether it is
possible to run box_area_query during bind_to_tree, add delay_task if
there are blocker.

Here are some of the fixes made in this PR:
1. Fixed the structure for input type range's pseudo elements.
2. Fixed the positioning of input type range's thumb based on current
value, width, and direction.
3. Allow input type range to stretch vertically in a bigger container.

Original PR: #41024
Stylo PR: https://github.com/servo/stylo/pull/310

Testing: Some improvements in WPT tests, with a few regressions. This
change includes a Servo-specific appearance test to detect unexpected
changes to the look and feel of range widgets.
Fixes: #22728

---------

Signed-off-by: Budiman Arbenta <arbenta6@gmail.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: rayguo17 <tin.tun.aung1@huawei.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-30 20:20:58 +00:00
batu_hoang
399c8ebe31 servo: Add SiteDataManager::set_cookie_for_url and SiteDataManager::cookies_for_url (#43600)
Expose set_cookie_for_url, get_cookie_for_url, allow applications to
get/set cookies.

Testing: Unit test for `SiteDataManager` and manual test with
ServoShell.

---------

Signed-off-by: batu_hoang <longvatrong111@gmail.com>
2026-03-30 17:13:35 +00:00
CynthiaOketch
3a5031fd2a script: Move Element attribute getters/setters into attributes.rs (#43774)
Following #43714, which moved the element interfaces into the `element/`
directory and extracted `get_int_attribute` into `attributes.rs` as a
proof-of-concept, this PR moves the remaining attribute getter/setter
methods out of `element.rs` into the separate `attributes.rs` file.

  The following methods were moved:
  - `set_atomic_attribute`
  - `set_bool_attribute`
  - `get_url_attribute` / `set_url_attribute`
  - `get_trusted_type_url_attribute`
  - `get_trusted_html_attribute`
  - `get_string_attribute` / `set_string_attribute`
  - `get_nullable_string_attribute` / `set_nullable_string_attribute`
  - `get_tokenlist_attribute` / `set_tokenlist_attribute`
  - `set_atomic_tokenlist_attribute`
  - `set_int_attribute`
  - `get_uint_attribute` / `set_uint_attribute`

  This reduces the size of `element.rs` and groups all attribute-related
  helper methods together in one place.


Testing: 
No tests required as this is a pure code move with no behavioural
changes. The existing test suite covers the moved methods indirectly
through their callers. `cargo check` passes cleanly.

part of #38901
part of #43709
part of #43714

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-03-30 17:08:44 +00:00
Shubham Gupta
2d29c38e42 layout: Do not consider broken image as contentful (#43475)
1. Broken Images are skipped for FirstContentfulPaint as per specs.
2. Update the WPT test.

Testing: `tests/wpt/tests/paint-timing/fcp-only/fcp-broken-image.html`

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-30 15:40:08 +00:00
Ashwin Naren
2566b477ce storage: implement obtaining a storage bottle map, and create and delete databse (#42139)
Add a storage client concept, meant to implement
https://storage.spec.whatwg.org/

Implement https://storage.spec.whatwg.org/#obtain-a-storage-bottle-map

Also adds create and delete database functionality for the storage map
proxy, with a view towards indexeddb integration.


Testing: Unit tests cover basic functionality.

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
Co-authored-by: gterzian <2792687+gterzian@users.noreply.github.com>
Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-30 15:38:50 +00:00
Martin Robinson
322dfd0115 layout: Combine some common text segment data into FontAndScriptInfo (#43653)
This starts splitting out commonly shared data into a new data structure
that will make it easier to compare old shaping results to new ones in
the future. This eliminates some memory usage during inline layout, but
adds 8 bytes per segment (usually one per inline box). We hope to
recover this memory by storing one `GlyphStore` per `TextRunSegment`,
which
should recover 16 bytes.

Testing: This should not change behavior so is covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-30 13:15:23 +00:00
Kingsley Yung
c4ccb715e4 script: Guarantee constant-time all-zero check on X25519 secret (#43775)
The "deriveBits" operation of X25519 in WebCrypto throws an
OperationError when the secret is all-zero value. The check must be done
in constant time.

Although our implementation enforces comparing all bytes one-by-one
without early exit, it still does not guarantee the `u8` comparison is
constant-time due to compiler optimization and CPU microarchitectural
effects.

We switch to using the function `was_contributory` provided by the
`x25519-dalek` crate to check whether the secret is all-zero value, as
it guarantees constant-time execution. This enhances the security of our
WebCrypto API.

Testing: Security enhancement. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-30 12:34:50 +00:00
Martin Robinson
17a7ee037b layout: Integrate ::first-letter support into the InlineFormattingContextBuilder (#43692)
This change merges the first letter implementation into the
`InlineFormattingContextBuilder` as its more associated with inline
layout. The downside is that, due to ownership issues in Rust, the
builder must be unwrapped after ensuring it. Additionally, ensure
that `::first-letter` boxes are properly stored in a box slot meaning
that restyles work properly.

This change also makes a few small cleanups to the `first_letter_range`
function in addition to moving it to the inline code.

Testing: This does not change behavior and so should be covered by
existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-30 11:40:09 +00:00
Abbas Olanrewaju Sarafa
6e799ca694 devtools: Rename FrameActor variable names (#43767)
Renamed FrameActor variable names to match standards in thread & lib.rs

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 09:58:29 +00:00
Jonathan Schwender
1a86292f20 embedder_traits: Add documentation for ResourceReaderMethods (#43769)
Testing: Documentation only, testing not required

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Martin Robinson <martin@abandonedwig.info>
2026-03-30 09:32:45 +00:00
Abbas Olanrewaju Sarafa
07a4335f4c devtools: Rename ThreadConfigurationActor variable names (#43765)
Renamed ThreadConfigurationActor variable names in watcher.rs.

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 07:21:31 +00:00
Abbas Olanrewaju Sarafa
906679a8c1 devtools: Rename ThreadActor variable names (#43723)
Renamed ThreadActor variable names in breakpoint, browsing_context,
watcher, worker & lib.rs.

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 07:14:12 +00:00
Abbas Olanrewaju Sarafa
134e4c7db1 devtools: Rename InspectorActor variable names (#43724)
Renamed InspectorActor variable names in browsing_context, inspector &
lib.rs

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 07:12:01 +00:00
Euclid Ye
47456e308c servo: Wait for context menu to appear to avoid race from IME embedder control (#43764)
When we mouse down the right button, we focus an input element, 
but the InputMethod embedder control request always arrives 
before that of Context Menu.


99132fe22b/components/script/dom/document/document_event_handler.rs (L906-L913)

This causes race as when we stop spinning the event loop when
`number_of_controls_shown`
is not 0, it is likely that servo has not received context menu request
yet.

Testing: This is **not an abuse of resource**, since the build finishes
within 9 sec and Unit tests 2m30s per run.
1. https://github.com/servo/servo/actions/runs/23711195455
2. https://github.com/servo/servo/actions/runs/23711197360
3. https://github.com/servo/servo/actions/runs/23711199228
4. https://github.com/servo/servo/actions/runs/23710867754
5.
https://github.com/servo/servo/actions/runs/23710874271/job/69070302172
6.
https://github.com/servo/servo/actions/runs/23710863934/job/69070280417
7.
https://github.com/servo/servo/actions/runs/23710888811/job/69070509775
8. https://github.com/servo/servo/actions/runs/23711200872

Fixes: #43726

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-30 05:16:30 +00:00
Taym Haddadi
4faaa254bb indexeddb: fix idbobjectstore rename error handling (#43754)
Implement the missing IDBObjectStore.name duplicate name checks so
renaming an object store to an existing store now throw ConstraintError

Testing: more indexeddb WPT test passed.

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-30 05:14:51 +00:00
dependabot[bot]
99132fe22b build: bump rustc-hash from 2.1.1 to 2.1.2 (#43761)
Bumps [rustc-hash](https://github.com/rust-lang/rustc-hash) from 2.1.1
to 2.1.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/rustc-hash/blob/master/CHANGELOG.md">rustc-hash's
changelog</a>.</em></p>
<blockquote>
<h1>2.1.2</h1>
<ul>
<li><a
href="https://redirect.github.com/rust-lang/rustc-hash/pull/65">Refactor
byte hashing to remove unreachable panic</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fdb275c8a0"><code>fdb275c</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/rustc-hash/issues/67">#67</a>
from Noratrieb/new-version</li>
<li><a
href="acafa431e9"><code>acafa43</code></a>
Prepare 2.1.2</li>
<li><a
href="140e525344"><code>140e525</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/rustc-hash/issues/65">#65</a>
from morrisonlevi/split_first_chunk</li>
<li><a
href="f061387ad7"><code>f061387</code></a>
style: use consistent range format</li>
<li><a
href="211455cb39"><code>211455c</code></a>
refactor!: use split_first_chunk to help optimizer</li>
<li><a
href="464a82f557"><code>464a82f</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/rustc-hash/issues/63">#63</a>
from estebank/const-Default</li>
<li><a
href="2170d5e2a0"><code>2170d5e</code></a>
On nightly, <code>impl const Default</code></li>
<li><a
href="1a998d5b89"><code>1a998d5</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/rustc-hash/issues/62">#62</a>
from CryZe/128-bit-on-more-platforms</li>
<li><a
href="6849c16d79"><code>6849c16</code></a>
Use 128-bit Widening Multiply on More Platforms</li>
<li>See full diff in <a
href="https://github.com/rust-lang/rustc-hash/compare/v2.1.1...v2.1.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustc-hash&package-manager=cargo&previous-version=2.1.1&new-version=2.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-30 01:07:38 +00:00
dependabot[bot]
5defc0e5a9 build: bump aws-lc-sys from 0.39.0 to 0.39.1 (#43760)
Bumps [aws-lc-sys](https://github.com/aws/aws-lc-rs) from 0.39.0 to
0.39.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f58cfb9ded"><code>f58cfb9</code></a>
Prepare aws-lc-sys v0.39.1 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1080">#1080</a>)</li>
<li><a
href="88763b0554"><code>88763b0</code></a>
Fix Windows ARM64 FIPS build: pass correct architecture to vcvarsall.bat
(<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1075">#1075</a>)</li>
<li><a
href="04cac11b6b"><code>04cac11</code></a>
fix: follow symlinks when classifying include directory entries (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1071">#1071</a>)</li>
<li><a
href="d61726b69d"><code>d61726b</code></a>
Should be BSD-3-Clause (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1069">#1069</a>)</li>
<li>See full diff in <a
href="https://github.com/aws/aws-lc-rs/compare/aws-lc-sys/v0.39.0...aws-lc-sys/v0.39.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-sys&package-manager=cargo&previous-version=0.39.0&new-version=0.39.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-30 01:06:07 +00:00
Abbas Olanrewaju Sarafa
40fc2b8176 devtools: Rename CssPropertiesActor variable names (#43745)
Renamed CssPropertiesActor variable names in browsing_context

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-30 00:44:06 +00:00
dependabot[bot]
9eb4853176 build: bump mio from 1.1.1 to 1.2.0 (#43758)
Bumps [mio](https://github.com/tokio-rs/mio) from 1.1.1 to 1.2.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/mio/blob/master/CHANGELOG.md">mio's
changelog</a>.</em></p>
<blockquote>
<h1>1.2.0</h1>
<ul>
<li>Support was added for WASM Preview 2
(<a
href="https://redirect.github.com/tokio-rs/mio/pull/1931">tokio-rs/mio#1931</a>).</li>
<li>Implement <code>AsFd</code> for <code>Registry</code>
(<a
href="https://redirect.github.com/tokio-rs/mio/pull/1936">tokio-rs/mio#1936</a>).</li>
<li>The backlog size for listeners were changed to match std lib
(<a
href="https://redirect.github.com/tokio-rs/mio/pull/1934">tokio-rs/mio#1934</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ce39a6be2c"><code>ce39a6b</code></a>
Release v1.2</li>
<li><a
href="a7b3210db7"><code>a7b3210</code></a>
Update FreeBSD 14 CI image to 14.4-RELEASE</li>
<li><a
href="adfeb3ea00"><code>adfeb3e</code></a>
Merge libc defining dependency</li>
<li><a
href="eaed9a08c7"><code>eaed9a0</code></a>
Update libc to v0.2.183</li>
<li><a
href="44d63ee7ba"><code>44d63ee</code></a>
Simplify backlog value for UnixListener</li>
<li><a
href="a87e41ece5"><code>a87e41e</code></a>
Use the same backlog size for TcpListener as std lib</li>
<li><a
href="c1bc4f8981"><code>c1bc4f8</code></a>
Fix the build on minority platforms</li>
<li><a
href="68c315cb80"><code>68c315c</code></a>
Fix FreeBSD by working around a cargo bug</li>
<li><a
href="8b6021f4dd"><code>8b6021f</code></a>
implement AsFd for Registry</li>
<li><a
href="2bb6fca39a"><code>2bb6fca</code></a>
docs: add note about zero timeout for <code>Poll::poll</code></li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/mio/compare/v1.1.1...v1.2.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=mio&package-manager=cargo&previous-version=1.1.1&new-version=1.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-30 00:43:45 +00:00
dependabot[bot]
c325b749ef build: bump unicode-segmentation from 1.12.0 to 1.13.2 (#43756)
Bumps
[unicode-segmentation](https://github.com/unicode-rs/unicode-segmentation)
from 1.12.0 to 1.13.2.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d446fa8f00"><code>d446fa8</code></a>
Set explicit 1.84 MSRV, add MSRV CI (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/164">#164</a>)</li>
<li><a
href="cb4972bd25"><code>cb4972b</code></a>
fix: Typos in README (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/161">#161</a>)</li>
<li><a
href="88fac40e75"><code>88fac40</code></a>
Add semver check workflow to GitHub Actions (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/160">#160</a>)</li>
<li><a
href="34ae232659"><code>34ae232</code></a>
Fix accidental breakage</li>
<li><a
href="f7268ccf0c"><code>f7268cc</code></a>
Update changelog and version (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/159">#159</a>)</li>
<li><a
href="abed5f7315"><code>abed5f7</code></a>
Update quickcheck to 1.0 (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/158">#158</a>)</li>
<li><a
href="f6f5f218f9"><code>f6f5f21</code></a>
Release 1.13.0</li>
<li><a
href="13862d8894"><code>13862d8</code></a>
feat: Support Unicode 17.0.0 (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/157">#157</a>)</li>
<li><a
href="1441d3dde8"><code>1441d3d</code></a>
Update Python scripts (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/155">#155</a>)</li>
<li><a
href="63d0234320"><code>63d0234</code></a>
Exclude development scripts from published package (<a
href="https://redirect.github.com/unicode-rs/unicode-segmentation/issues/152">#152</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/unicode-rs/unicode-segmentation/compare/v1.12.0...v1.13.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=unicode-segmentation&package-manager=cargo&previous-version=1.12.0&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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-30 00:28:54 +00:00
Taym Haddadi
f597231842 indexeddb: make put() overwrite existing SQLite records (#43721)
indexeddb: make put() overwrite existing SQLite records

Testing: more indexeddb test should pass.
Fixes: #43707

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-29 20:38:24 +00:00
Abbas Olanrewaju Sarafa
4b0f1a7c8b devtools: Rename ProcessActor variable names (#43752)
Renamed ProcessActor variable names in root.rs.

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
Signed-off-by: eri <eri@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-29 16:05:07 +00:00
Abbas Olanrewaju Sarafa
5054ca087b devtools: Rename HighlighterActor variable names (#43747)
Renamed HighlighterActor variable names in inspector.rs.

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 16:00:11 +00:00
Abbas Olanrewaju Sarafa
4f71c0cef9 devtools: Rename LayoutInspectorActor variable names (#43748)
Renamed LayoutInspectorActor variable names in walker.rs

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 15:55:50 +00:00
Abbas Olanrewaju Sarafa
5adddd7af4 devtools: Rename PreferenceActor variable names (#43751)
Renamed PreferenceActor variable names in root.rs.

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 14:36:11 +00:00
Abbas Olanrewaju Sarafa
1c7f16b10e devtools: Rename AccessibilityActor variable names (#43740)
Renamed AccessibilityActor variable names in browsing_context

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 14:28:54 +00:00
Abbas Olanrewaju Sarafa
4eb332251f devtools: Rename WatcherActor variable names (#43728)
Renamed WatcherActor variable names in browsing_context,
network_handler, network_event, tab, watcher & lib.rs

Testing: Ran `./mach test-devtools` locally.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 13:06:45 +00:00
Sam
242cec5770 chore: relax mozlog version requirement (#43749)
Having strict versions here prevents WPT imports. Because we resolve our
deps together with WPT deps:
c32b720ca4/pyproject.toml (L9)
we will effectively use pinned version from WPT (which will work in
upgrades).

Testing: None
Fixes:
https://servo.zulipchat.com/#narrow/channel/263398-general/topic/WPT.20import.20failed.20today

Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-03-29 11:34:33 +00:00
Abbas Olanrewaju Sarafa
be1468f279 devtools: Rename StyleSheetsActor variable names (#43729)
Renamed StyleSheetsActor variable names in browsing_context

Testing: Ran `./mach test-devtools` locally.
Fixes: Part of #43606

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 10:49:00 +00:00
Abbas Olanrewaju Sarafa
c32b720ca4 devtools: Rename RootActor variable names (#43731)
Renamed RootActor variable names in root, watcher, tab & lib.rs

Testing: No testing required.
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-29 06:49:34 +00:00
Euclid Ye
db719abced script: Add TODO for Computed Role (#43736)
Beginning of #43734.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-29 03:12:34 +00:00
Euclid Ye
209c99198c net: Enable fetch and http_loader unit tests for Windows (#43738)
fetch and http_loader module were completely disabled for Windows. 
I ran them locally for a few rounds, and there's nothing abnormal.

Testing: [Windows Try with
UT](https://github.com/servo/servo/actions/runs/23687830144/job/69010191251)

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-28 21:31:46 +00:00
Martin Robinson
1f6e1d2004 layout: Add support for background-blend-mode (#43666)
This change adds support for `background-blend-mode` to Servo by
creating one stacking context per blend and a single stacking context to
serve as the blend container. This matches the approach that Gecko
takes.

Stylo PR: servo/stylo#344
Testing: This change causes some WPT tests to start passing. In general
this feature
is not well exercised by tests. I suspect that blending is hard to test
properly.
Fixes: #43621

Signed-off-by: Martin Robinson <mrobinson@fastmail.fm>
Co-authored-by: Martin Robinson <mrobinson@fastmail.fm>
2026-03-28 20:52:27 +00:00
Tim van der Lippe
fe5c905760 net: Update reported CSP urls for websockets (#43645)
Per the spec discussion [1], we should report `http(s)` URLs rather than
the original `ws(s)` URLs. The WPT tests are updated to reflect what the
spec says and are reviewed by other browser engineers in the WPT PR.

[1]: https://github.com/w3c/webappsec-csp/issues/735

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-28 15:15:40 +00:00
dependabot[bot]
099b8e0b80 build: bump cryptography from 46.0.5 to 46.0.6 (#43735)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.5
to 46.0.6.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.6 - 2026-03-25</p>
<pre><code>
* **SECURITY ISSUE**: Fixed a bug where name constraints were not
applied
  to peer names during verification when the leaf certificate contains a
wildcard DNS SAN. Ordinary X.509 topologies are not affected by this
bug,
including those used by the Web PKI. Credit to **Oleh Konko (1seal)**
for
  reporting the issue. **CVE-2026-34073**
<p>.. _v46-0-5:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="91d728897b"><code>91d7288</code></a>
Cherry-pick <a
href="https://redirect.github.com/pyca/cryptography/issues/14542">#14542</a>
(<a
href="https://redirect.github.com/pyca/cryptography/issues/14543">#14543</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.5...46.0.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=uv&previous-version=46.0.5&new-version=46.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-28 10:35:18 +00:00
Josh Matthews
6526ee532a script: Use result of determining the origin in more cases. (#43732)
We were previously conflating the concept of a navigation request's
origin with the origin of the resulting document. These changes ensure
that the navigation request's origin is based on the navigation
initiator's origin, and the document's origin is not computed until
after the navigation response is received.

The most visible effect of these changes is that documents in sandboxed
iframes now correctly have an opaque origin.

Testing: Lots of new passing tets.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-28 10:03:12 +00:00
Tim van der Lippe
6656061fc3 script: Implement frame-ancestors CSP check (#43630)
Requires communication between the script thread and the constellation
to be able to retrieve the origin of a cross-origin document. However,
in the fast-path where the document resides in the same script-thread,
we use the `frame_element` instead.

If no CSP list is active, then we skip all this logic, to have a minimal
impact on document navigation.

Part of #4577
Fixes #36468

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-28 08:54:17 +00:00
Martin Robinson
bc9a86f7bd script: Use the containing node as the activable element for UA widgets (#43722)
UA widgets (such as textual `<input>`) create a shadow DOM to contain
their various parts. When clicking on these parts (such as the text node
of the widget contents), we should use the root node of the widget as
the activable node. This means that wehen you click on the inside of an
`<input>` element, the input matches the `:active` pseudo-selector.

Testing: This improves WPT tests.
Fixes: #41102

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-27 21:38:15 +00:00
Tim van der Lippe
f7876c3db8 script: Pass &mut JSContext to navigate (#43713)
Also move the related `navigate_to_fragment` method next to it.

Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-27 17:11:22 +00:00
Abbas Olanrewaju Sarafa
9dbe608558 devtools: Rename NetworkEventActor variable concerned files (#43675)
Renamed NetworkEventActor variables in network_handler & lib.rs

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-27 14:48:00 +00:00
Martin Robinson
8acfe7ad48 script: Implement AnimationTimeline and DocumentTimeline from Web Animations (#43711)
This is the first step toward implementing the Web Animations
specification. It adds support for the `AnimationTimeline` and
`DocumentTimeline` specification concepts. Note that there was already
an `AnimationTimeline`, but it did not implement the specification.

Testing: Various WPT start to pass or no longer error / timeout.

Signed-off-by: Martin Robinson <mrobinson@abandonedwig.info>
Co-authored-by: Martin Robinson <mrobinson@abandonedwig.info>
2026-03-27 14:26:23 +00:00
Sharan Poojari
6dd427683c script: React correctly to selected attributes changes in for <option> (#43582)
Fixes: #43522

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-27 14:25:54 +00:00
Euclid Ye
f80eab7018 canvas: Don't include text run without string or font when build_unshaped_text_runs (#43717)
As titled. The `Vec<UnshapedTextRun>` produced by `fn
build_unshaped_text_runs`
is only used by `into_shaped_text_run`, which filters out those without
string or font.

It is better to not allocate them in the first place.

Testing: [Try](https://github.com/servo/servo/actions/runs/23642089615).
Added a Servo-specific crash test to ensure we will not have empty
font/string in a text run.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-27 13:54:32 +00:00
Tim van der Lippe
0df9b39af9 script: move element interfaces into element/ (#43714)
It moves `Element.rs` into a subdirectory and turns on dead code
detection (found 4 methods that could be removed). Then it also extracts
the first attribute-related method into a separate file, to reduce the
file size of `Element` and add more structure as part of #43709.

Part of #38901
Part of #43709

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-27 12:59:13 +00:00
Martin Robinson
4c961cdc40 tidy: Run uv with --frozen when running flake8 (#43716)
This prevents unintended updates the `uv.lock` file which must be
reverted locally.

Testing: As this just fixes a runtime issue when running `test-tidy`,
this
probably doesn't deserve a test.

Signed-off-by: Martin Robinson <mrobinson@abandonedwig.info>
Co-authored-by: Martin Robinson <mrobinson@abandonedwig.info>
2026-03-27 12:20:09 +00:00
Luke Warlow
563dd06e52 script: Implement shadow tree for file input (#43498)
script: Implement shadow tree for file input

File inputs also now support ::file-selector-button

Testing: Existing WPTs
Fixes: https://github.com/servo/servo/issues/39565

Stylo PR: https://github.com/servo/stylo/pull/341

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Vasiluță Mihai-Alexandru <alexv@siluta.me>
2026-03-27 12:15:50 +00:00
Tim van der Lippe
442c63e2d9 net: Fix header parsing for empty strings (#43708)
If there are multiple header values and one of them is empty, we should
append the empty string rather than skipping it. The algorithm was
incorrectly advancing the operation and continuing the loop, rather than
appending and later returning the `values`.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-27 09:45:32 +00:00
Babalola Taiwo J
ed8b28b642 script: Merge Window::load_url with ScriptThread::navigate (#43668)
Both `Window::load_url` and `ScriptThread::navigate` implement parts of
the same navigate algorithm from the HTML spec
(https://html.spec.whatwg.org/multipage/browsing-the-web.html#navigate).
`ScriptThread::navigate` had only one caller: `Window::load_url`.

This merges both methods into a single `navigate` function in
`navigation.rs`, which is the appropriate home for navigation logic. All
previous callers of `Window::load_url` now call `navigation::navigate`
directly.

Testing: This is a pure refactor with no behaviour changes, so no new
tests are needed. Existing tests cover the navigation paths affected.
Fixes: #43494

---------

Signed-off-by: thebabalola <t.babalolajoseph@gmail.com>
2026-03-27 08:38:43 +00:00
Abbas Olanrewaju Sarafa
b707a59117 devtools: Rename BrowsingContextActor variable names (#43655)
Renamed BrowsingContext in tab, network_event, watcher actors & lib.rs

Testing: No testing required - only renaming done
Fixes: Part o #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-27 07:20:04 +00:00
elomscansio
7fe875ac36 constellation: Convert constellation's EmbedderProxy to GenericEmbedderProxy (#43646)
Refactor Constellation module to use GenericEmbedderProxy
- [X] create the new enum in components/<component>
- [X] for each use of EmbedderMsg::<something> in
components/<component>, extract that enum variant into the new enum
- [X] replace uses of EmbedderProxy in components/<component> with
GenericEmbedderProxy<<component>ToEmbedderMsg>
- [X] create a new instance of the generic embedder proxy in
[Servo::new](c023d8edc7/components/servo/servo.rs (L755-L756));
store the receiver in a new field in Servo and pass the sender to the
appropriate code that instantiates the component
- [X] add a new variant to the
[Message](c023d8edc7/components/servo/servo.rs (L137))
enum for the new component enum type
- [X] update
[receive_one_message](c023d8edc7/components/servo/servo.rs (L224))
to use the new receiver and return the new enum variant
- [X] extract the code from
[handle_embedder_message](c023d8edc7/components/servo/servo.rs (L345))
that handles the component-specific variants into a new method

Testing: Just a refactor shouldn't need any testing
Fixes: #42097

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
Signed-off-by: elomscansio <163124154+elomscansio@users.noreply.github.com>
Co-authored-by: Mukilan Thiyagarajan <mukilanthiagarajan@gmail.com>
2026-03-27 06:59:50 +00:00
dependabot[bot]
627f2dfe7f build: bump cmake from 0.1.57 to 0.1.58 (#43699)
Bumps [cmake](https://github.com/rust-lang/cmake-rs) from 0.1.57 to
0.1.58.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cmake-rs/releases">cmake's
releases</a>.</em></p>
<blockquote>
<h2>v0.1.58</h2>
<h3>Fixed</h3>
<ul>
<li>Fix i686-windows system import (<a
href="https://redirect.github.com/rust-lang/cmake-rs/pull/276">#276</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cmake-rs/blob/main/CHANGELOG.md">cmake's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cmake-rs/compare/v0.1.57...v0.1.58">0.1.58</a>
- 2026-03-26</h2>
<h3>Fixed</h3>
<ul>
<li>Fix i686-windows system import (<a
href="https://redirect.github.com/rust-lang/cmake-rs/pull/276">#276</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6319069719"><code>6319069</code></a>
chore: release v0.1.58 (<a
href="https://redirect.github.com/rust-lang/cmake-rs/issues/269">#269</a>)</li>
<li><a
href="fa894569a9"><code>fa89456</code></a>
Fix i686-windows system import (<a
href="https://redirect.github.com/rust-lang/cmake-rs/issues/276">#276</a>)</li>
<li><a
href="511160ffce"><code>511160f</code></a>
Switch to main (<a
href="https://redirect.github.com/rust-lang/cmake-rs/issues/266">#266</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cmake-rs/compare/v0.1.57...v0.1.58">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cmake&package-manager=cargo&previous-version=0.1.57&new-version=0.1.58)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-27 01:17:08 +00:00
eri
2ee93de65d devtools: Rework debugger value structure (#43587)
The WebIDLs for values were duplicated in PropertyDescriptor and
EvalResultValue, with duplicated handlers across the code.

General cleanup of how debugger values are passed from debugger.js and
how the conversion from JS and to JSON happens.

There shouldn't be a behaviour change.

Testing: Existing devtools tests and manual testing
Part of: #36027

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-26 20:18:12 +00:00
Abbas Olanrewaju Sarafa
190844378b devtools: Renamed WorkerActor variables in affected files (#43678)
Renamed WorkerActor variables in watcher, console, root and lib.rs

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-26 19:47:37 +00:00
Veer Pratap
235a3577f3 script: Use encoding-parsed URLs in EventSource constructor (#43634)
Fixes #43629.

The `EventSource` constructor was resolving input URLs with
`api_base_url().join(...)`, which is not the same as the HTML spec’s
encoding-parsing step for URLs relative to the relevant settings object.

This change updates `components/script/dom/eventsource.rs` to use
`global.encoding_parse_a_url(&url.str())` when constructing the
`EventSource` request URL. That makes the constructor follow the spec
more
closely while keeping the existing failure behavior of returning
`Error::Syntax(None)` when parsing fails.

Using `GlobalScope::encoding_parse_a_url` also reuses the existing
parsing
path for both window and worker globals, instead of handling
`EventSource`
URL resolution through `api_base_url().join(...)` directly.

Testing:
* Ran ./mach check
* Ran ./mach test-wpt tests/wpt/tests/eventsource/
* Checked relevant coverage under
tests/wpt/tests/html/infrastructure/urls/resolving-urls/query-encoding/

---------

Signed-off-by: veercodeprog <veerpratap945050@gmail.com>
2026-03-26 19:20:55 +00:00
Tim van der Lippe
dd89609429 script: Fire input events when executing commands (#43087)
For any enabled command, we should fire corresponding
beforeinput and input events.

Also update a WPT test to make it clearer what the
expected behavior is. None of the test expect a
beforeinput event. Before, it would fail with
"expected undefined, but got", which is not descriptive
as a failure to what's happening.

We are failing these tests, since this behavior is
currently unspecced and also requires changes in
the input element to work with text edits.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-26 18:41:36 +00:00
Tim van der Lippe
f340042c1d script: Pass &mut JSContext to FetchResponseListener::process_response_chunk (#43657)
Fixes #42841

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-26 18:05:24 +00:00
Euclid Ye
12b8f5794b webdriver: Improve error reporting for Cookie Addition (#43690)
Improve the error reporting for [cookie
addition](https://w3c.github.io/webdriver/#add-cookie).
Most notably, when
- expiry time exceeds maximum safe integer
- cookie domain is not equal to session's current browsing context's
active document's domain

There is a bug with spec:
https://github.com/servo/servo/pull/43690#discussion_r2994771111.
We fix spec in https://github.com/w3c/webdriver/pull/1955 and
make sure Servo behaves consistently with other browsers.

Testing: Added one test for invalid expiry time. New passing with
existing.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-26 17:38:30 +00:00
Shubham Gupta
ff69105712 wpt: Enable css-device-adapt tests (#43694)
Add one more directory of tests

Testing: More Tests passing.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-26 15:15:22 +00:00
shuppy
3f746481a2 libservo: Set up graft node in AccessKit trees for webviews (#43556)
in #43029, we defined an accessibility tree for each webview. we create
those trees when accessibility is activated for that webview, then the
embedder can graft it into their main accessibility tree. at the time,
this accessibility tree was empty, but we ultimately want it to contain
the accessibility tree of the documents loaded in the webview at any
given time. to do that, we need to graft the active top-level pipeline’s
accessibility tree into the webview accessibility tree. we should be
able to ignore nested documents inside iframes here, and leave it to
their parent documents to graft those in as part of layout
accessibility.

this patch hooks into the moment in the constellation where we detect
that the top-level document has changed (#43013), and notifies libservo
of the new AccessKit TreeId for the webview-to-pipeline graft node. this
moment covers navigating to a new top-level document and navigating back
or forward, but not the initial document loaded in the webview, so we
also hook into the moment a ConstellationWebView is created, and do the
same for that initial document. now the accessibility tree for a webview
with accessibility activated should look like this:

- embedder’s main tree
  - graft node for webview tree → webview tree
    - ~~graft node for document back in history~~
    - graft node for active top-level document → (nothing yet)
    - ~~graft node for document forward in history~~

Testing: this patch updates the relevant accessibility test in libservo
Fixes: part of #4344, extracted from our work in #42338

---------

Signed-off-by: Alice Boxhall <alice@igalia.com>
Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-03-26 14:48:56 +00:00
CynthiaOketch
9af19158f3 devtools: Show service workers in Firefox DevTools about:debugging (#43659)
This update makes service workers properly show up in DevTools and
behave more like dedicated workers.

- Added an is_service_worker field to DevtoolsPageInfo so the devtools
server can tell service workers apart from dedicated workers
- Triggered a NewGlobal message when a service worker is created in
serviceworker_manager.rs, similar to what already happens for dedicated
workers
- Routed service workers to root.service_workers so they appear under
"Service Workers" in about:debugging instead of "Other Workers"
- Implemented listServiceWorkerRegistrations with the expected response
format (activeWorker, installingWorker, waitingWorker, evaluatingWorker)
to match Firefox’s LegacyServiceWorkersWatcher
- Added support for getPushSubscription in WorkerActor, currently
returning subscription: null
Enabled the service_worker target type in the watcher’s SessionContext
and handled watchTargets("service_worker")

Testing

Start Servo with:

`RUST_LOG="error,devtools=debug" ./mach run --
--pref=dom_serviceworker_enabled --devtools=6080
"https://mdn.github.io/dom-examples/service-worker/simple-service-worker/"
`

In Firefox, go to about:debugging and connect to localhost:6080
Confirm the service worker shows up under "Service Workers"



Fixes #43574

---------

Signed-off-by: CynthiaOketch <cynthiaoketch6@gmail.com>
2026-03-26 13:53:29 +00:00
Luke Warlow
087c50657f script: Refactors HTMLInputElement.rs into type specific files (#43325)
Refactors HTMLInputElement.rs to split lots of type specific input code
into their own files. These SpecificInputTypes are responsible for their
own shadow trees and also for element specific data such as
FileInputType's filelist.

Testing: Covered by WPTs
Fixes: https://github.com/servo/servo/issues/38263
Fixes: https://github.com/servo/servo/issues/43351

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-26 11:59:22 +00:00
Mukilan Thiyagarajan
75d6338825 embedder_traits: Update docs for the public API of input_event module (#43681)
These are mostly formatting changes to make them consistent.

Testing: Not required as there are no code changes.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-03-26 11:37:24 +00:00
Sayd Mateen
12756512ba devtools: Standardize EnvironmentActor variables (#43679)
Standardize EnvironmentActor variables

Testing: Ran `test-devtools` and all tests passed
Fixes: Part of https://github.com/servo/servo/issues/43606

Signed-off-by: Sayd Mateen <32889475+saydmateen@users.noreply.github.com>
2026-03-26 11:04:03 +00:00
Jayanta Pradhan
302b719ea3 devtools: Rename PageStyleActor variable names (#43684)
Rename page_style in inspector .

Testing: ran `./mach test-devtools`.

Fixes: Part of #43606

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-26 09:45:06 +00:00
Brent Schroeter
c94722d3da devtools: wrap TcpStream to synchronize network operations (#43472)
Introduces a new type `DevtoolsConnection`, which implements the
`JsonPacketStream` trait with proper coordination of I/O across threads.
This replaces the implementation of `JsonPacketStream` for raw
`TcpStream`s, which was susceptible to interleaving writes when cloned
across threads.

`DevtoolsConnection` also defensively synchronizes read operations.
These are less likely to cause issues: in practice actors should never
independently pull incoming messages without centralized coordination.

Testing: No new tests, as interleaving writes are difficult to evoke
deterministically. Removing the `JsonPacketStream` implementation for
`TcpStream` should discourage regressions due to improper use of raw
streams.

---------

Signed-off-by: Brent Schroeter <contact@brentsch.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-26 08:43:04 +00:00
Jambong Ralpher
7e6323595a devtools: Rename DeviceActor variables for consistency (#43676)
Rename `DeviceActor` local variable in `root.rs` from `device` to
`device_actor` for naming consistency across the devtools crate.

This follows the convention discussed in #43557:
- `{}_actor` for variables holding the actor 
- `{}_name` for variables holding the actor name string

The `device_actor` field in the `GlobalActors` struct was not renamed,
as it is part of a `#[derive(Serialize)]` struct used for devtools
message serialization.

Testing: `./mach test-devtools` all 60 tests pass (6 expected failures).
One unrelated flaky test
(`test_breakpoint_at_invalid_entry_point_does_not_crash`) occasionally
fails due to a race condition tracked separately. opened an isssue for
it at #43667
 

fixes part of #43606

Signed-off-by: staysafe020 <jambongralpher@gmail.com>
2026-03-26 08:36:14 +00:00
Abbas Olanrewaju Sarafa
b22ef1eadd devtools: Rename TabDescriptorActor variable names (#43664)
Renamed TabDescriptorActor variable names in browsing_context, root &
target_configuration

Cleaned up a few more names as suggested by eerii

Testing: No testing required
Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-26 08:24:01 +00:00
Euclid Ye
959ab5ad4d wdspec: tagName IDL attribute should be upper case when in html (#43673)
[Spec for
`tagName`](https://dom.spec.whatwg.org/#element-html-uppercased-qualified-name).

The expectation should use upper case here, as the test document is
definitely in HTML:

bc62b7475c/tests/wpt/tests/webdriver/tests/support/fixtures.py (L149)


bc62b7475c/tests/wpt/tests/webdriver/tests/support/inline.py (L33-L34)


Testing: New passing WPT.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-26 08:16:46 +00:00
Jayanta Pradhan
ec782e7264 Devtool: rename NetworkParentActor variable names. (#43672)
Rename NetworkParent  in watcher actors.

Testing: ran `./mach test-devtools`.

Fixes: Part of #43606

---------

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-26 07:42:55 +00:00
Josh Matthews
db3daa4324 script: Align javascript: URL evaluation closer to the spec. (#43496)
The commit contains several related changes:
* iframes that load javascript: URLs as part of the initial insertion
(ie. `<iframe src='javascript:...'>`) get a synchronous load event
dispatched
* javascript: URL evaluation that does not result in a string no longer
treated like a 204 response
* iframes that perform a javascript: URL navigation that does not result
in a new document no longer block the parent document load event

Testing: Lots of new tests passing.
Fixes: #24901

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-26 03:10:38 +00:00
Domenico Rizzo
bc62b7475c webgl: Remove manual Drop implementation for WebGLSampler (#43631)
Moves the cleanup logic to a separate helper struct to comply with the
prohibition of manual `Drop` implementations for DOM types.

Testing: WebGL tests cover these cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-26 02:12:34 +00:00
Tim van der Lippe
a6722b0d1d script: Report CSP violations for child navigations in parent page (#43652)
There were two issues here:
1. We weren't firing the `load` event when we would show an error page
because of a CSP failure. This is to avoid web pages knowing wheter a
page has failed because of CSP.
2. We were reporting the violations in the wrong global. We shouldn't
fire these in the global of the child, but instead in the parent.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-26 02:11:11 +00:00
Jayanta Pradhan
b3329fb764 devtools: Rename console_actor and console in actors (#43644)
Rename console_actor and console in  actors.

Testing: ran `./mach test-devtools`.

Fixes: Part of #43606

---------

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-25 20:36:08 +00:00
Euclid Ye
40d616c01b canvas: Support all Unicode variation selectors in text runs (#43449)
Initially I just want to update the legacy comment, since raqote backend
is gone.

This also enforces other variation selectors properly: see anchor 
below,
which ignored our text selector previously.

Fixes: https://github.com/servo/servo/issues/43448
Fixes: https://github.com/servo/servo/issues/43650
Testing: Added a test that all other browsers pass as well.

| Before | After |
|----------|----------|
| <img width="483" height="211" alt="image"
src="https://github.com/user-attachments/assets/436493bc-ec42-4641-bcf8-c39afac6cfdc"
/> | <img width="461" height="186" alt="image"
src="https://github.com/user-attachments/assets/348375a8-45a4-4fde-aea6-9657cac211d3"
/> |
| <img width="669" height="449" alt="image"
src="https://github.com/user-attachments/assets/c791e840-9791-43b6-9147-1c250ea37721"
/> | <img width="653" height="433" alt="image"
src="https://github.com/user-attachments/assets/4fd06581-ac62-48f1-8135-d3c287e898cf"
/> |

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-25 18:13:57 +00:00
minghuaw
13029a9deb font: Filter out downloaded web fonts before starting to download another web font (#43382)
Checks the web font sources and filter out the ones that are already
downloaded in the `FontContext` before starting to load new ones

Testing: Existing WPT tests.

---------

Signed-off-by: Minghua Wu <michael.wu1107@gmail.com>
2026-03-25 17:59:15 +00:00
webbeef
f38c7308b0 servo: Add a BluetoothDeviceSelectionRequest to the API for selecting Bluetooth devices (#43580)
This change has 2 parts:
- adding `BluetoothPickDeviceRequest`, similar to other request structs
used to communicate with the embedder.
- switch from a `Vec<String>` that expected 2 * <device count> strings
to `Vec<BluetoothDeviceDescription>` which is easier to reason about.

Testing: Manual testing with a build that has the `native-bluetooth`
feature enabled.

---------

Signed-off-by: webbeef <me@webbeef.org>
2026-03-25 17:45:07 +00:00
Jayanta Pradhan
c698be8306 script: move node interfaces into node/. (#43662)
Moves node interfaces into script/dom/node/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing.
Fixes: Part of #38901

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-25 17:39:28 +00:00
Abubakar Abdulazeez Usman
0d0b392565 devtools: Rename ReflowActor variables in browsing context actor (#43656)
Renamed ReflowActor in browsing_context actor.

Testing: `./mach test-devtools`, All test passed.
Fixes: Part of #43606

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-03-25 16:09:11 +00:00
Jambong Ralpher
f4c8a39697 Add README for the servo crate (#43654)
Add `readme` field to libservo's Cargo.toml, pointing to the repository
root
README via `../../README.md`. This ensures the crates.io page displays
content
when the crate is published, as Cargo copies the referenced file into
the
package during `cargo publish`.

Testing: This change only adds a metadata field to Cargo.toml and does
not
affect build output or runtime behavior. No tests are required.
fixes #43143

Signed-off-by: staysafe020 <jambongralpher@gmail.com>
2026-03-25 14:27:57 +00:00
elomscansio
5e19c83bd6 script: Move event DOM interfaces to script/dom/event/ (#43651)
Moves interfaces defined by the event spec to the script/dom/event/
module from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially https://github.com/servo/servo/issues/38901

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-25 13:36:55 +00:00
elomscansio
14faaaf093 script: Move resizeobserver DOM interfaces to script/dom/resizeobserver/ (#43647)
Moves interfaces defined by the resizeobserver spec to the
script/dom/resizeobserver/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially https://github.com/servo/servo/issues/38901

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-25 10:56:57 +00:00
Messi II Innocent R.
1e901934b5 paint: Enable WebRender dithering to reduce gradient color banding (#43603)
Enable WebRender gradient dithering to reduce color banding

WebRender has a built-in dithering system for gradients that applies a
small amount of ordered noise to RGB channels before the framebuffer
quantizes to 8-bit.

The dithering was already fully implemented in WebRender (shader
support, dither texture, feature flag) but was disabled by default
(enable_dithering: false in WebRenderOptions).

Testing: Tested manually with the reproduction case from the issue (40
stacked divs with `linear-gradient(rgba(90, 138, 100, 0.04) 0%,
transparent 60%)`). Before the change, Servo showed harsh horizontal
bands. After the change, the gradient renders smoothly, matching Firefox
and Chrome behavior.

Fixes: #43568

<img width="740" height="471" alt="Screenshot from 2026-03-24 04-42-42"
src="https://github.com/user-attachments/assets/0caea525-e5d9-46a7-817d-2b420246f19c"
/>

---------

Signed-off-by: Messi002 <rostandmessi2@gmail.com>
2026-03-25 09:41:21 +00:00
Abbas Olanrewaju Sarafa
4820941cab devtools: Refactored ActorRegistry variables in lib.rs (#43623)
Refactored the lib.rs file to replace ``actors``` & ```self.actors```
variables with ```registry``` and ```self.registry```

No testing required, compiles successfully.

Part o the #43605

---------

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-25 08:02:34 +00:00
niya
d29ef8dcd0 layout: Display generated content for ::marker (#43515)
Implements a fix for #43036

- Renders content for `::marker`
- If content is not present render marker_image/marker_string

Here's a small webpage I wrote to test if my implementation works :) 

<img width="1136" height="880" alt="Screenshot 2026-03-21 at 4 50 43 PM"
src="https://github.com/user-attachments/assets/91ccbfd9-2c18-446d-bac5-d559f483b08c"
/>

# Testing
The existing WPT ones should be sufficient, the tests need to be
updated.


## (WPT) Stable Unexpected Results that are failing:

| Test  | Issue  | Remark |
|--------|--------|--------|
| /css/css-lists/marker-dynamic-content-change.html | #43120 | |
| /css/css-lists/marker-quotes.html | #30365 | Test File: Ordered List
showing '0' for all `li` |
| /css/css-pseudo/marker-content-001.html | #30365 | Ref file: Ordered
List showing '0' for all `li` |
| /css/css-pseudo/marker-content-001b.html | #30365 | Ref file: Ordered
List showing '0' for all `li` |
| /css/css-pseudo/marker-content-001c.html | #30365 | Ref file: Ordered
List showing '0' for all `li` |
| /css/css-pseudo/marker-content-020.html | | Test File: JavaScript
dynamically toggles the `no-marker` class, but it doesn't update the DOM
when called from inside `addEventListener()` and
`requestAnimationFrame()` functions. |
| /css/selectors/has-style-sharing-pseudo-007.html | #25133 | Test file
uses `has` to remove `content` from a `li`; `has` pseudo-class has not
been implemented yet |
| /css/selectors/has-style-sharing-pseudo-008.html | #25133 | Test file
uses `has` to remove `content` from a `li`; `has` pseudo-class has not
been implemented yet |

---------

Signed-off-by: Niya Gupta <niyabits@gmail.com>
Signed-off-by: niya <niyabits@gmail.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-25 07:24:05 +00:00
Abbas Olanrewaju Sarafa
02a2d45c30 devtools: Renamed BrowsingContext in inspector & its actors (#43642)
Renamed BrowsingContext in inspector, highlighter, page_style,
style_rule & walker actors

Testing: No testing required.

Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-25 06:36:07 +00:00
dependabot[bot]
ae7cc557e5 build: bump libredox from 0.1.14 to 0.1.15 (#43635)
Bumps libredox from 0.1.14 to 0.1.15.


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libredox&package-manager=cargo&previous-version=0.1.14&new-version=0.1.15)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 06:34:13 +00:00
Abbas Olanrewaju Sarafa
0d2b91a9d1 devtools: Rename registry in source, node, & network_handler (#43619)
Renamed actors to registry in source, node, & network_handler.

Testing: No tests were required, however compilation was successful
Part of #43605

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-25 06:33:53 +00:00
dependabot[bot]
19cd6026c7 build: bump zerocopy from 0.8.42 to 0.8.47 (#43636)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.42 to
0.8.47.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.47</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Change ref_from_bytes() to inline(always). by <a
href="https://github.com/korran"><code>@​korran</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3137">google/zerocopy#3137</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.46...v0.8.47">https://github.com/google/zerocopy/compare/v0.8.46...v0.8.47</a></p>
<h2>v0.8.46</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[codegen] Document and test <code>IntoBytes</code> by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3109">google/zerocopy#3109</a></li>
<li>[codegen] Test and document codegen for <code>SplitAt</code> and
<code>Split</code> by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3111">google/zerocopy#3111</a></li>
<li>[test] Fix mis-run UI tests by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3134">google/zerocopy#3134</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.45...v0.8.46">https://github.com/google/zerocopy/compare/v0.8.45...v0.8.46</a></p>
<h2>v0.8.46-alpha.3</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[ci] When releasing, don't dry-run zerocopy publish by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3126">google/zerocopy#3126</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.46-alpha.2...v0.8.46-alpha.3">https://github.com/google/zerocopy/compare/v0.8.46-alpha.2...v0.8.46-alpha.3</a></p>
<h2>v0.8.46-alpha.2</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[ci] In releasing script, pass <code>--allow-dirty</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3125">google/zerocopy#3125</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.46-alpha.1...v0.8.46-alpha.2">https://github.com/google/zerocopy/compare/v0.8.46-alpha.1...v0.8.46-alpha.2</a></p>
<h2>v0.8.46-alpha.1</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[ci] Bypass vendoring during publication by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3124">google/zerocopy#3124</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.46-alpha...v0.8.46-alpha.1">https://github.com/google/zerocopy/compare/v0.8.46-alpha...v0.8.46-alpha.1</a></p>
<h2>v0.8.46-alpha</h2>
<!-- raw HTML omitted -->
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a6a530d0b0"><code>a6a530d</code></a>
Release 0.8.47 (<a
href="https://redirect.github.com/google/zerocopy/issues/3138">#3138</a>)</li>
<li><a
href="d6d67bfa47"><code>d6d67bf</code></a>
Change ref_from_bytes() to inline(always). (<a
href="https://redirect.github.com/google/zerocopy/issues/3137">#3137</a>)</li>
<li><a
href="e38763fcad"><code>e38763f</code></a>
Release 0.8.46 (<a
href="https://redirect.github.com/google/zerocopy/issues/3136">#3136</a>)</li>
<li><a
href="f5c1f58f6d"><code>f5c1f58</code></a>
[test] Fix mis-run UI tests (<a
href="https://redirect.github.com/google/zerocopy/issues/3134">#3134</a>)</li>
<li><a
href="c2bdaa5ddf"><code>c2bdaa5</code></a>
ci: update step-security/harden-runner to v2.16.0 (<a
href="https://redirect.github.com/google/zerocopy/issues/3135">#3135</a>)</li>
<li><a
href="e4f2484590"><code>e4f2484</code></a>
[codegen] Test and document codegen for <code>SplitAt</code> and
<code>Split</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3111">#3111</a>)</li>
<li><a
href="0c4f843882"><code>0c4f843</code></a>
[codegen] Document and test <code>IntoBytes</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3109">#3109</a>)</li>
<li><a
href="13024e9877"><code>13024e9</code></a>
[ci] Re-enable zizmor (<a
href="https://redirect.github.com/google/zerocopy/issues/3119">#3119</a>)</li>
<li><a
href="52311da31d"><code>52311da</code></a>
[codegen] Use <code>cargo.sh +nightly</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3131">#3131</a>)</li>
<li><a
href="d8124807fc"><code>d812480</code></a>
[ci] Update <code>auto-approve.yml</code> to play nicely with CI (<a
href="https://redirect.github.com/google/zerocopy/issues/3130">#3130</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/google/zerocopy/compare/v0.8.42...v0.8.47">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.42&new-version=0.8.47)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-25 06:33:28 +00:00
Luke Warlow
04fb115a6d script: Implement HTMLMarqueeElement type (#43610)
This adds the WebIDl and implementation for the HTMLMarqueeElement type.

The `<marquee>` HTML is now assigned this type.

None of the contained properties or methods are implemented yet.

Testing: Existing WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-25 06:31:16 +00:00
Jonathan Schwender
dfd2aee2f2 Re-enable sccache for the mac-arm64 workflow (#43628)
This partially reverts 017b12a627. The
intermittent issues should be resolved now.

./mach build --release results in ~3GiB of sccache size locally. Since
we build multiple configurations (with crown, tests, profiles) we will
easily hit the 10GiB cache limit even with just one architecture. Hence,
it doesn't make sense to add sccache to more workflows, at least not
before we decide to buy more cache or not.
This should hopefully make the macos-arm64 workflows faster. Locally the
speed-up on clean builds is significant.

Testing: [mach try (no existing
cache)](https://github.com/jschwe/servo/actions/runs/23507308462/job/68418624068),
[mach try
#2](https://github.com/jschwe/servo/actions/runs/23508733572/job/68423715413)
- i.e. 34 minutes vs. 19 minutes total runtime, and 30 m vs 15 m build
time (with ideal conditions for the caching)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-25 06:30:34 +00:00
Oriol Brufau
80c57f80d4 layout: Fix justify-self: auto on block-in-inline (#43625)
We were resolving `justify-self: auto` according to the `justify-items`
of the containing block. However, the CSSWG resolved to instead use the
parent box; and if the parent is an inline box, then `justify-items`
doesn't apply, so `justify-self: auto` behaves as `normal`.

Testing: Adding WPT test
Fixes: #43624

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-25 06:05:03 +00:00
Euclid Ye
2f5e3fdb5c cargo: Rename workspace-local library starting with c to servo_* (#43622)
- canvas 
- constellation_traits
- canvas_traits
- constellation

Testing: This should not change any behaviour.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-25 06:04:57 +00:00
Abbas Olanrewaju Sarafa
9e2d033047 devtools: Renamed BrowsingContext in breakpoint, console & thread actors (#43641)
Renamed BrowsingContext in breakpoint, console & thread actors

Testing: No testing required.

Fixes: Part of #43606

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-25 05:33:29 +00:00
Jonathan Schwender
e095bc4cef deps: Update mozjs to 0.15.7 (#43618)
This mainly includes:

- https://github.com/servo/mozjs/pull/717
- https://github.com/servo/mozjs/pull/725

Testing: Covered by existing tests.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-24 16:28:44 +00:00
Abbas Olanrewaju Sarafa
beafb08ae8 devtools: Rename registry in tab, watcher and browsing_context (#43614)
Renamed `actors` to `registry` in `actors/tab.rs`, `actors/watcher.rs`
and `actors/browsing_context.rs`.

Testing: No tests were required, however compilation was successful
Part of: #43605

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-24 16:20:11 +00:00
Jayanta Pradhan
0e7ca88c24 script: Move url interfaces into url/ (#43612)
Moves url interfaces into script/dom/url/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing.
Part of #38901

---------

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-24 16:06:17 +00:00
elomscansio
2bc868788f script: Move datatransfer DOM interfaces to script/dom/datatransfer/ (#43609)
Moves interfaces defined by the datatransfer spec to the
script/dom/datatransfer/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially #38901

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-24 15:46:38 +00:00
Jayanta Pradhan
ae33e48cb8 script: Move xpath interfaces into xpath/ (#43616)
Moves xpath interfaces into script/dom/xpath/ module from script/dom/.

Testing: Just a refactor.
Fixes: Part of #38901

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-24 15:22:48 +00:00
Euclid Ye
32cce8e6de cargo: Rename workspace-local dependencies starting with c to servo-* (#43615)
Also reorders alphabetically for the corresponding user .toml.

Similar to #43526.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-24 15:10:38 +00:00
Abbas Olanrewaju Sarafa
ae4a5b8de5 script: Use encoding-parse algorithm in Worker::Constructor (#43588)
Updated api base url to encoding_parse_a_url and wrote tests referencing
the suggested format

Fixes: #43557 
Testing: new passing test

Signed-off-by: Sabb <sarafaabbas@gmail.com>
2026-03-24 14:32:26 +00:00
Oriol Brufau
62b2eefc7c layout: Allow block-levels inside an inline directly, without wrapper (#43586)
When encountering a block-level inside an inline box, we would wrap it
(together with other block-level siblings, if any) inside an anonymous
block box.

That was complicating the logic for no real benefit, so just get rid of
these anonymous wrappers, and allow block-levels as direct children of
inlines.

This aligns Servo with WebKit, which did the same refactoring:
https://commits.webkit.org/304357@main

Blink still generates these wrappers, but its design doc acknowledges
that "the anonymous box is not strictly required".

Testing: No existing test fails. But note that, while minimal, this may
have some observable implications. For example, as an accidental
side-effect of #41492, Servo aligned with the CSSWG resolution in
https://github.com/w3c/csswg-drafts/issues/11462, but now we will revert
to the previous behavior. I will address it in a follow-up, and add a
test.

Fixes: #41636

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-24 14:31:42 +00:00
elomscansio
7e97e82008 script: Move document DOM interfaces to script/dom/document/ (#43602)
Moves interfaces defined by the document spec to the
script/dom/document/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially #38901

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-24 14:29:07 +00:00
elomscansio
fc29fea5e1 script: Move file DOM interfaces to script/dom/file/ (#43607)
Moves interfaces defined by the file spec to the script/dom/file/ module
from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially #38901

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-24 13:15:16 +00:00
Oriol Brufau
7c1401fff8 script: Add preshints for width and height attributes of <svg> (#43583)
Lets the `width` and `height` attributes of `<svg>` set presentational
hints for the CSS properties of the same name.

Also bumps Stylo to servo/stylo#343, in order to also set the preshints
for percentage values. However, layout will ignore percentages for the
purpose of computing the natural sizes and aspect ratio.

Testing: Improves WPT

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-24 09:29:03 +00:00
elomscansio
36a5885086 script: Move Clipboard DOM interfaces to script/dom/clipboard/ (#43597)
Moves interfaces defined by the clipboard spec to the
script/dom/clipboard/ module from script/dom/.

Testing: Just a refactor shouldn't need any testing
Fixes: Partially #38901

---------

Signed-off-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-24 08:58:07 +00:00
minghuaw
75a56e567b layout: Do not trigger dirty_all_nodes when web font loading fails (#43595)
Currently, the `web_font_finished_loading_callback` sends a
`ScriptThreadMessage::WebFontLoaded` message regardless of whether web
font loading succeeds or not, which leads to dirtying all nodes in
`script_thread.rs`. This creates unnecessary reflow. This PR removes the
boolean field from the `WebFontLoaded` message and only sends the
message when the web font loading is successful.

Testing: Existing WPT tests

Signed-off-by: Minghua Wu <michael.wu1107@gmail.com>
2026-03-24 08:03:30 +00:00
Gae24
113b06f2ee script: Correctly setup request for worker module scripts (#43585)
According to spec we should fetch worker modules using the _outside
settings_, however we can't use it directly since we are on a different
thread. To fix it, a new struct `ModuleFetchClient` is now part of
`LoadState` and replace the `with_global_scope` call done in
`fetch_a_single_module_script`.
This also tidy worker classic script related code.

Testing: There are new passes

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-24 05:28:27 +00:00
dependabot[bot]
ebbe5de656 build: bump quick_cache from 0.6.20 to 0.6.21 (#43593)
Bumps [quick_cache](https://github.com/arthurprs/quick-cache) from
0.6.20 to 0.6.21.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/arthurprs/quick-cache/releases">quick_cache's
releases</a>.</em></p>
<blockquote>
<h2>v0.6.21</h2>
<h2>What's Changed</h2>
<ul>
<li>Add a crossbeam sharded rwlock backend by <a
href="https://github.com/gz"><code>@​gz</code></a> in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/110">arthurprs/quick-cache#110</a></li>
<li>Rename <code>crossbeam</code> feature to <code>sharded-lock</code>
by <a href="https://github.com/arthurprs"><code>@​arthurprs</code></a>
in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/111">arthurprs/quick-cache#111</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/gz"><code>@​gz</code></a> made their
first contribution in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/110">arthurprs/quick-cache#110</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.20...v0.6.21">https://github.com/arthurprs/quick-cache/compare/v0.6.20...v0.6.21</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6b8a5be25a"><code>6b8a5be</code></a>
0.6.21</li>
<li><a
href="84bc22295a"><code>84bc222</code></a>
Rename <code>crossbeam</code> feature to <code>sharded-lock</code> (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/111">#111</a>)</li>
<li><a
href="752b3b44e7"><code>752b3b4</code></a>
Add a crossbeam sharded rwlock backend (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/110">#110</a>)</li>
<li>See full diff in <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.20...v0.6.21">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quick_cache&package-manager=cargo&previous-version=0.6.20&new-version=0.6.21)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-24 00:49:53 +00:00
dependabot[bot]
c992661533 build: bump itoa from 1.0.17 to 1.0.18 (#43591)
Bumps [itoa](https://github.com/dtolnay/itoa) from 1.0.17 to 1.0.18.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/itoa/releases">itoa's
releases</a>.</em></p>
<blockquote>
<h2>1.0.18</h2>
<ul>
<li>Simplify pointer usage in Buffer::format method (<a
href="https://redirect.github.com/dtolnay/itoa/issues/67">#67</a>,
thanks <a
href="https://github.com/xtqqczze"><code>@​xtqqczze</code></a>)</li>
<li>Optimize 128-bit integer formatting (<a
href="https://redirect.github.com/dtolnay/itoa/issues/68">#68</a>,
thanks <a
href="https://github.com/jhpratt"><code>@​jhpratt</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="af77385d0d"><code>af77385</code></a>
Release 1.0.18</li>
<li><a
href="73a7c03e23"><code>73a7c03</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/itoa/issues/68">#68</a> from
jhpratt/master</li>
<li><a
href="7b4c86b03e"><code>7b4c86b</code></a>
Optimize 128-bit integer formatting</li>
<li><a
href="0d8a4899bf"><code>0d8a489</code></a>
Fill in pointer cast type</li>
<li><a
href="e693c49e60"><code>e693c49</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/itoa/issues/67">#67</a> from
xtqqczze/as_mut_ptr</li>
<li><a
href="29b34100d5"><code>29b3410</code></a>
Simplify pointer usage in Buffer::format method</li>
<li><a
href="bbf077faeb"><code>bbf077f</code></a>
Switch to 9975WX benchmark data</li>
<li><a
href="65bc721a0d"><code>65bc721</code></a>
Delete old chart code</li>
<li>See full diff in <a
href="https://github.com/dtolnay/itoa/compare/1.0.17...1.0.18">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=itoa&package-manager=cargo&previous-version=1.0.17&new-version=1.0.18)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-24 00:38:07 +00:00
dependabot[bot]
5605f3f36a build: bump jni-sys from 0.3.0 to 0.3.1 (#43590)
Bumps [jni-sys](https://github.com/jni-rs/jni-sys) from 0.3.0 to 0.3.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jni-rs/jni-sys/releases">jni-sys's
releases</a>.</em></p>
<blockquote>
<h2>v0.3.1</h2>
<p>This release applies the <a
href="https://github.com/dtolnay/semver-trick">semver trick</a> to
re-export compatible types from <code>jni-sys 0.4</code> (namely
<code>jobject</code>) to make it easier for <code>jobject</code>
references to be passed around between APIs depending on different
versions of <code>jni-sys</code></p>
<p>The MSRV was bumped to 1.77</p>
<h2>What's Changed</h2>
<h3>Added</h3>
<ul>
<li>GetModule was added to <code>JNINativeInterface</code> (<a
href="https://redirect.github.com/jni-rs/jni-sys/pull/22">#22</a>)</li>
<li><code>JNI_VERSION_{9,10,19,20,21,24}</code> version definitions were
added</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Compatible types are now re-exported from <code>jni-sys 0.4</code>
to make it easier for <code>jobject</code> references
to be passed around between APIs depending on different versions of
<code>jni-sys</code></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/jni-rs/jni-sys/compare/v0.3.0...v0.3.1">https://github.com/jni-rs/jni-sys/compare/v0.3.0...v0.3.1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/jni-rs/jni-sys/blob/v0.3.1/CHANGELOG.md">jni-sys's
changelog</a>.</em></p>
<blockquote>
<h2>[0.3.1] - 2026-03-22</h2>
<h3>Added</h3>
<ul>
<li>GetModule was added to <code>JNINativeInterface</code> (<a
href="https://redirect.github.com/jni-rs/jni-sys/pull/22">#22</a>)</li>
<li><code>JNI_VERSION_{9,10,19,20,21,24}</code> version definitions were
added</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Compatible types are now re-exported from <code>jni-sys 0.4</code>
to make it easier for <code>jobject</code> references
to be passed around between APIs depending on different versions of
<code>jni-sys</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1985e8bdd0"><code>1985e8b</code></a>
Release v0.3.1</li>
<li><a
href="0a512a07ec"><code>0a512a0</code></a>
Add .vscode/ to .gitignore</li>
<li><a
href="a77b608cd0"><code>a77b608</code></a>
Add minimal test for invocation API + JNI</li>
<li><a
href="df992c4a78"><code>df992c4</code></a>
remove systest</li>
<li><a
href="0e7f6b8d7c"><code>0e7f6b8</code></a>
Use semver trick to re-export compatible types from jni-sys 0.4</li>
<li><a
href="be20758a9c"><code>be20758</code></a>
systest: update to ctest 0.5</li>
<li><a
href="1f539f53c2"><code>1f539f5</code></a>
Systest build fix for darwin/linux</li>
<li><a
href="4caf07d5c5"><code>4caf07d</code></a>
Add JNI_VERSION_24</li>
<li><a
href="e75db1c2e0"><code>e75db1c</code></a>
Use SPDX license format</li>
<li><a
href="34245b2b0b"><code>34245b2</code></a>
Update Readme</li>
<li>Additional commits viewable in <a
href="https://github.com/jni-rs/jni-sys/compare/v0.3.0...v0.3.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jni-sys&package-manager=cargo&previous-version=0.3.0&new-version=0.3.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-24 00:30:27 +00:00
Jayanta Pradhan
29fb865a00 script: Pass down &mut JSContext to CookieStore methods (#43584)
Move CookieStore methods from CanGc to &mut JSContext.

Testing:  Just refactor.
Fixes: Part of #42638

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-23 23:44:37 +00:00
Jayanta Pradhan
166a9ddd85 script: Pass down &mut JSContext to CSSGroupingRule methods (#43579)
Move `CSSGroupingRule` methods from `CanGc` to `&mut JSContext`.

Testing:  Just refactor.
Fixes: Part of  #42638

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-23 21:19:28 +00:00
webbeef
7bdc40a1f6 bluetooth: unbreak native-bluetooth builds (#43581)
Fixes build errors when the `native-bluetooth` feature is enable:

```
error[E0308]: mismatched types
  --> components/bluetooth/bluetooth.rs:91:9
   |
90 |     pub async fn is_connected(&self) -> Result<bool, Box<dyn Error>> {
   |                                         ---------------------------- expected `Result<bool, Box<(dyn StdError + 'static)>>` because of return type
91 |         self.peripheral.is_connected().await.map_err(Box::new)
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<bool, Box<dyn Error>>`, found `Result<bool, Box<Error>>`
   |
   = note: expected enum `Result<_, Box<(dyn StdError + 'static)>>`
              found enum `Result<_, Box<btleplug::Error>>`
   = help: `btleplug::Error` implements `Error` so you could box the found value and coerce it to the trait object `Box<dyn Error>`, you will have to change the expected type as well
help: use `?` to coerce and return an appropriate `Err`, and wrap the resulting value in `Ok` so the expression remains of type `Result`
   |
91 |         Ok(self.peripheral.is_connected().await.map_err(Box::new)?)
   |         +++                                                      ++

```

Testing: `./mach build --features native-bluetooth` doesn't fail.

Signed-off-by: webbeef <me@webbeef.org>
2026-03-23 21:18:49 +00:00
Oriol Brufau
41a50106eb layout: Stretch replaced elements with aspect ratio but no natural sizes (#42666)
Instead of using the default object width of 300px, use the inline-axis
stretch size, or zero when computing the intrinsic contribution.

Note browsers don't completely agree in the details of how to do this.
This implements a behavior very similar to Blink, but without having
different behaviors for min/max-content depending on which property they
are used (which doesn't make much sense to me).

The biggest part of the patch is for block-level boxes that establish an
independent formatting context and need to avoid overlapping floats. In
that case we may need to try laying out multiple times, varying the
stretch size. Previously the code assumed that this wouldn't affect the
intrinsic inline sizes, but now we have this dependency, so the logic
had to be refactored.

Testing: Some tests pass. One test results in an error, but that happens
in all browsers.
Fixes: #38653

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-23 19:30:53 +00:00
Jonathan Schwender
64afd05d11 servoshell: Remove --userscripts option (#43573)
In #43182 it was [suggested to remove the
userscripts](https://github.com/servo/servo/pull/43182#issuecomment-4048383093)
option, since embedders can use the (new) `UserContentManager` API
instead.

Testing: This removes a commandline flag from servoshell. Existing tests
passing is sufficient.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-23 18:39:57 +00:00
eri
0ee2b03b40 devtools: Remove double optional from WebIDL (#43567)
Some values of the WebIDL were wrapped two types in nullable (from not
having `required` and having a `?`). Simplify that so we don't get
`Option<Option<...>>`.

Testing: Existing tests
Part of: #36027 
Depends on: #43566

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-23 18:15:49 +00:00
Vinayak Sharma
d47711e849 layout: Fix static position of abspos nested within a block-in-inline (#43084)
Fixes incorrect static positioning of absolutely positioned elements
nested within a block that has `margin-top` inside an inline element.
Added two lines of code to `AnonymousBlockBox::layout_into_line_items`
in components/layout/flow/inline/mod.rs:
- We snapshot the current positioning_context_length before laying out
the block.
- We call `adjust_static_position_of_hoisted_fragments` on the
positioning_context after the block fragment is placed by the state.

Testing: 
Tested the fix using the manual reproduction HTML provided in the issue,
Also ran the existing WPT tests in `tests/wpt/tests/css/css-position/`
to ensure there are no regressions.


Fixes: #42890

---------

Signed-off-by: vinayak sharma <vinayaks0111@gmail.com>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-23 17:27:44 +00:00
webbeef
ae78fbb03a bluetooth: switch to btleplug (#43529)
btleplug depends on tokio so we use a bridge thread to interface with
Servo thread based messaging.
We keep feature parity except for BtleplugGATTService::get_includes()
that will require upstream implementation.
In terms of OS support, I verified on Linux and MacOS. Android is
untested, but btleplug claims support.


Testing: No test failures, green try run at
https://github.com/webbeef/servo/actions/runs/23390850825
Fixes: #43254.

Signed-off-by: webbeef <me@webbeef.org>
2026-03-23 17:01:24 +00:00
Abubakar Abdulazeez Usman
c3723affc2 script: Pass &mut JSContext to CSSStyleRule::Style (#43569)
Move `CSSStyleRule::Style` from `CanGc` to `&mut JSContext`. Also fix
the caller in `devtools.rs` to pass `cx` directly.

Testing: Refactoring, It compiles.
Fixes: Part of #42638

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-03-23 17:00:23 +00:00
Simon Wülker
1b2a1d8da4 script: Align URL::CanParse and URL::Parse more directly with the specification (#43576)
Testing: This should not change existing behaviour and these methods are
covered by existing tests

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-23 16:52:21 +00:00
Asset Malik
9efe13e003 ci: Track RAM usage in scenarios tests (#43313)
Plotting RAM usage on `etc/ci/scenario` OHOS scenarios

I've did a class that can be optionally added into scenarios to records
RAM usage on ohos platform by using the `hdc` tool to checkout
`/proc/{pid}/status` and can store the recorded data into `.csv` or plot
as `.png`

The tool can also be used on its own 
```
UV_PROJECT=etc/ci/scenario uv run etc/ci/scenario/memory_usage_plotter.py -h 
```

Testing: 
```
UV_PROJECT=etc/ci/scenario uv run etc/ci/scenario/servo_test_slide.py
```

Example output:
<img width="1500" height="750" alt="memory_usage_plotter"
src="https://github.com/user-attachments/assets/27e85787-51df-4c6b-8ad7-c6fcfc380304"
/>

---------

Signed-off-by: jane <5373400+janeoa@users.noreply.github.com>
Signed-off-by: janeoa <5373400+janeoa@users.noreply.github.com>
2026-03-23 15:47:36 +00:00
eri
de4a79facf devtools: Rename PropertyPreview to PropertyDescriptor (#43566)
Rename `PropertyPreview` to `PropertyDescriptor`

Testing: Internal refactor
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-23 15:27:44 +00:00
Domenico Rizzo
95aa798b2f webgl: Remove manual Drop implementation for WebGLRenderbuffer (#43563)
Moves the cleanup logic to a separate helper struct to comply with the
prohibition of manual `Drop` implementations for DOM types.

Testing: WebGL tests just cover its cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-23 14:47:13 +00:00
Sharan Poojari
20e11deb96 devtools: Handle service worker eval (#43492)
This completes the service-worker side while addressing earlier panic
concerns by avoiding unconditional unwrap/expect paths.

Testing: No dedicated tests were added for this change.

Fixes: #43317

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-23 14:18:25 +00:00
Sharan Poojari
34583dc66f script: Use encoding-parse algorithm when handling iframe and Document URL attributes (#43572)
This PR fixes iframe URL parsing to use document encoding, so non-UTF-8
pages reflect iframe.src correctly, and adds a WPT test for it.

Testing: added Test file 
Fixes: #43559

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-23 13:48:11 +00:00
Eyüp Can Akman
1422d2a850 script: Add error messages in HMAC WebCrypto operations (#43560)
Replace all `Error::*(None)` instances in `hmac_operation.rs` with
descriptive error messages, covering sign, verify, generate_key,
import_key, and export_key operations.

Testing: Existing WPT tests cover all HMAC operations and check error
types, not message strings. No behavioral change.
Fixes: Part of #40756

---------

Signed-off-by: Eyüp Can Akman <eyupcanakman@gmail.com>
2026-03-23 13:29:17 +00:00
Abubakar Abdulazeez Usman
dae0edb5b9 script: Pass &mut JSContext to CSSKeyframesRule methods (#43571)
Move `CSSKeyframesRule` methods (`CssRules`, `AppendRule`, `DeleteRule`,
`FindRule`) from `CanGc` to `&mut JSContext`.

Testing: It compiles.
Fixes: Part of #42638

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-03-23 12:19:44 +00:00
Abubakar Abdulazeez Usman
f78ca1cef4 script: Pass &mut JSContext to CSSNestedDeclarations::Style (#43570)
Move `CSSNestedDeclarations::Style` from `CanGc` to `&mut JSContext`.

Testing: It compiles.
Fixes: Part of #42638

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-03-23 11:37:34 +00:00
Mukilan Thiyagarajan
351f3d7849 embedder_traits: Add more documentation to public API. (#43564)
Testing: No code changes, so testing is not required.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-03-23 11:07:55 +00:00
Shubham Gupta
70e1547771 script: Suppress unused import warning related to gamepad in navigator.rs (#43513)
Just adds some imports under gamepad cfg flag.

Testing: Successful compilation is enough to verify the change.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-23 08:41:35 +00:00
rtjkro
afa4b524ab font: Consider lang attribute when shaping (#43447)
Fonts: Added `language` field in the struct `ShapingOptions` so Harfbuzz
can also consider language when shaping glyphs.

Testing: Existing WPT. Most recent try run:
[link](https://github.com/RichardTjokroutomo/servo/actions/runs/23334049878)

2 new passes, 5 new fails.

Failures:
- `/css/css-text-decor/text-emphasis-punctuation-2.html` should be a
false positive since `text-emphasis` shorthand hasn't been supported on
stylo yet.
- Not quite sure about this, but
`/css/css-text/text-spacing-trim/text-spacing-trim-quote-001.html?class=halt,htb&amp;lang=ja`
tests `text-spacing-trim` default behavior on `JA` texts. Since this
property is not defined in Stylo, I believe that this property's
behavior (including default) hasn't been considered in Servo. So Servo
previously passing the test should be a false positive. As a side note,
this test also fails on Firefox.
- `/html/canvas/element/manual/text/canvas.2d.lang.dynamic.html`,
`/html/canvas/element/manual/text/canvas.2d.lang.html`,
`/html/canvas/element/manual/text/canvas.2d.lang.inherit.disconnected.canvas.html`
fail because canvas' experimental [`lang`
attribute](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lang)
hasn't been supported yet.

credits to @mrobinson for figuring out the reason for last 3 failing WPT
tests!

Fixes: #41825

---------

Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-23 08:39:53 +00:00
mishop-15
7a4d3e636b script: Migrate from utf_8 crate to encoding_rs in EventSource (#42179)
Migrate from `utf_8` to `encoding_rs` in `EventSource`. The `utf_8`
crate is archived and unmaintained. We already use `encoding_rs`, so it
makes sense to switch.

Testing: A new WPT test
(`tests/wpt/meta/eventsource/format-bom.any.js.ini`) is now passing.
Fixes: #42094.

Signed-off-by: mishop-15 <tanaybhutada03@gmail.com>
2026-03-23 08:30:49 +00:00
Euclid Ye
cae0752676 cargo: Rename workspace-local library starting with b to servo_* (#43552)
Follow up of #43526. This addresses Nico's comment:
https://github.com/servo/servo/pull/43526#issuecomment-4104953308

- `bluetooth_traits` -> `servo_bluetooth_traits`
- `base` -> `servo_base`
- `bluetooth` -> `servo_bluetooth`
- `background_hang_monitor` -> `servo_background_hang_monitor`

Testing: This should not change any behaviour.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-23 08:26:49 +00:00
Narfinger
cf0676fd26 net: Close the control stream of RequestBody to fix resource leak (#42474)
For a network fetch, the body chunk request sender keeps being alive as
long as the request is alive. This leads to a big resource leak as this
keeps a couple of IpcChannels and SharedMemory around. These would only
be cleaned up when the Gc cleans up the Request which can be too long
for tight fetch loops.

This gives a method to destroy the channel at the end of the complete
fetch (keeping in mind redirects). Currently we have to do this by hand
as a simple guard structure did not work correctly.

Additionally, this renames `RequestBody::take_stream` to the correct
clone_stream and cleans up some smaller names and documentation.

Testing: WPT should catch anything that is not spec conform.
Fixes: https://github.com/servo/servo/issues/41202

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-23 08:26:00 +00:00
Euclid Ye
ca898ea99c paint: Propogate input event dispatch failure to Servo to resolve deadlock (#43381)
`dispatch_input_event_with_hit_testing` already returns a `bool` to
indicate whether the dispatch failed.
However, for some reason this was used nowhere. When it fails, embedder
is not informed.
This is fine for embedder as right now it only handles keyboard
shortcuts for headed window,
but a disaster for WebDriver as it is synchornously waiting for the
feedback.

Testing: Several tests no longer CRASH.
Fixes: #43379

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-23 06:46:21 +00:00
Kingsley Yung
23f78a06c7 script: Implement TurboSHAKE algorithm in WebCrypto (#43551)
Implement TurboSHAKE algorithm in our WebCrypto API. This includes a
WebIDL dictionary `TurboSHAKE` and the "digest" operation of TurboSHAKE.

Specification: https://wicg.github.io/webcrypto-modern-algos/#turboshake
Testing: Pass TurboSHAKE-related WPT tests.
Fixes: Part of #40687

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-23 06:22:46 +00:00
Josh Matthews
fa5e7bffdd wpt: Add test for form action encoding. (#43554)
Verified that this test fails before #43521 and passes after it, and
matches behaviour of other browsers.

Testing: Adds a new test.
Part of #43507

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-23 06:21:08 +00:00
Tim van der Lippe
01a29209b2 script: Implement support for X-Frame-Options (#43539)
We now check for this header and corresponding logic. The WPT tests
mostly pass, but rely on the `contentDocument` of the iframe to be
`null`. This is not something we did before, which means that iframes
were able to access the contents of error pages.

Instead, we now mark the document as internal with an opaque origin
according to the spec [1]. We shouldn't do this post-fact, but is
required since we first need to construct the document and enter its
realm, before we determine that it is an invalid document.

Fixes #16103

[1]:
https://html.spec.whatwg.org/multipage/document-lifecycle.html#navigate-ua-inline

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-23 06:14:27 +00:00
Shubham Gupta
047e3210d7 layout: Consider iframe for first-paint (#42149)
`iframe` should be considered for `first-paint`. 

TODO of: #42975
Synced: https://github.com/web-platform-tests/wpt/pull/58243
Refer for some history: #42498

Testing: 

- `wpt/paint-timing/first-paint-only/child-painting-first-image.html`
- `wpt/paint-timing/first-paint-only/sibling-painting-first-image.html`

Fixes: #42455

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-23 06:07:09 +00:00
Jayanta Pradhan
ebfdaff63f script: Use encoding-parsing algorithm in XMLHttpRequest::Open (#43537)
Add a new method to components/script/dom/globalscope.rs which checks if
the global is a Window , then uses
window.Document().encoding_parse_a_url(..) if so. For non-Window
globals, just use the existing logic of getting the api_base_url() value
and calling join(..) on it.

Testing: Existing WPTs.
Fixes: #43509

---------

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-23 03:18:24 +00:00
Abubakar Abdulazeez Usman
6c7fcd41bd script: Pass &mut JSContext to CSSKeyframeRule::Style (#43549)
Move `CSSKeyframeRule::Style` from `CanGc` to `&mut JSContext`.

Testing: Just a refactor, Existing tests suffice.
Fixes: Part of #42638

Signed-off-by: arabson99 <arabiusman99@gmail.com>
2026-03-23 02:54:31 +00:00
dependabot[bot]
d44f2da4e2 build: bump arc-swap from 1.8.2 to 1.9.0 (#43548)
Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.8.2 to
1.9.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md">arc-swap's
changelog</a>.</em></p>
<blockquote>
<h1>1.9.0</h1>
<ul>
<li>Promote certain orderings to SeqCst. Original proofs based on wrong
reading of
standard :-(. Expect some performance degradation (<a
href="https://redirect.github.com/vorner/arc-swap/issues/198">#198</a>,
<a
href="https://redirect.github.com/vorner/arc-swap/issues/200">#200</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="873fbf2e72"><code>873fbf2</code></a>
Test file for the <a
href="https://redirect.github.com/vorner/arc-swap/issues/198">#198</a></li>
<li><a
href="ffb2808f59"><code>ffb2808</code></a>
Release of 1.9.0</li>
<li><a
href="9d87160c32"><code>9d87160</code></a>
Promote several Orderings to SeqCst</li>
<li>See full diff in <a
href="https://github.com/vorner/arc-swap/compare/v1.8.2...v1.9.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arc-swap&package-manager=cargo&previous-version=1.8.2&new-version=1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-23 00:52:32 +00:00
dependabot[bot]
86e60b744c build: bump the tungstenite-related group with 2 updates (#43546)
Bumps the tungstenite-related group with 2 updates:
[async-tungstenite](https://github.com/sdroege/async-tungstenite) and
[tungstenite](https://github.com/snapview/tungstenite-rs).

Updates `async-tungstenite` from 0.33.0 to 0.34.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sdroege/async-tungstenite/blob/main/CHANGELOG.md">async-tungstenite's
changelog</a>.</em></p>
<blockquote>
<h2>[0.34.0] - 2026-03-20</h2>
<h3>Changed</h3>
<ul>
<li>Update to tungstenite 0.29.</li>
<li>Update to async-native-tls 0.6.</li>
</ul>
<h3>Added</h3>
<ul>
<li>smol runtime support including smol-native-tls.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f37ab0a072"><code>f37ab0a</code></a>
Update CHANGELOG.md for 0.34.0</li>
<li><a
href="b62b375515"><code>b62b375</code></a>
Update version to 0.34.0</li>
<li><a
href="e7612f41f5"><code>e7612f4</code></a>
Update to async-native-tls 0.6</li>
<li><a
href="2b81693011"><code>2b81693</code></a>
Update dev-dependencies.</li>
<li><a
href="c6bdd383f3"><code>c6bdd38</code></a>
Update tungstenite to 0.29.</li>
<li><a
href="f88c3ef099"><code>f88c3ef</code></a>
ci: Add smol-runtime tests</li>
<li><a
href="4e760cdd20"><code>4e760cd</code></a>
examples: Add smol echo example</li>
<li><a
href="da5e725dc9"><code>da5e725</code></a>
runtimes: Add smol runtime support</li>
<li>See full diff in <a
href="https://github.com/sdroege/async-tungstenite/compare/0.33.0...0.34.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `tungstenite` from 0.28.0 to 0.29.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/snapview/tungstenite-rs/blob/master/CHANGELOG.md">tungstenite's
changelog</a>.</em></p>
<blockquote>
<h1>0.29.0</h1>
<ul>
<li>Update MSRV to <code>1.71</code> due to <code>syn</code> (the
dependency of <code>thiserror</code>) requiring it.</li>
<li>Allow users to send headers with non-visible ASCII values (as long
as they constitute a correct <code>HeaderValue</code>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c2921718b7"><code>c292171</code></a>
Suppress clippy warnings in tests/</li>
<li><a
href="0938f1c79b"><code>0938f1c</code></a>
Bump version</li>
<li><a
href="4a457f65d9"><code>4a457f6</code></a>
Add missing word to the comment (<a
href="https://redirect.github.com/snapview/tungstenite-rs/issues/521">#521</a>)</li>
<li><a
href="aef32231f5"><code>aef3223</code></a>
Fix grammar in <code>WebSocketContext::from_partially_read</code> docs
(<a
href="https://redirect.github.com/snapview/tungstenite-rs/issues/534">#534</a>)</li>
<li><a
href="ad6539bcb9"><code>ad6539b</code></a>
Inline the utf-8 crate (<a
href="https://redirect.github.com/snapview/tungstenite-rs/issues/536">#536</a>)</li>
<li><a
href="df722bd668"><code>df722bd</code></a>
Update the CI to accomodate for the new MSRV</li>
<li><a
href="9833bdec33"><code>9833bde</code></a>
Bump MSRV</li>
<li><a
href="59bee6404f"><code>59bee64</code></a>
Fix formatting in CHANGELOG.md</li>
<li><a
href="3f2f222cd8"><code>3f2f222</code></a>
Update CHANGELOG.md</li>
<li><a
href="84eaba964d"><code>84eaba9</code></a>
Fixing issue with non-ASCII header values</li>
<li>Additional commits viewable in <a
href="https://github.com/snapview/tungstenite-rs/compare/v0.28.0...v0.29.0">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-23 00:23:01 +00:00
Charlie Tonneslan
f655eee527 Fix typo: occured -> occurred in error comments (#43545)
Two comment typos in indexeddb.rs and generic_channelset.rs. Skipped the
`independant` function name in layout.rs since renaming it would be
breaking.

Signed-off-by: Charlie Tonneslan <cst0520@gmail.com>
2026-03-22 22:36:55 +00:00
Philipp Albrecht
2f1b7f0f84 Pass &mut JSContext (#43543)
This is follow-up of #41459.

We replace some of these:

```rust
let mut cx = unsafe { script_bindings::script_runtime::temp_cx() };
```

..by passing a `cx: &mut JSContext` instead.

---

Testing: existing WPT tests  
Fixes: #43453

Signed-off-by: pylbrecht <pylbrecht@mailbox.org>
2026-03-22 20:58:05 +00:00
Domenico Rizzo
1e514bcfe9 webgl: Remove manual Drop implementation for WebGLQuery (#43544)
Moves the cleanup logic to a separate helper struct to comply with the
prohibition of manual `Drop` implementations for DOM types.

Testing: WebGL tests just cover its parts
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-22 20:33:35 +00:00
Kelechi Ebiri
a63a00936f remove referrer field from ScriptFetchOptions (#43532)
Remove `referrer` field from `ScriptFetchOptions` and pass it directly
to `script_fetch_request`.

This keeps ScriptFetchOptions aligned with the HTML 
fixes #42875

---------

Signed-off-by: Kelechi Ebiri <ebiritg@gmail.com>
2026-03-22 16:41:29 +00:00
Sharan Poojari
9cbdf9d8b1 Gate picker on trusted click (#43485)
Fixes: #43360 
This PR makes `<select>` behave like other browsers by only opening the
picker for trusted user clicks, and adds a regression test to ensure
synthetic `.click()/dispatchEvent('click')` won’t open it.

---------

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-22 12:18:20 +00:00
Euclid Ye
317e5ee7de cargo: Rename Workspace-local dependencies starting with b to servo-* (#43526)
Also reorders alphabetically for the corresponding user .toml.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-22 11:19:21 +00:00
Tim van der Lippe
7b9b75c545 script: Fix current URL for CSP requests (#43438)
The CSP crate was incorrectly using the request URL for both checking if
policies were matching, as well as reporting that URL. However, the CSP
specification uses the current URL to check for policies and the url for
reporting a violation.

Therefore, set the new current_url field for these requests, leaving the
ws scheme URLs as a special case. We also should take redirects into
account for navigations (which is only relevant for forms), but LoadData
currently has no notion of keeping track of that.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-22 11:12:22 +00:00
Gae24
5152632f04 script_bindings: Pass &mut JSContext to CustomElementReaction::invoke (#43535)
Pass `&mut JSContext` to `CustomElementReaction::invoke` and
`upgrade_element` algorithm.

Testing: A successful build is enough
Part of #40600

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-22 11:11:52 +00:00
Kingsley Yung
dcca7b2030 script: Rename length parameter of cSHAKE to outputLength (#43533)
Modern Algorithms in WebCrypto API specification was updated to rename
the `length` parameter of the `CShakeParams` dictionary to
`outputLength`. We update our implementation accordingly.

Specification update:
41434899e8
WPT update:
0acea989ac

The final step of the "digest" operation of cSHAKE was also updated to
clarify that it outputs a byte sequence, rather than a bit sequence.
This matches our current implementation. No change in our implementation
is needed. The specification text in our code is updated.

Specification update:
5dd19e3a9f

Testing: Pass updated WPT tests.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-22 06:28:53 +00:00
Jayanta Pradhan
5ba6636555 script: add navigation and traversal task source (#43523)
script: Add navigation and traversal task source

Testing: This shouldn't be something that's observable through tests, so
a successful build is enough to verify the change.
Fixes: #43497

---------

Signed-off-by: Jayanta Pradhan <pradhanjayanta91@gmail.com>
2026-03-22 05:39:42 +00:00
Servo WPT Sync
3971ba4164 Sync WPT with upstream (22-03-2026) (#43531)
Automated downstream sync of changes from upstream as of 22-03-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-03-22 01:33:18 +00:00
Gae24
1626450063 script: Propagate &mut JSContext from GlobalScope::start_message_port to stream code (#43525)
Pass `&mut JSContext` to more stream related code.

Testing: A successful build is enough.
Part of #42347

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-21 21:07:47 +00:00
Sharan Poojari
5af76f6a23 Use encoding-parse for form action (#43521)
Parse form action URLs using the document's encoding-aware URL parser.

Testing: Verified with the WPT form-action tests `./mach test-wpt
tests/wpt/tests/html/semantics/forms/the-form-element`, all relevant
tests passed.

Fixes: #43507

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-21 16:18:40 +00:00
Shubham Gupta
ea8d93d740 script: Remove unused LayoutDom from gpucanvascontext.rs (#43514)
Remove unused `LayoutDom`

Testing: Successful Compilation is enough to verify the change.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-21 15:47:00 +00:00
Josh Matthews
5f247392be script: Move navigation origin logic into a method with spec steps. (#43491)
This pulls one bit of navigation logic out into a method that is easier
to cross-reference against the spec, and drops a bunch of custom logic
that is better served by the existing LoadOrigin infrastructure.

Testing: Existing WPT coverage is sufficient.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-21 12:26:35 +00:00
Shubham Gupta
bcff95fd32 servo: No longer call show_webview_and_wait_for_rendering_to_be_ready in PerformancePaintTiming unit tests (#43495)
Instead of calling `show_webview_and_wait_for_rendering_to_be_ready`,
run `requestAnimationFrame` on JavaScript.

1. Because `show_webview_and_wait_for_rendering_to_be_ready` changes the
`backgroundColor` which deceives the whole purpose of verifying the
`first-paint`.
2. Running `requestAnimationFrame` requests browser to update an
animation before the next repaint.


Testing: `servo/tests/performance_paint_timing.rs`
Fixes: #43484

Test | Run Summary
-|-
test_default_pref_with_unset_background |<img width="1280" height="141"
alt="Screenshot 2026-03-21 at 5 33 13 PM"
src="https://github.com/user-attachments/assets/481b635d-aa4b-4f62-beb7-02f77a256a50"
/>
test_non_default_pref_with_unset_background | <img width="1280"
height="163" alt="Screenshot 2026-03-21 at 5 34 43 PM"
src="https://github.com/user-attachments/assets/2db5cd43-af54-4241-8fd5-ba781c73469c"
/>
test_default_pref_with_transparent_background | <img width="1280"
height="163" alt="Screenshot 2026-03-21 at 5 35 23 PM"
src="https://github.com/user-attachments/assets/6e7d9efb-352a-4d39-894d-37681b14eb11"
/>
test_non_default_pref_with_transparent_background | <img width="1280"
height="163" alt="Screenshot 2026-03-21 at 5 37 13 PM"
src="https://github.com/user-attachments/assets/64975e7b-8e67-4ce7-af3e-6977f4c123ac"
/>
test_default_pref_with_background | <img width="1280" height="137"
alt="Screenshot 2026-03-21 at 5 37 54 PM"
src="https://github.com/user-attachments/assets/8684a20d-6695-4977-adee-7f0c436dee2c"
/>
test_non_default_pref_with_background | <img width="1280" height="137"
alt="Screenshot 2026-03-21 at 5 38 30 PM"
src="https://github.com/user-attachments/assets/781f5f70-72a7-40a2-8ae6-11acf5eb8abf"
/>
test_non_default_pref_with_same_background | <img width="1280"
height="164" alt="Screenshot 2026-03-21 at 5 39 05 PM"
src="https://github.com/user-attachments/assets/07012ba4-c2a2-41fe-be04-1b625abbfb1e"
/>

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-21 12:22:22 +00:00
Martin Robinson
ce1d27337a layout: Improve the rendering of the <marquee> element (#43520)
The change makes it so that `<marquee>` elements render more like the do
in Chrome. The text will not animate, but likewise it does not wrap and
the element will stretch to fill the inline space in its containing
block.

Testing: This change adds a Servo-specific appearance test. This
essentially
just replicates the user agent style of `<marquee>`. It's quite
difficult to
write tests for appearance. Some WPT tests start to pass, but

`/html/obsolete/requirements-for-implementations/the-marquee-element-0/marquee-min-intrinsic-size.html`
starts to fail. This is due to the fact that though the `<marquee>`
style
is improved, we do not yet correctly handle the minimum intrinsic size
properly.
Fixes: #43517

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-21 12:07:20 +00:00
Luke Warlow
09b0cfce8e script: Add longdesc reflection to HTMLIFrameElement and HTMLFrameElement (#43518)
script: Add longdesc reflection to HTMLIFrameElement and
HTMLFrameElement

Also corrects the reflection for HTMLImageElement to use USVString.

Testing: Covered by WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-21 11:46:16 +00:00
Jerens Lensun
4199e050d9 script: add a check for a valid key path on idb object store (#42451)
Add a check for a valid key path when create index on idb object store

Testing: `./mach test-wpt
tests/wpt/tests/IndexedDB/keypath_invalid.any.js`
Fixes: #42434

---------

Signed-off-by: Jerens Lensun <jerensslensun@gmail.com>
2026-03-21 11:44:23 +00:00
Kingsley Yung
c23d888863 script: Rework on dictionary conversion in SubtleCrypto (#43519)
Our existing `SubtleCrypto::normalize_algorithm` implementation converts
the input dictionary from a JavaScript object to a Rust struct twice.
The first conversion (Step 2 to 4) under WebIDL dictionary `Algorithm`
is for retrieving the `name` property to determine the desired
dictionary type, and the second conversion (Step 9 to 10) is for
retrieving the whole dictionary of desired WebIDL dictionary type.

If the `name` property of the input dictionary is a JavaScript getter
method, the getter will be triggered twice and leads to some undesired
side effects. For example, WPT contains some tests that the `name`
property is a getter method which transfers a buffer source. Triggering
it twice leads to a TypeError of accessing detached buffer at the second
time. Those tests then fail.


5bb4f9f103/tests/wpt/tests/WebCryptoAPI/digest/cshake.tentative.https.any.js (L215-L219)

This patch includes two changes to fix this problem.

First, the algorithm name retrieved in Step 2 to 4 is now passed to
`Op::RegisteredAlgorithm::from_object` in Step 9 to 10 so that we don't
need to read the `name` property and trigger the getter method again.

Second, we no longer use `dictionary_from_jsval` for converting the
dictionary, since it reads the whole dictionary including the `name`
property, triggering the getter method again. Instead, we add some
custom helper functions (`get_optional_parameter`,
`get_required_parameter`, `get_optional_parameter_in_box`,
`get_required_parameter_in_box`, `get_optional_buffer_source`,
`get_required_buffer_source`) to manually read properties other the
`name` property one by one, in a way that matches the specification.

Hence, each property of the input dictionary will only be read once, to
avoid this issue.

Testing: Pass some WPT tests that were expected to fail.

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-21 11:02:58 +00:00
Euclid Ye
e573557554 cargo: Use kebab case consistenly for those already starting with servo- (#43516)
Continues what @jschwe has been doing.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-21 10:57:22 +00:00
Luke Warlow
ac1c86fea7 script: Add usemap reflection to HTMLInputElement and HTMLObjectElement (#43502)
script: Add usemap reflection to HTMLInputElement and HTMLObjectElement

Testing: Covered by WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-21 09:54:32 +00:00
Luke Warlow
f06e67c031 script: Add hreflang, type and charset reflection to HTMLAnchorElement (#43499)
script: Add hreflang, type and charset reflection to HTMLAnchorElement

Testing: Covered by WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-21 08:23:54 +00:00
Luke Warlow
74640b7719 script: Add nohref reflection to HTMLAreaElement (#43500)
script: Add nohref reflection to HTMLAreaElement

Testing: Covered by WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-21 08:00:48 +00:00
Rogerkoranteng
cfaaad4b66 script: Fix panic in crypto.getRandomValues when random generation fails (#43501)
## Summary

Fixes #43328

When `OsRng.try_fill_bytes` fails in `crypto.getRandomValues`, the code
previously returned `Error::JSFailed`. This error type asserts that a
JavaScript exception is already pending on the context — but `OsRng` is
a Rust library that never sets a JS exception, causing Servo to panic
with `assertion failed: JS_IsExceptionPending(*cx)`.

This PR replaces `Error::JSFailed` with `Error::Operation`, which throws
a proper `OperationError` DOMException instead of crashing. This is
consistent with how Servo's SubtleCrypto handles the same scenario
(e.g., `ed25519_operation.rs`).

## Testing

Tested by unconditionally taking the error branch (`if true`):

**Before (panic):**

<img width="960" alt="Screenshot From 2026-03-20 23-42-35"
src="https://github.com/user-attachments/assets/f15150ce-aa26-46c9-a381-985e6d850904"
/>

---


**After (fix):**

<img width="960" alt="Screenshot From 2026-03-20 23-43-05"
src="https://github.com/user-attachments/assets/99490b06-aeaa-4dcc-b10a-56336efad87d"
/>

Signed-off-by: rogerkorantenng <rogerkorantenng@gmail.com>
2026-03-21 07:18:04 +00:00
Euclid Ye
f254841246 base: Move generic_channel.rs into subfolder; Micro-optimize format! (#43503)
Its siblings already live in that folder. Should not leave it alone.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-21 03:57:22 +00:00
Euclid Ye
096f90f1d3 ci: Unblock ci by upgrade rustls-webpki which fixes GHSA-pwjx-qhcg-rvj4 (#43504)
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-21 03:03:09 +00:00
Shubham Gupta
5c4cc11172 script: Remove unused ImageKey from gpucanvascontext.rs (#43493)
Remove unused ImageKey

Testing: Successful Compilation is enough to verify the change.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-20 18:51:55 +00:00
Simon Wülker
3039f1a70b style: Don't skip animations that have no keyframes (#43454)
Companion PR for https://github.com/servo/stylo/pull/336

Testing: This fixes a bunch of timeouts

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-20 18:44:11 +00:00
Josh Matthews
c166fec94a script: Do not record associated memory for Promises, and release associated memory for WindowProxy. (#43487)
This fixes two assertions observed in Servo using debug mozjs builds:
* `Assertion failure: !IsInsideNursery(obj)` for every promise object
reflected into Rust code
* `Missing calls to JS::RemoveAssociatedMemory` when shutting down the
browser

Testing: Verified locally that WPT tests can run to completion in debug
mozjs builds, but we don't run those on CI.
Fixes: #43486

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-20 17:08:32 +00:00
Tim van der Lippe
8f699b1f17 script: Pass &mut JSContext to submit_timing_data (#43479)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 15:31:46 +00:00
Tim van der Lippe
0336c8084b script: Set correct referrer for CSP violations (#43483)
The spec has explicit steps for it, where we were calling a different
algorithm before. This passes more assertions in
`content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html`
but since line numbers aren't correct, the test isn't fully passing yet.

Testing: WPT

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 15:05:58 +00:00
Tim van der Lippe
1933769eb2 script: Pass &mut JSContext to devtools (#43480)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 13:53:27 +00:00
Abdelrahman Hossam
76e1a09082 script: Implement the scrollend event (#38773)
This change implements the `scrollend` event. Since there is no support
for asynchronous / smooth scrolling, with this change all `scroll`
events simply send a `scrollend` event in a way that looks a bit like
what the specification says. Note that there are currently some serious
issues (w3c/csswg-drafts#8396) with specification, so things are still a
bit weird overall.

In addition, this organizes and reduces duplication in some of the
existing scroll event code.

Testing: This causes some WPT tests to start passing or to stop timing
out.

---------

Signed-off-by: abdelrahman1234567 <abdelrahman.hossameldin.awadalla@huawei.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: abdelrahman1234567 <abdelrahman.hossameldin.awadalla@huawei.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-20 13:50:59 +00:00
Gae24
74ac696b69 config: add a preference to allow fetching modulepreload descendants (#43353)
As suggested
[here](https://github.com/servo/servo/pull/42964#issuecomment-4073998452),
adds a preference to enable fetching modulepreload descendants, turned
off by default.

Testing: A successful build is enough.

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-20 12:56:29 +00:00
Tim van der Lippe
dc9e442b17 script: Pass &mut JSContext to Location (#43481)
Part of #42638

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 12:54:38 +00:00
Narfinger
ffae45327c script: Use UnrootedSimpleNodeIterator in delete_cell_or_row (#43476)
This uses UnrootedSimpleNodeIterator in a couple of places, namely
- delete_cell_or_row
- children_changed
- move_fn

More importantly this implements upcast and downcast for `UnrootedDom`.
These methods work the same as the DomRoot methods except that they
carry the no_gc and, hence,
keep the lifetime.

Testing: WPT tests will see if this breaks something.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-20 12:52:17 +00:00
Narfinger
7f8f9834c8 script: Fix borrow hazard in script_modules (#43470)
Fix the borrow hazard by simply taking the option and inserting it
again.

Testing: This is a refactor and crown does not complain so it should be
fine.
Fixes: https://github.com/servo/servo/issues/43377

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-03-20 10:57:15 +00:00
Tim van der Lippe
3d4cfa4718 net: Remove process_request_eof (#43477)
This is no longer present in the spec. Instead, the
`process_request_body` is the new way. These two
methods were called right after each other and there was only 1
implementation in `htmlvideoelement`. That implementation is now moved
to `process_request_body` and hence we can remove the unnecessary
method.

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 10:51:33 +00:00
Gae24
e0fc0174fa script: Propagate &mut JSContext inside global_scope_script_execution.rs (#43473)
Pass `&mut JSContext` to `HTMLScriptElement::execute`, propagate it
inside `global_scope_script_execution.rs` and then switch to wrappers2
bindings.

Testing: A successful build is enough.
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-20 10:51:33 +00:00
Nishant-k-sagar
2ca02dfa4c cleanup: Remove unused GlobalScope argument from call_pull_algorithm (#43471)
This PR involves cleaning up the unused GlobalScope argument in
UnderlyingSourceContainer::call_pull_algorithm. This PR involves changes
across three files. Only removing the unused GlobalScope and suppressed
reference with underscore prefix.

Testing: This PR involves cleanup of the unused GlobalScope argument in
UnderlyingSourceContainer::call_pull_algorithm. The argument was
suppressed using underscore earlier. Thus it was not involved in any
runtime instances. Thus this PR does not require additional testing. I
was able to successfully build the repo after changes. There is no other
dependency of removed variable, thus no impact outside.

Fixes: #43460

Signed-off-by: Nishant-k-sagar <147799872+Nishant-k-sagar@users.noreply.github.com>
2026-03-20 10:13:06 +00:00
atbrakhi
2d3900317a devtools: Implement initial support for ArrayPreviewer (#43456)
Previously arrays were falling back to Object previewer which was
showing indices as properties- which was not correct. This PR implements
dedicated `ArrayPreviewer` that follows Firefox's `ArrayLike` pattern.
Currently array preview support only length display, it does not
implement showing array items yet.

Now(Correct and follows Firefox pattern, Array items coming in a
follow-up PR):
<img width="510" height="167" alt="image"
src="https://github.com/user-attachments/assets/a51f04d4-333c-4d7c-8159-18121c967670"
/>


Before(We shouldn't see these values- it's incorrect):
<img width="1294" height="721" alt="image"
src="https://github.com/user-attachments/assets/2218a622-c791-4436-958e-1a5553de7864"
/>




Testing: Current tests are passing.
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-20 08:10:37 +00:00
dependabot[bot]
eae2cd812b build: bump aws-lc-rs from 1.16.1 to 1.16.2 (#43467)
Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.16.1 to
1.16.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs v1.16.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Implement HMAC <code>sign_to_buffer</code> by <a
href="https://github.com/fabrice102"><code>@​fabrice102</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1058">aws/aws-lc-rs#1058</a></li>
<li>Fix <code>PublicEncryptingKey::from_der</code> to reject undersized
RSA keys by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1065">aws/aws-lc-rs#1065</a>
<ul>
<li><code>from_der()</code> now correctly enforces the 2048-bit minimum
key size, consistent with <code>PrivateDecryptingKey::from_pkcs8</code>.
Users loading &lt;2048-bit public keys for encryption will now receive
<code>KeyRejected</code>.</li>
</ul>
</li>
<li>Update licensing of <code>aws-lc-sys</code> to reflect third-party
component licenses by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1062">aws/aws-lc-rs#1062</a></li>
<li>Improved <code>dev-tests-only</code> documentation and <a
href="https://docs.rs/aws-lc-rs/latest/aws_lc_rs/">docs.rs</a> rendering
by <a href="https://github.com/justsmth"><code>@​justsmth</code></a> in
<a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1054">aws/aws-lc-rs#1054</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Fix jitterentropy build failure caused by <code>cc</code> crate
CFLAGS handling change by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1064">aws/aws-lc-rs#1064</a></li>
<li>Unify sys-crate build scripts by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/995">aws/aws-lc-rs#995</a></li>
</ul>
<h3>Issues Being Closed</h3>
<ul>
<li>sys: license of s2n-bignum and fiat-crypto not reflected &amp;
license texts partially missing -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1044">aws/aws-lc-rs#1044</a></li>
<li>Deterministic key agreement for testing -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1020">aws/aws-lc-rs#1020</a></li>
</ul>
<h2>Other Merged PRs</h2>
<ul>
<li>Prepare aws-lc-fips-sys v0.13.13 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1066">aws/aws-lc-rs#1066</a></li>
<li>Prepare aws-lc-sys v0.39.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1067">aws/aws-lc-rs#1067</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/fabrice102"><code>@​fabrice102</code></a> made
their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1058">aws/aws-lc-rs#1058</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.16.1...v1.16.2">https://github.com/aws/aws-lc-rs/compare/v1.16.1...v1.16.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1f8a0602f5"><code>1f8a060</code></a>
Prepare aws-lc-sys v0.39.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1067">#1067</a>)</li>
<li><a
href="0553c46a0e"><code>0553c46</code></a>
Prepare aws-lc-fips-sys v0.13.13 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1066">#1066</a>)</li>
<li><a
href="80dfe876a7"><code>80dfe87</code></a>
Validate RSA-key size (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1065">#1065</a>)</li>
<li><a
href="3f4dca4442"><code>3f4dca4</code></a>
Fix jitterentropy build failure caused by <code>cc</code> crate CFLAGS
handling change (...</li>
<li><a
href="b60cc41529"><code>b60cc41</code></a>
Implement HMAC <code>sign_to_buffer</code> (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1058">#1058</a>)</li>
<li><a
href="6996ba65a3"><code>6996ba6</code></a>
Update licensing (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1062">#1062</a>)</li>
<li><a
href="c0d4bcba38"><code>c0d4bcb</code></a>
Unify sys-crate build scripts (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/995">#995</a>)</li>
<li><a
href="ef19ea3832"><code>ef19ea3</code></a>
docs: improve dev-tests-only documentation and docs.rs rendering (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1054">#1054</a>)</li>
<li>See full diff in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.16.1...v1.16.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.16.1&new-version=1.16.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-20 07:43:23 +00:00
Narfinger
81c3bde86c script: Move easy IpcChannel usage to GenericChannel usage (#43309)
This moves some easy elements in Script from IpcChannel and related
methods to GenericChannel and related methods and some callbacks.

Testing: This will be covered by WPT if the channels behave differently.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-20 07:24:25 +00:00
Euclid Ye
e1433babbb webdriver: Remove TODO w.r.t. writing mode (#43468)
The width and height should be guaranteed to be non-negative according
to CSSOM regardless of the writing mode.

Testing: Existing tests.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-20 07:21:52 +00:00
Shubham Gupta
a7d8f542da layout: Fix first-paint detection (#42975)
This PR comprises
1. Segregate `paintable` and `contentful`.
2. Adds Checking of non-default background for eligibility to mark
`first-paint`.
3. Adds a bool `is_paintable` to `display_list` and use same for marking
`first-paint`.

TODO: This doesn't consider `iframes`. Will add PR after fixing WPT
tests.

Raised an issue for some incomplete definitions:
https://github.com/w3c/paint-timing/issues/122




Testing: 
- `wpt/tests/paint-timing/first-paint-only/first-paint-bg-color.html`
- Updated WPT tests expectations.
  - `wpt/paint-timing/first-image-child.html`
- `wpt/paint-timing/first-paint-only/sibling-painting-first-image.html`
- Unit Test: `servo/tests/performance_paint_timings.rs`. Following Tests
Cases are covered:

Background Pref |Root Background|FP|TC
--|--|--|--
|Default|Unset| | `test_default_pref_with_unset_background`
|Non-Default|Unset| | `test_non_default_pref_with_unset_background`
|Default|Transparent||`test_default_pref_with_transparent_background`

|Non-Default|Unset||`test_non_default_pref_with_transparent_background`
|Default|Set||`test_default_pref_with_background`

|Non-Default|Set||`test_non_default_pref_with_background`
|Non-Default|Set (same as
pref)||`test_non_default_pref_with_same_background`

Fixes: #42148

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-20 07:20:03 +00:00
Jonathan Schwender
e4eca03a7b servoshell: Fix function_casts_as_integer lint (#43469)
Found when building with Rust 1.94. The lint itself only complains about
the direct function ptr to usize cast and recommends an intermediate `as
*const ()` cast. We also don't need provenance here, so we can also use
the more explicit .addr() cast.

Testing: Covered by compilation in CI.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-20 07:06:01 +00:00
Jonathan Schwender
0149bc7f93 Fix media-gstreamer-render-android (#43463)
Fix compile error when compiling the crate (on macos). Discovered
because cargo-publish --dry-run failed.
The trait expects an `Option<>` for `to_vec`

Testing: Not tested in CI. Compiled the crate locally, but without
cross-compiling for android
Fixes: #43462

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-20 04:44:26 +00:00
Philipp Albrecht
15a400b42a Add basic support for handling module scripts in workers (#40365)
While we now pass a lot of worker tests, we still fail a bunch:
```
% fd '^worker-.*.html.ini'
tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/worker-import.http.html.ini
tests/wpt/meta/content-security-policy/gen/top.http-rp/script-src-self/worker-import.https.html.ini
tests/wpt/meta/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.http.html.ini
tests/wpt/meta/content-security-policy/gen/top.http-rp/worker-src-self/worker-import.https.html.ini
tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/worker-import.http.html.ini
tests/wpt/meta/content-security-policy/gen/top.meta/script-src-self/worker-import.https.html.ini
tests/wpt/meta/content-security-policy/gen/top.meta/worker-src-self/worker-import.http.html.ini
tests/wpt/meta/content-security-policy/gen/top.meta/worker-src-self/worker-import.https.html.ini
tests/wpt/meta/content-security-policy/script-src/worker-data-set-timeout.sub.html.ini
tests/wpt/meta/content-security-policy/script-src/worker-importscripts.sub.html.ini
tests/wpt/meta/content-security-policy/script-src/worker-set-timeout.sub.html.ini
tests/wpt/meta/fetch/metadata/generated/worker-dedicated-constructor.sub.html.ini
tests/wpt/meta/fetch/metadata/generated/worker-dedicated-importscripts.https.sub.html.ini
tests/wpt/meta/fetch/metadata/generated/worker-dedicated-importscripts.sub.html.ini
tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/worker-import-data.https.html.ini
tests/wpt/meta/mixed-content/gen/top.http-rp/opt-in/worker-import.https.html.ini
tests/wpt/meta/referrer-policy/generic/subresource-test/worker-messaging.html.ini
tests/wpt/meta/service-workers/service-worker/worker-client-id.https.html.ini
tests/wpt/meta/service-workers/service-worker/worker-in-sandboxed-iframe-by-csp-fetch-event.https.html.ini
tests/wpt/meta/service-workers/service-worker/worker-interception-redirect.https.html.ini
tests/wpt/meta/service-workers/service-worker/worker-interception.https.html.ini
tests/wpt/meta/upgrade-insecure-requests/gen/worker-classic.http-rp/upgrade/worker-classic.https.html.ini
tests/wpt/meta/upgrade-insecure-requests/gen/worker-classic.http-rp/upgrade/worker-module.https.html.ini
tests/wpt/meta/upgrade-insecure-requests/gen/worker-module.http-rp/upgrade/worker-classic.https.html.ini
tests/wpt/meta/upgrade-insecure-requests/gen/worker-module.http-rp/upgrade/worker-module.https.html.ini
tests/wpt/meta/wasm/webapi/esm-integration/worker-import-source-phase.tentative.html.ini
tests/wpt/meta/wasm/webapi/esm-integration/worker-import.tentative.html.ini
tests/wpt/meta/workers/Worker-creation-happens-in-parallel.https.html.ini
tests/wpt/meta/workers/Worker-postMessage-happens-in-parallel.https.html.ini
tests/wpt/meta/workers/Worker-terminate-forever-during-evaluation.html.ini
tests/wpt/meta/workers/worker-request-animation-frame.html.ini
```

Also, we are passing `Option<PolicyContainer>` down the call stack
through `LoadState`, which is more of a workaround. However, since
maintaining this long-lived branch is becoming a bit painful (merge
conflicts) and I was starting to lose momentum because of that, I would
like get this merged rather sooner than later.

We will address the failing tests and find the right place for
`PolicyContainer` in follow-ups, including the added
`#[allow(clippy::too_many_arguments)]`.


# See also
* https://html.spec.whatwg.org/multipage/#worker-processing-model
*
https://html.spec.whatwg.org/multipage/#fetch-a-module-worker-script-tree

---

Fixes: #23308
Testing: WPT tests

Signed-off-by: pylbrecht <pylbrecht@mailbox.org>
Co-authored-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-20 00:58:16 +00:00
dependabot[bot]
243423cb95 build: bump tar from 0.4.44 to 0.4.45 (#43465)
Bumps [tar](https://github.com/alexcrichton/tar-rs) from 0.4.44 to
0.4.45.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="096e3d16d1"><code>096e3d1</code></a>
Bump to 0.4.45 (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/443">#443</a>)</li>
<li><a
href="17b1fd84e6"><code>17b1fd8</code></a>
archive: Prevent symlink-directory collision chmod attack (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/442">#442</a>)</li>
<li><a
href="de1a5870e6"><code>de1a587</code></a>
archive: Unconditionally honor PAX size (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/441">#441</a>)</li>
<li><a
href="6071cbe74a"><code>6071cbe</code></a>
ci: Consolidate workflows (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/439">#439</a>)</li>
<li><a
href="ad1fde9edf"><code>ad1fde9</code></a>
build-sys: Promote unused_code to an error</li>
<li><a
href="c8cb250e8b"><code>c8cb250</code></a>
tests: Squash a warning</li>
<li><a
href="638c495a48"><code>638c495</code></a>
ci: Add xtask infra + reverse dependency testing (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/435">#435</a>)</li>
<li><a
href="32a9bbb264"><code>32a9bbb</code></a>
tests: Add RandomReader to exercise partial-read resilience (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/436">#436</a>)</li>
<li><a
href="9c5df0bfd7"><code>9c5df0b</code></a>
Fix GNU long-name extension stream corruption on validation error (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/434">#434</a>)</li>
<li><a
href="88b1e3b0da"><code>88b1e3b</code></a>
Fix docs typo in header.rs (<a
href="https://redirect.github.com/alexcrichton/tar-rs/issues/431">#431</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/alexcrichton/tar-rs/compare/0.4.44...0.4.45">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tar&package-manager=cargo&previous-version=0.4.44&new-version=0.4.45)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-20 00:40:56 +00:00
Jonathan Schwender
edc575b37b script-bindings: Don't write bytecode during build.rs (#43459)
Fixes the following error:

```
error: failed to verify package tarball

Caused by:
  Source directory was modified by build.rs during cargo publish. Build scripts should not modify anything outside of OUT_DIR.
  Added: /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/codegen/__pycache__
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/codegen/__pycache__/codegen.cpython-311.pyc
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/codegen/__pycache__/configuration.cpython-311.pyc
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/WebIDL/__pycache__
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/WebIDL/__pycache__/WebIDL.cpython-311.pyc
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/ply/ply/__pycache__
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/ply/ply/__pycache__/__init__.cpython-311.pyc
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/ply/ply/__pycache__/lex.cpython-311.pyc
        /Users/jschwender/Dev/servo/target/package/servo-script-bindings-0.0.6/third_party/ply/ply/__pycache__/yacc.cpython-311.pyc
```

Testing: Manual testing. The same approach was already successfully
applied in `mozjs`.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-19 19:26:19 +00:00
Jonathan Schwender
310adce3cb servo-dom-struct: Enable required features (#43458)
Without these features, the crate does not build standalone. It worked
in servo because of feature unification.
It seems like we should be able to refactor this crate quite easily to
be able to disable some of the features again.

Testing: Manual build: `cargo build -p servo-dom-struct`

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-19 19:26:02 +00:00
Jonathan Schwender
a6b479d2cc Cargo.toml: More publish preparation (#43457)
Add further missing repository keys / descriptions, which I missed in
#43451 due to a suboptimal grep (assuming that rust-version.workspace is
always the last item).
Additionally fix crate self-references, which caused cargo-publish to
fail, due to it trying to fetch the crate from crates.io.
When specifying the current crate in `[dev-dependencies]` to enable a
test feature or similar, apparently one should not use `workspace =
true` and instead use `path`.
This requires extending the previously added `tidy` check, to allow
`path` dependencies in this specific case outside of the workspace
Cargo.toml.

Testing: Covered by existing tests

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-19 17:36:03 +00:00
Martin Robinson
56e79459f2 script: Modify and copy the contents of <textarea> placeholder less (#43452)
Instead of always doing the newline fixup on the `<textarea>`
placeholder, only do it when the placeholder attribute itself changes.
This avoids doing string replacements when they are not necessary (such
as when a `<textarea>` switches from having text to only having the
placeholder and viceversa).

In addition make it so that `DOMString::clear` preserves the string
allocation when called.

Testing: This is just a small optimization so testing should not be
necessary. Existing behavior is verified via WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-19 15:57:28 +00:00
Oriol Brufau
e2aa1c8c06 Implement "tables inherit color from body quirk" (#43368)
Bumps Stylo to https://github.com/servo/stylo/pull/333

Spec:
https://quirks.spec.whatwg.org/#the-tables-inherit-color-from-body-quirk

Testing: Adding 7 new tests. They expose some bugs in other browsers:
- WebKit and Blink don't use the body color when the table appears
before the body
 - Firefox uses the body color even after removing the body

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-19 13:52:24 +00:00
Uiniel
730c827f67 script: Pass &mut JSContext to more functions in dom/stream (#43439)
Pass `&mut JsContext` to `TransformStreamDefaultController::enqueue`, in
preparation of porting the remaining BlobMethods.

Testing: Just a refactor, ./mach test-unit still passes.
Fixes: Part of #42638

---------

Signed-off-by: Uiniel <174327181+uiniel@users.noreply.github.com>
2026-03-19 12:40:11 +00:00
Steven Novaryo
c4cdcb7da8 script: Fire scroll event on visual viewport scroll (#42771)
On visual viewport scroll, fire the scroll event to the `VisualViewport`
instances. Incidentaly, fix a bug where the pinch zoom update should be
propagated to the script.

Testing: New unit test and manual WPT.

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-03-19 10:51:38 +00:00
Steven Novaryo
def1ffa004 layout: Move resolved_sticky_offset to BoxFragmentRareData (#43056)
Wrap `BoxFragment` rare data with `AtomicRefCell` and move
`resolved_sticky_offset` to the `BoxFragmentRareData` since it is
relevant only for `position: sticky`. It reduce the size of
`BoxFragment` from 296 to 264. This allow us to add more rare data to
`BoxFragment` after the reflow, such as the calculation of scrollbar
that requires scrollable overflow to be calculated beforehand.

Testing: No WPT change.

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-03-19 10:50:38 +00:00
Sharan Poojari
5bb4f9f103 devtools: add eval support for dedicated workers (#43361)
Added dedicated worker side handling, followed the same pattern used in
main script handling by wiring worker global scope to
`DebuggerGlobalScope` and invoking `fire_eval`

fixes: Part of #43317

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-19 09:41:54 +00:00
Martin Robinson
f641673dad script: Move by word in text fields on Windows and Linux with control (#43436)
On Windows and Linux the control key is expected to move the text caret
by word. In addition, it seems like the alt wasn't working properly on
Linux. This change makes the modifier key for word movement dependent on
the platform.

Testing: This change adds a Servo-specific keyboard motion test.
Keyboard motion events are not specified AFAIK.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-19 09:39:09 +00:00
Jonathan Schwender
eac6ff8509 Metadata: Add missing repository information (#43451)
This fixes a warning of `cargo publish`: 

```
warning: manifest has no description, documentation, homepage or repository
```

Testing: Compiling. Manual testing of `cargo publish --dry-run` (with
some additional patches, and until the next error, shows this warning
has been fixed)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-19 08:54:18 +00:00
shuppy
4dbc9f7af9 libservo: Per-webview accessibility activation (#43029)
in #42336, we added a
[Servo](https://doc.servo.org/servo/struct.Servo.html)-global API for
controlling whether accessibility is active. the idea was that when the
embedder activates accessibility, all webviews and documents activate
accessibility and start sending AccessKit tree updates, and vice versa
when they deactivate.

we found a problem with this approach in #42338. global activation of
accessibility makes it too easy to accidentally cause a panic in
AccessKit, and harder than it needs to be for embedders to learn that
they are responsible for grafting each webview’s subtree into their main
AccessKit tree as soon as accessibility is activated. this is due to an
invariant of the AccessKit subtree API: if a subtree starts sending
updates before the graft node is created, the program panics.

this patch reworks accessibility activation to make it per-webview. by
requiring embedders to explicitly activate accessibility for a webview,
we can communicate the AccessKit invariant via our API docs.

Testing: this patch includes an initial accessibility test in libservo
Fixes: part of #4344, extracted from our work in #42338

---------

Signed-off-by: Alice Boxhall <alice@igalia.com>
Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-03-19 08:44:24 +00:00
Javier Olaechea
eea60b8eb1 script: Pass &mut JSContext to FetchResponseListener::process_response (#43259)
Add the cx parameter to `fn process_response` in the
`FetchResponseListener` trait and the traits that that interface change
requires. Chose to add it as the first parameter, following the same
order that `FetchResponseListener::process_response_eof` uses.

Testing: Checked that servo builds locally as well as `./mach fmt` and
`./mach test-tidy`. I don't think more tests are needed as we are not
introducing new functionality
Fixes: #42840

---------

Signed-off-by: Javier Olaechea <pirata@gmail.com>
2026-03-19 06:22:00 +00:00
dependabot[bot]
8215118a12 build: bump euclid from 0.22.13 to 0.22.14 (#43445)
Bumps [euclid](https://github.com/servo/euclid) from 0.22.13 to 0.22.14.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/servo/euclid/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=euclid&package-manager=cargo&previous-version=0.22.13&new-version=0.22.14)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 00:46:00 +00:00
dependabot[bot]
c1cd2a9e7b build: bump quick_cache from 0.6.19 to 0.6.20 (#43444)
Bumps [quick_cache](https://github.com/arthurprs/quick-cache) from
0.6.19 to 0.6.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/arthurprs/quick-cache/releases">quick_cache's
releases</a>.</em></p>
<blockquote>
<h2>v0.6.20</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix typos and improve documentation clarity by <a
href="https://github.com/Enderlook"><code>@​Enderlook</code></a> in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/103">arthurprs/quick-cache#103</a></li>
<li>fix race in JoinFuture::poll when waker changes between notified
check and waiters list update by <a
href="https://github.com/morgangallant"><code>@​morgangallant</code></a>
in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/104">arthurprs/quick-cache#104</a></li>
<li>Add shuttle test coverage for switching wakers by <a
href="https://github.com/arthurprs"><code>@​arthurprs</code></a> in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/107">arthurprs/quick-cache#107</a></li>
<li>Add entry/entry_async API for atomic cache access by <a
href="https://github.com/arthurprs"><code>@​arthurprs</code></a> in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/109">arthurprs/quick-cache#109</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/Enderlook"><code>@​Enderlook</code></a>
made their first contribution in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/103">arthurprs/quick-cache#103</a></li>
<li><a
href="https://github.com/morgangallant"><code>@​morgangallant</code></a>
made their first contribution in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/104">arthurprs/quick-cache#104</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.19...v0.6.20">https://github.com/arthurprs/quick-cache/compare/v0.6.19...v0.6.20</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f3aa994418"><code>f3aa994</code></a>
0.6.20</li>
<li><a
href="0a5d3809e5"><code>0a5d380</code></a>
Add entry/entry_async API for atomic cache access (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/109">#109</a>)</li>
<li><a
href="81c5a84cf2"><code>81c5a84</code></a>
Add shuttle test coverage for switching wakers (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/107">#107</a>)</li>
<li><a
href="2635b64d15"><code>2635b64</code></a>
fix race in JoinFuture::poll when waker changes between notified check
and wa...</li>
<li><a
href="3c3c88b501"><code>3c3c88b</code></a>
Fix typos and improve documentation clarity (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/103">#103</a>)</li>
<li>See full diff in <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.19...v0.6.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quick_cache&package-manager=cargo&previous-version=0.6.19&new-version=0.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 00:41:50 +00:00
dependabot[bot]
8c2999a998 build: bump clap from 4.5.60 to 4.6.0 (#43442)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.60 to 4.6.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.6.0] - 2026-03-12</h2>
<h3>Compatibility</h3>
<ul>
<li>Update MSRV to 1.85</li>
</ul>
<h2>[4.5.61] - 2026-03-12</h2>
<h3>Internal</h3>
<ul>
<li>Update dependencies</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9ab6dee710"><code>9ab6dee</code></a>
chore: Release</li>
<li><a
href="374a30dac6"><code>374a30d</code></a>
docs: Update changelog</li>
<li><a
href="d0c8aabc00"><code>d0c8aab</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6306">#6306</a>
from epage/update</li>
<li><a
href="686ce2f665"><code>686ce2f</code></a>
chore: Upgrade compatible</li>
<li><a
href="8203238de6"><code>8203238</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6305">#6305</a>
from epage/msrv</li>
<li><a
href="c774a892ba"><code>c774a89</code></a>
docs: Reduce main's in doctests</li>
<li><a
href="73534f6ed3"><code>73534f6</code></a>
chore: Upgrade to 2025 edition</li>
<li><a
href="dfe05a9bfe"><code>dfe05a9</code></a>
chore: Bump MSRV to 1.85</li>
<li><a
href="8b41d0b849"><code>8b41d0b</code></a>
chore: Release</li>
<li><a
href="518220f102"><code>518220f</code></a>
docs: Update changelog</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.60...clap_complete-v4.6.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.60&new-version=4.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 00:29:06 +00:00
Tim van der Lippe
4723955af8 script: Move encoding interfaces into encoding/ (#43437)
Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-18 21:18:31 +00:00
Tim van der Lippe
6a788b1bf3 script: Strip blockedURI resource (#43367)
This was missed when implementing support for reporting CSP violations.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-18 21:03:16 +00:00
Martin Robinson
7904bf7040 script: Base accesskey on keyboard key codes (#43434)
Instead of using ASCII character to process the `accesskey` attribute
use the hardware key code that comes with the platform key event. This
aligns our implementation closer to the spec and allows `accesskey` to
work properly with lowercase letters on Linux machines (where shift is
part of the access key sequence). This might introduce some issues with
non-US keyboards, but those issues are inherent in the specification --
one reason why `accesskey` is not recommended for use.

Testing: A Servo-specific accesskey test is extended to cover this case.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-18 20:24:46 +00:00
Jacob Adam W.
e6d06b2cea script: Prevent invisible elements from being focusable (#43431)
Elements with `visibility: hidden` or `visibility: collapse` could
receive focus via both sequential navigation and the JS `focus()` API,
and already-focused elements did not lose focus when becoming invisible.
Per the CSS Display spec, invisible elements ”are removed from
navigation”, which we can interpret to mean sequential focus navigation.
In practical terms, all popular user agents also prevent elements with
`visibility: hidden` from being focusable via click/the JS API, so this
PR makes servo match that behaviour as well.

Specifically, this adds a visibility check to
`Element::focusable_area_kind()` so that invisible elements are excluded
from all focusable area kinds.

Fixes #41312.

---------

Signed-off-by: Jacob Adam <software@jacobadam.net>
2026-03-18 16:40:36 +00:00
Uiniel
475eeccc8a script: Pass &mut JSContext to ReadableStream::cancel (#43432)
Pass `&mut JSContext` to `ReadableStream::cancel`, in preparation of
porting the remaining `BlobMethods`.

Testing: Just a refactor, ./mach test-unit still passes.
Fixes: Part of #42638

Signed-off-by: Uiniel <174327181+uiniel@users.noreply.github.com>
2026-03-18 16:33:45 +00:00
Taym Haddadi
6e832c6d60 indexeddb: align getAll/getAllKeys and convert_value_to_key with IndexedDB spec (#43041)
indexeddb: align getAll/getAllKeys and convert_value_to_key with
IndexedDB spec and update WPT expectation

Testing: more IndexedDB test are passing.
part of https://github.com/servo/servo/issues/40983

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-18 16:09:41 +00:00
Martin Robinson
6150ea08c4 layout: Properly find text index when clicking to left of text fragments (#43238)
When clicking just to the left of a text fragment, we should return the
first index in that fragment. This means that when you click on the
border of a text input, the first fragment is selected. We do this by
improving the distance calculation logic to account for this situation.

Testing: This allows us to remove the "fudge factor" that we were adding
to
mouse handling input tests. In addition, the content rectangle
calculation
function is improved and made more general for these tests. In addition,
two new Servo-specific tests are added to verify the behavior when
clicking
in the padding of various text inputs.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-18 14:06:38 +00:00
Tim van der Lippe
479a9b6be3 script: Pass &mut JSContext to attribute_mutated (#43383)
It pushes the `temp_cx` 1 level up to `element.rs` where the calling
chain begins. Other than that this was purely a mechanical change where
I used regexes to replace all patterns with the new ones.

Part of #42812

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-18 11:03:54 +00:00
atbrakhi
d3ca63c514 devtools: Implement object and function property preview (#43356)
Implement property preview for the debugger popup. When hovering over
variables while paused at a breakpoint, users can now see object
properties and function metadata

Testing: Current tests are passing. Manual testing.
Fixes: Part of #36027 

<img width="1507" height="876" alt="image"
src="https://github.com/user-attachments/assets/31c95010-dab9-4b2c-a9b1-da6a29aa0de1"
/>

<img width="360" height="365" alt="image"
src="https://github.com/user-attachments/assets/50d19979-c0b2-4278-b19b-85c0c0318ab4"
/>
<img width="370" height="365" alt="image"
src="https://github.com/user-attachments/assets/3b74ef26-055b-4e49-848e-e7758f8d1de6"
/>

---------

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-18 09:23:26 +00:00
Tim van der Lippe
2dd5c38c8e script: Pass &mut JSContext in remaining parts of Trusted Types (#43365)
These are the remaining arguments of `CanGc`.

Part of #40600

Testing: it compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-18 09:15:31 +00:00
Shubham Gupta
1c35a33bec ci: Have full runs also trigger macos-arm-unit-tests (#43358)
Just organizes full run.

Testing: No change expected. Successful landing is sufficient.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-18 09:02:11 +00:00
Narfinger
8d153761f9 script: Content Event Handler Check switch to HashSet (#43337)
Previously CONTENT_EVENT_HANDLER_NAMES was a array of more than 100
elements where we were doing a linear search.

This replaces it with a FxHashSet and a O(1) search. In most cases this
should not improve performance as the first few elements seem to be the
most common event handler names. But even these were a couple of costly
string away.
In the case that somebody specifies a later event or an event that does
not exist, we increase the performance significantly.


Currently I do not have numbers as I am away from my workstation.

Testing: This does not change behavior, just speed.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-18 06:59:22 +00:00
Christian Duerr
3c9221c3b5 servo: Rename WebView::pinch_zoom to adjust_pinch_zoom and add pinch zoom getter (#43228)
Previously the `pinch_zoom` method on `WebView` would be used to update
the page's pinch zoom level, however there was no way for the embedder
to retrieve the current pinch zoom.

This patch renames the existing `pinch_zoom` method to
`adjust_pinch_zoom` and changes the `pinch_zoom` method to instead
return the current pinch zoom level.

---

Decided to go for the breaking change since I'd find `pinch_zoom`
combined with `get_pinch_zoom` to be confusing, however I'm happy to
change that if a non-breaking change is preferred.

Motivation for this patch is just that I'd like to display the zoom
level in my UI while rendering.

Testing: Since this change adds a simple getter to the API, we can
probably avoid a unit test in this case.

---------

Signed-off-by: Christian Duerr <contact@christianduerr.com>
2026-03-18 04:30:45 +00:00
Shubham Gupta
efe28fb99e layout: Do not consider broken images as LCP candidates (#42833)
Broken Image Icons are not worthy for LCP candidates.

Waiting for WPT Sync to update test from upstream and expectations as
well.

Testing:
`tests/wpt/tests/largest-contentful-paint/broken-image-icon.html`
Fixes: #42832
Fixes: #43030

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-18 03:57:57 +00:00
dependabot[bot]
17bc1daad7 build: bump bpaf from 0.9.23 to 0.9.24 (#43371)
Bumps [bpaf](https://github.com/pacak/bpaf) from 0.9.23 to 0.9.24.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pacak/bpaf/blob/master/Changelog.md">bpaf's
changelog</a>.</em></p>
<blockquote>
<h2>bpaf [0.9.24] - 2026-03-13</h2>
<ul>
<li>
<p>a less confusing error message when invalid user input mixes with
parsers that
can succeed with no input, see <a
href="https://redirect.github.com/pacak/bpaf/issues/442">#442</a>
thanks <a href="https://github.com/tonky"><code>@​tonky</code></a> for a
solution prototype</p>
</li>
<li>
<p>CI test for older rustc now uses 1.71, MSRV should still be 1.60 for
now</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/pacak/bpaf/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bpaf&package-manager=cargo&previous-version=0.9.23&new-version=0.9.24)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-18 03:23:27 +00:00
dependabot[bot]
e61298ef69 build: bump num_enum from 0.7.5 to 0.7.6 (#43374)
Bumps [num_enum](https://github.com/illicitonion/num_enum) from 0.7.5 to
0.7.6.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f11d81c6cb"><code>f11d81c</code></a>
Release 0.7.6 (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/183">#183</a>)</li>
<li><a
href="90c04cf20c"><code>90c04cf</code></a>
A little extra test coverage for byte literals (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/182">#182</a>)</li>
<li><a
href="40e822bb5d"><code>40e822b</code></a>
Allow byte literals in TryFromPrimitive alternatives (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/181">#181</a>)</li>
<li><a
href="699a7ee012"><code>699a7ee</code></a>
Fix up trybuilds (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/180">#180</a>)</li>
<li><a
href="8b99d23508"><code>8b99d23</code></a>
Fix trybuilds (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/179">#179</a>)</li>
<li><a
href="6603c8305e"><code>6603c83</code></a>
Update nightly expectations (<a
href="https://redirect.github.com/illicitonion/num_enum/issues/178">#178</a>)</li>
<li>See full diff in <a
href="https://github.com/illicitonion/num_enum/compare/0.7.5...0.7.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=num_enum&package-manager=cargo&previous-version=0.7.5&new-version=0.7.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-18 01:00:36 +00:00
dependabot[bot]
c322a1d062 build: bump colorchoice from 1.0.4 to 1.0.5 (#43372)
Bumps [colorchoice](https://github.com/rust-cli/anstyle) from 1.0.4 to
1.0.5.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0fe6f0ff6d"><code>0fe6f0f</code></a>
chore: Release</li>
<li><a
href="332016ed16"><code>332016e</code></a>
docs: Update changelog</li>
<li><a
href="dd73f64cf6"><code>dd73f64</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/anstyle/issues/301">#301</a>
from Muscraft/fix-some-escape-codes</li>
<li><a
href="e2d2fb53a7"><code>e2d2fb5</code></a>
fix: Make 4:0 removes all underline styles</li>
<li><a
href="d82d083aa0"><code>d82d083</code></a>
feat: Support SGR 59 (reset underline color to default)</li>
<li><a
href="85c9a86d4c"><code>85c9a86</code></a>
feat: Support SGR 22-29 (off codes)</li>
<li><a
href="ac5c23b732"><code>ac5c23b</code></a>
refactor: Reorder SGR match arms to follow numerical order</li>
<li><a
href="2234b680fb"><code>2234b68</code></a>
test: Add tests for SGR off codes, underline subparams, and underline
color r...</li>
<li><a
href="ffb555fe2b"><code>ffb555f</code></a>
chore: Release</li>
<li><a
href="55de8a6470"><code>55de8a6</code></a>
chore: Download libc to match cargo</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-cli/anstyle/compare/colorchoice-v1.0.4...colorchoice-v1.0.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=colorchoice&package-manager=cargo&previous-version=1.0.4&new-version=1.0.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-18 00:48:11 +00:00
dependabot[bot]
05c80489a3 build: bump pyasn1 from 0.6.2 to 0.6.3 (#43366)
Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.6.2 to 0.6.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pyasn1/pyasn1/releases">pyasn1's
releases</a>.</em></p>
<blockquote>
<h2>Release 0.6.3</h2>
<p>It's a minor release.</p>
<ul>
<li>Added nesting depth limit to ASN.1 decoder to prevent stack overflow
from deeply nested structures (CVE-2026-30922).</li>
<li>Fixed OverflowError from oversized BER length field.</li>
<li>Fixed DeprecationWarning stacklevel for deprecated attributes.</li>
<li>Fixed asDateTime incorrect fractional seconds parsing.</li>
</ul>
<p>All changes are noted in the <a
href="https://github.com/pyasn1/pyasn1/blob/master/CHANGES.rst">CHANGELOG</a>.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst">pyasn1's
changelog</a>.</em></p>
<blockquote>
<h2>Revision 0.6.3, released 16-03-2026</h2>
<ul>
<li>CVE-2026-30922 (GHSA-jr27-m4p2-rc6r): Added nesting depth
limit to ASN.1 decoder to prevent stack overflow from deeply
nested structures (thanks for reporting, romanticpragmatism)</li>
<li>Fixed OverflowError from oversized BER length field
[issue <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/54">#54</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/54">pyasn1/pyasn1#54</a>)
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/100">#100</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/100">pyasn1/pyasn1#100</a>)</li>
<li>Fixed DeprecationWarning stacklevel for deprecated attributes
[issue <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/86">#86</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/86">pyasn1/pyasn1#86</a>)
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/101">#101</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/101">pyasn1/pyasn1#101</a>)</li>
<li>Fixed asDateTime incorrect fractional seconds parsing
[issue <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/81">#81</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/81">pyasn1/pyasn1#81</a>)
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/102">#102</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/102">pyasn1/pyasn1#102</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="af65c3b92e"><code>af65c3b</code></a>
Prepare release 0.6.3</li>
<li><a
href="5a49bd1fe9"><code>5a49bd1</code></a>
Merge commit from fork</li>
<li><a
href="5494ba43f7"><code>5494ba4</code></a>
Fix asDateTime incorrect fractional seconds parsing (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/102">#102</a>)</li>
<li><a
href="71f486e6c3"><code>71f486e</code></a>
Fix DeprecationWarning stacklevel for deprecated attributes (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/101">#101</a>)</li>
<li><a
href="d7cb42dcaa"><code>d7cb42d</code></a>
Fix OverflowError from oversized BER length field (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/100">#100</a>)</li>
<li>See full diff in <a
href="https://github.com/pyasn1/pyasn1/compare/v0.6.2...v0.6.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyasn1&package-manager=uv&previous-version=0.6.2&new-version=0.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 20:54:05 +00:00
Tim van der Lippe
48f1da9fe6 script: Pass &mut JSContext to TrustedScript::get_trusted_type_compliant_string (#43362)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-17 20:26:58 +00:00
Uiniel
fba95dcda9 script: Pass &mut JSContext to more functions in dom/stream (#43327)
Pass `&mut JSContext` and `&mut CurrentRealm` to more functions in
`dom/stream`, focusing on functions that need to be ported to finish
porting the remaining methods in `Blob`.

Testing: Just a refactor, ./mach test-unit still passes.
Fixes: Part of #42638

---------

Signed-off-by: Uiniel <174327181+uiniel@users.noreply.github.com>
2026-03-17 20:07:27 +00:00
dyegoaurelio
be58c968de script: Implement duplicate attribute check for CSP nonce validation (#43216)
Propagate the had_duplicate_attributes flag from html5ever's
ElementFlags through to the Element struct, enabling step 3 of the
CSP "is element nonceable" algorithm. Elements with duplicate
attributes are now correctly marked as "Not Nonceable", preventing
scripts with duplicate attributes from bypassing CSP nonce checks.

Testing: We still need https://github.com/servo/html5ever/issues/118 to
fully pass the
`content-security-policy/script-src/nonce-enforce-blocked.html` wpt
test. But I was able to uncomment some of the remaining tests on
`mozilla/csp/nonce-external-script-malformed-blocked.html`

---------

Signed-off-by: Dyego Aurélio <dyegoaurelio@gmail.com>
2026-03-17 19:37:40 +00:00
Shubham Gupta
ba7ad0d8aa wpt: Add a delay to load to valid image to overcome false positive PASS (#43357)
This adds a delay of 2 seconds for loading a valid image. This is added
to potentially overcome the race condition happening while reporting
LCP, to save from false positive result.

Testing: WPT tests is `TIMED OUT` as expected.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-17 16:03:33 +00:00
Jonathan Schwender
fc2152e4c6 ci: Fix try-label failure of media-examples (#43347)
Testing: Not tested, it's difficult to test try-label related changes.
The fix is trivial though.
Fixes: #43345

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-17 14:17:20 +00:00
Jonathan Schwender
f5d4847e85 everywhere: Remove unused deps (#43344)
RustRover flags unused dependencies gray in Cargo.toml, which works well
except for macro / derive related crates (false-positives). Based on
that I removed the flagged crates (after double checking with grep based
search).
There is one weird case in `storage`, where `tokio` was added as a
dependency with multiple feature flags enabled, without tokio actually
being used. Since the same feature combination is present in `net`,
probably this is a remnant of migrating storage from net.

Testing: If CI passes, this is fine. I additionally also searched for
references of the packages I removed in the respective crate (I hope I
didn't forget any, but should be 90% good).

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-17 13:26:01 +00:00
Gae24
026d679783 script: Pass &mut JSContext to Element::create (#43348)
Pass `&mut JSContext` to `Element::create` and `create_html_element`

Testing: No functionality changes, covered by existing tests.
Part of #40600

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-17 13:03:33 +00:00
Martin Robinson
3b216f8b99 paint: Remove the scroll event averaging workaround (#43350)
This workaround was added in 2016
(90e970a6d2) when the architecture of
Servo, macOS, and Apple hardware was very different. It has been
highlighted as causing issues on Linux machines (#42065). I've confirmed
that removing it does not seem degrade behavior when scrolling with a
Macbook touchpad. I think we should just remove it for now as it seems
like a workaround rather than a real fix for the original problem.

Testing: There isn't a very good way to test this unfortunately.
Closes #42065.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Christian Duerr <contact@christianduerr.com>
2026-03-17 12:24:49 +00:00
Martin Robinson
3cd221993b script: Allow keyboard scrolling with the spacebar (#43322)
This change allows pressing the spacebar to cause a page down or page up
scroll. This matches the behavior of other browsers. In addition,
keyboard
scrolling tests are moved to the same directory as other input method
tests.

Testing: This change adds some additional testing to Servo-specific
keyboard scrolling tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-17 12:24:15 +00:00
Martin Robinson
8555464648 script: Do not fire simulated click on spacebar/enter in non-state-changing elements (#43343)
Servo has for years implemented a behavior where spacebar or enter click
on a focused element will trigger a click. That behavior used to be
unspecified, but now it is. The specification says that this should only
happen on state-changing elements. This change makes this happen using
activatable elements as a heuristic (as state-changing elements are not
defined in the specification). In addition, the behavior is integrated
into the default keyboard event handler code.

Testing: This change adds a Servo-specific test due to the ambiguities
in the specification.
Fixes: #39028.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-17 10:13:49 +00:00
atbrakhi
3ca83edb56 devtools: Implement PropertyIteratorActor boilerplate (#43319)
Implement `PropertyIteratorActor` boilerplate

This is prerequisite for implementing object property enumeration in the
debugger. It is part of popup preview work in debugger.

Testing: Should not change behavior 
Fixes: part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-17 10:05:41 +00:00
Shubham Gupta
89a4a4e24c script: Correct data type of poster in HTMLVideoElement.webidl (#43341)
Correct data type of poster in `HTMLVideoElement` interface
Successful compilation is enough to verify the change.

Testing:  `tests/wpt/meta/html/dom/reflection-embedded.html`

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-17 10:04:30 +00:00
Gae24
9a8571efcc script: Add support for modulepreload link elements (#42964)
Add support to modulepreload link elements. Currently we only fetch the
root module, as I think it is needs to be discussed whether we should
always fetch module dependencies, or if it should be limited due to
network constraints.
Inside `bind_to_tree` I ended up calling
`fetch_and_process_modulepreload` inside a delayed task, since it would
cause a crash due to DOM not being in a stable state when firing an
event (queueing the event seems to also do the trick).

Remaining tests failures are due to not supporting CSS modules and
performance entries's `transfer_size` being 0.

Testing: Covered by existing tests

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-17 09:28:05 +00:00
Jonathan Schwender
b491d6ddbb ci: Fix mitmproxy script (#43342)
Latest ohos CI scenario tests are failing, due to a type error (int
instead of str).
This was presumably broken by #42509, where the type change. I'm a bit
confused why my try run succeeded, and the failure only recently started
happening (on an unrelated commit). This might be an effect of caching
hiding / avoiding the failure.

Testing: Tested in CI. Apparently this file is not covered by the python
type checker yet.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-17 08:41:16 +00:00
Simon Wülker
4409f81720 script: Log unhandled promise rejections to the console (#43323)
I've also refactored the relevant function a bit, because it was
unnecessarily nested and inside a huge `unsafe` block.

Testing: Regressions are covered by existing tests, but we can't test
for the presence of `log::error!` statements
Fixes (the most relevant) part of
https://github.com/servo/servo/issues/26667

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-17 08:02:49 +00:00
Simon Wülker
4d1dc6db4d net: Allow opaque origins in parse_blob_url (#43329)
Blob URLs created with opaque origins (like those in
https://github.com/servo/servo/issues/43326) were rejected when parsed
during `fetch`.

Testing: This doesn't have an impact on WPT but I've added a unit test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-17 06:35:30 +00:00
dependabot[bot]
7f09e34386 build: bump tracing-subscriber from 0.3.22 to 0.3.23 (#43336)
Bumps [tracing-subscriber](https://github.com/tokio-rs/tracing) from
0.3.22 to 0.3.23.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tracing/releases">tracing-subscriber's
releases</a>.</em></p>
<blockquote>
<h2>tracing-subscriber 0.3.23</h2>
<h3>Fixed</h3>
<ul>
<li>Allow ansi sanitization to be disabled (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3484">#3484</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/tracing/issues/3484">#3484</a>:
<a
href="https://redirect.github.com/tokio-rs/tracing/pull/3484">tokio-rs/tracing#3484</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="54ede4d5d8"><code>54ede4d</code></a>
chore: prepare tracing-subscriber 0.3.23 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3490">#3490</a>)</li>
<li><a
href="37558d5f26"><code>37558d5</code></a>
subscriber: allow ansi sanitization to be disabled (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3484">#3484</a>)</li>
<li><a
href="efc690fa6b"><code>efc690f</code></a>
core: add missing const (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3449">#3449</a>)</li>
<li><a
href="0c32367cf9"><code>0c32367</code></a>
core: Use const initializers instead of <code>once_cell</code></li>
<li><a
href="9feb241133"><code>9feb241</code></a>
docs: add arcswap reload crate to related (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3442">#3442</a>)</li>
<li><a
href="2d55f6faf9"><code>2d55f6f</code></a>
chore: prepare tracing 0.1.44 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3439">#3439</a>)</li>
<li><a
href="10a9e838a3"><code>10a9e83</code></a>
chore: prepare tracing-core 0.1.36 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3440">#3440</a>)</li>
<li><a
href="ee82cf92a8"><code>ee82cf9</code></a>
tracing: fix record_all panic (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3432">#3432</a>)</li>
<li><a
href="9978c3663b"><code>9978c36</code></a>
chore: prepare tracing-mock 0.1.0-beta.3 (<a
href="https://redirect.github.com/tokio-rs/tracing/issues/3429">#3429</a>)</li>
<li>See full diff in <a
href="https://github.com/tokio-rs/tracing/compare/tracing-subscriber-0.3.22...tracing-subscriber-0.3.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tracing-subscriber&package-manager=cargo&previous-version=0.3.22&new-version=0.3.23)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 00:54:29 +00:00
dependabot[bot]
bdcf5a7c3c build: bump anstyle from 1.0.13 to 1.0.14 (#43333)
Bumps [anstyle](https://github.com/rust-cli/anstyle) from 1.0.13 to
1.0.14.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0fe6f0ff6d"><code>0fe6f0f</code></a>
chore: Release</li>
<li><a
href="332016ed16"><code>332016e</code></a>
docs: Update changelog</li>
<li><a
href="dd73f64cf6"><code>dd73f64</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-cli/anstyle/issues/301">#301</a>
from Muscraft/fix-some-escape-codes</li>
<li><a
href="e2d2fb53a7"><code>e2d2fb5</code></a>
fix: Make 4:0 removes all underline styles</li>
<li><a
href="d82d083aa0"><code>d82d083</code></a>
feat: Support SGR 59 (reset underline color to default)</li>
<li><a
href="85c9a86d4c"><code>85c9a86</code></a>
feat: Support SGR 22-29 (off codes)</li>
<li><a
href="ac5c23b732"><code>ac5c23b</code></a>
refactor: Reorder SGR match arms to follow numerical order</li>
<li><a
href="2234b680fb"><code>2234b68</code></a>
test: Add tests for SGR off codes, underline subparams, and underline
color r...</li>
<li><a
href="ffb555fe2b"><code>ffb555f</code></a>
chore: Release</li>
<li><a
href="55de8a6470"><code>55de8a6</code></a>
chore: Download libc to match cargo</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-cli/anstyle/compare/v1.0.13...v1.0.14">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=anstyle&package-manager=cargo&previous-version=1.0.13&new-version=1.0.14)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 00:37:28 +00:00
dependabot[bot]
f8d673a8e8 build: bump the wayland-related group with 5 updates (#43331)
Bumps the wayland-related group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [wayland-client](https://github.com/smithay/wayland-rs) | `0.31.12` |
`0.31.13` |
| [wayland-cursor](https://github.com/smithay/wayland-rs) | `0.31.12` |
`0.31.13` |
| [wayland-protocols](https://github.com/smithay/wayland-rs) | `0.32.10`
| `0.32.11` |
| [wayland-protocols-plasma](https://github.com/smithay/wayland-rs) |
`0.3.10` | `0.3.11` |
| [wayland-protocols-wlr](https://github.com/smithay/wayland-rs) |
`0.3.10` | `0.3.11` |

Updates `wayland-client` from 0.31.12 to 0.31.13
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-cursor` from 0.31.12 to 0.31.13
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols` from 0.32.10 to 0.32.11
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols-plasma` from 0.3.10 to 0.3.11
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `wayland-protocols-wlr` from 0.3.10 to 0.3.11
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithay/wayland-rs/commits">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 00:25:45 +00:00
dependabot[bot]
9fd7477cbb build: bump pyopenssl from 25.3.0 to 26.0.0 (#43321)
Bumps [pyopenssl](https://github.com/pyca/pyopenssl) from 25.3.0 to
26.0.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/pyopenssl/blob/main/CHANGELOG.rst">pyopenssl's
changelog</a>.</em></p>
<blockquote>
<h2>26.0.0 (2026-03-15)</h2>
<p>Backward-incompatible changes:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</p>
<ul>
<li>Dropped support for Python 3.7.</li>
<li>The minimum <code>cryptography</code> version is now 46.0.0.</li>
</ul>
<p>Deprecations:
^^^^^^^^^^^^^</p>
<p>Changes:
^^^^^^^^</p>
<ul>
<li>Added support for using aws-lc instead of OpenSSL.</li>
<li>Properly raise an error if a DTLS cookie callback returned a cookie
longer than <code>DTLS1_COOKIE_LENGTH</code> bytes. Previously this
would result in a buffer-overflow. Credit to <strong>dark_haxor</strong>
for reporting the issue. <strong>CVE-2026-27459</strong></li>
<li>Added <code>OpenSSL.SSL.Connection.get_group_name</code> to
determine which group name was negotiated.</li>
<li><code>Context.set_tlsext_servername_callback</code> now handles
exceptions raised in the callback by calling <code>sys.excepthook</code>
and returning a fatal TLS alert. Previously, exceptions were silently
swallowed and the handshake would proceed as if the callback had
succeeded. Credit to <strong>Leury Castillo</strong> for reporting this
issue. <strong>CVE-2026-27448</strong></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="358cbf29c4"><code>358cbf2</code></a>
Prepare for 26.0.0 release (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1487">#1487</a>)</li>
<li><a
href="a8d28e7069"><code>a8d28e7</code></a>
Bump actions/cache from 4 to 5 (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1486">#1486</a>)</li>
<li><a
href="6fefff0556"><code>6fefff0</code></a>
Add aws-lc compatibility to tests and CI (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1476">#1476</a>)</li>
<li><a
href="a739f9661d"><code>a739f96</code></a>
Bump actions/download-artifact from 8.0.0 to 8.0.1 (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1485">#1485</a>)</li>
<li><a
href="8b4c66b1b5"><code>8b4c66b</code></a>
Bump actions/upload-artifact in /.github/actions/upload-coverage (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1484">#1484</a>)</li>
<li><a
href="02a5c78435"><code>02a5c78</code></a>
Bump actions/upload-artifact from 6.0.0 to 7.0.0 (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1483">#1483</a>)</li>
<li><a
href="d9733878d6"><code>d973387</code></a>
Bump actions/download-artifact from 7.0.0 to 8.0.0 (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1482">#1482</a>)</li>
<li><a
href="57f09bb4bb"><code>57f09bb</code></a>
Fix buffer overflow in DTLS cookie generation callback (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1479">#1479</a>)</li>
<li><a
href="d41a814759"><code>d41a814</code></a>
Handle exceptions in set_tlsext_servername_callback callbacks (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1478">#1478</a>)</li>
<li><a
href="7b29beba77"><code>7b29beb</code></a>
Fix not using a cryptography wheel on uv (<a
href="https://redirect.github.com/pyca/pyopenssl/issues/1475">#1475</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pyca/pyopenssl/compare/25.3.0...26.0.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyopenssl&package-manager=uv&previous-version=25.3.0&new-version=26.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 17:00:11 +00:00
Jonathan Schwender
d9238efbb8 Version releases with the workspace version (#43263)
In preparation for a release to crates.io, bump the workspace version to
match the current servoshell version, and let the servoshell version use
the workspace version again. This makes versioning for us easier, and
makes more sense since servoshell is considered to be just a demo for
servo.

The `./mach release` command is updated to support bumping the workspace
version, and patch the version requirement of all workspace-versioned
workspace dependencies.

Testing: Can be manually verified by running `./mach release
<new_version>`. Note that this just bumps the version numbers, and
doesn't release anything, so it's perfectly safe to run.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-16 16:44:36 +00:00
Simon Martin
f8fe8ce82c servoshell: fix display of tooltip showing link target URL (#43320)
I noticed while investigating #42636 that whenever servoshell displays a
link target URL, the associated tooltip is sometimes shown with some
kind of transparency, that is usually - but not always - "fixed" after a
bit of time.

The first problem is that we create the tooltip in the background, while
we should put it on top of everything else. This is however not
sufficient to fix the "flickering", hence the explicit call to
set_needs_repaint, like was done for dialogs in 6d4937b5d6.

Testing: manual (servoshell's visual aspects not covered by any test)
Fixes: https://github.com/servo/servo/issues/42636

Signed-off-by: Simon Martin <simon@nasilyan.com>
2026-03-16 14:45:45 +00:00
Kingsley Yung
ab6a42c8cd script: ML-KEM/ML-DSA PKCS8 keys in non-seed-only formats (#43315)
The specification of Modern Algorithms in WebCrypto API has updated to
specify how to handle ML-KEM/DSA PKCS8 keys in non-seed-only formats.

In the updated specification:

- When importing a key in the `expandedKey` format, throw a
`NotSupportedError`.
- When importing a key in the `both` format, *optionally* throw a
`NotSupportedError`.
- Alternatively, when importing a key in the `both` format, require
checking that the seed and expanded key match.

Our implementation matches the updated specification, with support of
the `both` format. Therefore, this patch only updates the specification
text, without changing the code.

Related commit in specification repository:
6543db893e

Testing: Only changes in spec text. No code change.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-16 14:02:33 +00:00
atbrakhi
821db2c2fc devtools: Implement initial support for showing scope variables (#43232)
This change implements showing scope variable in Debugger tab. This is
still early and we have more work to do.

Next step is building correct data structure and showing different types
of variables.

Testing: Manual as well as current tests are passing.
Fixes: part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-16 13:02:09 +00:00
atbrakhi
a27ab5ae55 devtools: Remove EvaluateJS in favor of Eval (#43316)
The console actor sends `Eval` via debugger.js, not `EvaluateJS`.
Workers only handled `EvaluateJS` which was never sent. We would want to
use `Eval` for workers as well. The worker evaluation was already
non-functional.

One more motivation behind not keeping this legacy path is because it
requires passing `None` for all new fields added to
`EvaluateJSReplyValue`, that is extra burden.

Testing: All existing tests are passing.

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-16 12:45:32 +00:00
Euclid Ye
41ad1b63a6 script: Port TreeWalker & NodeIterator to &mut JSContext (#43312)
Testing: It compiles.
Part of #40600
TODO: #43311

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-16 09:55:46 +00:00
Narfinger
c49433e94f Script: Do not convert to and from DOMString multiple times (#43304)
Previously we called queue_dialog_toggle_break_event_task with
DOMStrings which converted them to strings to then convert them back to
DOMStrings.

Because DOMString is !Send we cannot use the DOMString directly so we
just change queue_dialog_toggle_break_event_task to get &str.


Testiing: Compilation is the test.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-16 07:27:15 +00:00
Euclid Ye
709e8d5548 script: Skip RAII guard and early return when input event queue is empty (#43301)
This is a hot path:
- there is a lot of processing in `handle_pending_input_events`: JS
realm entry, temporary variable creation, value assignment etc.
- we acquire a RAII guard before calling the function.

If the event queue is empty, this would result in unnecessary overhead
on the hot path.
We skip all above work in this case.

Testing: This is an optimization that should not change visible
behaviour,
thus covered by all the testdriver tests.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-16 07:15:20 +00:00
Euclid Ye
fc76797034 script: Port Notification to mozjs JSContext (#43302)
Mission No.2

Divided into three parts
- Import `js::context::JSContext;` and use it. This is fine as we
already renamed the traditional one.
- Major mission of porting
- Add space between functions

Testing: It compiles

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-16 06:21:27 +00:00
Josh Matthews
3d25895caf Update wayland crates. (#43299)
Updates the wayland crates and adds a new exemption for the quick-xml
duplication. This prevents dependabot opening a PR every day for these
crates which can never be merged.

Closes: #43294

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-16 03:30:36 +00:00
dependabot[bot]
259a6db621 build: bump cc from 1.2.56 to 1.2.57 (#43296)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.56 to 1.2.57.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.57</h2>
<h3>Other</h3>
<ul>
<li>Size archiver batches according to argument length not argument
count (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1689">#1689</a>)</li>
<li>Added <code>Build::env</code> for setting environment variables of
compiler invocations and other child processes (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1656">#1656</a>
<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1682">#1682</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.56...cc-v1.2.57">1.2.57</a>
- 2026-03-13</h2>
<h3>Other</h3>
<ul>
<li>Size archiver batches according to argument length not argument
count (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1689">#1689</a>)</li>
<li>Added <code>Build::env</code> for setting environment variables of
compiler invocations and other child processes (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1656">#1656</a>
<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1682">#1682</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="77f88665c6"><code>77f8866</code></a>
chore(cc): release v1.2.57 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1681">#1681</a>)</li>
<li><a
href="c541d9b3cf"><code>c541d9b</code></a>
Size archiver batches according to argument length not argument count
(<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1689">#1689</a>)</li>
<li><a
href="1654cb904b"><code>1654cb9</code></a>
Improve the semantics of <code>Build::env</code> (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1682">#1682</a>)</li>
<li><a
href="5868a0f0e4"><code>5868a0f</code></a>
Use cargo-nextest in main.yml (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1686">#1686</a>)</li>
<li><a
href="c5610e1071"><code>c5610e1</code></a>
Update which requirement from ^4.0 to ^8.0 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1683">#1683</a>)</li>
<li><a
href="d41559b130"><code>d41559b</code></a>
Serialize tests that need environment variables (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1685">#1685</a>)</li>
<li><a
href="e35ca93f30"><code>e35ca93</code></a>
Rename job 'regenerate' to 'rustc_target_test' (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1687">#1687</a>)</li>
<li><a
href="41965a999f"><code>41965a9</code></a>
Don't run CI twice on every PR (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1684">#1684</a>)</li>
<li><a
href="9c4720bca5"><code>9c4720b</code></a>
rename <code>__set_env</code> to <code>env</code> and make it un-hidden
(<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1656">#1656</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.56...cc-v1.2.57">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.56&new-version=1.2.57)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 01:57:18 +00:00
dependabot[bot]
42786f9ea5 build: bump portable-atomic-util from 0.2.5 to 0.2.6 (#43298)
Bumps
[portable-atomic-util](https://github.com/taiki-e/portable-atomic-util)
from 0.2.5 to 0.2.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/portable-atomic-util/releases">portable-atomic-util's
releases</a>.</em></p>
<blockquote>
<h2>0.2.6</h2>
<p>portable-atomic-util has been extracted from the portable-atomic
repository into its own repository: <a
href="https://github.com/taiki-e/portable-atomic-util">https://github.com/taiki-e/portable-atomic-util</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/portable-atomic-util/blob/main/CHANGELOG.md">portable-atomic-util's
changelog</a>.</em></p>
<blockquote>
<h2>[0.2.6] - 2026-03-14</h2>
<p>portable-atomic-util has been extracted from the portable-atomic
repository into its own repository: <a
href="https://github.com/taiki-e/portable-atomic-util">https://github.com/taiki-e/portable-atomic-util</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="08e9d6c3e9"><code>08e9d6c</code></a>
Release 0.2.6</li>
<li><a
href="01bc732b19"><code>01bc732</code></a>
Update changelog</li>
<li><a
href="0a4125322f"><code>0a41253</code></a>
Apply clippy to doctest</li>
<li><a
href="7f3d9e0a16"><code>7f3d9e0</code></a>
Extract portable-atomic-util from portable-atomic repository</li>
<li><a
href="d1465ffa69"><code>d1465ff</code></a>
Add comment about rust-version field to Cargo.toml</li>
<li><a
href="0708e89053"><code>0708e89</code></a>
Update allowed lint list</li>
<li><a
href="e49c8894f1"><code>e49c889</code></a>
Adjust strict_provenance polyfill used on old rustc</li>
<li>See full diff in <a
href="https://github.com/taiki-e/portable-atomic-util/compare/v0.2.5...v0.2.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=portable-atomic-util&package-manager=cargo&previous-version=0.2.5&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 00:52:11 +00:00
dependabot[bot]
b1b1c1f4e3 build: bump tinyvec from 1.10.0 to 1.11.0 (#43297)
Bumps [tinyvec](https://github.com/Lokathor/tinyvec) from 1.10.0 to
1.11.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Lokathor/tinyvec/blob/main/CHANGELOG.md">tinyvec's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>1.11</h2>
<ul>
<li>switched from <code>serde</code> dep to <code>serde_core</code> dep,
which should allow more
parallelization in builds for downstream users.</li>
<li>add <code>as_mut_inner</code> method when the
<code>latest_stable_rust</code> feature is enabled</li>
<li>add <code>is_full</code> method to check if the size is equal to the
capacity</li>
<li>add <code>defmt</code> support</li>
</ul>
<h2>1.10</h2>
<ul>
<li>Minimum rust version is now 1.55, and the non-const-generic impls
are removed.
This reduces build times by over a second on average, which is
significant enough for a library crate.</li>
</ul>
<h2>1.9</h2>
<ul>
<li>Adds a <code>latest_stable_rust</code> cargo feature, which will
automatically pull in
other cargo features related to the latest Stable version of rust.</li>
<li>Adds <code>ArrayVec::try_from_array_len</code></li>
<li>Adds <code>TinyVec::into_vec</code> and
<code>TinyVec::into_boxed_slice</code></li>
<li>Adds support for <code>generic-array</code> crate</li>
<li>Adds support for the <code>borsh</code> crate</li>
</ul>
<h2>1.8.1</h2>
<ul>
<li><a href="https://github.com/e00E">e00E</a> updated the rustc
features so that they all
correctly depend on the lower version feature.
<a href="https://redirect.github.com/Lokathor/tinyvec/pull/199">pr
199</a></li>
</ul>
<h2>1.8</h2>
<ul>
<li><a href="https://github.com/Fuuzetsu">Fuuzetsu</a> added the
<code>ArrayVec::as_inner</code> method.
<a href="https://redirect.github.com/Lokathor/tinyvec/pull/197">pr
197</a></li>
</ul>
<h2>1.7</h2>
<ul>
<li><a href="https://github.com/Fuuzetsu">Fuuzetsu</a> added the
<code>rustc_1_61</code> cargo feature, which adds the
<code>retain_mut</code> method.
<a href="https://redirect.github.com/Lokathor/tinyvec/pull/198">pr
198</a></li>
</ul>
<h2>1.6.1</h2>
<ul>
<li><a href="https://github.com/e00E">e00E</a> fixed the Arbitrary impl
to work on Stable
without using a feature gate.
<a href="https://redirect.github.com/Lokathor/tinyvec/pull/180">pr
180</a></li>
</ul>
<h2>1.6.0</h2>
<ul>
<li><a href="https://github.com/i509VCB">i509VCB</a> added the
<code>try_</code> functions for fallable reallocation.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d6c8a5f222"><code>d6c8a5f</code></a>
chore: Release</li>
<li><a
href="4348329ebe"><code>4348329</code></a>
changelog</li>
<li><a
href="834172bbcd"><code>834172b</code></a>
changelog</li>
<li><a
href="01b7a9fe9d"><code>01b7a9f</code></a>
Add defmt support (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/216">#216</a>)</li>
<li><a
href="bb18ff1618"><code>bb18ff1</code></a>
Add is_full method (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/217">#217</a>)</li>
<li><a
href="219f2874bd"><code>219f287</code></a>
Add as_mut_inner method (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/215">#215</a>)</li>
<li><a
href="5809985ddf"><code>5809985</code></a>
chore: switch to serde_core (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/213">#213</a>)</li>
<li><a
href="10f783e57a"><code>10f783e</code></a>
Remove leftover comment from before the const generic days (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/214">#214</a>)</li>
<li><a
href="842e1692b3"><code>842e169</code></a>
chore: improve code comments clarity (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/212">#212</a>)</li>
<li><a
href="a6db082130"><code>a6db082</code></a>
Make Debug instances behave like those for slices (<a
href="https://redirect.github.com/Lokathor/tinyvec/issues/211">#211</a>)</li>
<li>See full diff in <a
href="https://github.com/Lokathor/tinyvec/compare/v1.10.0...v1.11.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tinyvec&package-manager=cargo&previous-version=1.10.0&new-version=1.11.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 00:44:10 +00:00
dependabot[bot]
0f8531d6a9 build: bump once_cell from 1.21.3 to 1.21.4 (#43295)
Bumps [once_cell](https://github.com/matklad/once_cell) from 1.21.3 to
1.21.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/matklad/once_cell/blob/master/CHANGELOG.md">once_cell's
changelog</a>.</em></p>
<blockquote>
<h2>1.21.4</h2>
<ul>
<li>
<p>Fix unsoundness in <code>OnceCell::wait</code> under
<code>--features=parking_lot</code>, <a
href="https://redirect.github.com/matklad/once_cell/pull/295">#295</a>.</p>
<p>If thread A calls <code>wait</code>, while thread B calls
<code>get_or_try_init(f)</code>, and, furthermore, <code>f</code>
panics,
the <code>wait</code> incorrectly returns and thread A observes
uninitialized memory.</p>
<p>Kudos to <a
href="https://github.com/meng-xu-cs"><code>@​meng-xu-cs</code></a> for a
nice find!</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="80fe900b21"><code>80fe900</code></a>
Merge pull request <a
href="https://redirect.github.com/matklad/once_cell/issues/296">#296</a>
from matklad/matklad/plfix</li>
<li><a
href="a5e09c971c"><code>a5e09c9</code></a>
release 1.21.4</li>
<li><a
href="2426d45d85"><code>2426d45</code></a>
Merge pull request <a
href="https://redirect.github.com/matklad/once_cell/issues/295">#295</a>
from matklad/matklad/plfix</li>
<li><a
href="a1441215db"><code>a144121</code></a>
Merge pull request <a
href="https://redirect.github.com/matklad/once_cell/issues/290">#290</a>
from alexanderkjall/run-tests-with-no-default-features</li>
<li><a
href="232a1a49b5"><code>232a1a4</code></a>
Merge pull request <a
href="https://redirect.github.com/matklad/once_cell/issues/292">#292</a>
from phil-opp/doc-fix</li>
<li><a
href="d31767bbcd"><code>d31767b</code></a>
fix OnceCell::wait with features=parking_lot</li>
<li><a
href="28d29ae1c1"><code>28d29ae</code></a>
Fix: <code>sync::OnceCell::try_insert</code> docs should import
<code>sync</code> variant</li>
<li><a
href="0f78fb0d6d"><code>0f78fb0</code></a>
make the command 'cargo test --no-default-features' work</li>
<li><a
href="fda60a6c70"><code>fda60a6</code></a>
Merge pull request <a
href="https://redirect.github.com/matklad/once_cell/issues/287">#287</a>
from AbeZbm/add-tests</li>
<li><a
href="b5b98c09eb"><code>b5b98c0</code></a>
Add tests for OnceRef</li>
<li>See full diff in <a
href="https://github.com/matklad/once_cell/compare/v1.21.3...v1.21.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=once_cell&package-manager=cargo&previous-version=1.21.3&new-version=1.21.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 00:33:52 +00:00
dependabot[bot]
0032c92453 build: bump the gstreamer-related group with 2 updates (#43291)
Bumps the gstreamer-related group with 2 updates:
[glib](https://github.com/gtk-rs/gtk-rs-core) and
[glib-sys](https://github.com/gtk-rs/gtk-rs-core).

Updates `glib` from 0.22.2 to 0.22.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib's
releases</a>.</em></p>
<blockquote>
<h2>0.22.3</h2>
<pre><code>Carlos Martín Nieto:
      glib: use `pointer::addr()` to resolve strict provenance lint
      glib: use exposed provenance when we cannot copy one
      glib: make use of `mem::offset_of!()`
<p>Sebastian Dröge:<br />
Update gir-files<br />
Regenerate with latest gir-files<br />
Update versions to 0.22.3<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="90288b72a8"><code>90288b7</code></a>
Update versions to 0.22.3</li>
<li><a
href="14f0216940"><code>14f0216</code></a>
glib: make use of <code>mem::offset_of!()</code></li>
<li><a
href="cc3db0cc9e"><code>cc3db0c</code></a>
glib: use exposed provenance when we cannot copy one</li>
<li><a
href="9f43fe528f"><code>9f43fe5</code></a>
glib: use <code>pointer::addr()</code> to resolve strict provenance
lint</li>
<li><a
href="2762c59973"><code>2762c59</code></a>
Regenerate with latest gir-files</li>
<li><a
href="685bf1beef"><code>685bf1b</code></a>
Update gir-files</li>
<li>See full diff in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.22.2...0.22.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `glib-sys` from 0.22.0 to 0.22.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib-sys's
releases</a>.</em></p>
<blockquote>
<h2>0.22.3</h2>
<pre><code>Carlos Martín Nieto:
      glib: use `pointer::addr()` to resolve strict provenance lint
      glib: use exposed provenance when we cannot copy one
      glib: make use of `mem::offset_of!()`
<p>Sebastian Dröge:<br />
Update gir-files<br />
Regenerate with latest gir-files<br />
Update versions to 0.22.3<br />
</code></pre></p>
<h2>0.22.2</h2>
<pre><code>Julian Sparber:
      glib: Implement From&lt;PtrSlice&lt;GStringPtr&gt; for StrV
      glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;
<p>Sebastian Dröge:<br />
gio: Mark <code>Socket::from_raw_socket()</code> as unsafe</p>
<p>Wladimir Palant:<br />
glib-macros: Silence “redundant closure” clippy warning in
closure!/closure_local!<br />
</code></pre></p>
<h2>0.22.1</h2>
<pre><code>Sebastian Dröge:
gio: Re-add accidentally removed UNIX APIs that are still part of gio
itself
      gio: Remove non-existing UNIX functions from Gir.toml
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="90288b72a8"><code>90288b7</code></a>
Update versions to 0.22.3</li>
<li><a
href="14f0216940"><code>14f0216</code></a>
glib: make use of <code>mem::offset_of!()</code></li>
<li><a
href="cc3db0cc9e"><code>cc3db0c</code></a>
glib: use exposed provenance when we cannot copy one</li>
<li><a
href="9f43fe528f"><code>9f43fe5</code></a>
glib: use <code>pointer::addr()</code> to resolve strict provenance
lint</li>
<li><a
href="2762c59973"><code>2762c59</code></a>
Regenerate with latest gir-files</li>
<li><a
href="685bf1beef"><code>685bf1b</code></a>
Update gir-files</li>
<li><a
href="484fbe01e7"><code>484fbe0</code></a>
Update Cargo.lock</li>
<li><a
href="77ce5c64ea"><code>77ce5c6</code></a>
Update versions to 0.22.2</li>
<li><a
href="a5a6b9f659"><code>a5a6b9f</code></a>
glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;</li>
<li><a
href="1870acb44c"><code>1870acb</code></a>
glib: Implement From&lt;PtrSlice<!-- raw HTML omitted --> for StrV</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.22.0...0.22.3">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-16 00:17:40 +00:00
Simon Wülker
708f5de35b script: Support constructing FontFaces from ArrayBuffers (#43281)
Testing: This change adds new tests
Fixes https://github.com/servo/servo/issues/39657
Part of https://github.com/servo/servo/issues/6098

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-15 22:13:56 +00:00
Simon Wülker
16a6494db5 script: Let FontFaceSet be setlike<FontFace> (#43286)
Testing: New tests start to pass.

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-15 21:59:54 +00:00
Domenico Rizzo
b3c8c50af8 script: Move drop logic for several WebGPU types to helper structs (#43288)
Implementing `Drop` for DOM types is being forbidden. This moves the
resource cleanup logic for `GPUShaderModule`, `GPUTexture`, and
`GPUTextureView` to separate helper structs and removes the
`allowDropImpl` flag from the bindings configuration.

Testing: WebGpu tests just cover their cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-15 20:33:07 +00:00
Sharan Poojari
ae08945a54 script: inline dispatch_load_event and dispatch_error_event (#43285)
fixes #43280 
This PR in lines the dispatch_load_event and dispatch_error_event
wrappers directly into their call sites and removes the unused function
definitions

Signed-off-by: SharanRP <z8903830@gmail.com>
2026-03-15 16:38:18 +00:00
Euclid Ye
c9c8e22abd script: Use &mut JSContext in HTMLMapElement&HTMLImageElement (#43284)
I just want to be part of the campaign.

Testing: It compiles.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-03-15 16:02:40 +00:00
Tim van der Lippe
15b74e04b6 script: Record state for nodes prior to executing commands (#43177)
There is a chicken and egg problem here: to be able to restore the state
of nodes, we need the implementation of several other commands. However,
those commands then need some of the algorithms that are implemented for
storing the state.

Therefore, this PR has no behavioral changes, but includes preparations
to be able to first implement the functionality of the relevant
commands.

To that end, several changes were necessary:
1. Remove BaseCommand and instead use CommandName enum to define
behavior. The majority of the action part of the commands still exists
in separate files for readability (turn off whitespace changes in the
diff to make things readable)
2. Change the usages of a DOMString to the new CommandName enum in the
methods of execCommand. Both to make the enum work, but also as an
improvement to avoid operating on strings.
3. The {value,state}_override values in document need to be a map, not a
single boolean. I didn't understand these when I first implemented it,
but now it's clearer to me what their structure is.

In the end, the relevant recording and restoring state is implemented,
to the extent that it is possible. It does some light-weight
interaction, but most of the code doesn't do anything yet since the
relevant commands aren't implemented.

Part of #25005 

Testing: no behavioral changes, only preparations for future work

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 12:57:19 +00:00
Euclid Ye
0d764f0d20 script_bindings: Remove non-existent entries (#43282)
These methods do not exist in DOM.

Testing: It compiles.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-15 12:44:26 +00:00
Tim van der Lippe
058759bf06 script: Move debugger interfaces into debugger/ (#43279)
Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 10:19:33 +00:00
Tim van der Lippe
d952864be0 script: Pass &mut JSContext to set_timeout_or_interval (#43278)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 10:10:21 +00:00
Tim van der Lippe
36d70a1e5f script: Pass &mut JSContext to TrustedScript::can_compile_string_with_trusted_type (#43277)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 09:30:46 +00:00
Tim van der Lippe
f8b06d7291 script: Move reporting interfaces (#43270)
Also moves some relevant methods from GlobalScope that were only used
within ReportingObserver.

Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 09:01:23 +00:00
Simon Martin
23a23f41ae script: remove redundant ScriptWindowProxies method (#43276)
ScriptWindowProxies's find_window_proxy and get methods are exactly the
same; remove the latter.

Testing:  Existing WPT tests should cover the script_thread.rs change
Fixes: https://github.com/servo/servo/issues/43251

Signed-off-by: Simon Martin <simon@nasilyan.com>
2026-03-15 08:53:29 +00:00
Martin Robinson
3335d3df58 script: Add support for the "sequential focus navigation starting point" (#43267)
Add support for the "sequential focus navigation starting point" which
allows clicking on an unfocuable part of the part and then having
sequential focus start from that part when it is triggered later. In
addition:

1. Start moving the sequential focus code match the specification more
   more closely.
2. Generalize the
   `Element::find_click_focusable_shadow_host_if_necessary` method to be
   able to find the appropriate focuable area after a click and
   correctly handle clicking on children of focusable elements.

Testing: This adds two Servo-specific tests as sequential focus
navigation
behavior is so lightly specified. In addition, on WPT subtest starts to
fail
for `<label>`s in `<summary>`, but this just exposes existing issues we
have
with two unimplemented features:
1. Clicking on activable elements in `<summary>` should not expand the
    `<details>`.
2. Clicking on a `<label>` should activate its target.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-15 08:11:04 +00:00
Christian Duerr
cf908a8d6c servo: Fix minor documentation issues (#43229)
Signed-off-by: Christian Duerr <contact@christianduerr.com>
2026-03-15 06:00:15 +00:00
Euclid Ye
71907ee9fd webdriver: Wait for ImeEvent::Composition (#43275)
This continues #43262. Also added TODO.

Testing: Existing tests:
[Try](https://github.com/servo/servo/actions/runs/23089599333)

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-15 05:52:49 +00:00
Servo WPT Sync
2442ef7dc4 Sync WPT with upstream (15-03-2026) (#43274)
Automated downstream sync of changes from upstream as of 15-03-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-03-15 01:33:03 +00:00
Tim van der Lippe
3c852261b9 script: Pass &mut JSContext in CSP code (#43184)
Part of #40600

Testing: it compiles

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-14 21:42:02 +00:00
webbeef
e56651ef7d chore: remove abbreviated crate names (#43272)
This remove `sm-player` and `sm-gst-render` that point to the same
crates as `servo-media-player` and `servo-media-gstreamer-render`

Testing: a successful build is enough

---------

Signed-off-by: webbeef <me@webbeef.org>
2026-03-14 21:28:15 +00:00
Tim van der Lippe
d0d84f40c7 script: Move CSPViolationReportTask (#43269)
This was the only struct leftover in security_manager. Therefore, this
both moves and renames the files.

Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-14 19:43:24 +00:00
Tim van der Lippe
f660fd6d91 script: Pass &mut JSContext to TrustedHTML::get_trusted_type_compliant_string (#43268)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-14 19:40:49 +00:00
webbeef
1be2b7ad8d chore: replace references to servo_url by servo-url (#43273)
It was decided to keep the kebab-case version.

Testing: Successful compilation is enough

Signed-off-by: webbeef <me@webbeef.org>
2026-03-14 19:29:05 +00:00
Tim van der Lippe
7b73462755 ci: Resolve yanked crate violation (#43271)
Example:
https://github.com/servo/servo/actions/runs/23093323608/job/67081527566

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-14 18:37:41 +00:00
Christian Duerr
279a53e598 servo: Force embedders to implement EventLoopWaker::wake (#43250)
Currently it is possible to define an `EventLoopWaker` which does
nothing on `wake`, however there's no reason for a consumer to define a
waker that does nothing on wake, since that is its only purpose. To make
it a little bit harder to use the `EventLoopWaker` incorrectly, this
makes the `wake` function on the trait mandatory for downstream to
implement.

Testing: This just removes a default implementation for an exposed trait
and updates documentation so new tests are not necessary.

---------

Signed-off-by: Christian Duerr <contact@christianduerr.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-14 14:31:28 +00:00
Jonathan Schwender
fa899420c7 blurmac: Disable publishing (#43264)
`cargo publish --workspace` should ignore this crate, we currently don't
plan to release it.

Testing: Not tested

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-14 10:05:32 +00:00
Gae24
e8b581aaf0 script: Pass &mut JSContext in more places (#43252)
Continuation of #43220, removes many `temp_cx` calls introduced by that.

Testing: No behaviour change, a successful build is enough.
Fixes: #43241 #43240

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-14 10:03:48 +00:00
Euclid Ye
9cf33b773d webdriver: Always wait for mousemove/wheel in a blocking manner (#43262)
This is now possible since #43202. We remove the workaround introduced
long ago.

Testing: Before #43202, this would deadlock in many tests, and is
therefore covered by existing tests.
[Try](https://github.com/servo/servo/actions/runs/23080857516)

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-14 08:00:10 +00:00
Christian Duerr
58e7d14963 libservo: Expose StringRequest in public API (#43261)
This is a follow-up to 69d4353, which attempted to make the
`ClipboardDelegate` trait implementable, but missed that the
`StringRequest` type required by this trait was still private.

*Describe the changes that this pull request makes here. This will be
the commit message.*

Testing: I ran this against my browser to make sure this time pasting
works end-to-end, which it did. So hopefully this should be all.

Signed-off-by: Christian Duerr <contact@christianduerr.com>
2026-03-14 07:41:14 +00:00
Gae24
ef97d7e199 script: Pass &mut JSContext to VirtualMethods::bind_to_tree (#43220)
Testing: No behaviour change, a successful build is enough.
Fixes: #42838 #43239

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-14 07:37:47 +00:00
Jonathan Schwender
363ba0ccd1 Use workspace deps consistently and add version requirement (#43243)
In order to prepare for publishing this PR does the following steps (see
commits):

- Move all `path` dependencies to the workspace Cargo.toml, and
reference that.
- Move all path dependencies in the workspace Cargo.toml into a
dedicated section, to make bumping version numbers easier later.
- Add the version requirement. Note that we currently only version bump
servoshell. There was agreement to version everything with the same
version as servoshell, but that be done in a follow-up. The diff is
already large enough as is.
- Add a tidy lint to catch `path` usages outside the root Cargo.toml. I
switched to [`tomllib`] (which was added to the python stdlib in 3.11),
since the third-party `toml` library failed to parse Cargo.toml files
with `workspace.version` (did not like the `.` in a `key`).


[`tomllib`]: https://docs.python.org/3/library/tomllib.html

Testing: Should be covered by regular CI testing.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-14 06:51:33 +00:00
Euclid Ye
a10434cef4 ci: Bump ci-runners to f0b81b9 and upgrade remaining deprecated Actions (#43244)
This continues #43173, https://github.com/servo/ci-runners/pull/118

There are several warnings that cannot be solved here, and requires
original Action maintainers to take action:
- nick-fields
- KyleMayes/install-llvm
- bencher

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-14 02:08:56 +00:00
Martin Robinson
1a88675636 layout: Add a little padding to textual inputs (#43132)
This change adds a little bit of padding to textual inputs, so that it
is easier to see the text cursor and also to read the text contents.
The values here match what Gecko uses.

### Before

<img width="611" height="520" alt="Screenshot 2026-03-10 at 11 23 47"
src="https://github.com/user-attachments/assets/e2303fea-9060-45cd-a055-7d2081ea38fc"
/>

<img width="611" height="520" alt="Screenshot 2026-03-10 at 11 23 53"
src="https://github.com/user-attachments/assets/1ae58448-e198-4d24-941d-1d8c5f45e894"
/>

### After 

<img width="633" height="519" alt="Screenshot 2026-03-10 at 11 22 39"
src="https://github.com/user-attachments/assets/f4c38299-a222-40d1-96a1-85ee745ff7bd"
/>

<img width="616" height="518" alt="Screenshot 2026-03-10 at 11 37 20"
src="https://github.com/user-attachments/assets/45a295a9-5665-439d-bff4-eb7aaf51f994"
/>

Testing: This was manually tested via `form-control-visuals.html`. We do
not
really have a way to test this kind of styling.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 18:21:39 +00:00
Christian Duerr
e0e07f14ba embedder_traits: Add missing Debug impl to PixelFormat (#43249)
Testing: This just implements `Debug` on an API exposed type, so tests
are not necessary.

---------

Signed-off-by: Christian Duerr <contact@christianduerr.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 17:22:37 +00:00
Martin Robinson
eb249afac8 script: Scroll targets into view during sequential tab navigation (#43246)
Instead of just focusing elements that are the target of tab navigation,
also scroll them into view. Though this is unspecified, this is what all
other browsers do.

Testing: This change adds a new Servo-specific test. The behavior isn't
really specified.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 17:19:52 +00:00
Martin Robinson
4c6dbd59cb script: Only trigger one default event handler for form controls (#43247)
There is a `handle_event` virtual method on `Node` that triggers the
default event handler. Typically the "superclass" virtual method is
called and then the specific type runs its default event handler. This
isn't good for form controls, because typically the event handler should
prevent further event handlers from running. This badness can be
observed by pressing down in a text input, which will both move the
cursor as well as scroll the page. 🙃

This change makes it so that the default form control event handler
consistently calls the `Event::mark_as_handled` method and triggers the
"superclass" event handler *after* running its own. In addition, the
scrolling default event handler on `Node` now doesn't run if the `Event`
was already handled.

Finally, a little bit of dead event handling code is removed.

Testing: This change adds a Servo-specific test for this behavior.
Fixes: #40785

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 16:27:22 +00:00
Christian Duerr
9186a7efab servo: Add id method to InputMethodControl (#43248)
While it is possible to acquire the embedder ID through
`EmbedderControl::id`, it is no longer possible once the type is
destructured into `InputMethodControl`.

Since `InputMethodControl` stores the `id` field internally anyway, it
seems consistent with the other embedder controls to have a method to
return this ID.

Testing: This is a simple addition to the API, so tests are probably not
necessary.

Signed-off-by: Christian Duerr <contact@christianduerr.com>
2026-03-13 15:57:10 +00:00
eri
5c30339efc devtools: Remove reply_unchecked in favour of mark_handled (#43236)
`reply_unchecked` was added in #42007 since `getEnvironment` from the
frame actor has a `type` field but it already counts as a final reply,
unlike every other message like it. Since it is only used there, we can
revert the `reply_unchecked` change and use the new `mark_handled`
instead.

Depends on: #43230
Testing: DevTools tests

Signed-off-by: eri <eri@igalia.com>
2026-03-13 14:05:18 +00:00
Tim van der Lippe
b6ba612a54 script: Pass &mut JSContext to TrustedScriptURL::get_trusted_type_compliant_string (#43245)
Also rename the method and consolidate the sink to be consistent with
both `TrustedHTML` and `TrustedScript`

Part of #42638

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-13 13:56:46 +00:00
Gae24
048612fe84 script: Pass &mut JSContext to children_changed and adopting_steps (#43219)
Switch `VirtualMethods::children_changed` and
`VirtualMethods::adopting_steps` to `&mut JSContext`.

Testing: No behaviour change, a successful build is enough.
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-13 13:40:40 +00:00
Jonathan Schwender
cd2c51bb3c config: Remove unused servo_url dependency (#43237)
Doesn't seem to be used in the crate anymore.

Testing: If it builds it works.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-13 12:20:28 +00:00
Tim van der Lippe
7a383bcc43 script: Pass &mut JSContext in trusted types interfaces (#43183)
Part of #40600

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-13 11:04:34 +00:00
Brent Schroeter
69a1f99bd2 devtools: Add support for one-way protocol messages (#43230)
Some Remote Debugging Protocol message types are specified as `oneway`,
meaning that they expect no reply. Sending anything—including an
error—in response to these messages throws the devtools client and actor
out of sync.

As noted in the `ClientRequest` docstring, most client messages expect
exactly one reply, so `ClientRequest::handle()` includes a fail-safe
that automatically sends an error message if none of the `reply()`,
`reply_unchecked()`, or `reply_final()` methods have been called.

This change introduces an additional method,
`ClientRequest::mark_handled()`, which allows the actor handling the
request to disarm the fail-safe without sending a reply over the wire,
and it adds handling logic for 3 one-way message types that are
frequently emitted by the Firefox Toolbox.

Testing: This change introduces no new tests. Unless we take the unusual
step of enumerating all supported one-way message types and validating
each, automated tests provide little assurance of correctness.
Meaningfully testing this feature would be cumbersome, and it would
likely hamper future development more than it would help.

Signed-off-by: Brent Schroeter <contact@brentsch.com>
2026-03-13 10:45:15 +00:00
Asset Malik
44a151f925 ohos: Add script to run blink perf tests on device (#42509)
CI: ohos blink_perf_test scenario

Background:
There are so called blink_perf_tests in the `tests/blink_perf_tests/`
that can be used to bench servo. Those are 100+ unitary test .html pages
that result in either "ms" or "runs/s".
There is also a python script that is currently used to run those tests
`etc/blink-perf-test-runner/main.py`, but it runs the tests on the host
(tested on linux).

Goal of this PR:
I want to also be able to run the tests on ohos. So I created a .py
script in etc/ci/scenario/ that is very similar to the script that is
already on servo. The script produces `results.json` and it can be
included into the bencher.dev ci and run on the ci ohos devices.

~~Testing: within `etc/ci/scenatio` directory do `uv run
blink_perf_test.py`~~
Testing: within servo project root do `UV_PROJECT=etc/ci/scenario uv run
etc/ci/scenario/blink_perf_test.py -vem`
For `help` use `-h`

---------

Signed-off-by: jane <5373400+janeoa@users.noreply.github.com>
Signed-off-by: Asset Malik <5373400+janeoa@users.noreply.github.com>
Co-authored-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-03-13 10:18:37 +00:00
Martin Robinson
ce952368f8 servo: Rename GamepadProvider to GamepadDelegate (#43233)
This makes the name of the `GamepadDelegate` consistent with the other
delegates.

Testing: No tests necessary as this is just renaming some structs and
members. Compilation should be enough.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 10:16:30 +00:00
Brent Schroeter
890ef58052 devtools: Use active pipeline and script channel in inspector actors (#43153)
The `InspectorActor` and its children now query the
`BrowsingContextActor` for the active pipeline ID and script sender
instead of storing their own copies, which become outdated on
navigation. Previously, the inspector remained permanently stuck to the
pipeline that was active upon launch. Now, connecting a fresh devtools
client session after navigation allows inspection of each
`BrowsingContext`'s active DOM.

Navigation within a continuous remote debugging session still breaks the
Firefox inspector panel. This is due to multiple compatibility issues
with the protocol implementation, which will be addressed in separate
PRs.

This PR does not touch `TimelineActor` or `FramerateActor`. These are
theoretically affected by the same issue as the `InspectorActor`, but in
practice neither is ever instantiated. It seems both have been
effectively unreachable code since 1aab10f2 and will require more
extensive work and testing that is beyond the scope of this change.

Testing: Updates to the `WalkerActor` and `BrowsingContextActor` are
unit tested via the new `test_walker_observes_new_dom_after_nav` case in
`devtools_tests.py`. There are no existing unit tests to reference for
the highlighter and style actors; these have been tested manually but
this PR does not introduce further automated tests. This PR also
improves handling of `tabNavigated` messages to simplify the unit test
written for 4c69d85.

---------

Signed-off-by: Brent Schroeter <contact@brentsch.com>
2026-03-13 10:13:55 +00:00
Taym Haddadi
628c9c1170 storage: construct and shut down public/private thread groups independently (#43147)
This PR makes public and private storage thread groups independent.

previously, `new_storage_threads()` returned two `StorageThreads`
handles, but both handles were backed by the same underlying storage
worker group. this meant Servo carried a public/private distinction
through the API and wiring layers, while both sides still talked to the
same storage backend threads.


Testing: Added shutdown_storage_group test, and should not effect WTP
test.

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-13 10:03:30 +00:00
Tim van der Lippe
af256bd6e5 script: Check for render-blocking documents before continuing (#43150)
The spec expects us to check for render blocking (among some other
state) before we start procesing a document. Therefore, add those checks
and also check in the
stylesheet loader that we should only do so when we are allowed to do
so.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-13 09:54:03 +00:00
Martin Robinson
5fec1395c9 prefs: Move Opts::print_pwm to DiagnosticsLogging::progressive_web_metrics (#43209)
This option controls whether progressive web metrics are printed to the
system console, which is essentially the purpose of
`DiagnosticsLogging`. This makes the API a bit more uniform.

Testing: We do not really have automated testing for this kind of
feature of the API.
Fixes: This is part of #34967.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 09:45:39 +00:00
Martin Robinson
6a20de06f4 servo: Set all delegates and GamepadProvider in WebViewBuilder (#43205)
This change makes it so that all of these things are set on the
`WebView` via the `WebViewBuilder`. This does make it impossible to
change the delegate after the `WebView` is constructed, but that does
mean that we can now count on that fact internally in Servo. This change
just seeks to standardize the way that these kind of structs are given
to Servo to make the API easier to understand.

Testing: There aren't currently tests for the clipboard delegate, but
this
change should work as the corresponding parts in servoshell still
compile.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-13 08:34:45 +00:00
Domenico Rizzo
b2ac181091 script: Move GPUSampler drop logic to a helper struct (#43222)
Implementing `Drop` for DOM types is being forbidden. This moves the
resource cleanup logic for `GPUSampler` to a separate
`DroppableGPUSampler` struct and removes the `allowDropImpl` flag from
the bindings configuration.

Testing: WebGpu tests just cover its cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-13 05:36:23 +00:00
Euclid Ye
97225f5537 script: Free memory earlier in hot path of input handling (#43226)
This is a hot path. This way we free the unused memory earlier.
Didn't realize the difference in #43202.

Testing: This is a memory optimization that does not change visible
behaviour.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-13 04:33:15 +00:00
dependabot[bot]
85eb3297f4 build: bump clap_lex from 1.0.0 to 1.1.0 (#43225)
Bumps [clap_lex](https://github.com/clap-rs/clap) from 1.0.0 to 1.1.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap_lex's
changelog</a>.</em></p>
<blockquote>
<h2>v1.1.0 (2015-07-16)</h2>
<h4>Features</h4>
<ul>
<li>allows creating unified help messages, a la docopt or getopts (<a
href="52bcd892ea">52bcd892</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/158">#158</a>)</li>
<li>allows stating all subcommands should <em>not</em> have --version
flags (<a
href="336c476f63">336c476f</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/156">#156</a>)</li>
<li>allows setting version number to auto-propagate through subcommands
(<a
href="bc66d3c6de">bc66d3c6</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/157">#157</a>)</li>
</ul>
<h4>Improvements</h4>
<ul>
<li><strong>Help Strings</strong> properly aligns and handles newlines
in long help strings (<a
href="f9800a2969">f9800a29</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/145">#145</a>)</li>
</ul>
<h4>Performance</h4>
<ul>
<li><strong>Help Messages</strong> big performance improvements when
printing help messages (<a
href="52bcd892ea">52bcd892</a>)</li>
</ul>
<h4>Documentation</h4>
<ul>
<li>updates readme with new features (<a
href="8232f7bb52">8232f7bb</a>)</li>
<li>fix incorrect code example for <code>App::subcommand_required</code>
(<a
href="8889689dc6">8889689d</a>)</li>
</ul>
<h2>v1.0.3 (2015-07-11)</h2>
<h4>Improvements</h4>
<ul>
<li><strong>Errors</strong> writes errors to stderr (<a
href="cc76ab8c2b">cc76ab8c</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/154">#154</a>)</li>
</ul>
<h4>Documentation</h4>
<ul>
<li><strong>README.md</strong> updates example help message to new
format (<a
href="0aca29bd5d">0aca29bd</a>)</li>
</ul>
<h2>v1.0.2 (2015-07-09)</h2>
<h4>Improvements</h4>
<ul>
<li><strong>Usage</strong> re-orders optional arguments and required to
natural standard (<a
href="dc7e1fcea5">dc7e1fce</a>,
closes <a
href="https://redirect.github.com/clap-rs/clap/issues/147">#147</a>)</li>
</ul>
<h2>v1.0.1 (2015-07-08)</h2>
<h4>Bug Fixes</h4>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9ab6dee710"><code>9ab6dee</code></a>
chore: Release</li>
<li><a
href="374a30dac6"><code>374a30d</code></a>
docs: Update changelog</li>
<li><a
href="d0c8aabc00"><code>d0c8aab</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6306">#6306</a>
from epage/update</li>
<li><a
href="686ce2f665"><code>686ce2f</code></a>
chore: Upgrade compatible</li>
<li><a
href="8203238de6"><code>8203238</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6305">#6305</a>
from epage/msrv</li>
<li><a
href="c774a892ba"><code>c774a89</code></a>
docs: Reduce main's in doctests</li>
<li><a
href="73534f6ed3"><code>73534f6</code></a>
chore: Upgrade to 2025 edition</li>
<li><a
href="dfe05a9bfe"><code>dfe05a9</code></a>
chore: Bump MSRV to 1.85</li>
<li><a
href="8b41d0b849"><code>8b41d0b</code></a>
chore: Release</li>
<li><a
href="518220f102"><code>518220f</code></a>
docs: Update changelog</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_lex-v1.0.0...clap_lex-v1.1.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap_lex&package-manager=cargo&previous-version=1.0.0&new-version=1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-13 00:45:28 +00:00
dependabot[bot]
b3fb348fa5 build: bump orbclient from 0.3.50 to 0.3.51 (#43224)
Bumps orbclient from 0.3.50 to 0.3.51.


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=orbclient&package-manager=cargo&previous-version=0.3.50&new-version=0.3.51)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-13 00:42:44 +00:00
Uiniel
0f5e02099b script: Move BlobMethods to &mut JSContext (#43215)
Move from CanGc to &mut js::context:JSContext. `ArrayBuffer` and `Bytes`
require many changes in `dom/stream` for which I'm going to create a
seperate pull request before porting the two methods.

Testing: Just a refactor, `./mach test-unit` still passes.
Fixes: Part of #42638

---------

Signed-off-by: Uiniel <174327181+uiniel@users.noreply.github.com>
2026-03-12 21:58:56 +00:00
Simon Wülker
020c651f21 script: Mark canvas as dirty after updating image data (#43218)
This makes https://theintraclinic.com/archive/minecraft4k-js/ work
correctly in servo.

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-12 20:04:21 +00:00
Jonathan Schwender
e7cac92e24 mach: Document -- interaction for clippy (#43221)
The same issue also affects check and other commands that support `--`,
but I'm not sure if it makes sense to document it everywhere.

Testing: Changes the help message, manual testing required.
Fixes: #43214

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-12 20:00:59 +00:00
Martin Robinson
c80bdd9c92 prefs: Remove Opts::nonincremental_layout (#43207)
This setting is used to control whether or not incremental legacy layout
was enabled. Nowadays incremental layout is always enabled as it is a
fundamental feature of how layout works. The setting also controls
whether or not nodes are traversed in Style, but that's also something
that's much less interesting today. This change just removes this
setting as it just controls the Stylo setting. A corresponding change in
Stylo will also remove the setting there.

Testing: This just removes a setting so existing tests should suffice.
Fixes: This is part of #34967.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-12 16:03:43 +00:00
Taym Haddadi
eabf3c70bb constellation(storage): validate storage event source and scope session fanout by webview (#43096)
Follow the spec and tightenings storage event routing in Constellation
by validating that a BroadcastStorageEvent comes from the same origin as
its source pipeline, while preserving existing localStorage fanout
behavior.

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-12 15:14:55 +00:00
Simon Wülker
c0ff7c1fc9 Everywhere: Remove instances of clippy::redundant-clone (#43212)
This change fixes all instances where
[`clippy::redundant-clone`](https://rust-lang.github.io/rust-clippy/master/index.html?groups=complexity%2Ccorrectness%2Cnursery%2Csuspicious&levels=allow#redundant_clone)
would trigger. It's allowed by default

I've also changed the lint to warn-by-default for servo.

Testing: Covered by WPT

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-12 13:28:21 +00:00
Oriol Brufau
3c86026ef1 layout: Set text-indent: 0 in UA styles for ::marker (#43201)
Authors can't set `text-indent` directly to a `::marker`, but it was
inheriting from the list item. This was causing undesirable behaviors on
markers with an outside position and a different `direction` than the
list item.

This matches other browsers:
 - Gecko: https://hg.mozilla.org/mozilla-central/rev/4366cfed8144
 - Blink: https://crrev.com/803126
 - WebKit: https://commits.webkit.org/296253@main

Testing: Improves WPT

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-12 13:20:08 +00:00
Bruno Nicoletti
3a680c5389 script: Use the shared task canceller in DedicatedWorkerGlobalScope::run_worker_scope (#43213)
Replaces the default task canceler with the shared task canceler found
in the global scope.

Testing: #42536 specifies that building is enough.
Fixes: #42536

Signed-off-by: Bruno Nicoletti <1868608+bruno-j-nicoletti@users.noreply.github.com>
2026-03-12 13:20:00 +00:00
eri
f53a259216 devtools: Handle getEnvironment message (#43167)
Initial work to support scopes in the debugger. They don't show at the
moment since we are not processing variables yet. Depends on #43166.

Testing: Ran `mach test-devtools` and manual testing.
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-12 13:13:03 +00:00
Euclid Ye
e88c5dd752 script: Notify embedder coalesced events to resolve potential WebDriver deadlock (#43202)
Notify embedder the coalesced wheel/mousemove event.

We also stop cloning every single entry in `pending_input_event`.

Testing: This should unblock the potential WebDriver thread deadlock
when receiving simultaneous wheel or pointer inputs from multiple
sources.
We added a new test that stably deadlock on
74c16ffd8a.
Firefox/Safari/Chrome all pass the new test.
Fixes:
https://github.com/servo/servo/issues/43136#issuecomment-4031702204

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-12 12:40:04 +00:00
Martin Robinson
ea995155f8 paint: Add support for a blinking text caret (#43128)
This change adds support for a blinking text caret using WebRender
`DynamicProperties` updates. This ensures that text caret updates are as
lightweight as possible. As part of this change, the initial framework
for paint-side animations is added. Though this is driven by a timer for
now (in order to not have to run full speed animations for text carets),
the idea is that more animations can be driven by `Paint` in the future
(in order to avoid doing layouts during animations).

In addition, a preference is added which controls the caret blink speed.
This is used to disable caret blinking during WPT testing.

Testing: There are no tests for this change. We do not currently have a
good
way to test caret blinking as the caret is render only and fully testing
blinking would require well timed screenshot creation.
Fixes: #33237.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-12 11:47:46 +00:00
Euclid Ye
a30bdc1870 embedder_traits: Specify clearly what the sign of WheelDelta means (#43210)
Right now this is not documented and really confusing. I believe these
decisions
are made to align with
[winit](e9809ef54b/src/event.rs (L957-L958)):
> /// Positive values indicate that the content that is being scrolled
should move
> /// right and down (revealing more content left and up).

I don't know about other people emebedding Servo, but I have always been
thinking reversely.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-12 10:46:03 +00:00
Martin Robinson
8432a21d63 prefs: Move Opts::user_stylesheets to ServoShellPreferences (#43206)
This concept does not need to be exposed to `Opts` any longer as it just
controls how servoshell uses the `WebView` API.

Testing: A successful compilation is enough here as this is just moving
an option.
Fixes: This is part of #34967.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-12 10:28:02 +00:00
Jonathan Schwender
961b618a98 libservo: Remove dependency on gstreamer.py (#43165)
A published or vendored package will not have access to gstreamer.py.
Hence, we move the package list into libservo, and modify the remaining
usage of gstreamer.py (in mach) to read the same list.


Testing: Covered by CI testing, which involves building servo and the
macos dmg and windows installer.

Fixes: Part of #43145

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-12 06:31:03 +00:00
Josh Matthews
69d4353eca libservo: Expose ClipboardDelegate in public API. (#43203)
Per [#embedding > Miscellaneous Embedding
Questions](https://servo.zulipchat.com/#narrow/channel/437943-embedding/topic/Miscellaneous.20Embedding.20Questions/with/578835363),
it is impossible to call `WebView::set_clipboard_delegate` because the
ClipboardDelegate trait is not exposed in the public embedding API.

Testing: Compile-only, and doesn't feel worth implementing additional
functionality in servoshell to verify this.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-12 06:06:27 +00:00
Luke Warlow
a27bd9dde7 prefs: Remove dom_command_invokers_enabled (#43190)
Remove command invokers preference

This now passes most of the relevant tests. Most of the remaining
failures are due to missing functionality such as the popover API,
element reflection properties (see
https://github.com/servo/servo/issues/42884), and issues with the event
retargeting code that doesn't handle shadow dom correctly.

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-12 06:03:26 +00:00
Jonathan Schwender
9069043477 Move ply and WebIDL into script_bindings (#43180)
This is required to publish script_bindings, since all files used during
codegen need to be there.
It might also be possible to generate the bindings ahead of time and
vendor them in-tree, but this seems painful to setup from a CI
perspective.
Since there don't seem to be any other users in-tree we can just vendor
into the script-bindings directory.

`ply` is licensed under the BSD 3 clause, and WebIDL under MPL-2.0, with
the licenses available in our cargo package. Both tools won't end up in
`servo` since they are build-time dependencies, so I believe we don't
need to adjust the crate license, or configure `about.toml`.

Testing: Should be covered by existing tests. We don't test if this
allows vendored builds or published builds.
Fixes: Partial fix for #43145

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-12 05:44:46 +00:00
dependabot[bot]
74c16ffd8a build: bump quick_cache from 0.6.18 to 0.6.19 (#43200)
Bumps [quick_cache](https://github.com/arthurprs/quick-cache) from
0.6.18 to 0.6.19.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/arthurprs/quick-cache/releases">quick_cache's
releases</a>.</em></p>
<blockquote>
<h2>v0.6.19</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix cache with weight_capacity=1 silently storing nothing by <a
href="https://github.com/arthurprs"><code>@​arthurprs</code></a> in <a
href="https://redirect.github.com/arthurprs/quick-cache/pull/106">arthurprs/quick-cache#106</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.18...v0.6.19">https://github.com/arthurprs/quick-cache/compare/v0.6.18...v0.6.19</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="90fcb726b6"><code>90fcb72</code></a>
0.6.19</li>
<li><a
href="6cdf3fbadd"><code>6cdf3fb</code></a>
Fix cache with weight_capacity=1 silently storing nothing (<a
href="https://redirect.github.com/arthurprs/quick-cache/issues/106">#106</a>)</li>
<li>See full diff in <a
href="https://github.com/arthurprs/quick-cache/compare/v0.6.18...v0.6.19">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quick_cache&package-manager=cargo&previous-version=0.6.18&new-version=0.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-12 00:51:25 +00:00
dependabot[bot]
c0a62e10be build: bump libz-sys from 1.1.24 to 1.1.25 (#43199)
Bumps [libz-sys](https://github.com/rust-lang/libz-sys) from 1.1.24 to
1.1.25.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libz-sys/releases">libz-sys's
releases</a>.</em></p>
<blockquote>
<h2>1.1.25</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump the github-actions group across 1 directory with 2 updates by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/238">rust-lang/libz-sys#238</a></li>
<li>Bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/239">rust-lang/libz-sys#239</a></li>
<li>Bump actions/download-artifact from 4.2.1 to 4.3.0 in the
github-actions group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/240">rust-lang/libz-sys#240</a></li>
<li>fix: Remove forcing static builds when cross-compiling by <a
href="https://github.com/polarathene"><code>@​polarathene</code></a> in
<a
href="https://redirect.github.com/rust-lang/libz-sys/pull/244">rust-lang/libz-sys#244</a></li>
<li>update to <code>zlib-ng</code> version <code>2.2.5</code> by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/251">rust-lang/libz-sys#251</a></li>
<li>Bump the github-actions group across 1 directory with 3 updates by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/250">rust-lang/libz-sys#250</a></li>
<li>fix: Support opt-out of static linking via
<code>LIBZ_SYS_STATIC=0</code> by <a
href="https://github.com/polarathene"><code>@​polarathene</code></a> in
<a
href="https://redirect.github.com/rust-lang/libz-sys/pull/252">rust-lang/libz-sys#252</a></li>
<li>Bump actions/checkout from 5.0.0 to 6.0.0 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/253">rust-lang/libz-sys#253</a></li>
<li>Bump actions/checkout from 6.0.0 to 6.0.1 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/254">rust-lang/libz-sys#254</a></li>
<li>Bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/255">rust-lang/libz-sys#255</a></li>
<li>Bump actions/checkout from 6.0.1 to 6.0.2 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/256">rust-lang/libz-sys#256</a></li>
<li>upgrade to zlib-ng 2.3.3 by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/257">rust-lang/libz-sys#257</a></li>
<li>release using zlib-ng version 2.3.3 by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/258">rust-lang/libz-sys#258</a></li>
<li>Bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/261">rust-lang/libz-sys#261</a></li>
<li>Bump zlib submodule to 1.3.2 by <a
href="https://github.com/dalvescb"><code>@​dalvescb</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/259">rust-lang/libz-sys#259</a></li>
<li>Bump version to 1.1.25 by <a
href="https://github.com/dalvescb"><code>@​dalvescb</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/262">rust-lang/libz-sys#262</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/polarathene"><code>@​polarathene</code></a>
made their first contribution in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/244">rust-lang/libz-sys#244</a></li>
<li><a href="https://github.com/dalvescb"><code>@​dalvescb</code></a>
made their first contribution in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/259">rust-lang/libz-sys#259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.22...1.1.25">https://github.com/rust-lang/libz-sys/compare/1.1.22...1.1.25</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="34bbe0ce68"><code>34bbe0c</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/262">#262</a>
from dalvescb/version-bump</li>
<li><a
href="c0563739c6"><code>c056373</code></a>
bump version to 1.1.25</li>
<li><a
href="b19d27891e"><code>b19d278</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/259">#259</a>
from dalvescb/curtisd/bump_zlib</li>
<li><a
href="a6d9cc1b59"><code>a6d9cc1</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/261">#261</a>
from rust-lang/dependabot/github_actions/github-actio...</li>
<li><a
href="b123c95cd6"><code>b123c95</code></a>
Fix build after most recent <code>ZLIB</code> update to 1.3.2</li>
<li><a
href="18c87003c9"><code>18c8700</code></a>
Bump the github-actions group with 2 updates</li>
<li><a
href="f7636041e9"><code>f763604</code></a>
retrigger CI</li>
<li><a
href="6a12c357f8"><code>6a12c35</code></a>
bump zlib submodule to 1.3.2</li>
<li>See full diff in <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.24...1.1.25">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libz-sys&package-manager=cargo&previous-version=1.1.24&new-version=1.1.25)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-12 00:41:37 +00:00
Simon Wülker
333e195845 script: Log uncaught JS exceptions to the console (#43191)
The script execution code has changed a bit in the last months so some
things that used to work don't anymore.

This change ensures that when an exception is thrown it is logged to the
console.

Testing: Regressions are covered by wpt, but we can't run tests for the
presence of `log::error!` calls

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-11 21:40:54 +00:00
Martin Robinson
f0c5b37c24 wpt: Use the default Servo user agent for WPT tests (#43185)
Some WPT tests [^1] rely on the user agent reflecting that of a real
browser or platform. This change makes it so that the user agent that
Servo uses when running the WPT is the default one, which includes the
platform.

[^1]:
aae5c4cd97/tests/wpt/tests/resources/accesskey.js (L16)

Testing: This causes some access key tests to pass on macOS.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-11 19:16:38 +00:00
Luke Warlow
e752359bbd script: Account for multiple in <input type=file> text (#43186)
File input button and description text now accounts for multiple file
support.

Testing: Manual test via https://demo.lukewarlow.dev/css-forms.html

<img width="214" height="131" alt="image"
src="https://github.com/user-attachments/assets/4894bca6-2d56-4d48-ac10-96f23fd70f2c"
/>

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-11 19:03:51 +00:00
Martin Robinson
4659dacf64 script: Simplify the KeyboardEvent constructor (#43187)
Simplify the `KeyboardEvent` constructor by taking the actual
`keyboard_types` `KeyboardEvetnt` as an argument. This means that we do
not have to repeat the logic for extracting all the data from the
platform event.

Testing: This should not change behavior and is thus covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-11 19:01:52 +00:00
Jonathan Schwender
04ca254f84 devcontainer: Use new prebuilt devcontainer image. (#43139)
Follow-up to #43131.

Testing: Tested locally. Note: This only works for x86_64 based systems.
Arm Linux users will need to build from source, but building in the
devcontainer on arm linux is anyway not working currently.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-11 17:27:32 +00:00
Tim van der Lippe
aae5c4cd97 script: Move Trusted Types interfaces to script/dom/trustedtypes (#43181)
Part of #38901 

Testing: it compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-11 16:26:56 +00:00
Simon Wülker
c84edc0403 script: Fire an error event when event handler fails to compile (#43178)
For the longest time we've had a `dispatch_event` boolean flag in our
error reporting code that determines whether or not to fire an `error`
event. It was only set to `false` in the event handler code due to a
double borrow that would occur otherwise. It seems that this is no
longer a problem, so we can remove the flag and correctly fire the event
in that case too.

Testing: A new test starts to pass and
`html/webappapis/scripting/processing-model-2/runtime-error-in-body-onerror.html`
does not crash
Fixes: https://github.com/servo/servo/issues/13152

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-11 15:52:38 +00:00
eri
948859b2fe devtools: Allow registering environment actor from debugger.js (#43166)
This functionality will be used in a follow up patch to implement the
getEnvironment message.

Testing: Check `mach test-devtools` and manual test
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-11 15:45:35 +00:00
minghuaw
3a50ff1c10 layout: Add initial support for first-letter pseudo element (#43027)
This and the accompanying stylo PR
(https://github.com/servo/stylo/pull/320) is a partial implementation of
the `first-letter` pseudo element.

Testing: Existing WPT tests. There is one WPT test
(fcp-typographic-pseudo.html) that servo currently fails would timeout
with this PR because opacity of `TextFragment` is taken from the
`InlineFormattingContext` instead of the pseudo element.
Fixes: #43008 
Part of: #15413

---------

Signed-off-by: Minghua Wu <michael.wu1107@gmail.com>
Signed-off-by: minghuaw <michael.wu1107@gmail.com>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Xiaocheng Hu <xiaochengh.work@gmail.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-11 15:30:15 +00:00
Luke Warlow
307ee6a1c5 layout: Paint the <select> chevon using an SVG (#43175)
Previously there were two issues:

1. The select chevron had a 4px margin which should have just applied to
the inline axis.
2. The chevron character had odd font metrics, so even once the margin
is fixed the select is still too tall.

This is fixed by using an SVG as a background-image instead of using the
▾ character.

Testing: Tested with https://demo.lukewarlow.dev/css-forms.html (and the
test case added in https://github.com/servo/servo/pull/42085).

| Before | After |
| ------|------|
| <img width="522" height="267" alt="image"
src="https://github.com/user-attachments/assets/7cc2d840-3384-4a6c-8945-0277cfb4096d"
/> | <img width="509" height="250" alt="image"
src="https://github.com/user-attachments/assets/99742dca-3ce6-4964-98bd-0cdbf3e14937"
/> |

---------

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-11 13:56:32 +00:00
Oriol Brufau
a8142546ca Improve list-style-type and counter styles (#43111)
Bumps Stylo to https://github.com/servo/stylo/pull/329, and modifies the
code accordingly:
- Implements basic `counter()` and `counters()`, instead of treating
them as empty string.
- For `list-style-type`, uses normal space instead of non-breaking space
in the suffix, since `::marker` has `white-space: pre` anyways.
`counter()` and `counters()` don't get a suffix.
- Changes `disclosure-closed` to use ▸ (U+25B8 Black Right-Pointing
Small Triangle) instead of ‣ (U+2023 Triangular Bullet).
- Implements `list-style-type: <string>`.
- Implements basic `<counter-style-name> | <symbols()>` for both
counters and `list-style-type`.

However, since `@counter-style` and `counter-*` properties are still
unsupported, non-predefined keywords just default to decimal, and
counters are assumed to have a value of 0.

The UA stylesheet is tweaked to avoid a problem when `list-style-type`
is set to a string with multiple lines.

Testing: 63 tests improve, 17 tests worsen (they were falsely passing
beforehand)
- #43117
-
`tests/wpt/tests/css/css-lists/content-property/marker-text-matches-circle.html`
-
`tests/wpt/tests/css/css-lists/content-property/marker-text-matches-disc.html`
-
`tests/wpt/tests/css/css-lists/content-property/marker-text-matches-square.html`
- #43118
  - `tests/wpt/tests/css/css-lists/nested-marker-dynamic.html`
  - `tests/wpt/tests/css/css-lists/nested-marker.html`
- #43036
-
`tests/wpt/tests/css/css-lists/list-style-type-decimal-line-height.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-002.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-003.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-003b.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-004.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-005.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-015.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-016.html`
  - `tests/wpt/tests/css/css-pseudo/marker-content-018.html`
- #30365
-
`tests/wpt/tests/css/css-pseudo/marker-font-variant-numeric-default.html`
  - `tests/wpt/tests/css/css-pseudo/marker-line-height.html`
- #43119
  - `tests/wpt/tests/css/css-pseudo/marker-tab-size.html`

Fixes: #43037

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-11 13:21:19 +00:00
Euclid Ye
c242860f0e ci: Upgrade soon deprecated GitHub Actions (#43173)
I got so many warnings about [Node 20
EOL](https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/)
in the [try](https://github.com/servo/servo/actions/runs/22945103342):

> The following actions are running on Node.js 20 and may not work as
expected...

We avoid touching those actions forked from web-platform-tests.

Testing: If this can merge, it is successful.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-11 11:02:42 +00:00
Euclid Ye
0153f2ff0a embedder_traits: Upgrade InputEventHandled to InputEventsHandled to batch IPC response (#43169)
We send back input events handling results in batch. This reduces IPC,
and make the following **TODO** possible in a follow-up.

Testing: I hope existing tests results won't change.
Part of
https://github.com/servo/servo/issues/43136#issuecomment-4031915873
**TODO**: We have not done 
> collect ids and send back a reply for each of them once the coalesced
event has been handled.

yet.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-11 10:14:25 +00:00
Jonathan Schwender
fca0a2555e deny.toml: Clarify time-rs CVE. (#43148)
The CVE doesn't impact us, so we can ignore it safely. This improves the
comment above the ignored entry in deny.toml. We test our own code via
`clippy` and we aren't using the vulnerable type. Our dependencies could
in theory use it, but that seems rather unlikely.

Testing: test-tidy is tested in CI.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-11 09:42:41 +00:00
shuppy
f9fd3968e5 Fix -p servo lib target build (and fix CI check accordingly) (#43170)
the `-p servo` (formerly libservo) lib target was busted for anyone
genuinely consuming it as a library, but we didn’t catch it because the
CI job designed to check it built `-p servo` with --all-targets, which
unlike library consumers pulls in [dev-dependencies].

this patch fixes the compile error, and fixes the CI check to build `-p
servo` in a more realistic configuration.

Testing: tested in CI, and locally with `cargo build -p servo --locked`
Fixes: #43168

Signed-off-by: delan azabani <dazabani@igalia.com>
2026-03-11 09:21:59 +00:00
Jonathan Schwender
26e724bd83 ci: Upload ohos nightly with correct path (#43164)
#43114 made the action error if the artifact is not found, which exposed
an issue with uploading the wrong path. We don't really care about
uploading the x86_64 version of the ohos library, since it is not used
in the release (not now at least), but it's better to fix the condition
anyway.
Fixes nightly upload failures like in
https://github.com/servo/servo/actions/runs/22927035640/job/66539862051

Testing: Not tested

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-11 06:45:47 +00:00
Tim van der Lippe
c1c5e9373c script: Complete basic implementation of delete command (#43082)
While we are not there yet, this is the majority of the implementation
of the delete command.

What's missing:
1. Handling of style attributes (most of the test failures)
2. Handling of lists

Since these are quite complicated on their own, deferring that to their
own PR.

Also added more assertions regarding parent nodes, which should always
exist in the spec. By adding those, discovered that the logic for
`is_visible` was wrong where its display value wasn't checked for
`"none"`.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-11 06:06:51 +00:00
Euclid Ye
605291b7e0 webdriver: Support interspersed scroll actions via event queue (#43126)
Scroll and PointerMove is quite similar. We did so for `PointeMove` in
https://github.com/servo/servo/pull/42289 +
https://github.com/servo/servo/pull/42946.

Imagine having 3 non-zero duration scroll actions with origin at
different Elements.
Previously we would wait for one to be fully dispatched before moving to
next action,
instead of interspersed.

We also consolidate `PendingPointerMove` and
newly added `PendingScroll` into `enum PendingActions`.

Testing: 
[Existing tests behaviour not
changing.](https://github.com/servo/servo/actions/runs/22887005716).
Added a wdspec test.
Previously: `['wheel', 'wheel', 'wheel', 'wheel', 'wheel', 'wheel',
'wheel', 'wheel', 'wheel', 'move']`
Now: `['wheel', 'move', 'wheel', 'move', 'wheel', 'move', 'move',
'wheel', 'wheel', 'move', 'move', 'wheel', 'wheel', 'move', 'move',
'wheel']`

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-11 03:43:39 +00:00
dependabot[bot]
72cab0da23 build: bump schannel from 0.1.28 to 0.1.29 (#43156)
Bumps [schannel](https://github.com/steffengy/schannel-rs) from 0.1.28
to 0.1.29.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ff7ffd3061"><code>ff7ffd3</code></a>
Release v0.1.29</li>
<li><a
href="3530cff984"><code>3530cff</code></a>
Merge pull request <a
href="https://redirect.github.com/steffengy/schannel-rs/issues/121">#121</a>
from nateprewitt/fix_tls13_data_corruption</li>
<li><a
href="a13669743d"><code>a136697</code></a>
add test for tls renegotiation (TLS1.3, <a
href="https://redirect.github.com/steffengy/schannel-rs/issues/121">#121</a>)</li>
<li><a
href="6e817dbd9c"><code>6e817db</code></a>
Fix TLS 1.3 data corruption from double-send during renegotiation</li>
<li><a
href="f75095d87c"><code>f75095d</code></a>
Merge pull request <a
href="https://redirect.github.com/steffengy/schannel-rs/issues/120">#120</a>
from steffengy/feature/119-wrong-ncrypt-check</li>
<li><a
href="42692500ff"><code>4269250</code></a>
Fix condition <a
href="https://redirect.github.com/steffengy/schannel-rs/issues/119">#119</a>
for CERT_NCRYPT_KEY_SPEC check</li>
<li><a
href="6cc5637214"><code>6cc5637</code></a>
Merge pull request <a
href="https://redirect.github.com/steffengy/schannel-rs/issues/117">#117</a>
from 42triangles/master</li>
<li><a
href="ed24fe264b"><code>ed24fe2</code></a>
Use <code>package.include</code> to only include necessary data for
using the crate</li>
<li>See full diff in <a
href="https://github.com/steffengy/schannel-rs/compare/v0.1.28...v0.1.29">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=schannel&package-manager=cargo&previous-version=0.1.28&new-version=0.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-11 03:38:56 +00:00
Shubham Gupta
8d46c1b449 paint: Clamp initial-scale while processing ViewportDescription (#42922)
We can clamp the `initial-scale` while processing `ViewportDescription`.
No need to have a long route to clamp it and removes circular
dependency.

Testing: This is just a minor refactoring. No change in behavior
expected.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-11 01:57:17 +00:00
Martin Robinson
f6aa72146d script: Correct equality check when detecting whether element has access key assigned (#43144)
The equality check used to detect whether an element has an access key
assigned was reversed. This meant that access keys did not work on
non-form control elements. This change fixes the equality sign and adds
a test for this behavior.

Testing: A new Servo-specific test is added. Access key behavior
activation
behavior is very lightly specified so the way we deal with it is
Servo-specific at the moment.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-11 01:19:29 +00:00
dependabot[bot]
7a9e3a7bbc build: bump inotify from 0.11.0 to 0.11.1 (#43157)
Bumps [inotify](https://github.com/hannobraun/inotify) from 0.11.0 to
0.11.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hannobraun/inotify-rs/blob/main/CHANGELOG.md">inotify's
changelog</a>.</em></p>
<blockquote>
<h2>v0.11.1 (2026-03-06)</h2>
<ul>
<li>Make improvements to documentation (<a
href="https://redirect.github.com/hannobraun/inotify/issues/224">#224</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/226">#226</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/228">#228</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/239">#239</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/240">#240</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/244">#244</a>)</li>
<li>Add <code>EventMask::parse</code> and <code>ParsedEventMask</code>
(<a
href="https://redirect.github.com/hannobraun/inotify/issues/236">#236</a>,
<a
href="https://redirect.github.com/hannobraun/inotify/issues/238">#238</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/hannobraun/inotify/issues/224">#224</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/224">hannobraun/inotify-rs#224</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/226">#226</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/226">hannobraun/inotify-rs#226</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/228">#228</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/228">hannobraun/inotify-rs#228</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/236">#236</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/236">hannobraun/inotify-rs#236</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/238">#238</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/238">hannobraun/inotify-rs#238</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/239">#239</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/239">hannobraun/inotify-rs#239</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/240">#240</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/240">hannobraun/inotify-rs#240</a>
<a
href="https://redirect.github.com/hannobraun/inotify/issues/244">#244</a>:
<a
href="https://redirect.github.com/hannobraun/inotify-rs/pull/244">hannobraun/inotify-rs#244</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="425d4e130c"><code>425d4e1</code></a>
Update version</li>
<li><a
href="c388f0a447"><code>c388f0a</code></a>
Update changelog</li>
<li><a
href="9df4910a7b"><code>9df4910</code></a>
Auto-format <code>CHANGELOG.md</code></li>
<li><a
href="24c6e4809d"><code>24c6e48</code></a>
Merge pull request <a
href="https://redirect.github.com/hannobraun/inotify/issues/248">#248</a>
from WhyNotHugo/now_or_never</li>
<li><a
href="34ca041657"><code>34ca041</code></a>
Test draining without blocking</li>
<li><a
href="0c57af978f"><code>0c57af9</code></a>
Merge pull request <a
href="https://redirect.github.com/hannobraun/inotify/issues/243">#243</a>
from WhyNotHugo/test-delete</li>
<li><a
href="c5617bddcb"><code>c5617bd</code></a>
Add test for DELETE and DELETE_SELF events</li>
<li><a
href="5aae461996"><code>5aae461</code></a>
Merge pull request <a
href="https://redirect.github.com/hannobraun/inotify/issues/244">#244</a>
from WhyNotHugo/warn-vec</li>
<li><a
href="fb88cce94c"><code>fb88cce</code></a>
Warn about using Vec::with_capacity(4096) as buffer</li>
<li><a
href="7ef750bfc7"><code>7ef750b</code></a>
Merge pull request <a
href="https://redirect.github.com/hannobraun/inotify/issues/240">#240</a>
from JackDyre/event-into-stream-docs</li>
<li>Additional commits viewable in <a
href="https://github.com/hannobraun/inotify/compare/v0.11.0...v0.11.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=inotify&package-manager=cargo&previous-version=0.11.0&new-version=0.11.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-11 01:00:14 +00:00
Oriol Brufau
517262fb34 deps: Bump Stylo to "Share Device logic among Gecko and Servo" (#43146)
Stylo PR: https://github.com/servo/stylo/pull/330

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-10 21:08:29 +00:00
Simon Wülker
2697f3a91a script: Accurately measure timing of DOMContentLoaded event (#43151)
We should measure the time it takes to fire the `DOMContentLoaded`
event, but we were including the time it takes for the task on the
relevant task source to be run.

Testing: The timing should be slightly more accurate but that is hard to
measure or test for. Therefore this PR does not include a test.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-10 20:58:10 +00:00
Jonathan Schwender
e23f052412 Rename libservo to servo (#43141)
As discussed on zulip we would like to rename `libservo` to `servo`
(again) before a future crates.io release.
Servo is a library, so the `lib` prefix is somewhat redundant. We
already renamed the binary of ServoShell to `servoshell`, to reduce
confusion of users of what servo is.

Note: This PR does not touch all occurrences of `libservo`. Specifically
CI job names remain untouched, since the risk of breaking something is
higher here, harder to test for and the name not user facing.

Testing: CI testing of this change should give us good confidence.
Manual testing of `./mach doc` and `./mach build` showed no issues on
macos. [Full try
run](https://github.com/jschwe/servo/actions/runs/22909562747)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-10 20:55:14 +00:00
Gae24
4ef22ed227 script: Pass &mut JSContext to VirtualMethods::cloning_steps and Node::clone (#43130)
Continuation of #43108, two new `temp_cx()` calls were required:
- inside `maybe_clone_an_option_into_selectedcontent` since it's part of
a markup5ever trait
- inside `serialize_and_cache_subtree` replacing a `CanGc::note()` call,
propagating it inside reflow code will require even more effort.

Testing: No behaviour change, a successful build is enough.
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-10 17:05:34 +00:00
Gae24
bc1cd2ceeb script: bump mozjs to use SpiderMonkey 140.8 and set more compile options (#43020)
Set `mutedErrors_`, `noScriptRval`, `isRunOnce` compile options.

Testing: A test now passes
Part of #38378

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-10 17:02:19 +00:00
atbrakhi
ed3e63d054 devtools: create helper functions to reduce duplication in tests (#43140)
Create helper functions to reduce boilerplate in some tests

Testing: All tests are passing
Fixes: See comment
https://github.com/servo/servo/pull/43135#pullrequestreview-3921936566

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-10 15:43:22 +00:00
Jonathan Schwender
08e6bad428 ci: No longer upload legacy GitHub release assets (#43137)
We previously changed the asset name format in
84d0919a7f.
We kept the old asset name to support bisection scripts. It's been 5
months since that change, so remove the old asset names.

Note: We never changed the asset names for our S3 upload, and this PR
doesn't touch S3.

Testing: Not tested, trivial change.
Fixes: #42101

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-10 15:43:16 +00:00
Simon Wülker
c37ae57a0d script: Only send objects with ESClass::Object to devtools (#43133)
We should only send previews of ordinary objects[^1] (i think that's the
correct term) objects to the devtools. The code is not designed to
handle other objects, which currently causes crashes.

Testing: This change adds a devtools test that crashes without this
change.

[^1]: https://tc39.es/ecma262/#ordinary-object

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-10 15:19:03 +00:00
Euclid Ye
67e54cc61d script: Replace the InputEventId of existing_constellation_wheel_event when coalescing wheel events (#43138)
Basically, any testdriver tests with scroll duration 
more than `16ms` can be intermittent due to this.

Fixes: #43136
Fixes: #43110
Testing: This fixes the issue where newly added test 
in #43126 randomly TIMEOUT with very high probability: 
https://github.com/servo/servo/actions/runs/22906496902

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-10 14:41:58 +00:00
Martin Robinson
66c7f81b6c deps: Update Stylo to include "Restore Servo's original form control theme colors" (#43107)
This change just updates the version of Stylo to a version which
restores the original Servo theme colors.

Stylo PR: servo/stylo#327
Testing: This just restore the original form control theme colors, so
should
not change test results. Manual testing was performed with the
`form-controls-visual.html` test. One form tests starts to fail due to
subpixel differences. This test was failing originally (before form
control style was inadvertently changed). This likely happens due to
the rounded grey borders of buttons. This PR changes them back to
gray from black.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-10 13:48:41 +00:00
Jonathan Schwender
6f15489be6 devcontainer: Add workflow to build and publish Ubuntu amd64 devcontainer (#43131)
This adds a simple workflow to build and push the devcontainer to our
github container registry.
This would allow us (in a follow-up PR) to use the prebuild devcontainer
image from ghcr, instead of needing to first build the image from
scratch, which can save quite a bit of time.
This a part of #40656.

Testing: workflow run in my fork:
https://github.com/jschwe/servo/actions/runs/22897536246/job/66435358111
-> created the following image:
https://github.com/jschwe/servo/pkgs/container/servo%2Fdevcontainer-ubuntu

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-03-10 12:56:29 +00:00
atbrakhi
3adc252612 devtools: Add test for StepIn, StepOut and StepOver hooks (#43135)
This PR adds a test for `StepIn`, `StepOut` and `StepOver` hooks.

This test is intentionally designed to include all three `StepIn`,
`StepOut` and `StepOver` hooks in one test. This could be tested
separately but in a real use case one is mostly using these hooks
together in a single debugging session, not in isolation.

It is important we mirror that workflow. Also considering this area is
actively under development, it would be easier to catch regressions with
this flow test.

Testing: Added a new test
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-10 12:41:00 +00:00
Sam
764ef29de5 chore: Bump mozangle to 0.5.5 (#43134)
For https://github.com/servo/servo/pull/43116

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-03-10 11:46:45 +00:00
Shubham Gupta
66e1350dab layout: Support svg in border-image-source (#42566)
Extends the SVG support for `border-image-source`

> The logic is almost identical to `build_background_image`

Testing: Following WPT Tests Passed
- `tests/wpt/tests/css/css-backgrounds/border-image-image-type-002.htm`
- `tests/wpt/tests/css/css-backgrounds/border-image-image-type-004.htm` 
- `tests/wpt/tests/css/css-backgrounds/border-image-image-type-005.htm`
- `tests/wpt/tests/css/css-backgrounds/border-image-repeat-1.html`
- `tests/wpt/tests/paint-timing/fcp-only/fcp-border-image-with-svg.html`

Fixes: #42098

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-10 10:16:33 +00:00
atbrakhi
6ca286d6cd devtools: Update firefox version (#43129)
Update Firefox to 146 version

Testing: Existing tests are passing

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-10 09:58:38 +00:00
Jonathan Schwender
4fa57ff0ff devcontainer: Add a dockerignore (#43127)
Rename the dockerfile and add a dockerignore. This reduces the size of
the build-context greatly.
Renaming is a preparation for later adding more possible dockerfiles
(e.g. fedora based etc).
We choose the filename based `.dockerignore` files over a
`.dockerignore` in the root folder mainly to reduce clutter in the root
folder.
This addresses the problem of large build context raised on zulip by
@glyn.

Testing: Manually tested by building the image locally.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-10 09:20:40 +00:00
Shubham Gupta
b9b95e34a2 fonts: Fix font-weight matching behavior for "simple" font families (#43125)
This aligns with behavior with spec, by selecting `BOLD` for the weights
greater than 500.

- W3C Specs:
[font-style-matching](https://www.w3.org/TR/css-fonts-4/#font-style-matching)

> If the desired weight is greater than 500, weights greater than or
equal to the desired weight are checked in ascending order followed by
weights below the desired weight in descending order until a match is
found.

- Firefox: https://phabricator.services.mozilla.com/D274775

Testing: This causes a WPT test to start passing.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-10 07:49:23 +00:00
dependabot[bot]
e98336150b build: bump zerocopy from 0.8.40 to 0.8.42 (#43122)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.40 to
0.8.42.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.41</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Add code generation tests by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3042">google/zerocopy#3042</a></li>
<li>Introduce 'Code Generation' documentation by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3078">google/zerocopy#3078</a></li>
<li>[codegen] Track unanalyzed assembly and include it in docs. by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3081">google/zerocopy#3081</a></li>
<li>[codegen] Use descriptive benchmark target fn name. by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3082">google/zerocopy#3082</a></li>
<li>[codegen] Make codegen tests even more stressful. by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3083">google/zerocopy#3083</a></li>
<li>[codegen] Test and document codegen under different layouts by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3085">google/zerocopy#3085</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.40...v0.8.41">https://github.com/google/zerocopy/compare/v0.8.40...v0.8.41</a></p>
<h2>v0.8.41-alpha</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Add code generation tests by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3042">google/zerocopy#3042</a></li>
<li>Introduce 'Code Generation' documentation by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3078">google/zerocopy#3078</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.40...v0.8.41-alpha">https://github.com/google/zerocopy/compare/v0.8.40...v0.8.41-alpha</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="90600f141f"><code>90600f1</code></a>
[docs] Remove superfluous heading (<a
href="https://redirect.github.com/google/zerocopy/issues/3099">#3099</a>)</li>
<li><a
href="fc7362493d"><code>fc73624</code></a>
[codegen] Test and document codegen under different layouts (<a
href="https://redirect.github.com/google/zerocopy/issues/3085">#3085</a>)</li>
<li><a
href="098b966fa6"><code>098b966</code></a>
[codegen] Make codegen tests even more stressful. (<a
href="https://redirect.github.com/google/zerocopy/issues/3083">#3083</a>)</li>
<li><a
href="daa19713c0"><code>daa1971</code></a>
[codegen] Use descriptive benchmark target fn name. (<a
href="https://redirect.github.com/google/zerocopy/issues/3082">#3082</a>)</li>
<li><a
href="aa1bbf4cae"><code>aa1bbf4</code></a>
[codegen] Track unanalyzed assembly and include it in docs. (<a
href="https://redirect.github.com/google/zerocopy/issues/3081">#3081</a>)</li>
<li><a
href="dbef2724b5"><code>dbef272</code></a>
Release 0.8.41-alpha (<a
href="https://redirect.github.com/google/zerocopy/issues/3080">#3080</a>)</li>
<li><a
href="128f030013"><code>128f030</code></a>
Introduce 'Code Generation' documentation (<a
href="https://redirect.github.com/google/zerocopy/issues/3078">#3078</a>)</li>
<li><a
href="2694453fef"><code>2694453</code></a>
Add code generation tests (<a
href="https://redirect.github.com/google/zerocopy/issues/3042">#3042</a>)</li>
<li>See full diff in <a
href="https://github.com/google/zerocopy/compare/v0.8.40...v0.8.42">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.40&new-version=0.8.42)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-10 00:49:21 +00:00
Taym Haddadi
877502e86f WebCryptoAPI: implement Ed25519 and split Handle::Ed25519 into Ed25519PrivateKey and Ed25519PublicKey (#43115)
Testing: Ed25519 test passed.
Fixes: Part of https://github.com/servo/servo/issues/43072

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-09 17:51:52 +00:00
Euclid Ye
819b3533c3 ci: Fail the action if artifact not found when uploading; Update actions/upload-artifact to v7 (#43114)
- Rename instead of copy the `cargo-timings` folder
- Fail the action if artifact not found in upload-artifact. This should
prevent things like #43102
- Update `actions/upload-artifact` to v7

Testing: If this can merge, it is successful.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-09 17:24:52 +00:00
Luke Warlow
62e72b027f script: Implement node.moveBefore() (#41238)
Implement node.moveBefore()

This implements the atomic move method for DOM nodes. This allows moving
elements within the DOM without running the full remove and insertion
steps, allowing more seamless behaviour such as CSS transitions
continuing from where they are rather than restarting.

Spec: https://dom.spec.whatwg.org/#dom-parentnode-movebefore

Testing: Existing WPTs

---------

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-09 16:39:56 +00:00
Martin Robinson
19da10cb0f script_bindings: Remove EncodedBytesView and simplify StringView (#43083)
This change simplifies some of the internals of `DOMString` by doing two
things:

1. Removing `EncodedBytesView`. This was almost always used to get
   `EncodedBytes` so its functionality is merged into `EncodedBytes`
   and `DOMString::encoded_bytes` returns it directly.
2. Have `StringView` hold a reference to a `&str` instead of a
   `DOMString`. This type is used to represent a Rust `&str` anyway, so
   it doesn't make sense to hold a `DOMString`.

These changes simplify the code.

Testing: These changes should not modify behavior and are thus covered
by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-09 13:40:22 +00:00
Narfinger
9062952bf9 script: Add UnrootedSimpleNodeIterator (#42978)
In the same vein as https://github.com/servo/servo/pull/42781 we
implement a UnrootedSimpleNodeIterator that takes a no_gc and does not
root the required nodes.

We include an example usage in 'dom/text.rs' WholeText.

This requires https://github.com/servo/servo/pull/42781 to be merged
first.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-09 12:28:07 +00:00
Kingsley Yung
c3060385bc script: Implement "getPublicKey" operations of ECDSA and ECDH (#43106)
Implement "getPublicKey" operations of ECDSA and ECDH. The steps are
implemented at the new submodule `ec_common` shared by ECDSA and ECDH.

To make the operations functioning, they are also registered at
`GetPublicKeyAlgorithm`.

Specification:
https://wicg.github.io/webcrypto-modern-algos/#SubtleCrypto-method-getPublicKey
Testing: Pass WPT tests that were expected to fail.
Fixes: Part of #43072

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-09 12:01:27 +00:00
Martin Robinson
f0fc893561 script_bindings: Reduce the amount of borrowing inside DOMString (#43088)
For many operations, `DOMString` needs to convert the internal string
storage to a Rust `String` and then borrow again to actually do the
operation in question. This change makes it so that this borrow can be
done once, by transforming `DOMString::make_rust` into
`DOMString::ensure_rust_string` which returns a reference to the inner
`String` which can then be use directly. In many cases this eliminates
an entire mutable borrow of the inner `RefCell`.

Testing: This is just a minor optimization, so should be covered by
existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-09 11:22:21 +00:00
Euclid Ye
c1aaaaf18c css: Enable jump-start, jump-both, jump-end, jump-none step-position (#43061)
Bumps stylo to https://github.com/servo/stylo/pull/323
As tested with examples, all step-position keywords now work:
https://drafts.csswg.org/css-easing-2/#typedef-step-position

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

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-09 10:55:06 +00:00
Jonathan Schwender
6c648cea61 Sync mach bootstrap package list to the book automatically. (#42063)
Follow-up to https://github.com/servo/servo/pull/41775
This allows syncing our package list to the book automatically, keeping
the documented required packages in sync with what bootstrap installs.

We use two personal access token of the `servo-bot` account. One PAT
with the Resource-owner `servo-bot` for the repository `servo-bot/book`,
to push the branch to the bots fork. This PAT should be created with the
following permissions:
Choose "Only select repositories", select the forked book repo and give
the token Contents: Read and write permissions.
The second PAT must have the resource owner `servo`, and access to the
repository `servo/servo` as well as the permissions "Pull-Request: Read
and Write".

This split has the advantag of limiting the PAT permissions for the
upstream repo, avoiding `Content: Write` permissions for the
`servo/book` repository.

Testing: Manually tested by letting the action run on this branch.
[successfull
run](https://github.com/servo/servo/actions/runs/22387422307/job/64800999782?pr=42063),
[created upstream PR](https://github.com/servo/book/pull/207)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: shuppy <dazabani@igalia.com>
2026-03-09 10:53:39 +00:00
Gae24
fa86bbedbe script: Pass &mut JSContext to DOM apis that call Element::create (#43108)
Testing: No behaviour change, a successful build is enough.
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-09 10:07:13 +00:00
Shubham Gupta
c32d9f51af script: Add missing steps for parsing a legacy font size (#43103)
In this change clamps legacy font size value of the `<font>` element to
the range [1,7] according to steps 10, 11 of
[rules-for-parsing-a-legacy-font-size](https://html.spec.whatwg.org/multipage/rendering.html#rules-for-parsing-a-legacy-font-size).

Testing: This causes a WPT test to start passing.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-09 09:40:54 +00:00
Martin Robinson
204ededfbd layout: Revert changes from #42529 to button control style (#43105)
I believe that these changes (part of #42529) were likely made in error.
Servo
button controls do not follow the system theme, so system colors should
not be
used. These changes degraded the look of the buttons, so this change
reverts to the previous state.

### Before (with unintended change):

<img width="520" height="115" alt="Screenshot 2026-03-09 at 08 47 15"
src="https://github.com/user-attachments/assets/cff5fc1a-bfd0-4785-8326-91e735390176"
/>

### After (restored style):

<img width="499" height="113" alt="Screenshot 2026-03-09 at 08 46 02"
src="https://github.com/user-attachments/assets/99660c7f-9eb6-4ee8-905e-f7a594bd363d"
/>


Testing: These changes are really only testable via the manual test
`tests/html/form-control-visuals.html`.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-09 09:27:41 +00:00
Euclid Ye
1d0b3f1418 ci: Update WiX files and Windows workflow to reflect ServoShell name (#43104)
`candle` generates the object file based on the name of WiX source file,
which is used by linker later.
This PR effectively changes:
- `Servo.exe` to `ServoShell.exe` for the windows installer
- `Servo.zip` to `ServoShell.zip`

We already generates `servoshell.exe` from build, it is weird that we
keep the name `Servo.exe` for the MSI.

Testing: The problem is fixed, for both executable and zip, see
[this](https://github.com/servo/servo/actions/runs/22841763218/job/66249263625).
Bencher [works
too](https://github.com/servo/servo/actions/runs/22843667165/job/66256020144).
Fixes: #43102, where the windows artifact keeps missing.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-09 08:17:56 +00:00
Freya Arbjerg
4ec46aaadc layout: Support text carets on empty lines in <textarea> (#42218)
This PR modifies the text layout in such a way that text carets can
render on empty lines (other than the first if the textarea is empty).
Zero-length segments are added to support caret rendering. The last
line, if it is without content, does not currently render a caret
correctly

This corresponds to cases 0, 1, and 3 in #41338

Testing: WPT subset `tests/wpt/tests/css/css-text/` ran as expected, one
internal WPT test was added
Fixes: Partially addresses https://github.com/servo/servo/issues/41338

---------

Signed-off-by: Freya Arbjerg <git@arbjerg.dev>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-09 07:06:27 +00:00
Zain
2cc8ae3897 script: Add error messages in HTMLDialogElement (#43101)
Adds specific InvalidStateError messages in HTMLDialogElement for
`show()` and `showModal()` error paths.

A fix part of #40756.

---------

Signed-off-by: xzaisk <zkhalid99v@gmail.com>
Signed-off-by: Zain <39714482+xZaisk@users.noreply.github.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-09 06:47:32 +00:00
dependabot[bot]
522e8523bf build: bump uds_windows from 1.1.0 to 1.2.0 (#43100)
Bumps [uds_windows](https://github.com/haraldh/rust_uds_windows) from
1.1.0 to 1.2.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/haraldh/rust_uds_windows/releases">uds_windows's
releases</a>.</em></p>
<blockquote>
<h2>v1.2.0</h2>
<ul>
<li>Migrate from unmaintained <code>winapi</code> crate to official
Microsoft <code>windows-sys</code> crate</li>
<li>Set minimum Rust version (MSRV) to 1.85</li>
<li>Update to Rust edition 2021</li>
<li>Remove unused <code>NetInt</code> trait</li>
<li>Fix clippy warnings and use explicit lifetime syntax</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/haraldh/rust_uds_windows/blob/master/CHANGELOG.md">uds_windows's
changelog</a>.</em></p>
<blockquote>
<h2>[1.2.0] - 2026-03-04</h2>
<ul>
<li>Migrate from unmaintained <code>winapi</code> crate to official
Microsoft <code>windows-sys</code> crate</li>
<li>Set minimum Rust version (MSRV) to 1.85</li>
<li>Update to Rust edition 2021</li>
<li>Remove unused <code>NetInt</code> trait</li>
<li>Fix clippy warnings and use explicit lifetime syntax</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d47604cdab"><code>d47604c</code></a>
chore: bump version to 1.2.0 and add CHANGELOG.md</li>
<li><a
href="6edc47a997"><code>6edc47a</code></a>
fix: resolve clippy warnings for Rust 1.85</li>
<li><a
href="6fcd095d20"><code>6fcd095</code></a>
chore: set minimum Rust version to 1.85 and add rust-toolchain.toml</li>
<li><a
href="16db1c9451"><code>16db1c9</code></a>
chore: migrate from winapi to windows-sys</li>
<li><a
href="1c57469aea"><code>1c57469</code></a>
fix: use explicit lifetime syntax to fix mismatched_lifetime_syntaxes
warnings</li>
<li><a
href="b90d51b297"><code>b90d51b</code></a>
chore: remove unused NetInt trait</li>
<li><a
href="f02fd0762c"><code>f02fd07</code></a>
chore: remove extern in lib.rs</li>
<li><a
href="c13ffb38bf"><code>c13ffb3</code></a>
chore: set edition to 2021</li>
<li>See full diff in <a
href="https://github.com/haraldh/rust_uds_windows/compare/v1.1.0...v1.2.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uds_windows&package-manager=cargo&previous-version=1.1.0&new-version=1.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 01:05:46 +00:00
dependabot[bot]
c7495f6e48 build: bump winnow from 0.7.14 to 0.7.15 (#43099)
Bumps [winnow](https://github.com/winnow-rs/winnow) from 0.7.14 to
0.7.15.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/winnow-rs/winnow/blob/main/CHANGELOG.md">winnow's
changelog</a>.</em></p>
<blockquote>
<h2>[0.7.15] - 2026-03-05</h2>
<h3>Compatibility</h3>
<ul>
<li>Deprecate <code>combinator::permutation</code> in favor of
<code>combinator::unordered_seq!</code></li>
</ul>
<h3>Features</h3>
<ul>
<li>Add <code>combinator::unordered_seq!</code>, like <code>seq!</code>
but where the order of values does not matter</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="eae4d4a23c"><code>eae4d4a</code></a>
chore: Release</li>
<li><a
href="5769b89038"><code>5769b89</code></a>
docs: Update changelog</li>
<li><a
href="329c13b6d2"><code>329c13b</code></a>
Merge pull request <a
href="https://redirect.github.com/winnow-rs/winnow/issues/876">#876</a>
from epage/unordered_seq</li>
<li><a
href="c169964b33"><code>c169964</code></a>
fix(comb): Deprecate permutation</li>
<li><a
href="2f972799f8"><code>2f97279</code></a>
fix(macros): Preserve original failure location</li>
<li><a
href="5926ad3527"><code>5926ad3</code></a>
feat(comb): Add unordered support to unordered_seq</li>
<li><a
href="6d7e8d4f98"><code>6d7e8d4</code></a>
feat(comb): Add baseline for unordered_seq</li>
<li><a
href="cfcd411cff"><code>cfcd411</code></a>
refactor(macros): Be consistent on indentation</li>
<li><a
href="716f2a7f6b"><code>716f2a7</code></a>
Merge pull request <a
href="https://redirect.github.com/winnow-rs/winnow/issues/869">#869</a>
from winnow-rs/renovate/crate-ci-committed-1.x</li>
<li><a
href="7cc73432d4"><code>7cc7343</code></a>
Merge pull request <a
href="https://redirect.github.com/winnow-rs/winnow/issues/870">#870</a>
from winnow-rs/renovate/crate-ci-typos-1.x</li>
<li>Additional commits viewable in <a
href="https://github.com/winnow-rs/winnow/compare/v0.7.14...v0.7.15">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=winnow&package-manager=cargo&previous-version=0.7.14&new-version=0.7.15)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 00:58:17 +00:00
dependabot[bot]
8869394200 build: bump libc from 0.2.182 to 0.2.183 (#43098)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.182 to 0.2.183.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.183</h2>
<h3>Added</h3>
<ul>
<li>ESP-IDF: Add <code>SOMAXCONN</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4993">#4993</a>)</li>
<li>Linux: Add <code>name_to_handle_at</code> and
<code>open_by_handle_at</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4988">#4988</a>)</li>
<li>NetBSD: Add <code>kinfo_file</code>, <code>kinfo_pcb</code>, and
related constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4985">#4985</a>)</li>
<li>OpenBSD: Add <code>kinfo_file</code> and related constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4991">#4991</a>)</li>
<li>VxWorks: Add additional structs and defines (<a
href="https://redirect.github.com/rust-lang/libc/pull/5003">#5003</a>)</li>
<li>Various: Implement <code>Default</code> for <code>timeval</code> and
<code>timespec</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4976">#4976</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Hexagon musl: Enable unstable 64-bit <code>time_t</code> support and
<code>musl_v1_2_3</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4992">#4992</a>)</li>
<li>Nintendo Switch: Fix target support (<a
href="https://redirect.github.com/rust-lang/libc/pull/4982">#4982</a>)</li>
<li>OpenBSD: Wrap an unused field in <code>Padding</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4997">#4997</a>)</li>
<li>Redox: Change <code>sigaction.sa_flags</code> to <code>c_int</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4986">#4986</a>)</li>
<li>Redox: Fix <code>blkcnt_t</code> type (<a
href="https://redirect.github.com/rust-lang/libc/pull/4994">#4994</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.183/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.182...0.2.183">0.2.183</a>
- 2026-03-08</h2>
<h3>Added</h3>
<ul>
<li>ESP-IDF: Add <code>SOMAXCONN</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4993">#4993</a>)</li>
<li>Linux: Add <code>name_to_handle_at</code> and
<code>open_by_handle_at</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4988">#4988</a>)</li>
<li>NetBSD: Add <code>kinfo_file</code>, <code>kinfo_pcb</code>, and
related constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4985">#4985</a>)</li>
<li>OpenBSD: Add <code>kinfo_file</code> and related constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4991">#4991</a>)</li>
<li>VxWorks: Add additional structs and defines (<a
href="https://redirect.github.com/rust-lang/libc/pull/5003">#5003</a>)</li>
<li>Various: Implement <code>Default</code> for <code>timeval</code> and
<code>timespec</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4976">#4976</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Hexagon musl: Enable unstable 64-bit <code>time_t</code> support and
<code>musl_v1_2_3</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4992">#4992</a>)</li>
<li>Nintendo Switch: Fix target support (<a
href="https://redirect.github.com/rust-lang/libc/pull/4982">#4982</a>)</li>
<li>OpenBSD: Wrap an unused field in <code>Padding</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4997">#4997</a>)</li>
<li>Redox: Change <code>sigaction.sa_flags</code> to <code>c_int</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4986">#4986</a>)</li>
<li>Redox: Fix <code>blkcnt_t</code> type (<a
href="https://redirect.github.com/rust-lang/libc/pull/4994">#4994</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5660e6fc05"><code>5660e6f</code></a>
chore: Release libc 0.2.183</li>
<li><a
href="8b439b7678"><code>8b439b7</code></a>
allow unused link_cfg feature in rustc-dep-of-std</li>
<li><a
href="e6436dcf4a"><code>e6436dc</code></a>
Adding structs and defines for vxworks</li>
<li><a
href="e9cca04dff"><code>e9cca04</code></a>
Linux: add <code>name_to_handle_at</code> and
<code>open_by_handle_at</code></li>
<li><a
href="af8b8127bc"><code>af8b812</code></a>
linux: relocate PIDFD definitions to src/new</li>
<li><a
href="d0bd7e2f2f"><code>d0bd7e2</code></a>
NetBSD: add kinfo_file, kinfo_pcb structures and related constants</li>
<li><a
href="17f5cce00d"><code>17f5cce</code></a>
build(deps): bump actions/upload-artifact from 6 to 7</li>
<li><a
href="62c89e800a"><code>62c89e8</code></a>
OpenBSD: Wrap an unused field in <code>Padding</code></li>
<li><a
href="82cb126e16"><code>82cb126</code></a>
enable musl32_time64 and musl_v1_2_3 for hexagon</li>
<li><a
href="e7f99026dc"><code>e7f9902</code></a>
redox: fix blkcnt_t type</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.182...0.2.183">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.182&new-version=0.2.183)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-09 00:54:38 +00:00
Steven Novaryo
ab83e6e448 layout: Make ::placeholder public and add property restriction for ::placeholder and ::marker (#43053)
Servo side of https://github.com/servo/stylo/pull/322.

Update the WPT expectation following the changes to make `::placeholder`
public and adding property restriction to `::placeholder` and
`::marker`. Additionally ensure that `getComputedStyle` works for
`::placeholder`.

Testing: Existing WPTs
Fixes: #43034 
Fixes: #43035 
Fixes: #19808

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-03-08 23:22:36 +00:00
Oriol Brufau
a2ca667041 script,layout: Use Stylo's logic for registering custom properties from script (#43085)
Stylo PR: https://github.com/servo/stylo/pull/325

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-08 22:06:19 +00:00
Kingsley Yung
d472788f10 script: Implement "getPublicKey" operations of RSA algorithms (#43093)
Implement "getPublicKey" operations of RSASSA-PKCS1-v1_5, RSA-PSS and
RSA-OAEP. The steps are implemented at `rsa_common.rs` shared by the
three RSA algorithms.

To make the operations functioning, they are also registered at
`GetPublicKeyAlgorithm`.

Specification:
https://wicg.github.io/webcrypto-modern-algos/#SubtleCrypto-method-getPublicKey
Testing: Pass WPT tests that were expected to fail.
Fixes: Part of #43072

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-08 17:36:02 +00:00
Martin Robinson
568f2ef158 script_bindings: Implement Default for DOMString using derive (#43090)
This is just a minor cleanup that uses the `derive` macro to implement
more of the `Default` functionality of `DOMString`.

Testing: This does not change functionality, so should be covered by
existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-08 12:55:01 +00:00
Martin Robinson
01a3b60bf6 Update comment showing how to override WebRender dependency in Cargo.toml (#43092)
WebRender is now a crates.io dependency so the previous lines need to
be updated to be like the ones for other crates.io. dependnecies.

Testing: This just updates a comment, so includes no behavior changes.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-08 11:50:26 +00:00
Martin Robinson
e725fdbfdf script_bindings: Eliminate DOMString::from_string (#43089)
This method is the same as `DOMString::from` with a `String` argument
and `From` and `Into` are preferred when writing modern Rust.

Testing: This should not change behavior and is thus covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-08 11:46:42 +00:00
webbeef
cea658e2c0 script: Coalesce wheel input events (#43074)
This follows the same principle used for mouse move events, but we have
to update the event parameters since we receive the delta from the
previous event.

Testing: Load
https://docs.rs/iced-x86/1.21.0/iced_x86/code_asm/struct.CodeAssembler.html
and try to scroll with the trackpad with and without this patch.
Fixes: Partial fix for https://github.com/servo/servo/discussions/43062

---------

Signed-off-by: webbeef <me@webbeef.org>
2026-03-07 16:56:13 +00:00
Martin Robinson
a25f8c7945 script_bindings: Remove some code duplication in DOMString (#43079)
The conversion to atoms types uses a lot of copy and pasted code that
can be put into a generic function. This PR does that.

Testing: This should not change behavior so is covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-07 13:55:44 +00:00
Jonathan Schwender
9377c9e879 Explicitly set publish = false for test crates (#43078)
The workspace `publish` key is currently also set to false, but we will
probably start publishing in the future. To prepare for that we
explicitly prevent publishing in these crates, instead of following the
workspace setting.

Testing: No functional changes, covered by cargo build still working.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-07 10:40:39 +00:00
Sam
9394cdfa4c CI: Force lld in MSRV Linux build (#43075)
when using rust-toolchain rust this is already default

Testing: None
Fixes: #43070

---------

Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-03-07 09:33:09 +00:00
Euclid Ye
f31a436e63 webdriver: Use globally shared tick_start per tick (#43076)
We used to create a `tick_start` timestamp at each
`dispatch_scroll_action` and `dispatch_pointermove_action`.
This is really bad, as the variable should represent the start of
current tick,
but we may end up with distinct values for different actions, since we
can sleep for some pointers:

d6fdd30c19/components/webdriver_server/actions.rs (L535-L537)

Testing: 
This makes all actions in the current tick share the same `tick_start`,
and changes the number of actions dispatched.
A test for this would be really contrived.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-07 09:15:50 +00:00
Kingsley Yung
1c449ed53b script: Implement SubtleCrypto.getPublicKey method with X25519 support (#43073)
Implement the `getPublicKey` method of the `SubtleCrypto` interface.

This patch includes:

- Implementing the steps of the `getPublicKey` method.
- Adding the new "getPublicKey" operation to the internal object
`supportedAlgorithms`, for registering cryptographic algorithms that
support "getPublicKey" operation, and used by the `getPublicKey` method
to check whether the cryptographic algorithm supports "getPublicKey"
operation and perform the operation if it is supported.
- Implementing the "getPublicKey" operation of X25519 for demonstrating
and testing the functionality of the `getPublicKey` method.

Specification:
<https://wicg.github.io/webcrypto-modern-algos/#SubtleCrypto-method-getPublicKey>
Testing: Pass WPT tests that were expected to fail.
Fixes: Part of #43072

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-07 09:13:40 +00:00
Jonathan Schwender
1632e61ed6 servoshell: Rename executable to servoshell. (#42958)
This should help clarify the difference between servo the library /
engine and servoshell the browser (demo).

Other changes: 

- Removed etc/servo.sb ( [apple sandbox profile
format](https://angelica.gitbook.io/hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox#sandbox-profiles))
since it is not needed anymore. See [this
comment](https://github.com/servo/servo/pull/42958#discussion_r2876253489)
for more details.

Testing: This is a very invasive change, and there are bound to be
scripts / places I have overlooked. Searching for usages of `servo` is
very hard, since it's also the name of the library.
Try run: https://github.com/servo/servo/actions/runs/22637676818

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-07 08:08:38 +00:00
Domenico Rizzo
229d89042f script: Refactor GPURenderPipeline's drop implementation (#43071)
Moves the `Drop` logic for `GPURenderPipeline` into a dedicated helper
struct, `DroppableGPURenderPipeline`.
The associated `Bindings.conf` entry is
removed as direct `Drop` is no longer needed for this type.

Testing: WebGpu tests just cover its cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-07 06:53:15 +00:00
Jacob Adam W.
d6fdd30c19 script: Implement HTMLSelectElement.selectedOptions (#43017)
This introduces a `CollectionSource` trait as an alternative to
`CollectionFilter` in `HTMLCollection`, allowing collections to provide
elements directly via a custom iterator rather than filtering a full
subtree traversal, which would otherwise be rather inefficient for
smaller iterable sequences of options that can be determined without
traversing the whole subtree again.

The newly implemented `selectedOptions` attribute on the `<select>`
element uses this to iterate only the element's list of options that are
marked as selected.

Testing: 14 assertions in the existing WPT went from failing to passing.

Fixes #15522.

---------

Signed-off-by: Jacob Adam <software@jacobadam.net>
2026-03-07 06:16:33 +00:00
Oriol Brufau
42d228dcc7 Upgrade Stylo to 2026-03-01 (#43045)
This continues  #42361

Changelog:
- Upstream:
7cd2a178d3...74ddab4091
- Servo fixups:
a5eabbdfc2...ecf17b5425

Stylo tracking issue: https://github.com/servo/stylo/issues/321

In particular, this includes some performance optimizations, improves
`attr()`, and adds support for `none` keywords in `clamp()`.

Testing: Some WPT tests pass.

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-06 23:39:55 +00:00
Martin Robinson
401d327b96 script: Clean up attribute access a little bit in Element (#43064)
- Use modern Rust conveniences such as `unwrap_or_default`
 - Unabbreviate `attr`
- Unify the lowercase ASCII name assertion and make it a debug assertion
 - Use `unreachable!` instead of panic
- Expose two attribute getters that follow the behavior of two
specification concepts and what we expect internally in Servo:
- One that takes a namespace, but does not require lowercase attribute
names. ([specification
concept](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace>))
- One that does not take a namespace, but does require lowercase
attribute names. ([specification
concept](https://dom.spec.whatwg.org/#concept-element-attributes-get-by-name))
Testing: This should not really change behavior so should be covered by
existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-06 20:02:37 +00:00
Martin Robinson
291e9e57cb script: Readily accept all event names as Atoms (#43066)
Accepting the name of the event as a `DOMString` means that when events
are constructed from within Servo (for instance via input event
handling), the static strings are converted to an owned `String`
wrapped in a `DOMString` and then finally converted to an `Atom` in
`Event`. This makes it so that all non-generated `Event` constructors
accept `Atom`, which can avoid a conversion entirely when the atom
already exists on the Stylo atoms list and eliminate one in-memory copy
in the case that it isn't on the atom list.

Eventually, all event names can be on the atom list and we can eliminate
all copies. This is a tiny optimization, but also makes the code much
friendlier everywhere.

Testing: This should not change behavior so should be covered by
existing test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-06 19:25:33 +00:00
Martin Robinson
df3e895e1b script: Allow focusing boxes with overflow with the keyboard (#43067)
This change makes it possible to focus boxes with overflow via the
keyboard. These boxes should be focusable areas, yet are not focusable
via the mouse. Instead they can be focused via sequential tab
navigation.

Testing: This fixes a WPT test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-06 19:22:45 +00:00
Tim van der Lippe
160e458a51 script: Implement miscellaneous commands related to delete (#43028)
These two commands are intertwined with the delete command. By
implementing them now, it becomes easier to triage actual
implementation issues in the delete command.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-06 19:02:14 +00:00
eri
7d3e60d999 devtools: Fix step out and clearing stepping hooks (#43042)
Make step out behave properly.

Testing: DevTools tests and manual testing.
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
2026-03-06 16:05:56 +00:00
Tim van der Lippe
c8c213650b script: Append CSP policies from meta elements (#43063)
Rather than overwriting the CSP list from a fetch header response, we
should add a policy from a meta element to the global CSP list (if it
exists).

Fixes #36822
Supersedes and closes #36828

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Co-authored-by: Emmanuel Paul Elom <elomemmanuel007@gmail.com>
2026-03-06 15:53:27 +00:00
Martin Robinson
e2f6852a45 script: Align focusable area logic to be closer to the specification (#43058)
This abstracts out a common helper to determine focusable area kind
which is used by `Element::is_click_focusable`,
`Element::is_sequentially_focusable`, and `Element::is_focusable_area`.
This avoid having the latter depend on the former two, which was the
reverse of what the specification said. The helper is necessary because
the specification defines click and sequential focusability as subsets
of focusable elements, but going from "This is a focusable element" to
determining what kind of focusable element something is requires
duplicating a lot of the logic that was used to determine that something
is a focusable area.

It's likely that the specification needs more work here to improve the
definition (and indeed to unify all of the places that talk about what
elements are focusable areas). For now, this just tries to make our code
more similar to the text.

See: whatwg/html#4607
Testing: This shouldn't change behavior, so should be tested by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-06 14:53:36 +00:00
Martin Robinson
a48bef2316 script: Add support for the accesskey attribute (#43031)
This change adds support for the `accesskey` HTML attribute the
corresponding behavior defined by the HTML standard. In addition to a
new map holding a mapping between access key characters and a rooted
reference to elements that use them, it adds a struct to represent the
"Command" concept from the specification [^1], which seems to be used
for `accesskey`. Not all command facets are implemented as some seem to
be unused in the specification.

[^1]:
https://html.spec.whatwg.org/multipage/interactive-elements.html#commands

Testing: This causes most access key tests to start passing. One test
now
only partially completes, because of a bug in the way that we fire
synthetic
mouse events.
Fixes: This is part of #25001.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-06 14:22:54 +00:00
Martin Robinson
17dcf840ef deps: Upgrade to strum 0.28 (#43057)
This requires updating to a new version of Stylo. 

Corresponding Stylo PR: servo/stylo#319
Testing: This just upgrades a dependency so existing tests should
suffice.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-06 12:19:31 +00:00
shuppy
ec55e83040 constellation: Track top-level pipeline changes in webviews (#43013)
whenever a browsing context loads a new document or otherwise navigates,
the constellation sends a new frame tree to the compositor, giving us a
nice, relatively central way to detect when we may need to update the
graft node in a webview’s AccessKit subtree. but we only want to update
that graft node when the pipeline in its *top-level* browsing context
has changed, not just when the pipeline in *any* of its browsing
contexts has changed.

this patch adds a field to the ConstellationWebView that tracks the
active top-level pipeline for each webview, allowing us to check when a
set_frame_tree_for_webview() call actually involves navigation in the
top-level browsing context.

Testing: will be covered by accessibility tree tests in a later patch
Fixes: part of #4344, extracted from our work in #42338

Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-03-06 10:11:50 +00:00
shuppy
fd93a02041 base: Deterministic AccessKit tree UUID format for pipelines (#43012)
each webview will have an AccessKit subtree, and each pipeline
representing a document will have an AccessKit subtree for its layout.
but to graft the subtree of a pipeline into that of a webview (for
top-level documents) or another pipeline (for documents in iframes etc),
the parent tree needs to know the
[TreeId](https://docs.rs/accesskit/0.24.0/accesskit/struct.TreeId.html)
of the child tree.

this is annoying for pipelines, because they run in a separate thread
(or process) to the constellation, and they may run in a separate script
thread (or web content process) to other pipelines. if the pipeline
generates a random (UUIDv4) TreeId as internal state, it has to
communicate that to the constellation (or parent pipeline) over IPC,
which takes time and makes it harder for us to obey AccessKit’s subtree
invariants (notably, the subtree must not send updates before a graft
node is created for it in some other subtree).

this patch defines a deterministic and pure conversion from PipelineId
to a UUIDv5-based TreeId, allowing anyone that knows a PipelineId to
derive its TreeId. one consequence of this approach is that it precludes
having multiple instances of
[Servo](https://doc.servo.org/servo/struct.Servo.html) in a single
application, but i’m not sure that was an intended use case (or even
possible).

Testing: this patch includes a unit test
Fixes: part of #4344, extracted from our work in #42338

<img width="521" height="400" alt="grafts drawio"
src="https://github.com/user-attachments/assets/39efa426-ba21-41dc-874b-c3e4fcb17593"
/>

Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-03-06 09:59:40 +00:00
Tim van der Lippe
0c4b185233 script: Fix lookup of properties of DOMStringMap (#43046)
The conversion of strings was wrong for `--foo` where it should become
`-Foo`. Instead, it was consuming both the `--` and then would encounter
a `f`.

This moves the relevant algorithms to DOMStringMap and adds
corresponding spec comments to explain what's going on.

This does make us closer to passing
`html/dom/elements/global-attributes/dataset-delete.html` but
unfortunately it still fails because of #12978

Prior to this fix, the value of `d.dataset['-foo']` wasn't undefined.
However, we now fail the assertion where the attribute should remain,
despite the call to delete.

That's because per `LegacyOverrideBuiltIns` we should be checking the
existence of which properties it can delete, before it actually deletes
the attribute. Right now, we do it regardless if it is a valid property
and thus we incorrectly delete the attribute.

Testing: No change in tests, since the test in question has more
assertions that require more fixes

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-06 09:58:33 +00:00
Brent Schroeter
4c69d856f6 tools: Support tab navigation via navigateTo, goBack, and goForward (#43026)
Add support for navigation requests ("navigateTo", "goBack", and
"goForward") over the Remote Debugging Protocol. These may be sent by a
UI client in response to user input (for example the address bar in the
Firefox inspector), or they can be used to automate navigation during
unit tests.

This currently only supports navigation within the URL domain at which
servoshell is initially launched, due to a bug in servo's
`BrowsingContextActor` implementation. (Unit tests covering a fix for
that issue will depend on this change.)

Testing: The behavior of all 3 new message types is covered by a new
test case—`test_navigation`—in the devtools unit test suite.
Fixes: #38668

---------

Signed-off-by: Brent Schroeter <contact@brentsch.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-06 09:13:39 +00:00
atbrakhi
9a915ece22 devtools: Pass ListFrames back to devtools (#43039)
Pass `ListFrames` back to devtools

Testing: existing test passes
Fixes: part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-06 08:47:15 +00:00
eri
836970d1ea devtools: Get newest frame when resuming without a frameActorID (#43040)
Fixes resuming after stepping.

Testing: Ran existing DevTools test
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-06 07:46:46 +00:00
Kingsley Yung
8df3819a9e script: Use CryptoAlgorithm in name fields of subtle dictionaries (#43055)
We currently use `String` to store cryptographic algorithm name in
subtle dictionaries in WebCrypto code. The algorithm normalization
guarantees that there are only a limited number of possible strings that
can be assigned to the name fields.

We switch to use the `CryptoAlgorithm` enum, which contains all possible
algorithm names, to represent these values. This reduces string
comparison and saves a small amount of memory.

The constant string `ALG_*` in `subtlecrypto.rs`, which are the
recognized algorithm name for the algorithms, are also removed since
they are already embedded in the `CryptoAlgorithm` enum.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #42579

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-06 07:14:49 +00:00
Tim van der Lippe
9f25c09193 script: Fix handling of attributes for link elements (#43043)
These were some of the remaining failures for link elements. They
concern attribute handling and when to run fetches.

1. We shouldn't refetch on media changes, but immediately apply the
effect. This is already the case for style elements
2. We shouldn't refetch when attribute values are the same
3. We shouldn't fetch when the type attribute doesn't match
4. We should fetch, even if the media doesn't match. Only when the media
is then changed, we should re-evaluate.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-06 05:26:11 +00:00
Narfinger
11d47b62b9 script: Implement efficient TreeIterator without rooting when possible (#42781)
This implements an two types:
- Efficient Tree Iterator that can be used without rooting when
possible.
- UnrootedDom that can be used while not rooting while capturing a NoGC.

We:
- introduce new methods in 'script/dom/node.rs' to get the correct
iterator.
- introduce methods in 'script/dom/node.rs' to get the unrooted children
in an 'UnrootedDom' container.

We use the new TreeIterator in 'script/dom/document.rs' Open.

Testing: WPT tests should catch this but careful review is required.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-06 05:21:01 +00:00
Euclid Ye
3f0665a679 ohos ci: Do not use action that does not exist (#43054)
Testing: https://github.com/servo/servo/actions/runs/22749912784
Fixes: The consistent CI failure after #42990

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-06 05:18:47 +00:00
Jonathan Schwender
a2bd2ab09b Add codesigning script for macOS (#42912)
This script automates the signing, packaging and notarization of
servoshell on macOS.
This is a first step towards: #40031 and #12532. While we could let a
maintainer code-sign and upload the signed release, probably this should
be integrated into CI, which would require additional work.

This script started out quite simple as part of `./mach package`.
However, since the script has access to secrets, it shouldn't be part of
mach (to minimize the amout of code that needs to be trusted).
We also needed to save state and be able to resume operations, since
notarizing can take quite long and the stapling needs to wait until
notarization has completed.
Since notarizing can take long (up to a day has been observed during
first tests), we save artifacts and the notarization ID, and add a
`--check-status` command that can be used to poll if notarization has
been finished.

Testing: Manually testing required. A signed and notarized `.dmg`
artifact has [been
uploaded](https://servo.zulipchat.com/#narrow/channel/500774-tsc/topic/Signing.20macos.20Servoshell/near/576256648)
to zulip, allowing others to verify the notarization worked.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-06 03:43:20 +00:00
Euclid Ye
cab4416d4c webdriver: Enable pointerMove to perform smooth transition over specified duration (#42946)
Enable `pointerMove` to perform a smooth transition over specified
duration.

- Sync move/scroll interval with default tick duraiton in testdriver:
a60a8b1b4d/tests/wpt/tests/resources/testdriver-actions.js (L34-L38)
- Fully process all pending pointer moves within this tick. This is one
of the conditions that is
[required](https://w3c.github.io/webdriver/#dfn-perform-a-pointer-move:~:text=There%20are%20no%20pending%20asynchronous%20waits%20arising%20from%20the%20last%20invocation%20of%20the%20dispatch%20tick%20actions%20steps%2E)
to finish this tick. Previously, the pending move events might be
processed in next Tick, if they have long duration.


https://github.com/user-attachments/assets/8692086f-32bb-45f3-ae0c-a072f68e1e84


https://github.com/user-attachments/assets/35af99a9-889b-41c1-91e2-55f22ad453a1

Testing: Added a WPT test. I'm surprised it is not covered by existing
tests, given the huge behaviour difference.
Fixes: https://github.com/servo/servo/issues/42950
Part of https://github.com/servo/servo/issues/41620

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-06 01:49:28 +00:00
dependabot[bot]
0a571bc262 build: bump uuid from 1.21.0 to 1.22.0 (#43051)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.21.0 to 1.22.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.22.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Default to rand 0.10 by <a
href="https://github.com/haxtibal"><code>@​haxtibal</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/863">uuid-rs/uuid#863</a></li>
<li>Prepare for 1.22.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/864">uuid-rs/uuid#864</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/haxtibal"><code>@​haxtibal</code></a>
made their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/863">uuid-rs/uuid#863</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0">https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="da15792ae2"><code>da15792</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/864">#864</a> from
uuid-rs/cargo/v1.22.0</li>
<li><a
href="7ec48c98e8"><code>7ec48c9</code></a>
prepare for 1.22.0 release</li>
<li><a
href="c4e983f3cf"><code>c4e983f</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/863">#863</a> from
haxtibal/tdmg/rand_0_9_and_0_10</li>
<li><a
href="f3f677e9d8"><code>f3f677e</code></a>
update workspace root to rand 0.10</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/v1.21.0...v1.22.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.21.0&new-version=1.22.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 00:53:11 +00:00
Tim van der Lippe
7c21cb5606 script: Fully implement delete_the_selection (#43016)
This continues implementation of the delete command for
document.execCommand. Unfortunately, since these algorithms are vast
(30+ steps) and partial implementation leads to lots of issues, this PR
is "draw the rest of the owl".

I have tried to keep things manageable, by only implementing a couple of
extra steps in the delete command, so that we can focus on the "Delete
the selection" part.

To do that, several algorithms had to be implemented. Most of these
algorithms are required both by commands and by algorithms themselves,
which is why they are now exposed on a trait.

Additionally, all code now uses `cx`, to make sure it is up-to-date with
the ongoing migration and since some of the DOM API's it needs to call
already require `cx`.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-05 19:38:44 +00:00
Narfinger
fe6cc84284 OHOS CI: Update action versions and base (#42990)
This updates the action versions and base for the OHOS CI.

Testing: Manual run for the openharmony part is here:
https://github.com/Narfinger/servo/actions/runs/22617931816

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-05 17:54:22 +00:00
atbrakhi
1b7ec96fb6 devtools: implement listing all frames (#43015)
This change implements listing all frames from youngest to oldest. This
is in order to send correct frame message from thread actor

This is needed for our upcoming work!

Testing: Current tests are passing + manual test
Fixes: #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-03-05 14:58:30 +00:00
Simon Wülker
69e2894923 script: Unify naming of LayoutDom conversion functions to {to, from}_layout_dom (#43032)
As requested during the review of
https://github.com/servo/servo/pull/42991. These functions are currently
called `{to, from}_layout_js` or sometimes `get_jsmanaged` - this change
unifies them as `{to, from}_layout_dom` for clarity.

Testing: Covered by existing tests

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-05 12:32:31 +00:00
Steven Novaryo
a672397f2d layout: Add a query for getting the effective overflow of an element and use it in script (#42251)
In layout calculation within script, Instead of relying on the computed
values for overflow, query the overflow from layout for its used value
to accurately reflect whether an element establish a scroll container.
This query will be used for `IntersectionObserver` as well.

Testing: There are new `IntersectionObserver` WPT failures:
- `intersection-observer/isIntersecting-change-events.html`
- `intersection-observer/containing-block.html`

The failures are more than likely a false positive because intersection
observation steps wasn't supposed to trigger a reflow, but it was
before. It could be caused by the implementation of
`IntersectionObserver` in major UAs being a little bit different from
the spec in the calculation of `threshold` and `isIntersecting` .

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-03-05 11:35:32 +00:00
Qiaochu Hu
1b2ce4aaad prefs: Fix typo "arugment" -> "argument" (#43025)
Fixed a typo in the comment documentation in
`ports/servoshell/prefs.rs`. Changed "arugment" to "argument" on line
291.

Testing: This change does not need testing because it just fixes a typo
in a rustdoc comment.

Signed-off-by: hobostay <110hqc@gmail.com>
2026-03-05 10:52:14 +00:00
Martin Robinson
b47b39f974 script: Distinguish between sequential (keyboard) and click focusability (#43019)
This changes makes it so that keyboard and click focusability are two
separate concepts in `script`. Some elements may be focusable only by
the keyboard and some only by the click events.

In addition, the `SEQUENTIALLY_FOCUSABLE` `Node` flag is removed in
favor of a
more specification-aligned approach of checking lazily if an element is
a focusable area. This allows moving the focus fixup steps to their
correct place, asynchronously during "update the rendering" and
synchronously during `unbind_from_tree`.

Testing: This causes some WPT tests to start passing and some to start
failing:
- Two subtests tests in
`tests/wpt/meta/css/css-conditional/container-queries/` because
we do not implement support for container queries. These are legitimate
failures
   and they are compensated by a good subtest pass in the same file.
- A few subtests in `/html/interaction/focus/tabindex-focus-flag.html`
because now
we do not allow focusing non-rendering elements. The failures are HTML
elements with
`<svg>` which we do not rendering and `<summary>` elements of
`<details>` which
   need special handling we do not implement yet.
- `html/semantics/forms/the-fieldset-element/disabled-003.html`: Some of
these tests
start to fail, but they are not spec compliant and browser properly
implementing
   the asynchronous focus fixup rule also fail them. 

Fixes: #31870.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-05 08:58:59 +00:00
Euclid Ye
6a98cdc37d webdriver: Do nothing for dispatch_pause_action (#43014)
We should not try to create a input id here: it is already done in 

https://w3c.github.io/webdriver/#dfn-process-an-input-source-action-sequence

The sole effect of the action is that its `duration` parameter may
decide "tick duration".

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-05 01:50:43 +00:00
dependabot[bot]
f03425b997 build: bump proc-macro-crate from 3.4.0 to 3.5.0 (#43024)
Bumps [proc-macro-crate](https://github.com/bkchr/proc-macro-crate) from
3.4.0 to 3.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/bkchr/proc-macro-crate/releases">proc-macro-crate's
releases</a>.</em></p>
<blockquote>
<h2>v3.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>chore: fix typo in src/lib.rs by <a
href="https://github.com/black5box"><code>@​black5box</code></a> in <a
href="https://redirect.github.com/bkchr/proc-macro-crate/pull/63">bkchr/proc-macro-crate#63</a></li>
<li>Update <code>toml_edit</code> to 0.25.0 by <a
href="https://github.com/ColinFinck"><code>@​ColinFinck</code></a> in <a
href="https://redirect.github.com/bkchr/proc-macro-crate/pull/65">bkchr/proc-macro-crate#65</a></li>
<li>Release v3.5.0 by <a
href="https://github.com/bkchr"><code>@​bkchr</code></a> in <a
href="https://redirect.github.com/bkchr/proc-macro-crate/pull/66">bkchr/proc-macro-crate#66</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/black5box"><code>@​black5box</code></a>
made their first contribution in <a
href="https://redirect.github.com/bkchr/proc-macro-crate/pull/63">bkchr/proc-macro-crate#63</a></li>
<li><a
href="https://github.com/ColinFinck"><code>@​ColinFinck</code></a> made
their first contribution in <a
href="https://redirect.github.com/bkchr/proc-macro-crate/pull/65">bkchr/proc-macro-crate#65</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/bkchr/proc-macro-crate/compare/v3.4.0...v3.5.0">https://github.com/bkchr/proc-macro-crate/compare/v3.4.0...v3.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8f3d8b0453"><code>8f3d8b0</code></a>
Merge pull request <a
href="https://redirect.github.com/bkchr/proc-macro-crate/issues/66">#66</a>
from bkchr/release-v3.5.0</li>
<li><a
href="c5412f52e7"><code>c5412f5</code></a>
Release v3.5.0</li>
<li><a
href="4807ac54fd"><code>4807ac5</code></a>
Merge pull request <a
href="https://redirect.github.com/bkchr/proc-macro-crate/issues/65">#65</a>
from ColinFinck/toml-edit-0.25.0</li>
<li><a
href="6a14602f8c"><code>6a14602</code></a>
Raise MSRV to 1.82.0</li>
<li><a
href="00502d3da2"><code>00502d3</code></a>
Fix CI to check for MSRV 1.76.0 instead.</li>
<li><a
href="46609987c4"><code>4660998</code></a>
Update <code>toml_edit</code> to 0.25.0</li>
<li><a
href="0af622fc42"><code>0af622f</code></a>
Merge pull request <a
href="https://redirect.github.com/bkchr/proc-macro-crate/issues/63">#63</a>
from black5box/master</li>
<li><a
href="a5390e60fa"><code>a5390e6</code></a>
chore: fix typo in src/lib.rs</li>
<li>See full diff in <a
href="https://github.com/bkchr/proc-macro-crate/compare/v3.4.0...v3.5.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=proc-macro-crate&package-manager=cargo&previous-version=3.4.0&new-version=3.5.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-05 01:50:15 +00:00
dependabot[bot]
8579a5fcda build: bump pin-project from 1.1.10 to 1.1.11 (#43023)
Bumps [pin-project](https://github.com/taiki-e/pin-project) from 1.1.10
to 1.1.11.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/pin-project/releases">pin-project's
releases</a>.</em></p>
<blockquote>
<h2>1.1.11</h2>
<ul>
<li>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/pin-project/blob/main/CHANGELOG.md">pin-project's
changelog</a>.</em></p>
<blockquote>
<h2>[1.1.11] - 2026-02-27</h2>
<ul>
<li>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3aa50f9ae9"><code>3aa50f9</code></a>
Release 1.1.11</li>
<li><a
href="bd565cfa1c"><code>bd565cf</code></a>
Update changelog</li>
<li><a
href="90389fca80"><code>90389fc</code></a>
Update allowed lint list</li>
<li><a
href="67339afec3"><code>67339af</code></a>
tests: Update ui test output to nightly-2026-02-16</li>
<li><a
href="d5de5f6d21"><code>d5de5f6</code></a>
tools: Update tidy.sh</li>
<li><a
href="afceb72c9d"><code>afceb72</code></a>
Fix clippy::unnecessary_map_or warning</li>
<li><a
href="e985eee188"><code>e985eee</code></a>
Bump MSRV to 1.71</li>
<li><a
href="b66e5d98ca"><code>b66e5d9</code></a>
tests: Update ui test output to nightly-2026-02-07</li>
<li><a
href="3c707845da"><code>3c70784</code></a>
Apply clippy to doctest</li>
<li><a
href="ade4308d3e"><code>ade4308</code></a>
tests: Update ui test output to nightly-2026-01-22</li>
<li>Additional commits viewable in <a
href="https://github.com/taiki-e/pin-project/compare/v1.1.10...v1.1.11">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pin-project&package-manager=cargo&previous-version=1.1.10&new-version=1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-05 00:30:21 +00:00
dependabot[bot]
503b02a822 build: bump the accesskit-related group with 2 updates (#43021)
Bumps the accesskit-related group with 2 updates:
[accesskit_windows](https://github.com/AccessKit/accesskit) and
[accesskit_winit](https://github.com/AccessKit/accesskit).

Updates `accesskit_windows` from 0.32.0 to 0.32.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/AccessKit/accesskit/releases">accesskit_windows's
releases</a>.</em></p>
<blockquote>
<h2>accesskit_windows: v0.32.1</h2>
<h2><a
href="https://github.com/AccessKit/accesskit/compare/accesskit_windows-v0.32.0...accesskit_windows-v0.32.1">0.32.1</a>
(2026-03-04)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>accesskit_consumer bumped from 0.34.0 to 0.35.0</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1bbcf10094"><code>1bbcf10</code></a>
chore: release main (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/692">#692</a>)</li>
<li><a
href="33fc4f0669"><code>33fc4f0</code></a>
feat: Implement text attributes for AT-SPI (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/695">#695</a>)</li>
<li><a
href="b5979a4c88"><code>b5979a4</code></a>
fix: Correctly register interfaces on Unix after Hyperlink was added (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/694">#694</a>)</li>
<li><a
href="7342525b8a"><code>7342525</code></a>
refactor: Use TreeState::locate_node in adapters</li>
<li><a
href="941a96d161"><code>941a96d</code></a>
refactor!: Allow locating nodes without Tree access</li>
<li><a
href="641b05b10d"><code>641b05b</code></a>
feat: Expose text attributes on macOS (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/691">#691</a>)</li>
<li><a
href="da70097f57"><code>da70097</code></a>
chore: release main (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/688">#688</a>)</li>
<li><a
href="8392850941"><code>8392850</code></a>
fix: Don't report selected state when toggled on Android (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/689">#689</a>)</li>
<li><a
href="6146089404"><code>6146089</code></a>
fix: Populate range info on Android (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/686">#686</a>)</li>
<li><a
href="67590283b0"><code>6759028</code></a>
fix: Update bytes dependency to fix RUSTSEC-2026-0007 (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/687">#687</a>)</li>
<li>See full diff in <a
href="https://github.com/AccessKit/accesskit/compare/accesskit_windows-v0.32.0...accesskit_windows-v0.32.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `accesskit_winit` from 0.32.1 to 0.32.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/AccessKit/accesskit/releases">accesskit_winit's
releases</a>.</em></p>
<blockquote>
<h2>accesskit_winit: v0.32.2</h2>
<h2><a
href="https://github.com/AccessKit/accesskit/compare/accesskit_winit-v0.32.1...accesskit_winit-v0.32.2">0.32.2</a>
(2026-03-04)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>accesskit_windows bumped from 0.32.0 to 0.32.1</li>
<li>accesskit_macos bumped from 0.25.0 to 0.26.0</li>
<li>accesskit_unix bumped from 0.20.0 to 0.21.0</li>
<li>accesskit_android bumped from 0.7.1 to 0.7.2</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1bbcf10094"><code>1bbcf10</code></a>
chore: release main (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/692">#692</a>)</li>
<li><a
href="33fc4f0669"><code>33fc4f0</code></a>
feat: Implement text attributes for AT-SPI (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/695">#695</a>)</li>
<li><a
href="b5979a4c88"><code>b5979a4</code></a>
fix: Correctly register interfaces on Unix after Hyperlink was added (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/694">#694</a>)</li>
<li><a
href="7342525b8a"><code>7342525</code></a>
refactor: Use TreeState::locate_node in adapters</li>
<li><a
href="941a96d161"><code>941a96d</code></a>
refactor!: Allow locating nodes without Tree access</li>
<li><a
href="641b05b10d"><code>641b05b</code></a>
feat: Expose text attributes on macOS (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/691">#691</a>)</li>
<li>See full diff in <a
href="https://github.com/AccessKit/accesskit/compare/accesskit_winit-v0.32.1...accesskit_winit-v0.32.2">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-05 00:17:17 +00:00
Taym Haddadi
251bf8c598 indexeddb: remove blocking GenerateKey sync IPC (#42966)
indexeddb: remove blocking GenerateKey sync IPC

Testing: covered by indexeddb WPT tests. 
part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-04 21:54:26 +00:00
Luke Warlow
759d0e0f1c script: Improvements to command button implementation (#42883)
Improvements to command button implementation

- Correctly handle the button's optional value concept
- Add the button as the source value for the CommandEvent
- Fix handling of buttons in auto state

Testing: Existing tests

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-03-04 15:40:36 +00:00
Domenico Rizzo
1f6037d022 script: Refactors GPURenderPassEncoder's drop implementation. (#43018)
Moves the `Drop` logic for `GPURenderPassEncoder` into a dedicated
helper struct, `DroppableGPURenderPassEncoder`. This ensures that DOM
types do not directly implement `Drop`, aligning with the policy for
resource management in the DOM. The associated `Bindings.conf` entry is
removed as direct `Drop` is no longer needed for this type.

Testing: WebGPU tests just cover its cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-04 14:48:51 +00:00
Simon Wülker
78efa1860d script: Use stylo dom apis for querySelector/querySelectorAll (#42991)
Stylo has ready-to-use apis for `Node::querySelector` and
`Node::querySelectorAll`. We currently instead set up our own selector
queries, which is neither as correct nor as performant, so this change
makes servo use the stylo interfaces instead.

This change contains a fair amount of unsafe code - review with caution!

Notably, this makes the tab component from the astro framework work
correctly in servo (https://starlight.astro.build/components/tabs/).
I've seen that (broken) component on multiple websites.

Fixes https://github.com/servo/servo/issues/41105
Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-04 14:18:48 +00:00
Narfinger
5aed3ab517 net: Implement LazyGenericCallback and use it in websocket (#42077)
We introduce a new type of callback, LazyGenericCallback and use it in
websocket initialization.

The basic requirement is that for websocket the place where the callback
is called and where it is constructed are over several functions,
including async functions. To make this generic, we implement
LazyGenericCallback and a GeneralCallbackSetter. The CallbackSetter can
be used to set the callback which then will be transfered to the
LazyGenericCallback which calls it on messages send to it.

Finally, we use this to "Generify" the initialization of WebSockets.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: We have new tests for LazyGenericCallback and wpt test run
here: https://github.com/Narfinger/servo/actions/runs/21246091767

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-03-04 13:37:33 +00:00
Taym Haddadi
cbc2156e86 indexeddb: restore object store metadata on upgrade abort and sync connection (#42786)
The frontend connection metadata was not consistently synchronized with
backend object store state during open/upgrade, and upgrade abort did
not fully restore the connection object store set in all cases.

Testing: More indexeddb tests should pass.
part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-04 13:33:45 +00:00
atbrakhi
9c43b52afb devtools: Implement function name preview in debugger popup (#42996)
The debugger preview popup was showing `function ()` for all functions.
This change implements support to show function name in the debugger
preview popup.

This is initial work towards showing other values in debugger preview
popup!

**Before:**
<img width="306" height="118" alt="image"
src="https://github.com/user-attachments/assets/5c090820-4862-4234-a6ea-50666f83c192"
/>


**After:**
<img width="282" height="128" alt="image"
src="https://github.com/user-attachments/assets/869a0122-c9da-4098-bb77-8a1110c29d48"
/>

<img width="286" height="137" alt="image"
src="https://github.com/user-attachments/assets/8655a8cb-bbd3-4b80-a297-daac58a6337f"
/>


Testing: Existing test passes
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-04 11:14:45 +00:00
dependabot[bot]
0ba263be5b build: bump range-alloc from 0.1.4 to 0.1.5 (#43007)
Bumps [range-alloc](https://github.com/gfx-rs/range-alloc) from 0.1.4 to
0.1.5.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/gfx-rs/range-alloc/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=range-alloc&package-manager=cargo&previous-version=0.1.4&new-version=0.1.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 09:58:34 +00:00
Servo WPT Sync
0343706a02 Sync WPT with upstream (04-03-2026) (#43011)
Automated downstream sync of changes from upstream as of 04-03-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-03-04 07:24:31 +00:00
Josh Matthews
f206571869 layout: Prevent DomRefCell::borrow from being used in layout code (#42976)
DomRefCell::borrow inside of layout code is risky because it leads to
memory races if the code is ever called from layout worker threads. This
can be caught via TSAN, but we can also catch it deterministically in CI
by using our existing thread state debug assertions correctly.

Testing: Existing WPT test coverage is sufficient.
Fixes: #42962

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-04 06:44:39 +00:00
Loïc Denuzière
1970e57b26 paint: Bound screenshot to the viewport (#42739)
Ensure that the screenshot rectangle is bounded by the width and height
of the viewport.

Testing: The WPT test `test_clip_huge_element_to_viewport` now passes
instead of crashing. It is also fixed so that the returned screenshot
size is the expected 800x600; it would otherwise be 792x600 due to the
body margin.

Fixes: #42530

---------

Signed-off-by: Loic Denuziere <loic@denuziere.net>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-04 06:43:24 +00:00
Euclid Ye
a1fde82cb0 pixels: Properly format the panic message in webrender_image_descriptor_and_data_for_frame (#43009)
`expect` is not a macro.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-04 05:49:30 +00:00
dependabot[bot]
4f2d224b7a build: bump tokio-macros from 2.6.0 to 2.6.1 (#43006)
Bumps [tokio-macros](https://github.com/tokio-rs/tokio) from 2.6.0 to
2.6.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e3ee4e58dc"><code>e3ee4e5</code></a>
chore: prepare tokio-macros v2.6.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7943">#7943</a>)</li>
<li><a
href="8c980ea75a"><code>8c980ea</code></a>
io: add <code>write_all_vectored</code> to <code>tokio-util</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7768">#7768</a>)</li>
<li><a
href="e35fd6d6b7"><code>e35fd6d</code></a>
ci: fix patch during clippy step (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7935">#7935</a>)</li>
<li><a
href="03fe44c103"><code>03fe44c</code></a>
runtime: fix <code>event_interval</code> doc (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7932">#7932</a>)</li>
<li><a
href="d18e5dfbb0"><code>d18e5df</code></a>
io: fix race in <code>Mock::poll_write</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7882">#7882</a>)</li>
<li><a
href="f21f2693f0"><code>f21f269</code></a>
runtime: fix race condition during the blocking pool shutdown (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7922">#7922</a>)</li>
<li><a
href="d81e8f0acb"><code>d81e8f0</code></a>
macros: remove (most) local <code>use</code> declarations in
<code>tokio::select!</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7929">#7929</a>)</li>
<li><a
href="25e7f2641e"><code>25e7f26</code></a>
rt: fix missing quotation in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7925">#7925</a>)</li>
<li><a
href="e1a91ef114"><code>e1a91ef</code></a>
util: fix typo in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7926">#7926</a>)</li>
<li><a
href="1b11840f53"><code>1b11840</code></a>
task: clarify when to use <code>spawn_blocking</code> vs dedicated
threads (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7923">#7923</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-macros-2.6.0...tokio-macros-2.6.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio-macros&package-manager=cargo&previous-version=2.6.0&new-version=2.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:52:01 +00:00
dependabot[bot]
e164127a99 build: bump async-compression from 0.4.40 to 0.4.41 (#43005)
Bumps
[async-compression](https://github.com/Nullus157/async-compression) from
0.4.40 to 0.4.41.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="269174b4be"><code>269174b</code></a>
chore(async-compression): release v0.4.41 (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/458">#458</a>)</li>
<li><a
href="37e366b3ed"><code>37e366b</code></a>
Fix UnwindSafe auto impl (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/459">#459</a>)</li>
<li><a
href="c39c6215cb"><code>c39c621</code></a>
On error the encoder/decoder now emit everything it was able to decode.
(<a
href="https://redirect.github.com/Nullus157/async-compression/issues/454">#454</a>)</li>
<li>See full diff in <a
href="https://github.com/Nullus157/async-compression/compare/async-compression-v0.4.40...async-compression-v0.4.41">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-compression&package-manager=cargo&previous-version=0.4.40&new-version=0.4.41)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:44:25 +00:00
dependabot[bot]
45f1bdbf41 build: bump jiff from 0.2.22 to 0.2.23 (#43004)
Bumps [jiff](https://github.com/BurntSushi/jiff) from 0.2.22 to 0.2.23.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md">jiff's
changelog</a>.</em></p>
<blockquote>
<h1>0.2.23 (2026-03-03)</h1>
<p>This release updates Jiff's bundled copy of the [IANA Time Zone
Database]
to <code>2026a</code>. See the <a
href="https://lists.iana.org/hyperkitty/list/tz-announce@iana.org/thread/ASPLBE3A4BAEXIOQ3KZ6EJSJWBU6L53G/"><code>2026a</code>
release announcement</a> for more details.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e5b7f0d061"><code>e5b7f0d</code></a>
0.2.23</li>
<li><a
href="ff23414041"><code>ff23414</code></a>
jiff-tzdb-0.1.6</li>
<li><a
href="225d54b3fa"><code>225d54b</code></a>
jiff-tzdb: update to tzdb 2026a</li>
<li>See full diff in <a
href="https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.22...jiff-static-0.2.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jiff&package-manager=cargo&previous-version=0.2.22&new-version=0.2.23)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:38:48 +00:00
dependabot[bot]
1a88a27370 build: bump quote from 1.0.44 to 1.0.45 (#43003)
Bumps [quote](https://github.com/dtolnay/quote) from 1.0.44 to 1.0.45.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/quote/releases">quote's
releases</a>.</em></p>
<blockquote>
<h2>1.0.45</h2>
<ul>
<li>Add ToTokens impl for Arc&lt;T&gt; (<a
href="https://redirect.github.com/dtolnay/quote/issues/326">#326</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="842ffde933"><code>842ffde</code></a>
Release 1.0.45</li>
<li><a
href="93d691cce9"><code>93d691c</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/quote/issues/326">#326</a>
from dtolnay/arc</li>
<li><a
href="d27d589652"><code>d27d589</code></a>
ToTokens for Arc</li>
<li><a
href="24d10826cf"><code>24d1082</code></a>
Update ui test suite to nightly-2026-02-18</li>
<li><a
href="26b127632c"><code>26b1276</code></a>
Unpin CI miri toolchain</li>
<li><a
href="c5e1c9ef46"><code>c5e1c9e</code></a>
Pin CI miri to nightly-2026-02-11</li>
<li><a
href="58e21550d8"><code>58e2155</code></a>
Remove compiler version support from readme</li>
<li><a
href="1fc6b50769"><code>1fc6b50</code></a>
Raise required compiler to Rust 1.71</li>
<li><a
href="515480a434"><code>515480a</code></a>
Update ui test suite to nightly-2026-02-01</li>
<li><a
href="2c5e7709dd"><code>2c5e770</code></a>
Update ui test suite to nightly-2026-01-30</li>
<li>See full diff in <a
href="https://github.com/dtolnay/quote/compare/1.0.44...1.0.45">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quote&package-manager=cargo&previous-version=1.0.44&new-version=1.0.45)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:38:13 +00:00
dependabot[bot]
ff82f949a7 build: bump tokio from 1.49.0 to 1.50.0 in the tokio-rs-related group (#43002)
Bumps the tokio-rs-related group with 1 update:
[tokio](https://github.com/tokio-rs/tokio).

Updates `tokio` from 1.49.0 to 1.50.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tokio/releases">tokio's
releases</a>.</em></p>
<blockquote>
<h2>Tokio v1.50.0</h2>
<h1>1.50.0 (Mar 3rd, 2026)</h1>
<h3>Added</h3>
<ul>
<li>net: add <code>TcpStream::set_zero_linger</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7837">#7837</a>)</li>
<li>rt: add <code>is_rt_shutdown_err</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7771">#7771</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>io: add optimizer hint that <code>memchr</code> returns in-bounds
pointer (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7792">#7792</a>)</li>
<li>io: implement vectored writes for <code>write_buf</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7871">#7871</a>)</li>
<li>runtime: panic when <code>event_interval</code> is set to 0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7838">#7838</a>)</li>
<li>runtime: shorten default thread name to fit in Linux limit (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7880">#7880</a>)</li>
<li>signal: remember the result of <code>SetConsoleCtrlHandler</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7833">#7833</a>)</li>
<li>signal: specialize windows <code>Registry</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7885">#7885</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>io: always cleanup <code>AsyncFd</code> registration list on
deregister (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7773">#7773</a>)</li>
<li>macros: remove (most) local <code>use</code> declarations in
<code>tokio::select!</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7929">#7929</a>)</li>
<li>net: fix <code>GET_BUF_SIZE</code> constant for <code>target_os =
&quot;android&quot;</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7889">#7889</a>)</li>
<li>runtime: avoid redundant unpark in current_thread scheduler (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7834">#7834</a>)</li>
<li>runtime: don't park in <code>current_thread</code> if
<code>before_park</code> defers waker (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7835">#7835</a>)</li>
<li>io: fix write readiness on ESP32 on short writes (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7872">#7872</a>)</li>
<li>runtime: wake deferred tasks before entering
<code>block_in_place</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7879">#7879</a>)</li>
<li>sync: drop rx waker when oneshot receiver is dropped (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7886">#7886</a>)</li>
<li>runtime: fix double increment of <code>num_idle_threads</code> on
shutdown (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7910">#7910</a>,
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7918">#7918</a>,
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7922">#7922</a>)</li>
</ul>
<h3>Unstable</h3>
<ul>
<li>fs: check for io-uring opcode support (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7815">#7815</a>)</li>
<li>runtime: avoid lock acquisition after uring init (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7850">#7850</a>)</li>
</ul>
<h3>Documented</h3>
<ul>
<li>docs: update outdated unstable features section (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7839">#7839</a>)</li>
<li>io: clarify the behavior of <code>AsyncWriteExt::shutdown()</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7908">#7908</a>)</li>
<li>io: explain how to flush stdout/stderr (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7904">#7904</a>)</li>
<li>io: fix incorrect and confusing <code>AsyncWrite</code>
documentation (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7875">#7875</a>)</li>
<li>rt: clarify the documentation of <code>Runtime::spawn</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7803">#7803</a>)</li>
<li>rt: fix missing quotation in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7925">#7925</a>)</li>
<li>runtime: correct the default thread name in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7896">#7896</a>)</li>
<li>runtime: fix <code>event_interval</code> doc (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7932">#7932</a>)</li>
<li>sync: clarify RwLock fairness documentation (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7919">#7919</a>)</li>
<li>sync: clarify that <code>recv</code> returns <code>None</code> once
closed and no more messages (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7920">#7920</a>)</li>
<li>task: clarify when to use <code>spawn_blocking</code> vs dedicated
threads (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7923">#7923</a>)</li>
<li>task: doc that task drops before <code>JoinHandle</code> completion
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7825">#7825</a>)</li>
<li>signal: guarantee that listeners never return <code>None</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7869">#7869</a>)</li>
<li>task: fix task module feature flags in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7891">#7891</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0273e45ead"><code>0273e45</code></a>
chore: prepare Tokio v1.50.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7934">#7934</a>)</li>
<li><a
href="e3ee4e58dc"><code>e3ee4e5</code></a>
chore: prepare tokio-macros v2.6.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7943">#7943</a>)</li>
<li><a
href="8c980ea75a"><code>8c980ea</code></a>
io: add <code>write_all_vectored</code> to <code>tokio-util</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7768">#7768</a>)</li>
<li><a
href="e35fd6d6b7"><code>e35fd6d</code></a>
ci: fix patch during clippy step (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7935">#7935</a>)</li>
<li><a
href="03fe44c103"><code>03fe44c</code></a>
runtime: fix <code>event_interval</code> doc (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7932">#7932</a>)</li>
<li><a
href="d18e5dfbb0"><code>d18e5df</code></a>
io: fix race in <code>Mock::poll_write</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7882">#7882</a>)</li>
<li><a
href="f21f2693f0"><code>f21f269</code></a>
runtime: fix race condition during the blocking pool shutdown (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7922">#7922</a>)</li>
<li><a
href="d81e8f0acb"><code>d81e8f0</code></a>
macros: remove (most) local <code>use</code> declarations in
<code>tokio::select!</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7929">#7929</a>)</li>
<li><a
href="25e7f2641e"><code>25e7f26</code></a>
rt: fix missing quotation in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7925">#7925</a>)</li>
<li><a
href="e1a91ef114"><code>e1a91ef</code></a>
util: fix typo in docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7926">#7926</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-1.49.0...tokio-1.50.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tokio&package-manager=cargo&previous-version=1.49.0&new-version=1.50.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-04 00:22:57 +00:00
Oriol Brufau
cd8973873d build(deps): bump Stylo to "Make preference system more robust" (#42741)
Bumps Stylo to https://github.com/servo/stylo/pull/314

In particular, we would now get a compile error because we were setting
`layout.flexbox.enabled` and `layout.css.transition-behavior.enabled`,
even if Stylo removed at some point. So stop setting them.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-03 22:28:59 +00:00
Martin Robinson
027910e544 layout/fonts: Mitigate races related to quirks mode and fallback fonts (#42960)
This change includes two related fixes for flakiness revealed by #42847.

1. When caching fonts, try harder to not re-cache a font. This could
   happen due to a race condition with the read-write lock on the font
   cache. This change improves memory usage in some cases as it prevents
   a font from being loaded twice.
2. Incorporate both the strut size and the block size contribution of a
   previously unused font in an inline container. Before the code was
   incorporating one or the other. In addition, *only* incorporate the
   block contribution of a previously unused font if its metrics
   meaningfully differ from the container's default font. This was the
   case triggered by failing to have the fix in part one of the change.

Testing: This fixes flakiness in an internal WPT-style test.
Fixes: #42908.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-03-03 21:10:05 +00:00
Shubham Gupta
711644cfaa layout: Encapsulate iframe related data into IFrameInfo struct. (#42954)
Wraps data related to iframe in `IFrameInfo` struct.

Testing: This is just a little refactor. No change in behavior expected.
Successful compilation is enough to verify.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-03 20:18:49 +00:00
Josh Matthews
3508beac5a servoshell: Add missing format string. (#42756)
This message appeared in a backtrace without any format replacement
taking place.

Testing: No tests for error messages.

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-03-03 20:18:31 +00:00
atbrakhi
27946914dc devtools: Use actual class name in ObjectActor (#42994)
Class name in `ObjectActor` was harcoded to `Window`, which is wrong.
This change removes the hardcoded value and replaces it with actual
class name.

**Before:**
<img width="320" height="163" alt="image"
src="https://github.com/user-attachments/assets/f94df58a-5309-4fd1-bb02-aa06dfeb32c3"
/>


**After:**
<img width="353" height="138" alt="image"
src="https://github.com/user-attachments/assets/ad129676-8c3d-48e2-a543-1447c75c40f0"
/>

Testing: Existing test passes
Fixes: part of #36027 
Depends on https://github.com/servo/servo/pull/42936

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-03 19:15:14 +00:00
Jonathan Schwender
baf2d0fc8a Fix ohos.yml bencher file size on main (#42997)
Renaming the job in #42929 silently broke the evaluation here.

Testing: Can only be tested on main / in priviledge contexts / otherwise
the unsigned binary is anyway built.
Fixes: ohos bencher failing on main (since the wrong binary name is
chosen)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-03 16:24:01 +00:00
batu_hoang
712b7b3b63 stylo: Enable system color (#42529)
Enable system color:
- stylo PR: https://github.com/servo/stylo/pull/302
- Update WPT expectation
- Update UA styleshee to use system color value

---------

Signed-off-by: batu_hoang <longvatrong111@gmail.com>
2026-03-03 16:07:01 +00:00
Kingsley Yung
059d39aead script: Resolve name referencing issue during ML-DSA export (#42984)
In the WebCrypto modern algorithm specification, the issue
(https://github.com/WICG/webcrypto-modern-algos/issues/47) on algorithm
name referencing in the export key operation of ML-KEM had been resolved
by the following commit in the specification repository:


705f8ec6ce

Our implementation actually matches the new specification. We simply
update the specification text, with some minor refactoring accordingly.

This is equivalent the changes on ML-KEM in #42918 in which I forgot to
include the counterpart for ML-DSA :(

Testing: Refactoring. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-03 15:29:52 +00:00
Simon Wülker
036cb9a68c script: Set relatedTarget for {mouse, pointer}x{enter, leave, out, over} events (#42989)
Testing: New tests start to pass. Most related tests still fail because
we dispatch mouse and pointer events in the wrong order.

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-03 15:18:30 +00:00
Jonathan Schwender
4e44e366d3 servoshell: Delete duplicate Info.plist (#42955)
We had two `Info.plist` files. The maintained one is in the root
directory of this repository.
There is no reason for two plist files, so remove the unmaintained one. 
Additionally, we also move the maintained version from the root
directory to the servoshell directory.

Testing: We don't test the contents of the plist file.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-03 15:14:30 +00:00
Narfinger
c204a799a7 OHOS CI: Fix resident-smaps recording (#42985)
Because of the move of the reporting function to
update_user_interface_state and the multiple events of
LoadStatus::Complete, the previous reporting did not work correctly
anymore.

This fixes it by manually summing up the reports for
'resident-according-to-smaps' and using the hitrace-bencher
point_filter_type Largest.

This should restore the bencher graph.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: No automatic test but manual test here:
https://github.com/Narfinger/servo/actions/runs/22617931816

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-03 14:28:21 +00:00
Jonathan Schwender
27fb3340c8 Fix nightly release (#42983)
Renaming the openharmony build job in #42929 caused artifact_ids to be
empty, which caused release failures.
Additionally, we add a validation step to the upload workflow, to
quickly pinpoint the issue of a missing input parameter,
since apparently github won't throw an error if a required input
parameter is empty.
This should make it easier to pinpoint the issue if it happens again. 

Testing: Not tested.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-03 14:23:52 +00:00
atbrakhi
630e4b75da devtools: Implement frame scoped evaluation (#42936)
When paused at a breakpoint, hovering over local variables now shows
their value. Previously `eval` used `executeInGlobal()` which could not
access local scope, so hovering showed `ReferenceError` instead of the
actual value.


https://github.com/user-attachments/assets/05247b82-4e4d-422d-a428-63e46b55d55f

Testing: Added a new test
Fixes: Part #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-03-03 14:22:25 +00:00
Euclid Ye
914121ef25 pointerevent_support.js: touchScrollInTarget smoothly (#42652)
The util `function touchScrollInTarget` aims to touch scroll the target
smoothly. However, currently it creates **accelerating** scrolling: as
the coordinates of `target` keep changing during the touch move which we
use as origin. This is not intended.

What's worse, this can trigger [out of
bound](https://w3c.github.io/webdriver/#ref-for-dfn-move-target-out-of-bounds-2:~:text=If%20y%20is%20less%20than%200%20or%20greater%20than%20the%20height%20of%20the%20viewport%20in%20CSS%20pixels%2C%20then%20return%20error%20with%20error%20code%20move%20target%20out%20of%20bounds%2E)
WebDriver error, and the tests never work.

This has caused problem for Firefox/Safari as well, e.g.
[pointerevent_touch-action-table-none-test_touch.html](https://wpt.fyi/results/pointerevents/pointerevent_touch-action-table-none-test_touch.html?run_id=5177777654595584&run_id=5095681367998464&run_id=5083756189974528).

Testing: Updated expectations of existing tests.




Before for `pointerevent_touch-action-table-none-test_touch.html`:


https://github.com/user-attachments/assets/7f14eee7-bdec-4ea4-a83e-684b2b65d951

After:



https://github.com/user-attachments/assets/9b05a9e6-164d-419c-a519-383dab856a4c

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-03 14:22:01 +00:00
Domenico Rizzo
bff59c629a script: Refactors GPURenderBundle's drop implementation. (#42982)
Moves the `Drop` logic for `GPURenderBundle` into a dedicated helper
struct, `DroppableGPURenderBundle`. This change ensures that
`GPURenderBundle` itself does not directly implement `Drop`, aligning
with the policy to prevent direct `Drop` implementations on DOM types.

Removes the `allowDropImpl` configuration for `GPURenderBundle` from
script bindings.

Testing: WebGPU tests cover all related cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-03 11:59:34 +00:00
Simon Wülker
d5f02b6f15 script: Fire pointer, mouseenter, and mouseleaveevents respecting the flat tree (#42987)
The [spec](https://w3c.github.io/pointerevents/#the-pointerenter-event)
says that pointer events should be fired for the element hovered by the
pointer and all its ancestors. That implies using the flat tree, which
we were not doing before.

Testing: This change fixes a web platform test and makes
https://github.com/simeydotme/hover-tilt work in servo

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-03 11:37:26 +00:00
Martin Robinson
eb63ad307e mach: Remove generic nightly download support (#42977)
See #42956. It's quite likely that this code has bitrotted and if this
feature is desired, should probably download the nightlies from GitHub
and also be updated to support our current packaging output.

Testing: This is just removing unused code from our build scripts.
Fixes: #42956.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-03-03 10:03:02 +00:00
Oriol Brufau
36c6594c76 script: Avoid data race in ServoLayoutElement::apply_selector_flags() (#42963)
This changes `Element::selector_flags` from `Cell<ElementSelectorFlags>`
to `AtomicUsize`, thus avoiding the risk of data races.

Testing: Tested manually. We don't run tests using TSAN builds.
Fixes: #37495

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-03-03 09:52:01 +00:00
webbeef
295e019d00 script: pointer events: pointerenter, pointerout, pointerleave, pointerover (#42736)
Adds support for more pointer events: pointerenter, pointerout,
pointerleave, pointerover
Also add global event handlers that were missing.

Testing: WPT expectations are updated.

cc @yezhizhen

Signed-off-by: webbeef <me@webbeef.org>
2026-03-03 08:27:53 +00:00
dependabot[bot]
b68628ad82 build: bump ipnet from 2.11.0 to 2.12.0 (#42971)
Bumps [ipnet](https://github.com/krisprice/ipnet) from 2.11.0 to 2.12.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/krisprice/ipnet/releases">ipnet's
releases</a>.</em></p>
<blockquote>
<p>Backwards compatible schemars 1.* support using version specific
features#67</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/krisprice/ipnet/blob/master/RELEASES.md">ipnet's
changelog</a>.</em></p>
<blockquote>
<h2>Version 2.12.0</h2>
<ul>
<li>Backwards compatible schemars 1.* support using version specific
features#67</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="65c04c3556"><code>65c04c3</code></a>
Update version number.</li>
<li><a
href="397bf726e7"><code>397bf72</code></a>
Merge pull request <a
href="https://redirect.github.com/krisprice/ipnet/issues/67">#67</a>
from StefanTerdell/schemars-1</li>
<li><a
href="687f2703d9"><code>687f270</code></a>
Add support for schemars 1, deprecate old features</li>
<li>See full diff in <a
href="https://github.com/krisprice/ipnet/compare/2.11.0...2.12.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ipnet&package-manager=cargo&previous-version=2.11.0&new-version=2.12.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 08:13:49 +00:00
Euclid Ye
76d8e343b9 ci: Remove dummy audio device related steps for linux-wpt (#42945)
This doesn't seem to have any impact.

[Try](https://github.com/servo/servo/actions/runs/22546956503)

Testing: This is a change to the testing CI configuration.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-03 06:06:03 +00:00
dependabot[bot]
9cf9bdbe71 build: bump jiff from 0.2.21 to 0.2.22 (#42973)
Bumps [jiff](https://github.com/BurntSushi/jiff) from 0.2.21 to 0.2.22.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md">jiff's
changelog</a>.</em></p>
<blockquote>
<h1>0.2.22 (2026-02-28)</h1>
<p>This release includes a bug fix where fallible conversions from
signed
durations to unsigned durations could panic in some cases.</p>
<p>Bug fixes:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/526">#526</a>:
Fix a panicking bug that occurs for
<code>std::time::Duration::try_from(SignedDuration::new(0,
-1))</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4fb63be9c2"><code>4fb63be</code></a>
0.2.22</li>
<li><a
href="47f5abf9ee"><code>47f5abf</code></a>
signed_duration: fix a panicking bug in `TryFrom&lt;SignedDuration&gt;
for std::tim...</li>
<li><a
href="c3d960e192"><code>c3d960e</code></a>
fuzz: update dependencies</li>
<li>See full diff in <a
href="https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.21...jiff-static-0.2.22">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jiff&package-manager=cargo&previous-version=0.2.21&new-version=0.2.22)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 02:11:29 +00:00
dependabot[bot]
a688b32c1b build: bump aws-lc-rs from 1.16.0 to 1.16.1 (#42972)
Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.16.0 to
1.16.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs v1.16.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Update to aws-lc-fips-sys v0.13.12 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1052">aws/aws-lc-rs#1052</a></li>
<li>Update to aws-lc-sys v0.38.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1053">aws/aws-lc-rs#1053</a></li>
<li>Documentation for <code>dev-tests-only</code> feature and improved
platform support clarity by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1050">aws/aws-lc-rs#1050</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Check cranelift when using the cargo-clif executable by <a
href="https://github.com/frederikhors"><code>@​frederikhors</code></a>
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1047">aws/aws-lc-rs#1047</a></li>
</ul>
<h2>Other merged PRs</h2>
<ul>
<li>Prepare aws-lc-rs v1.16.1 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1051">aws/aws-lc-rs#1051</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/frederikhors"><code>@​frederikhors</code></a>
made their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1047">aws/aws-lc-rs#1047</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.16.0...v1.16.1">https://github.com/aws/aws-lc-rs/compare/v1.16.0...v1.16.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="70d449ad1d"><code>70d449a</code></a>
Prepare v1.16.1 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1051">#1051</a>)</li>
<li><a
href="fdba3e3c5f"><code>fdba3e3</code></a>
Prepare aws-lc-sys v0.38.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1053">#1053</a>)</li>
<li><a
href="e6e2cfd271"><code>e6e2cfd</code></a>
Update to aws-lc-fips-sys v0.13.12 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1052">#1052</a>)</li>
<li><a
href="d93f5fbf23"><code>d93f5fb</code></a>
docs: Document dev-tests-only feature and improve platform support
clarity (#...</li>
<li><a
href="b6b155809d"><code>b6b1558</code></a>
Check cranelift when using the cargo-clif executable (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1047">#1047</a>)</li>
<li>See full diff in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.16.0...v1.16.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.16.0&new-version=1.16.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 02:10:43 +00:00
dependabot[bot]
0f4ff9e5f9 build: bump winit from 0.30.12 to 0.30.13 (#42968)
Bumps [winit](https://github.com/rust-windowing/winit) from 0.30.12 to
0.30.13.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-windowing/winit/releases">winit's
releases</a>.</em></p>
<blockquote>
<h2>Winit version 0.30.13</h2>
<h3>Added</h3>
<ul>
<li>On Wayland, add <code>Window::set_resize_increments</code>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>On macOS, fixed crash when dragging non-file content onto
window.</li>
<li>On X11, fix <code>set_hittest</code> not working on some window
managers.</li>
<li>On X11, fix debug mode overflow panic in
<code>set_timestamp</code>.</li>
<li>On macOS, fix crash in <code>set_marked_text</code> when native
Pinyin IME sends out-of-bounds <code>selected_range</code>.</li>
<li>On Windows, fix <code>WM_IME_SETCONTEXT</code> IME UI flag masking
on <code>lParam</code>.</li>
<li>On Android, populate <code>KeyEvent::text</code> and
<code>KeyEvent::text_with_all_modifiers</code> via
<code>Key::to_text()</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e9809ef54b"><code>e9809ef</code></a>
Winit version 0.30.13</li>
<li><a
href="efb5b37fff"><code>efb5b37</code></a>
chore: fix ci</li>
<li><a
href="a9baf5ecda"><code>a9baf5e</code></a>
fix(android): Populate <code>KeyEvent.text</code> via
<code>Key::to_text()</code></li>
<li><a
href="6bb43fd130"><code>6bb43fd</code></a>
wayland: implement resize increments</li>
<li><a
href="17a73f4dd4"><code>17a73f4</code></a>
win32: fix ime setcontext lparam</li>
<li><a
href="bccc568345"><code>bccc568</code></a>
fix(macOS): clamp IME selected_range to prevent substringToIndex
crash</li>
<li><a
href="69b8a07ae0"><code>69b8a07</code></a>
winit-x11: fix debug mode overflow panic in
<code>set_timestamp</code></li>
<li><a
href="3eb731f8b5"><code>3eb731f</code></a>
winit-x11: replace xfixes with x11rb in set_hittest</li>
<li><a
href="7035dd554f"><code>7035dd5</code></a>
winit-win32: Fix ABI mismatch in INIT_MAIN_THREAD_ID</li>
<li><a
href="ab4c6bfc82"><code>ab4c6bf</code></a>
macOS: fix a crash when dragging non-file content onto window</li>
<li>See full diff in <a
href="https://github.com/rust-windowing/winit/compare/v0.30.12...v0.30.13">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=winit&package-manager=cargo&previous-version=0.30.12&new-version=0.30.13)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-03 01:49:45 +00:00
Taym Haddadi
cfc4920815 indexeddb: implement "inject a key into a value using a key path with value" (#42727)
implement "inject a key into a value using a key path with value"
following he spec:

https://w3c.github.io/IndexedDB/#inject-a-key-into-a-value-using-a-key-path
 

Testing: More indexeddb tests should pass.
part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-03-02 23:16:29 +00:00
Martin Robinson
1d9d440b22 script: Add basic support for tab navigation (#42952)
This change adds very basic support for tab navigation, but without
support for focus scopes. Followup changes will refine the behavior of
this implementation to follow the specification around focus scopes,
shadow DOM, and slots. In particular `delegatesFocus` is not supported
here yet.

Testing: This causes quite a few WPT tests to start passing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-03-02 20:42:25 +00:00
Shubham Gupta
77e4bfbcc4 Pass Request's URL for LargestContentfulPaint Entry (#42901)
Pass Request URL to `LargestContnetfulPaint` Entry

Testing: WPT Expectations Updated.
Fixes: #42902

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-02 20:35:37 +00:00
Simon Wülker
640fe6356a fonts: Don't apply letter-spacing to formatting characters (#42961)
This change checks whether a character belongs to the `Cf` category of
unicode characters before applying `letter-spacing`. The `fonts` crate
now depends on `icu_properties`, but that crate is already in our
dependency tree (with the same features enabled).

Testing: New tests start to pass
Fixes https://github.com/servo/servo/issues/38781

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-02 19:09:01 +00:00
eri
88f2469270 devtools: Implement initial support for Step in, Step out and Step over (#42907)
We are adding initial support for stepping in the debugger. Step over
mostly works, but Step in and Step out have some quirks that we are
working on.

![2026-02-27
12-32-05](https://github.com/user-attachments/assets/0b73b32c-efa3-444c-80a4-f863a64b6fdc)

Testing: DevTools tests and manual checks.
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-03-02 18:35:02 +00:00
Narfinger
b55bc205a7 script: jscontext-ify element aria methods and SetCrossOrigin (#42957)
Use &mut JSContext in element aria* methods and SetCrossOrigin methods.

Testing: Compilation is the test as this is part from
https://github.com/servo/servo/issues/40600

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-03-02 17:23:33 +00:00
Simon Wülker
a7f89a22ff tests: Add back .ini file for parser reentrancy test (#42959)
The file was removed in
bb5547a5d0
but we still need it. Note that we don't crash on the async variant
anymore since https://github.com/servo/servo/pull/42910.

Fixes https://github.com/servo/servo/issues/42933
Testing: The tests run as expected.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-02 16:43:47 +00:00
Shubham Gupta
062bb35ac5 layout: Add image_url to ImageInfo struct (#42949)
This just adds URL to pass to ImageFragment for LargestContentfulPaint
Entry

Rebased on: #42948

Testing: No expected change in behavior, Successful Compilation is
enough to verify.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-02 16:34:17 +00:00
Domenico Rizzo
68284e4a38 script: Refactors GPUPipelineLayout to disallow direct Drop. (#42937)
Moves the `Drop` implementation for `GPUPipelineLayout` to a dedicated
private helper struct, `DroppableGPUPipelineLayout`. This ensures that
DOM types do not directly implement `Drop`, aligning with best practices
for resource management in the DOM. The associated `Bindings.conf` entry
is removed as direct `Drop` is no longer needed for this type.

Testing: WebGpu just coverages cases with  proper tests
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-03-02 15:26:42 +00:00
Jonathan Schwender
30372328c0 Reword our security policy (#42953)
In ac24cd6139 we started asking for people
to use **private** github security reports, but kept the wording from
before, which was related to accepting such reports as **public**
issues.
The wording doesn't make sense in the context of asking people for
private reports, so update the wording to reflect that.
This is not a policy change, just making the wording more clear.

Testing: Not required, policy description.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-02 13:37:59 +00:00
Simon Wülker
e033588b30 script: Fix deadlock in async html parser (#42930)
When the async parser thread finds a `<meta charset>` tag then it asks
the main thread whether parsing should restart. The main thread wasn't
responding, so the parser got stuck.


Part of https://github.com/servo/servo/issues/37418
Testing: This change adds a test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-03-02 12:15:41 +00:00
Shubham Gupta
71974ea830 layout: Wrap Image related data in ImageInfo struct in NodeExt impl (#42948)
Encapsulating Image related data in ImageInfo in NodeExt impl.

Testing: This is just a little refactor. No change in behavior expected.
Successful compilation is enough to verify.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-03-02 10:34:39 +00:00
webbeef
4487e0222a script: Mark disabled elements pointed at and elements targets of touch events as :active (#42935)
This implements the "If the element is [being actively pointed
at](https://html.spec.whatwg.org/multipage/semantics-other.html#being-actively-pointed-at)"
part of
https://html.spec.whatwg.org/multipage/semantics-other.html#selector-active

Also added support for activation of controls tied to a `<label
for=...>` element as this is part of the same
`/html/semantics/selectors/pseudo-classes/active-disabled.html` WPT
test. We still fail the `<input disabled>` one because the hit test ends
up in a `<div>` of the input shadow DOM.

Testing: New WPT tests are passing
Fixes: Partial fix for https://github.com/servo/servo/issues/7333 and
https://github.com/servo/servo/issues/20284 (I think we still lack
support for the focusable elements).

---------

Signed-off-by: webbeef <me@webbeef.org>
2026-03-02 09:17:52 +00:00
Euclid Ye
29d20d56cf ci: Add jackd2 to dependency of Media Examples (#42947)
Testing: Output log is reduced to 910 lines in
[try](https://github.com/servo/servo/actions/runs/22567021352/job/65365322261#step:8:910).
Previously, it is 1400 lines, and we get error in [when start dummy
audio
device](https://github.com/servo/servo/actions/runs/22502937019/job/65194401381#step:7:13).
Fixes: Part of #42934?

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-02 09:15:40 +00:00
dependabot[bot]
a60a8b1b4d build: bump dlib from 0.5.2 to 0.5.3 (#42940)
Bumps [dlib](https://github.com/elinorbgr/dlib) from 0.5.2 to 0.5.3.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/elinorbgr/dlib/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dlib&package-manager=cargo&previous-version=0.5.2&new-version=0.5.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 04:31:29 +00:00
dependabot[bot]
a1e03eeb6b build: bump the gstreamer-related group with 3 updates (#42938)
Bumps the gstreamer-related group with 3 updates:
[glib](https://github.com/gtk-rs/gtk-rs-core), gstreamer and
[glib-macros](https://github.com/gtk-rs/gtk-rs-core).

Updates `glib` from 0.22.0 to 0.22.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib's
releases</a>.</em></p>
<blockquote>
<h2>0.22.2</h2>
<pre><code>Julian Sparber:
      glib: Implement From&lt;PtrSlice&lt;GStringPtr&gt; for StrV
      glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;
<p>Sebastian Dröge:<br />
gio: Mark <code>Socket::from_raw_socket()</code> as unsafe</p>
<p>Wladimir Palant:<br />
glib-macros: Silence “redundant closure” clippy warning in
closure!/closure_local!<br />
</code></pre></p>
<h2>0.22.1</h2>
<pre><code>Sebastian Dröge:
gio: Re-add accidentally removed UNIX APIs that are still part of gio
itself
      gio: Remove non-existing UNIX functions from Gir.toml
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="484fbe01e7"><code>484fbe0</code></a>
Update Cargo.lock</li>
<li><a
href="77ce5c64ea"><code>77ce5c6</code></a>
Update versions to 0.22.2</li>
<li><a
href="a5a6b9f659"><code>a5a6b9f</code></a>
glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;</li>
<li><a
href="1870acb44c"><code>1870acb</code></a>
glib: Implement From&lt;PtrSlice<!-- raw HTML omitted --> for StrV</li>
<li><a
href="dd77db24ee"><code>dd77db2</code></a>
Fixes <a
href="https://redirect.github.com/gtk-rs/gtk-rs-core/issues/1912">#1912</a>
- Silence “redundant closure” clippy warning in
closure!/closure_...</li>
<li><a
href="a764a0fe5b"><code>a764a0f</code></a>
gio: Mark <code>Socket::from_raw_socket()</code> as unsafe</li>
<li><a
href="aa0dee233f"><code>aa0dee2</code></a>
Update versions to 0.22.1</li>
<li><a
href="a65fe5c356"><code>a65fe5c</code></a>
gio: Remove non-existing UNIX functions from Gir.toml</li>
<li><a
href="aa8a69805a"><code>aa8a698</code></a>
gio: Re-add accidentally removed UNIX APIs that are still part of gio
itself</li>
<li>See full diff in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.22.0...0.22.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `gstreamer` from 0.25.0 to 0.25.1

Updates `glib-macros` from 0.22.0 to 0.22.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib-macros's
releases</a>.</em></p>
<blockquote>
<h2>0.22.2</h2>
<pre><code>Julian Sparber:
      glib: Implement From&lt;PtrSlice&lt;GStringPtr&gt; for StrV
      glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;
<p>Sebastian Dröge:<br />
gio: Mark <code>Socket::from_raw_socket()</code> as unsafe</p>
<p>Wladimir Palant:<br />
glib-macros: Silence “redundant closure” clippy warning in
closure!/closure_local!<br />
</code></pre></p>
<h2>0.22.1</h2>
<pre><code>Sebastian Dröge:
gio: Re-add accidentally removed UNIX APIs that are still part of gio
itself
      gio: Remove non-existing UNIX functions from Gir.toml
</code></pre>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="484fbe01e7"><code>484fbe0</code></a>
Update Cargo.lock</li>
<li><a
href="77ce5c64ea"><code>77ce5c6</code></a>
Update versions to 0.22.2</li>
<li><a
href="a5a6b9f659"><code>a5a6b9f</code></a>
glib: Implement From&lt;StrV&gt; for PtrSlice&lt;GStringPtr&gt;</li>
<li><a
href="1870acb44c"><code>1870acb</code></a>
glib: Implement From&lt;PtrSlice<!-- raw HTML omitted --> for StrV</li>
<li><a
href="dd77db24ee"><code>dd77db2</code></a>
Fixes <a
href="https://redirect.github.com/gtk-rs/gtk-rs-core/issues/1912">#1912</a>
- Silence “redundant closure” clippy warning in
closure!/closure_...</li>
<li><a
href="a764a0fe5b"><code>a764a0f</code></a>
gio: Mark <code>Socket::from_raw_socket()</code> as unsafe</li>
<li><a
href="aa0dee233f"><code>aa0dee2</code></a>
Update versions to 0.22.1</li>
<li><a
href="a65fe5c356"><code>a65fe5c</code></a>
gio: Remove non-existing UNIX functions from Gir.toml</li>
<li><a
href="aa8a69805a"><code>aa8a698</code></a>
gio: Re-add accidentally removed UNIX APIs that are still part of gio
itself</li>
<li>See full diff in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.22.0...0.22.2">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 04:13:03 +00:00
dependabot[bot]
c285394886 build: bump piper from 0.2.4 to 0.2.5 (#42943)
Bumps [piper](https://github.com/smol-rs/piper) from 0.2.4 to 0.2.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/piper/releases">piper's
releases</a>.</em></p>
<blockquote>
<h2>v0.2.5</h2>
<ul>
<li>Add functions to allow for buffered reading and writing. (<a
href="https://redirect.github.com/smol-rs/piper/issues/27">#27</a>)</li>
<li>Fix a bug where closing the <code>Writer</code> after writing can
cause the <code>Reader</code> to
lose bytes. (<a
href="https://redirect.github.com/smol-rs/piper/issues/31">#31</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/piper/blob/main/CHANGELOG.md">piper's
changelog</a>.</em></p>
<blockquote>
<h1>Version 0.2.5</h1>
<ul>
<li>Add functions to allow for buffered reading and writing. (<a
href="https://redirect.github.com/smol-rs/piper/issues/27">#27</a>)</li>
<li>Fix a bug where closing the <code>Writer</code> after writing can
cause the <code>Reader</code> to
lose bytes. (<a
href="https://redirect.github.com/smol-rs/piper/issues/31">#31</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="85da45edce"><code>85da45e</code></a>
v0.2.5</li>
<li><a
href="6dd31ba3b5"><code>6dd31ba</code></a>
Add a test to verify that closing the write side doesn't break the
reader side.</li>
<li><a
href="f07220867f"><code>f072208</code></a>
Switch ordering of <code>closed</code> load to use <code>Acquire</code>
instead of <code>Relaxed</code>.</li>
<li><a
href="a7614f259a"><code>a7614f2</code></a>
Fix ordering of available data check.</li>
<li><a
href="aa05148ed9"><code>aa05148</code></a>
Update criterion requirement from 0.7 to 0.8 (<a
href="https://redirect.github.com/smol-rs/piper/issues/29">#29</a>)</li>
<li><a
href="3d62a59c24"><code>3d62a59</code></a>
feat: Implement AsyncBufRead and related methods on Reader and Writer
for dir...</li>
<li><a
href="6581c84a7b"><code>6581c84</code></a>
Update criterion requirement from 0.6 to 0.7 (<a
href="https://redirect.github.com/smol-rs/piper/issues/28">#28</a>)</li>
<li><a
href="e198ca3e47"><code>e198ca3</code></a>
Update criterion requirement from 0.4 to 0.6 (<a
href="https://redirect.github.com/smol-rs/piper/issues/25">#25</a>)</li>
<li><a
href="db2dcb8366"><code>db2dcb8</code></a>
Fix crates.io description for v0.2 reduced scope (<a
href="https://redirect.github.com/smol-rs/piper/issues/26">#26</a>)</li>
<li><a
href="30dd8ecd9c"><code>30dd8ec</code></a>
Fix typo (<a
href="https://redirect.github.com/smol-rs/piper/issues/21">#21</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/smol-rs/piper/compare/v0.2.4...v0.2.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=piper&package-manager=cargo&previous-version=0.2.4&new-version=0.2.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 01:11:24 +00:00
dependabot[bot]
9e9dc72e58 build: bump libredox from 0.1.12 to 0.1.14 (#42942)
Bumps libredox from 0.1.12 to 0.1.14.


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libredox&package-manager=cargo&previous-version=0.1.12&new-version=0.1.14)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 01:10:12 +00:00
dependabot[bot]
ddadbaa9a0 build: bump pin-project-lite from 0.2.16 to 0.2.17 (#42941)
Bumps [pin-project-lite](https://github.com/taiki-e/pin-project-lite)
from 0.2.16 to 0.2.17.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/pin-project-lite/releases">pin-project-lite's
releases</a>.</em></p>
<blockquote>
<h2>0.2.17</h2>
<ul>
<li>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/pin-project-lite/blob/main/CHANGELOG.md">pin-project-lite's
changelog</a>.</em></p>
<blockquote>
<h2>[0.2.17] - 2026-02-27</h2>
<ul>
<li>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3bdf763446"><code>3bdf763</code></a>
Release 0.2.17</li>
<li><a
href="17437026e9"><code>1743702</code></a>
Update changelog</li>
<li><a
href="be3eb1a180"><code>be3eb1a</code></a>
Add comment about rust-version field to Cargo.toml</li>
<li><a
href="2b5f66d9bc"><code>2b5f66d</code></a>
Update allowed lint list</li>
<li><a
href="c7495a0d46"><code>c7495a0</code></a>
tools: Update tidy.sh</li>
<li><a
href="aa30a9fba2"><code>aa30a9f</code></a>
Apply clippy to doctest</li>
<li><a
href="0944bb974c"><code>0944bb9</code></a>
Update .deny.toml</li>
<li><a
href="401bd71ac2"><code>401bd71</code></a>
rustfmt: Set hex_literal_case = &quot;Upper&quot;</li>
<li><a
href="28c4feccd5"><code>28c4fec</code></a>
test: Update lint test</li>
<li><a
href="67a04498e4"><code>67a0449</code></a>
tests: Update ui test output to nightly-2025-12-04</li>
<li>Additional commits viewable in <a
href="https://github.com/taiki-e/pin-project-lite/compare/v0.2.16...v0.2.17">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pin-project-lite&package-manager=cargo&previous-version=0.2.16&new-version=0.2.17)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-02 01:09:46 +00:00
Jonathan Schwender
84eff13a25 Bump version to 0.0.6 in preparation for release (#42932)
Same procedure as every month. `./mach release 0.0.6`

Testing: Not tested.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-01 19:07:44 +00:00
Gae24
63d91163d2 net: Ignore subresource integrity with invalid base64 value (#42931)
Found this while analysing module preload test failures. In particular a
subtest of `modulepreload.html` was recently
[updated](https://github.com/web-platform-tests/wpt/pull/57243) to catch
this.
We need to ensure that SRI hash follows the base64 grammar specified by
CSP.

Testing: Updated test expectations of a test

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-03-01 18:52:03 +00:00
Jonathan Schwender
37dfa42731 Unify servo package naming (#42916)
This is a preparation for publishing to crates.io. Changes include:
- Add `servo-` prefixes to avoid name collisions on crates.io
- Use `-` instead of `_` in package names.
- Rename the crates to their original names in Cargo.toml,
  to keep the diff minimal
- Rename `media` to `servo-media-thread` to avoid name collision with
  `servo-media` (originally from the media repository).

This is an outcome of the previous discussion at [#general > Switch
remaining git dependencies to
crates.io](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Switch.20remaining.20git.20dependencies.20to.20crates.2Eio/with/576336288)

Testing: This should be mostly covered by our CI, but some amount of
breakage is to be expected, since some package names could still be
referenced from scripts which are not tested or run in CI. [mach try
run](https://github.com/jschwe/servo/actions/runs/22502945949)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-03-01 14:15:27 +00:00
Euclid Ye
95af091dd3 ohos CI: Add timeouts (#42929)
There's some hanged scenarios with mitmproxy:
https://github.com/servo/servo/actions/runs/22539387007/job/65292396178

1. We rename `build` to `build-openharmony`.
2. We add 
- 60 minutes timeout for each Build profile
- 40 minutes for bencher (Normally finish under 10 mins)
- 20 mins for scenario tests. (Normally finish under 4 mins)

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-01 11:02:07 +00:00
Kingsley Yung
0eeb44c5e9 script: Reorder reading algorithm and data arguments in WebCrypto (#42927)
The specification of WebCrypto and Modern Algorithms in WebCrypto has
updated to reorder reading algorithm and data arguments in "encrypt",
"decrypt", "sign", "verify", "digest", "importKey", "unwrapKey",
"decapsulateKey" and "decapsulateBits" methods. This patch updates our
implementation accordingly.

The relevant commits in specification repositories:
- WebCrypto:
5b57233c0a
- Modern Algorithms in WebCrypto:
ae72ee6cf4

Testing: Pass new WPT tests added in
https://github.com/web-platform-tests/wpt/pull/57614 and
https://github.com/servo/servo/pull/42925

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-03-01 09:49:00 +00:00
Euclid Ye
6c82b3178e paint: Track whether script is handling touchmove per TouchId (#42926)
As titled. The change is prepared a while ago to eliminate dead code, 
but the test case added requires change from `testdriver-actions.js`: 
https://github.com/web-platform-tests/wpt/pull/57607 just landed by
latest wpt-sync: https://github.com/servo/servo/pull/42925.

Part of https://github.com/servo/servo/issues/41923

Testing: Added a WPT test.
Fixes: https://github.com/servo/servo/issues/42921

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-01 08:54:24 +00:00
webbeef
7c7cd5c0a6 mem: fix camelCase in JSON serialization of memory reports (#42923)
The change in 2d3a7c87c2 dropped the camelCase formatting of
is_main_process. As a result the about:memory page claims that all
processes are content processes.

Testing: run `./mach run -M` and open `about:memory` . The first process
listed will be "Main process" with this change.

Signed-off-by: webbeef <me@webbeef.org>
2026-03-01 07:51:26 +00:00
Servo WPT Sync
62e9ce8129 Sync WPT with upstream (01-03-2026) (#42925)
Automated downstream sync of changes from upstream as of 01-03-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-03-01 01:36:06 +00:00
Jonathan Schwender
b590c6c848 mach: Add command to export build env (#42888)
Add `./mach print-env` to export the environment variables mach sets to
stdout and `./mach exec` to execute an arbitrary command in the custom
environment. This allows users to easily run custom commands, or tools
in the same environment as mach would create without adding support
every tool. Note: `./mach print-env` is only targeting UNIX shells for
now, although probably one could detect the shell and e.g. also support
PowerShell (in theory).

In principle, simple commands like `./mach cargo-fix` could be removed
and instead used via `./mach exec cargo fix`.

The execution of commands via `./mach exec my_command` (e.g. running
custom tools like cargo-flamegraph) still has some limitations, since
arguments that the user might have meant to pass to the command, might
be eaten by `./mach` (if mach expects that parameter, e.g. `--target
<triple>`. It's recommended to delimit explicitly by adding `--`., e.g.
`./mach exec --ohos -- cargo build --target aarch64-unknown-linux-ohos`.
Without the `--` delimiter, `./mach would interpret `--target` instead
of passing it to `cargo build`.

Testing: Manual testing of `./mach print-env --ohos`. 
Fixes: #25473 #38223

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-28 13:31:48 +00:00
Jonathan Schwender
5c1065d2a0 Rename vendored artifact name in release workflow (#42920)
As suggested in
https://github.com/servo/book/pull/206#discussion_r2867083136

Testing: Not tested, just used grep.

Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-02-28 13:11:57 +00:00
Tim van der Lippe
ba4274218d Build nightly releases earlier for WPT (#42919)
WPT creates `epochs/daily` either at 2 or 3AM. This means that if a fix
land on day 1, then WPT is tagged earlier than the nightly release, so
it can take 24-48 hours before a change is reflected on wpt.fyi

If instead we create the nightly release in time before epoch, we can
see those results within 24 hours.

Testing: GitHub workflow change

---------

Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-02-28 09:33:41 +00:00
Jonathan Schwender
cb7d7a93a8 mach: Remove ensure_clobber (#42915)
We don't use the CLOBBER file anywhere. The CLOBBER was introduced in
d03e52d240, but without any commit
message. Judging by the CLOBBER file in that commit, this was related to
the CI machines at the time. Should be safe to remove.

Testing: Well, this probably should be reviewed by someone who is
familiar with the background. Not covered by any tests.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-28 08:55:33 +00:00
webbeef
1ad41dc15f script: Add a ServoInternals.garbageCollectAllContexts() (#42798)
This is useful in about:memory to measure memory usage after running the
GC.

The calling page sends a callback to the constellation that in turn wait
for all script threads to run the GC and report back.

Testing: Manual testing in `about:memory`

Before running GC:

<img width="2048" height="1480" alt="Screenshot from 2026-02-23
18-50-46"
src="https://github.com/user-attachments/assets/fd8399c1-fbc7-4f4c-886d-f29629ef8369"
/>

After running GC:

<img width="2048" height="1480" alt="Screenshot from 2026-02-23
18-51-00"
src="https://github.com/user-attachments/assets/82c793f7-8229-4de4-9cb5-47c94383b410"
/>

Signed-off-by: webbeef <me@webbeef.org>
2026-02-28 08:38:32 +00:00
Kingsley Yung
80ee60a1bf script: Resolve name referencing issue during ML-KEM export (#42918)
In the WebCrypto modern algorithm specification, the issue
(https://github.com/WICG/webcrypto-modern-algos/issues/47) on algorithm
name referencing in the export key operation of ML-KEM had been resolved
by the following commit in the specification repository:


705f8ec6ce

Our implementation actually matches the new specification. We simply
update the specification text, with some minor refactoring accordingly.

Testing: Refactoring. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-28 07:27:49 +00:00
Sam
8757ccbc8d script: Replace RAII AutoIncumbentScript with function wrapper (#42905)
As in https://github.com/servo/servo/pull/42715 we will need cx in drop
so we need to go to function wrapper pattern.

Testing: Just refactor should be covered by WPT tests.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-28 06:53:07 +00:00
Euclid Ye
ad906e8754 Webdriver CI: Use single chunk, default number of processes (#42842)
As said in
https://github.com/servo/servo/issues/42803#issuecomment-3957052680,
there's been a weird discrepancy between running wdspec tests in:
1. local / Linux WPT workflow
2. WebDriver Try

For 2, it triggers FAIL/ERROR that never happen in 1. It is not
intermittent, but always happens.

This PR makes 2 have same behaviour as running locally: default number
of processes (CPU count. For self-hosted runner workflow, this is
double. Hyperthreading?), single chunk.

This improves the running time by 2 mins as well.

Testing: The test results now work same as Linux WPT and local.
https://github.com/servo/servo/actions/runs/22385441028/job/64795317878#step:11:552
Fixes: #39097
Fixes: #42803

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-28 04:02:00 +00:00
Jonathan Schwender
33ac4f4850 script_bindings: Fix warnings about match_domstring_ascii_inner macro (#42917)
The warning occurs when compiling the script bindings unit-tests `./mach
test-unit -p script_bindings --lib`.
Presumably in some contexts the inner macro is already imported, which
triggers the warning.
Directly using `crate::` avoids this.

The fixed warning:
```
warning: unused import: `$crate::match_domstring_ascii_inner`
    --> components/script_bindings/domstring.rs:1050:17
     |
1050 |               use $crate::match_domstring_ascii_inner;
     |                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
1352 |           let _res = match_domstring_ascii!(s,
     |  ____________________-
1353 | |             "❤" => true,
1354 | |             _ => false,);
     | |________________________- in this macro invocation
     |
     = note: this warning originates in the macro `match_domstring_ascii` (in Nightly builds, run with -Z macro-backtrace for more info)
```

Testing: Manually tested the warning is fixed by running `./mach
test-unit -p script_bindings --lib`.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-27 20:49:51 +00:00
Martin Robinson
f6e44fad29 script: Expose the tabIndex property on HTMLOrSVGElement (#42913)
This is exposes the `tabIndex` property for `HTMLOrSVGElement` according
to the HTML specification. This is the first step toward implementation
of tab navigation in Servo.

Testing: This causes many WPT subtests to start passing, but causes a
few to
start failing. This is likely because we do not have a full
implementation of
the `delegatesFocus` parameter of `attachShadow` yet.
Fixes: This is part of #25001 and #32169.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-02-27 19:03:54 +00:00
Kingsley Yung
bf5f296cfb script: New design of algorithm registration in WebCrypto (#42896)
`NormalizedAlgorithm::encrypt`, `NormalizedAlgorithm::decrypt` and other
similar functions have some catch-all `match` arms that are unreachable.
They are unreachable because we rely on the name attribute in `String`
of the subtle dictionaries and the `NormalizedAlgorithm` enum to
determine which cryptographic algorithm to use, while the algorithm
normalization mechanism guarantees that some combinations of name and
enum variants won't exist.

This patch tries to get rid of those unreachable `match` arms to make
our WebCrypto code more idiomatic so that the Rust compiler can help us
ensure the correctness in the future.

To achieve this, we break the enum `NormalizedAlgorithm` into multiple
enums: `EncryptAlgorithm`, `DecryptAlgorithm`, `SignAlgorithm`, etc.
Each one is associated to a cryptographic operation, and its variants
are the cryptographic algorithms that support the associated operation.
The inner type of each variant is the desired parameter dictionary.
Therefore, when the call `EncryptAlgorithm::encrypt`,
`DecryptAlgorithm::decrypt` and other similar functions, we can have
`match` statements that cover all patterns since those enums only
contains necessary variants.

To make this change, we also need to change the algorithm registration
mechanism. Instead of using the `SupportedAlgorithm` enum and its method
`SupportedAlgorithm::support` to register the operations of the
algorithms, the algorithm registration is now done in the function
`from_object_value` of a new trait named `NormalizedAlgorithm`, which
the new enums `EncryptAlgorithm`, `DecryptAlgorithm` and so implement.
(Note that the existing enum named `NormalizedAlgorithm` is removed.)

Some refactoring in also done in the `normalize_algorithm` function to
adapt the above changes.

This new design of algorithm registration is also closer to the
WebCrypto specification, as explained in the comment block below the
`normalize_algorithm` function.

The crate `strum` is also used to reduce some boilerplate code.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #42579

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-27 18:21:35 +00:00
Martin Robinson
467df3d8e4 media: Propagate errors from GStreamerMediaStream::encoded (#42914)
Instead of unwrapping in `GStreamerMediaStream::encoded`, properly
propagate errors to callers. This prevents panics when we fail to
build GStreamer pipelines in this code path. This is probably the first
of many changes to avoid `unwrap()`ing in this code.

Testing: This change adds a WPT crash test.
Fixes: #36844.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-27 18:16:43 +00:00
eri
b2b27d857b devtools: Avoid creating unnecessary new frame actors (#42906)
Before we were creating a new frame actor each time we paused, even if
the frame object in debugger.js was the same. Now we avoid this by
reusing the same frame actor id.

This helps our upcoming work on onStep, onPop, and onEnterFrame hooks.

Testing: Ran `mach test-devtools` and manually check that it works
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-02-27 14:34:18 +00:00
Simon Wülker
dfe7117084 script: Handle async parser being aborted while still running (#42910)
This fixes a crash on the attached testcase when running with the async
html parser enabled. The crash also triggers on wpt. When executing
parse ops received from the async parser, we were not considering the
case where one of these operations causes the parser to abort (in the
case above, said operation is the `<popup-info></popup-info>`).

```html
<body>
<script>
class PopupInfo extends HTMLElement {
  connectedCallback() {
    document.open();
  }
}

customElements.define('popup-info', PopupInfo);
</script>
<popup-info></popup-info>
</body>
```
The bug is very obscure and only triggers if `document.open` is called
while there is no parser-blocking script **and** the document parser is
still active.


Testing: We don't run tests on the async parser yet
Fixes: Part of https://github.com/servo/servo/issues/37418

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-27 13:25:06 +00:00
dyegoaurelio
453166752b Fix CSP nonce validation and violation reporting for external scripts (#40956)
This PR fixes two related issues with Content Security Policy (CSP)
nonce validation for external scripts:

1. Missing nonce validation for external scripts with malformed
attributes
2. Incorrect violation event reporting for blocked external resources


This makes servo closer to passing the `nonce-enforce-blocked` wpt test.

The remaining failures are blocked by required changes in the html
parser.

1. Svg script support (https://github.com/servo/html5ever/issues/118)
```html
<svg xmlns="http://www.w3.org/2000/svg">
<script attribute attribute nonce="abc">
    t.unreached_func("Duplicate attribute in SVG, no execution.")();
</script>
</svg>
```

2. Duplicate attrs check
the html parser needs to provide this flag, as mentioned on the original
commit message
(4821bc0ab0)

```html
<script attribute attribute nonce="abc">
    t.unreached_func("Duplicate attribute, no execution.")();
</script>
<script attribute attribute=<style nonce="abc">
    t.unreached_func("2# Duplicate attribute, no execution.")();
</script>

[...]

<script src="../support/nonce-should-be-blocked.js?5" attribute attribute nonce="abc"></script>
```

I've also created a PR to implement the duplicate attrs flag on
html5ever https://github.com/servo/html5ever/pull/695

Testing: doesn't fixes the aforementioned wpt test yet.
Fixes: part of #36437

---------

Signed-off-by: Dyego Aurélio <dyegoaurelio@gmail.com>
2026-02-27 13:17:33 +00:00
Gae24
49b13627b5 script: Propagate &mut JSContext inside evaluate_js_on_global (#42846)
Since `evaluate_js_on_global` called `enter_realm` and there were
already some callee that did it, I've actually passed `&mut
CurrentRealm`.
Also converted `Window::WebdriverException` to pass `&mut JSContext`
inside `javascript_error_info_from_error_info`.

Testing: A successful build is enough
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-27 11:49:44 +00:00
Shubham Gupta
5c8e338c4e libservo: Fix test_largest_contentful_paint_js_api_with_mouse_click_and_reload intermittency (#42814)
> This was overlooked earlier in #41169

Simulate a mouse click before loading the page so that it should trigger
input events before populating any LCP entries for this `webview`.
- When mouse click event is received before/while loading, it should not
report LCP for webview.

When Page is reloaded, LCp should be reinstated for webview.
- Verify the Successful reporting of LCP entry after the reload.

Testing: `tests/largest_contentful_paint.rs`
Fixes: #42759

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-27 11:44:03 +00:00
Shubham Gupta
4374e708f4 libservo: Wait for page to be ready before evaluating JavaScript in test_largest_contentful_paint_js_api_with_mouse_move (#42808)
As per spec, mouse movement should not be treated as user interaction,
so LCP will be reported after those events. This was overlooked in
#41999. This change calls
`show_webview_and_wait_for_rendering_to_be_ready` before evaluating a
script to determine whether or not any LCP entries were fired.

Testing: This should reduce flakiness
in`test_largest_contentful_paint_js_api_with_mouse_move`.
Fixes: #42801

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-27 11:43:39 +00:00
Euclid Ye
8419c5ed9f webdriver: Reduce IPC for cookie deletion (#42836)
- Update Doc for `CoreResourceMsg::DeleteCookies`
- Reduce IPC for cookie deletion

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-27 11:32:02 +00:00
Oriol Brufau
d5c55eb87c layout: Fix bottom margin of block-in-inline getting ignored (#42889)
In order to know whether a block box can collapse its bottom margin with
the bottom margin of its last child, we need to check its tentative
block size. Most usually, this will be the block size of the containing
block that is used when laying out the children.

However, anonymous blocks do not establish a containing block. So using
the containing block for children meant that we were using the tentative
block size of its parent. If that parent had a definite size, this would
prevent the anonymous block from collapsing bottom margins with its
children. This situation could happen when placing a block-level inside
of an inline box.

This patch fixes the problem by using an indefinite tentative block size
for anonymous blocks, instead of the containing block for children.

Testing: Adding new test
Fixes: #42469

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-27 10:23:21 +00:00
atbrakhi
433d0acd0e devtools: Make why attribute use PauseReasons (#42878)
devtools: Make `why` attribute use `PauseReasons`

Currently we have why attribute hardcoded as per the event. In this PR
we introduce `PAUSE_REASON` and make sure `why` attribute is using
`PAUSE_REASONS`.

This is in order to support the upcoming work on `onStep`, `onPop`, and
`onEnterFrame` hook.

Testing: all existing tests are passing
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-02-27 09:22:33 +00:00
Mukilan Thiyagarajan
7dcfdcc5e7 prefs: Cleanup unused preferences. (#42897)
This patch removes `js_*` preferences that are not currently wired up to
the SM engine. The `js_mem_gc_allocation_threshold_factor` was being
used previously but got that usage was commented out in #28092, so the
dead code is removed.

The `dom_worklet_blockingsleep` preference is also renamed to
`dom_worklet_blockingsleep_enabled` to match the declared name in
`PaintWorkletGlobalScope.idl` which also matches the naming convention
of the other the boolean preferences.

Finally, the `network_mime_sniff` is also unused and remmoved in this
patch.

Testing: Should be covered by existing tests.
Fixes: #42868

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-02-27 07:31:20 +00:00
dependabot[bot]
217d76c83d build: bump dispatch2 from 0.3.0 to 0.3.1 (#42895)
Bumps [dispatch2](https://github.com/madsmtm/objc2) from 0.3.0 to 0.3.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8852b42419"><code>8852b42</code></a>
Bump objc2 0.6.3 -&gt; 0.6.4</li>
<li><a
href="2d39cba1f9"><code>2d39cba</code></a>
Cherry-pick ae1c875 for objc2 v0.6.4</li>
<li><a
href="2ace80ba71"><code>2ace80b</code></a>
Cherry-pick relevant parts of 9bd26ee for objc2 v0.6.4</li>
<li><a
href="67808515c2"><code>6780851</code></a>
Bump dispatch2 0.3.0 -&gt; 0.3.1</li>
<li><a
href="ad963172ff"><code>ad96317</code></a>
Cherry-pick e429f0a for dispatch2 v0.3.1</li>
<li><a
href="ee273d9d14"><code>ee273d9</code></a>
Cherry-pick a4821be for dispatch2 v0.3.1</li>
<li><a
href="b4167b582b"><code>b4167b5</code></a>
Fix documentation on docs.rs</li>
<li><a
href="f5df468edf"><code>f5df468</code></a>
Bump objc2 0.6.1 -&gt; 0.6.2</li>
<li><a
href="1942c3e3ff"><code>1942c3e</code></a>
Allow unpredictable_function_pointer_comparisons</li>
<li><a
href="f6eb40db08"><code>f6eb40d</code></a>
Relax signed encoding checks for register-sized integers</li>
<li>Additional commits viewable in <a
href="https://github.com/madsmtm/objc2/compare/dispatch2-0.3.0...dispatch2-0.3.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=dispatch2&package-manager=cargo&previous-version=0.3.0&new-version=0.3.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 03:17:08 +00:00
Oriol Brufau
ee40ecdc7c build(deps): bump Stylo to "Make custom properties animatable" (#42858)
Bumps Stylo to https://github.com/servo/stylo/pull/316

Testing: Various tests improve

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-27 02:43:54 +00:00
Jonathan Schwender
82613e762b mach: Redirect some print statements to stderr (#42886)
This cleans up some of the informational print statement during
`build_env()` to go to stderr instead.
This opens up stdout usage to print information to stdout for
consumption (in a follow-up PR)

Testing: Covered by `./mach build --ohos` in CI.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-27 02:36:44 +00:00
dependabot[bot]
8cf2a8b3a2 build: bump zerocopy from 0.8.39 to 0.8.40 (#42894)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.39 to
0.8.40.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.40</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Account for alignment directives in <code>derive(IntoBytes)</code>
by <a href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/3064">google/zerocopy#3064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.39...v0.8.40">https://github.com/google/zerocopy/compare/v0.8.39...v0.8.40</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ff5ab2dac3"><code>ff5ab2d</code></a>
Release 0.8.40 (<a
href="https://redirect.github.com/google/zerocopy/issues/3072">#3072</a>)</li>
<li><a
href="ed93a19267"><code>ed93a19</code></a>
Account for alignment directives in <code>derive(IntoBytes)</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3064">#3064</a>)</li>
<li><a
href="8647029c6d"><code>8647029</code></a>
[ci] Fix Rust toolchain roller (<a
href="https://redirect.github.com/google/zerocopy/issues/3068">#3068</a>)</li>
<li><a
href="da90333ff1"><code>da90333</code></a>
[ci] Roll pinned stable toolchain (<a
href="https://redirect.github.com/google/zerocopy/issues/3069">#3069</a>)</li>
<li><a
href="b7fc71dfa8"><code>b7fc71d</code></a>
[githooks] Don't run <code>ci/check_todo.sh</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/3028">#3028</a>)</li>
<li><a
href="4fe6388c3f"><code>4fe6388</code></a>
[tests] Coalesce UI test files (<a
href="https://redirect.github.com/google/zerocopy/issues/3001">#3001</a>)</li>
<li><a
href="01126da34f"><code>01126da</code></a>
[tests] Annotate UI test files with error requirements (<a
href="https://redirect.github.com/google/zerocopy/issues/3000">#3000</a>)</li>
<li><a
href="40700015bd"><code>4070001</code></a>
[tests] Merge UI test directories (<a
href="https://redirect.github.com/google/zerocopy/issues/2997">#2997</a>)</li>
<li><a
href="350f32cc22"><code>350f32c</code></a>
[ci] Support XODO comments in commit messages (<a
href="https://redirect.github.com/google/zerocopy/issues/2998">#2998</a>)</li>
<li><a
href="d809e45ac8"><code>d809e45</code></a>
[tests] Delete disabled test file (<a
href="https://redirect.github.com/google/zerocopy/issues/2996">#2996</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/google/zerocopy/compare/v0.8.39...v0.8.40">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.39&new-version=0.8.40)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 02:09:27 +00:00
dependabot[bot]
a54bde7988 build: bump objc2 from 0.6.3 to 0.6.4 in the objc2-related group (#42891)
Bumps the objc2-related group with 1 update:
[objc2](https://github.com/madsmtm/objc2).

Updates `objc2` from 0.6.3 to 0.6.4
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8852b42419"><code>8852b42</code></a>
Bump objc2 0.6.3 -&gt; 0.6.4</li>
<li><a
href="2d39cba1f9"><code>2d39cba</code></a>
Cherry-pick ae1c875 for objc2 v0.6.4</li>
<li><a
href="2ace80ba71"><code>2ace80b</code></a>
Cherry-pick relevant parts of 9bd26ee for objc2 v0.6.4</li>
<li><a
href="67808515c2"><code>6780851</code></a>
Bump dispatch2 0.3.0 -&gt; 0.3.1</li>
<li><a
href="ad963172ff"><code>ad96317</code></a>
Cherry-pick e429f0a for dispatch2 v0.3.1</li>
<li><a
href="ee273d9d14"><code>ee273d9</code></a>
Cherry-pick a4821be for dispatch2 v0.3.1</li>
<li>See full diff in <a
href="https://github.com/madsmtm/objc2/compare/objc2-0.6.3...objc2-0.6.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=objc2&package-manager=cargo&previous-version=0.6.3&new-version=0.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-27 00:20:14 +00:00
Josh Matthews
d2047c20ab layout: Always treat SVG elements as replaced content. (#42594)
The current implementation treats an SVG element that needs a new
serialized tree as non-replaced content, so we attempt to lay out all of
the children. If serialization is successful, subsequent layouts treat
the SVG as replaced content and ignore the children, but the children's
layout data is never cleaned up. This means that layout queries against
those children can return stale data, which can lead to unexpected
results. By always treating SVG elements as replaced content, we remove
this footgun and improve consistency.

Testing: New crashtest added. It doesn't make sense to upstream this
because our SVG implementation is very nonstandard.
Fixes: #42291
Fixes: #40900

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-02-26 20:44:29 +00:00
Oriol Brufau
876abf9001 layout: Remove box damage for parent when we can reuse the box (#42847)
This fixes an oversight from #42783: when detecting that a box can be
reused, we weren't clearing the box damage propagated to ancestors, so
ancestors were still recollecting children.

This exposed some problems in
`rebuild_box_tree_from_independent_formatting_context()`:
1. When reusing a block-level box that established an independent
formatting context, we weren't checking that the new style was still
block-level.
2. When reusing a block-level abspos box, we weren't checking if the new
original display was inline-level, preventing it from being handled as a
block-level because of the static position.
3. When reusing a flex item, we weren't checking if the `order` had
changed.

Testing: we have test coverage for the 3 problems above:
1. Covered by
`/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html`,
and also adding a new `/css/css-display/display-flow-root-dynamic.html`.
2. Covered by `/css/CSS2/abspos/hypothetical-box-dynamic.html`
3. Covered by `/css/css-display/order-dynamic.html`.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-26 19:23:04 +00:00
Oriol Brufau
e0bd48f16a layout: Fix abspos position when it would be preceded by phantom line (#42586)
The static position of an abspos is the hypothetical position that it
would have had in the normal flow. If the abspos is inside inline layout
and it had a block-level original display, then the static position is
computed as if the abspos was a block-level that breaks the inline.

Usually this places the static position after the current line. However,
if the abspos is not preceded by any text, padding, border, margin,
preserved newline or atomic inline, then the static position should be
as if the abspos was preceded by a 0px tall phantom line. Previously we
weren't taking that into account.

Note that browsers aren't completely interoperable in corner cases.

Testing: Adding 3 new tests. Blink fails the 2nd one and Gecko fails the
3rd one. WebKit and Servo pass them all.
Fixes: #41990

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-26 18:20:46 +00:00
Martin Robinson
2b5254f944 paint: Add debugging output when failing to create an OpenGL context (#42873)
This change adds more debugging output when failing to create an OpenGL
context upon starting Servo. In particular, the debugging output tries
to create a very old OpenGL context (version 1.0) in order to print the
context version created -- to more easily identify situations where the
driver is too old.

Testing: This just prints debugging information. It would be difficult
to
test this as we would need to mock OpenGL context creation failure and
test simply running `prinltln!`.
Fixes: #42824.
Fixes: #39987.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-26 18:02:31 +00:00
Simon Wülker
42f43abf04 script: Respect dom_servoparser_async_html_tokenizer_enabled in Document.open() (#42882)
When creating a HTML tokenizer then we check the
`dom_servoparser_async_html_tokenizer_enabled` preference and create a
sync or async tokenizer accordingly. We don't do that in `document.open`
though, this change fixes that.

Part of https://github.com/servo/servo/issues/37418
Testing: We don't run tests for the async tokenizer yet

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-26 17:09:25 +00:00
atbrakhi
ebd0136588 devtools: Use getOffsetMetadata in Frame (#42874)
Use
[`getOffsetMetadata`](https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Script.html#getoffsetmetadata-offset)
in Frame

By using getOffsetMetadata now, it is showing the correct line and
column for each frame when breakpoint is being set.

Testing: all existing tests are passing
Fixes: Part of #36027

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-02-26 17:03:52 +00:00
Onur Şahin
2a0b4606ab script: use &mut JSContext in MessagePort::PostMessage (#42880)
Replace crate::script_runtime::JSContext with js::context::JSContext in
`MessagePort::PostMessage`

Testing: Builds and runs fine
Fixes: part of https://github.com/servo/servo/issues/42347

Signed-off-by: Onur Sahin <sahinonur2000@hotmail.com>
2026-02-26 15:52:26 +00:00
Shubham Gupta
ac0994da34 layout: Encapsulate Image related Info into ImageInfo (#42869)
Add Image related Info into `ImageInfo`.

This will help in processing some other attributes like URL which are
needed for `PaintTiming`.

Testing: This is just a little refactor. No change in behavior expected.
Successful compilation is enough to verify.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-26 15:43:03 +00:00
Domenico Rizzo
e61ad2775e script: Encapsulates GPUDevice resource cleanup logic (#42851)
Moves the `Drop` implementation for `GPUDevice` into a private
`DroppableGPUDevice` struct.

Also updates `Bindings.conf` to prevent the generation of `Drop`
implementations for `GPUDevice`.

Testing: WebGpu tests just cover the cases
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-02-26 13:03:05 +00:00
Martin Robinson
df36372dfe layout: Preserve independent formatting contexts fragment caches when undamaged (#42871)
When fragment tree layout is going to run for a node that starts an
independent formatting context, but only because an ancestor was
damaged, preserve the fragment cache. This means that in the optimistic
case we do not need to re-run fragment tree layout for this independent
formatting context. Previously this was only done for the children of
the independent formatting context, but the fragment cache is robust
enough to detect any layout changes necessary for the IFC fragment
itself as well. This helps to avoid so much fragment reconstruction
during incremental layout.

Testing: `basic-fragment-tree-layout.html` is updated reflecting the
decrease
in the number of fragments rebuilt.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-02-26 12:03:35 +00:00
Martin Robinson
aac17cd4a8 Revert "script: Fire select events for user input selections (#42806)" (#42876)
This reverts commit 1f42551042.

This change led to a decrease in Speedometer performance and needs to be
reworked to avoid that.

Testing: This is just a revert.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-26 11:52:36 +00:00
Sam
9321ca0920 CI: Free more disk space in android workflow (#42877)
Before we freed 6GB now we free 19GB.

Fixes: #42857 (hopefully)

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-26 11:52:24 +00:00
Oriol Brufau
80318ad25e layout: Let OutsideMarker store an IndependentFormattingContext (#42864)
`OutsideMarker` was storing the `BlockFormattingContext` and the
`LayoutBoxBase` in separate fields. Now it will store an entire
`IndependentFormattingContext` in a single field.

In particular, this fixes the issue that `OutsideMarker::repair_style()`
wasn't calling `BlockFormattingContext::repair_style()`. Now we can just
rely on `IndependentFormattingContext::repair_style()`, which correctly
repairs the style of both the `BlockFormattingContext` and the
`LayoutBoxBase`.

Also, the `BlockLevelBox::repair_style()` was repairing the style of the
`LayoutBoxBase` twice, for all kinds of block-level boxes. This removes
the duplication.

Testing: Adding a new test
Fixes: #42779

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-26 09:55:15 +00:00
eri
a2f1c55676 devtools: Register frame actor before pause (#42844)
We need a map between frame actor ids (from devtools) and frame objects
(from debugger.js) to implement stepping hooks in the future.

To achieve this, we register the frame actor with a call to the devtools
before entering the event loop when the debugger is paused. Instead of
creating the frame actor in `handle_debugger_pause`, we create it
before.

Testing: It passes existing devtools tests
Part of: #36027

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-02-26 09:24:04 +00:00
Jonathan Schwender
ca3ff7046c release: Upload vendored source archive (#42852)
Add a job to the release workflow which uploads a source code archive
including our vendored rust dependencies. This allows offline builds
after downloading the archive and will also be documented in the book
(see https://github.com/servo/book/pull/206).

Testing: Manually tested by triggering a release on the nightly repo:
https://github.com/servo/servo/actions/runs/22405488357/job/64863992613

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-26 08:59:23 +00:00
Taym Haddadi
a7b675399c indexeddb: Add processed flag, rename close to close_pending and update spec links to version 3 of the spec (#42859)
This changes does three things:
- Updates all specification links to reflect version 3 of the
specification
- Renames the `IDBDatabase::close` member to
`IDBDatabase::close_pending` to better match the specification
- Adds a `OpenRequest::processed` member, again to better match the
specification

Testing: This should not change behavior, so is covered by existing
IndexedDB WPT tests.
Fixes: Part of #40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-26 08:41:41 +00:00
Steven Novaryo
d70ab4e1c0 script: Merge ScrollEvent with SetScrollStates messages (#42834)
Remove embedder defined `ScrollEvent` and merge the payload of it to the
`SetScrollStates` message which tell the `ScriptThread` to update the
scroll state.

In the past, `ScrollEvent` is defined as a embedder's `InputEvent` and
being used only to forward the external scroll node id for a node that
is considered scrolled. This make us sends an additional message to
constellation and additionally, `ScrollEvent` went through lengthy
pipelines as it was deemed as an embedder input event, albeit being a
synthetic input fired by `WebviewRenderer`.

Subsequently, we could introduce a flag to detect whether the scrolling
is still ongoing or not (like whether it is still flinging) for
`scrollend` event.

Testing: No WPT changes

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-26 07:36:55 +00:00
Shubham Gupta
9f426e38ba layout: Encapsulate ImageKey in VideoInfo (#42865)
Makes standardized to `CanvasInfo`

Testing: This is just a little refactor. No change in behavior expected.
Successful compilation is enough to verify.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-26 06:25:55 +00:00
Euclid Ye
051ab6c2e7 wpt.fyi: Remove Servo workaround which runs single process for wdspec (#42867)
This is the sibling PR of https://github.com/servo/servo/pull/42842. The
workaround is introduced 6 years ago, but no longer valid: it introduces
discrepancy (more fails/panic) comparing to our own dashboard, e.g.
[this](https://wpt.fyi/results/webdriver/tests/classic/take_element_screenshot?run_id=5128593131962368&run_id=5186271220858880&run_id=5149229946503168&run_id=5179428868194304).

[Relevant Zulip
thread](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Jump.20in.20WPT.20results/near/575917400).

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-26 06:23:35 +00:00
Shubham Gupta
86ffac5e12 tests: Cleanup user_content_manager tests (#42870)
Removes kinda redundant spin loop, because it is being already evaluated
in `common::evaluate_javascript`

Testing: `components/servo/tests/user_content_manager.rs`

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-26 04:35:37 +00:00
dependabot[bot]
385a58c5a7 build: bump rgb from 0.8.52 to 0.8.53 (#42862)
Bumps [rgb](https://github.com/kornelski/rust-rgb) from 0.8.52 to
0.8.53.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f453adedbb"><code>f453ade</code></a>
Bump</li>
<li><a
href="6ce01b6d40"><code>6ce01b6</code></a>
Fixes tests for unstable-experimental feature flag</li>
<li><a
href="1ee08f0fc9"><code>1ee08f0</code></a>
Deprecate as_slice</li>
<li><a
href="ee7c6e2862"><code>ee7c6e2</code></a>
Fixed docs.rs</li>
<li><a
href="c07c23212c"><code>c07c232</code></a>
Future-proof as_slice() in tests</li>
<li><a
href="8ee2544019"><code>8ee2544</code></a>
Moved tests</li>
<li>See full diff in <a
href="https://github.com/kornelski/rust-rgb/compare/v0.8.52...v0.8.53">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rgb&package-manager=cargo&previous-version=0.8.52&new-version=0.8.53)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 00:32:06 +00:00
dependabot[bot]
1d6fb71176 build: bump accesskit_winit from 0.32.0 to 0.32.1 in the accesskit-related group (#42860)
Bumps the accesskit-related group with 1 update:
[accesskit_winit](https://github.com/AccessKit/accesskit).

Updates `accesskit_winit` from 0.32.0 to 0.32.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/AccessKit/accesskit/releases">accesskit_winit's
releases</a>.</em></p>
<blockquote>
<h2>accesskit_winit: v0.32.1</h2>
<h2><a
href="https://github.com/AccessKit/accesskit/compare/accesskit_winit-v0.32.0...accesskit_winit-v0.32.1">0.32.1</a>
(2026-02-25)</h2>
<h3>Dependencies</h3>
<ul>
<li>The following workspace dependencies were updated
<ul>
<li>dependencies
<ul>
<li>accesskit_android bumped from 0.7.0 to 0.7.1</li>
</ul>
</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="da70097f57"><code>da70097</code></a>
chore: release main (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/688">#688</a>)</li>
<li><a
href="8392850941"><code>8392850</code></a>
fix: Don't report selected state when toggled on Android (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/689">#689</a>)</li>
<li><a
href="6146089404"><code>6146089</code></a>
fix: Populate range info on Android (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/686">#686</a>)</li>
<li><a
href="67590283b0"><code>6759028</code></a>
fix: Update bytes dependency to fix RUSTSEC-2026-0007 (<a
href="https://redirect.github.com/AccessKit/accesskit/issues/687">#687</a>)</li>
<li>See full diff in <a
href="https://github.com/AccessKit/accesskit/compare/accesskit_winit-v0.32.0...accesskit_winit-v0.32.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=accesskit_winit&package-manager=cargo&previous-version=0.32.0&new-version=0.32.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-26 00:15:00 +00:00
Luke Warlow
035b5d60f4 script: Add an initial command and commandfor attribute implementation (#41237)
Initial command and commandfor attribute implementation

Testing: Covered by WPTs

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-02-25 21:40:39 +00:00
Oriol Brufau
d5c82150e0 layout: Add testing API for counting restyled and rebuilt fragments (#42817)
Now `ServoTestUtils.forceLayout()` will provide the number of fragments
that have been restyled and rebuilt. This will be useful to test that
incremental layout works well.

Testing: Adds a test using this new API

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-25 21:25:32 +00:00
Tim van der Lippe
756af3bf37 script: Fix loading of about:srcdoc documents (#41959)
Align with the spec and implement part of its lazy loading
steps. Most tests use non-srcdoc lazy loading URLs, so most
tests will not pass until the other parts are implemented
as well.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-25 19:57:41 +00:00
Gae24
4098f6a883 script: provide a hook to invoke ScriptEnvironmentPreparer closure (#42428)
Companion PR to test https://github.com/servo/mozjs/pull/704

Testing: JS engine integration, not covered by wpt tests
Fixes: #39416

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-25 19:38:35 +00:00
Jonathan Schwender
4b2e8c38d1 script bindings: Fix warning about unused span. (#42850)
The span needs to be assigned to a variable, so that it drops at the end
of scope.
This was introduced in #42715. 
Additionally also switch tho the profile_traits macro to simplify the
statement.

Testing: Manually verified the warning is fixed.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-25 18:30:40 +00:00
Oriol Brufau
60c5977291 layout: Correctly repair OutsideMarker::list_item_style (#42825)
`OutsideMarker::repair_style()` was setting `list_item_style` to the
style of the marker, not the style of the list item.

This patch sets it to `node.parent_style(context)` instead, and it fixes
`ServoThreadSafeLayoutNode::parent_style()` to take the pseudo-element
chain into account. This requires modifying a bunch of logic to pass the
`SharedStyleContext` around.

Testing: Adding a new test

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-25 13:25:45 +00:00
Simon Wülker
ea8375beaf script: Remember which nodes the devtools know about (#42785)
Currently, `script` and `devtools` use a node's unique id to identify it
across requests. The unique ID is part of a node's rare data field and
is really only meant for debugging. Instantiating it on a node causes
it's memory usage to go up significantly. Now, when the devtools ask for
information about a specific `Node` then they send the unique ID to
`script`, and the script thread then walks the whole DOM tree searching
for that specific ID. This happens here:

6d0b651218/components/script/devtools.rs (L142-L153)

So, in the worst case, all of the nodes in the tree now have a unique
ID. That's not great!

Also, when `script` notifies `devtools` about changes to a DOM node then
`devtools` expects a `NodeActor` to exist for that Node. The actor might
not exist if the inspector doesn't know about that node yet - that
happens when the user hasn't expanded their parent yet.
That is an oversight from https://github.com/servo/servo/pull/42601 and
causes problems now(https://github.com/servo/servo/issues/42784) because
for the longest time, `devtools` was mostly the one sending requests. Of
course, we could make `devtools` simply ignore updates for nodes that it
doesn't know about, but ideally we shouldn't send these updates in the
first place.

This change implements a lookup map on the `ScriptThread` that contains
all nodes that have been sent to the devtools inspector. The map allows
us to efficiently resolve a unique ID to a `Node` in O(1), without
creating unique IDs for the whole tree. It also allows us to only send
DOM updates for nodes that the inspector cares about.

For now, entries from the cache are not evicted unless the relevant
pipeline is closed. That reflects reality, because the inspector also
keeps using them forever.
In the future we will tell the inspector when nodes are removed from the
tree - then it can't interact with them anymore, and we can remove them
from the script-side map.

This is change is not all that complicated but it involves moving a lot
of code around, so feel free to ask for clarification when something is
unclear!





Testing: This change adds a test
Fixes part of https://github.com/servo/servo/issues/42784

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-25 12:35:52 +00:00
shuppy
0333595a0f NixOS: fix missing library errors when running libservo tests (#42835)
on NixOS, under X11 at least, many libservo tests panic:

```
$ ./mach test-unit -p libservo test_create_webview
[...]
    thread 'test_create_webview' (3589026) panicked at /home/delan/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/wayland-sys-0.31.8/src/client.rs:110:103:
    Library libwayland-client.so could not be loaded.
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

this patch fixes that by adding `wayland` to the LD_LIBRARY_PATH in
shell.nix.

Testing: tested manually as above

Signed-off-by: delan azabani <dazabani@igalia.com>
2026-02-25 12:10:45 +00:00
Martin Robinson
0998d4211a script: Do not unconditionally expect a parent element in DocumentOrShadowRoot::element_from_point (#42822)
When processing `elementFromPoint` on a `Document` or a `ShadowRoot`,
better handle the situation where the result of the hit test is the root
element, fixing a crash.

Testing: This fixes a crash in the WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-25 12:02:18 +00:00
Oriol Brufau
e70d76d513 layout: Reuse float boxes with own damage (#42816)
Previously, when a float box had rebuild damage from its own (not from
ancestors), we weren't reusing it. Now we will reuse them just like we
do for other independent formatting context roots.

Testing: Not needed, just an optimization, there should be no behavior
change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-25 11:11:05 +00:00
Narfinger
a122bde4b1 Script: Use &mut JSContext in CheckValidity and ReportValidity Methods (#42820)
This is part of replacing can_gc with the new &JSContext/&mut JSContext
method.
We modify CheckValidity and ReportValidity in various HTML Elements to
use the context instead of CanGc.

Testing: Compilation is the test as this is mostly mechanical.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-25 10:34:21 +00:00
Sam
0b94f0a7ce script: Report associated memory for webgl objects (#42570)
As started in https://github.com/servo/servo/issues/42168 let's report
memory pressure for webgl objects. CanvasContexts report memory twice:
once because of underlying texture object and once by themself, but
that's okay as we also need to account for swapchain textures.

Computing exact size would be to much work and code so we report rough
estimations.

Testing: None

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-25 10:29:10 +00:00
Sam
6c334f2811 script: Replace RAII of CallSetup and AutoEntryScript with a function wrapper (#42715)
As mentioned in #40600 we will need this to properly handle &mut
JSContext (we cannot pass it to drop) and I think this wrappers are
preferred ways of doing this in rust as it is safe to forget (not call
drop) which is unsound in this case (due to realm stack at least).

Revieable per commits.

Testing: Just a refactor, but should be covered by WPT

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-25 09:13:18 +00:00
Shubham Gupta
22350a6d56 tests: Enable largest-contentful-paint tests. (#42024)
We have a partial implementation of LargestContentfulPaint , so we
should run the tests associated with them.

Testing: New tests enabled.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-25 08:17:41 +00:00
Sam
3e2f14c455 script: Pass down &mut JSContext in servoparser and event loop. (#42635)
I only wanted to get `&mut JSContext` in microtask chunk and checkpoint,
but this in turn needed `&mut JSContext` in servoparser, which then
caused need for even more changes in script.

I tried to limit the size by putting some `temp_cx` in:
- drops of `LoadBlocker`, `GenericAutoEntryScript`
- methods of `VirtualMethods`
- methods of `FetchResponseListener`

Testing: Just refactor, but should be covered by WPT tests.
Part of #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-25 07:14:23 +00:00
Onur Şahin
a4d98df1a9 script: use &mut JSContext inside History (#42805)
Replace `crate::script_runtime::JSContext` with `js::context::JSContext`
in:
- `History::PostMessage`
- `History::ReplaceState`
- `History::GetState`

Testing: Builds and runs locally. [WPT
passed](https://github.com/onsah/servo/actions/runs/22341528931)

Fixes: part of https://github.com/servo/servo/issues/42347

Signed-off-by: Onur Sahin <sahinonur2000@hotmail.com>
2026-02-25 02:37:39 +00:00
dependabot[bot]
811059cdd3 build: bump rustls from 0.23.36 to 0.23.37 (#42831)
Bumps [rustls](https://github.com/rustls/rustls) from 0.23.36 to
0.23.37.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4b455b8199"><code>4b455b8</code></a>
Bump version of rustls</li>
<li><a
href="245963b151"><code>245963b</code></a>
Add ML-KEM-1024 key encapsulation mechanism</li>
<li><a
href="e1886fd05a"><code>e1886fd</code></a>
Take semver-compatible updates</li>
<li><a
href="86ad94b64b"><code>86ad94b</code></a>
Refresh verify-bench certificates</li>
<li><a
href="4df9216e57"><code>4df9216</code></a>
Do not &quot;warm up&quot; aws-lc-rs RNG in other benchmarks</li>
<li><a
href="ff6f7985aa"><code>ff6f798</code></a>
ci-bench: &quot;pre-warm&quot; per-thread entropy source</li>
<li><a
href="3c1841c732"><code>3c1841c</code></a>
chore(deps): update actions/cache action to v5</li>
<li><a
href="1735677c85"><code>1735677</code></a>
chore(deps): update actions/upload-artifact action to v6</li>
<li><a
href="c91fce039a"><code>c91fce0</code></a>
chore(deps): update taiki-e/cache-cargo-install-action action to v3</li>
<li><a
href="c3a6a11a61"><code>c3a6a11</code></a>
upgrade to zlib-rs 0.6.0</li>
<li>Additional commits viewable in <a
href="https://github.com/rustls/rustls/compare/v/0.23.36...v/0.23.37">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls&package-manager=cargo&previous-version=0.23.36&new-version=0.23.37)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 01:08:36 +00:00
dependabot[bot]
1ac138bd6f build: bump libz-sys from 1.1.23 to 1.1.24 (#42830)
Bumps [libz-sys](https://github.com/rust-lang/libz-sys) from 1.1.23 to
1.1.24.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libz-sys/releases">libz-sys's
releases</a>.</em></p>
<blockquote>
<h2>1.1.24</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump the github-actions group across 1 directory with 2 updates by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/238">rust-lang/libz-sys#238</a></li>
<li>Bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/239">rust-lang/libz-sys#239</a></li>
<li>Bump actions/download-artifact from 4.2.1 to 4.3.0 in the
github-actions group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/240">rust-lang/libz-sys#240</a></li>
<li>fix: Remove forcing static builds when cross-compiling by <a
href="https://github.com/polarathene"><code>@​polarathene</code></a> in
<a
href="https://redirect.github.com/rust-lang/libz-sys/pull/244">rust-lang/libz-sys#244</a></li>
<li>update to <code>zlib-ng</code> version <code>2.2.5</code> by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/251">rust-lang/libz-sys#251</a></li>
<li>Bump the github-actions group across 1 directory with 3 updates by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/250">rust-lang/libz-sys#250</a></li>
<li>fix: Support opt-out of static linking via
<code>LIBZ_SYS_STATIC=0</code> by <a
href="https://github.com/polarathene"><code>@​polarathene</code></a> in
<a
href="https://redirect.github.com/rust-lang/libz-sys/pull/252">rust-lang/libz-sys#252</a></li>
<li>Bump actions/checkout from 5.0.0 to 6.0.0 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/253">rust-lang/libz-sys#253</a></li>
<li>Bump actions/checkout from 6.0.0 to 6.0.1 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/254">rust-lang/libz-sys#254</a></li>
<li>Bump the github-actions group with 2 updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/255">rust-lang/libz-sys#255</a></li>
<li>Bump actions/checkout from 6.0.1 to 6.0.2 in the github-actions
group by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/256">rust-lang/libz-sys#256</a></li>
<li>upgrade to zlib-ng 2.3.3 by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/257">rust-lang/libz-sys#257</a></li>
<li>release using zlib-ng version 2.3.3 by <a
href="https://github.com/folkertdev"><code>@​folkertdev</code></a> in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/258">rust-lang/libz-sys#258</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/polarathene"><code>@​polarathene</code></a>
made their first contribution in <a
href="https://redirect.github.com/rust-lang/libz-sys/pull/244">rust-lang/libz-sys#244</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.22...1.1.24">https://github.com/rust-lang/libz-sys/compare/1.1.22...1.1.24</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f806d0453f"><code>f806d04</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/258">#258</a>
from folkertdev/release-zlib-ng-2.3.3</li>
<li><a
href="2c881c773f"><code>2c881c7</code></a>
release using zlib-ng version 2.3.3</li>
<li><a
href="cc32f74998"><code>cc32f74</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/257">#257</a>
from folkertdev/zlib-ng-2.3.3</li>
<li><a
href="7a3db73a43"><code>7a3db73</code></a>
upgrade to zlib-ng 2.3.3</li>
<li><a
href="9872c2663a"><code>9872c26</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/256">#256</a>
from rust-lang/dependabot/github_actions/github-actio...</li>
<li><a
href="fd8332183c"><code>fd83321</code></a>
Bump actions/checkout from 6.0.1 to 6.0.2 in the github-actions
group</li>
<li><a
href="fc9f6504e4"><code>fc9f650</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/255">#255</a>
from rust-lang/dependabot/github_actions/github-actio...</li>
<li><a
href="1595b17944"><code>1595b17</code></a>
Bump the github-actions group with 2 updates</li>
<li><a
href="413b2515c3"><code>413b251</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/libz-sys/issues/254">#254</a>
from rust-lang/dependabot/github_actions/github-actio...</li>
<li><a
href="9a932bcd75"><code>9a932bc</code></a>
Bump actions/checkout from 6.0.0 to 6.0.1 in the github-actions
group</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libz-sys/compare/1.1.23...1.1.24">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libz-sys&package-manager=cargo&previous-version=1.1.23&new-version=1.1.24)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 01:05:50 +00:00
dependabot[bot]
4d08261d9e build: bump bumpalo from 3.20.1 to 3.20.2 (#42828)
Bumps [bumpalo](https://github.com/fitzgen/bumpalo) from 3.20.1 to
3.20.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/fitzgen/bumpalo/blob/main/CHANGELOG.md">bumpalo's
changelog</a>.</em></p>
<blockquote>
<h2>3.20.2</h2>
<p>Released 2026-02-19.</p>
<h3>Fixed</h3>
<ul>
<li>Restored <code>Send</code> and <code>Sync</code> implementations for
<code>Box&lt;T&gt;</code> for <code>T: ?Sized</code> types
as well.</li>
</ul>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1aad072f93"><code>1aad072</code></a>
Bump to version 3.20.2 (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/312">#312</a>)</li>
<li><a
href="2fb1d6ae40"><code>2fb1d6a</code></a>
Add more tests for send and sync behavior, support unsized types (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/311">#311</a>)</li>
<li>See full diff in <a
href="https://github.com/fitzgen/bumpalo/compare/v3.20.1...v3.20.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bumpalo&package-manager=cargo&previous-version=3.20.1&new-version=3.20.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 00:56:51 +00:00
dependabot[bot]
009408efbf build: bump security-framework from 3.6.0 to 3.7.0 (#42829)
Bumps
[security-framework](https://github.com/kornelski/rust-security-framework)
from 3.6.0 to 3.7.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5f6e65114b"><code>5f6e651</code></a>
Bump</li>
<li><a
href="0b6b4ecff6"><code>0b6b4ec</code></a>
Key attributes</li>
<li><a
href="73cf464542"><code>73cf464</code></a>
Mark deprecated</li>
<li><a
href="91e22a9c73"><code>91e22a9</code></a>
Deprecate trait</li>
<li><a
href="1aab2fc212"><code>1aab2fc</code></a>
Cache more</li>
<li><a
href="61d8c9d02d"><code>61d8c9d</code></a>
Cache registry</li>
<li><a
href="229dfd46dd"><code>229dfd4</code></a>
Re-enable tests</li>
<li><a
href="6829c2ecc7"><code>6829c2e</code></a>
Regenerate test certs</li>
<li><a
href="758d045b6a"><code>758d045</code></a>
Rename tests</li>
<li><a
href="31d29f8d8e"><code>31d29f8</code></a>
Allow string-like alpn</li>
<li>Additional commits viewable in <a
href="https://github.com/kornelski/rust-security-framework/compare/v3.6.0...v3.7.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=security-framework&package-manager=cargo&previous-version=3.6.0&new-version=3.7.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 00:48:33 +00:00
dependabot[bot]
487406385c build: bump regex-syntax from 0.8.9 to 0.8.10 (#42827)
Bumps [regex-syntax](https://github.com/rust-lang/regex) from 0.8.9 to
0.8.10.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="839d16bc65"><code>839d16b</code></a>
regex-syntax-0.8.10</li>
<li><a
href="c4865a0c84"><code>c4865a0</code></a>
syntax: fix negation handling in HIR translation</li>
<li><a
href="d8761c00ed"><code>d8761c0</code></a>
cargo: also include <code>benches</code></li>
<li><a
href="2aaa18dfae"><code>2aaa18d</code></a>
rure-0.2.5</li>
<li><a
href="b028e4f40e"><code>b028e4f</code></a>
1.12.3</li>
<li><a
href="5e195de266"><code>5e195de</code></a>
regex-automata-0.4.14</li>
<li>See full diff in <a
href="https://github.com/rust-lang/regex/compare/regex-syntax-0.8.9...regex-syntax-0.8.10">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=regex-syntax&package-manager=cargo&previous-version=0.8.9&new-version=0.8.10)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-25 00:39:05 +00:00
Josh Matthews
ab9bb8ac97 python: Run flake8 on WPT tooling to match upstream. (#42823)
This should prevent recurring issues with exported WPT changes being
prevented from merging due to failing linting checks upstream.

Testing: Can't test WPT linting integration at this point in time.
Fixes: #40662

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-02-24 20:00:10 +00:00
Martin Robinson
1f42551042 script: Fire select events for user input selections (#42806)
This change makes it so that selection changes driven by user input
events also fire the `select` event and not just selection changes from
script. In addition the change eliminate the `SelectionState` data
structure instead opting to store the `SelectionDirection` in the
`SharedSelection`. That way there is a centralized place that selection
changes are handled.

Testing: This change adds a Servo-specific WPT test. This is
Servo-specific as
it relies on engine-specific text selection behavior.
Fixes: #41308.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-24 19:34:18 +00:00
Shubham Gupta
c1414dc424 tests: Move user_content_manager tests to a separate file (#42815)
Move `UserContentManager` tests to a separate file as `tests/webview.rs`
is getting too cluttered.

Testing: Existing Tests Passed

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-24 19:31:39 +00:00
Kingsley Yung
5b3684e2ce script: Pass &mut JSContext to method of Crypto interface (#42809)
This patch changes the method of `Crypto` interface to use the new `&mut
JSContext`.

The method `crypto.subtle` calls `SubtleCrypto::new` to create an
instance of `SubtleCrypto` and the new `&mut JSContext` is passed to
`SubtleCrypto::new`. Therefore, the new `reflect_dom_object_with_cx`
method is also used in `SubtleCrypto::new`.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #42638

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-24 19:24:46 +00:00
Gae24
c1ee5ff522 script: Don't stop at scopes's first module specifier map when resolving a module specifier (#42821)
Previously, the resolution loop would break immediately after running
`resolve_imports_match` against the first module specifier map of the
import map's scopes, regardless of whether a match was actually found.

Testing: All sub-tests of `resolving.html` now pass
Part of #37553

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-24 19:16:06 +00:00
Oriol Brufau
a2041d6263 layout: Reuse boxes for independent formatting contexts with self damage if compatible (#42783)
Previously, when a formatting context root had rebuild damage from its
own (not from ancestors), we weren't reusing it. Now we check if the
level of the box (i.e. whether it's inline-level, block-level, a table
cell, a table caption, or absolutely positioned) that will be generated
by the new style is compatible with the old box. And if so, we reuse it.

Testing: Not needed, there should be no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-24 17:19:24 +00:00
Sam
05dccf627c CI: Always switch apt mirrors before apt (#42819)
Default azure mirror suck and we already used this in linux/linux-wpt
workflows.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-24 16:16:29 +00:00
Narfinger
e0533af47e base: Replace calls to servo_opts in generic channel with OnceLock (#42782)
Previous we had multiple calls to
`servo_config::opts::get().multiprocess ||
servo_config::opts::get().force_ipc` scattered
throughout the code base for GenericChannel etc. This replaces it with a
simple function and a LazyLock to get more consistency.

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-24 15:48:06 +00:00
Onur Şahin
16d2a8d72b script: use &mut JSContext in DissimilarOriginWindowMethods (#42780)
Replace `crate::script_runtime::JSContext` with `js::context::JSContext`
in:
- `DissimilarOriginWindowMethods::PostMessage`
- `DissimilarOriginWindowMethods::SetOpener`
- `DissimilarOriginWindowMethods::Opener`

Testing: Builds and runs locally. WPT [test
passed](https://github.com/onsah/servo/actions/runs/22342635066)

Fixes: part of https://github.com/servo/servo/issues/42347

Signed-off-by: Onur Sahin <sahinonur2000@hotmail.com>
2026-02-24 14:43:46 +00:00
Shubham Gupta
e94e98754c layout: Move LCPCandidateID logic to PaintTimingHandler (#42799)
This eliminates some code duplication.

Testing: This change is just moving code and should not change
functionality, so should be covered by existing tests.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-24 12:43:57 +00:00
Shubham Gupta
d5edb268ab wpt: Enable largest_contentful_paint_enabled for paint_timing/with_lcp (#42564)
Enable feature for some tests in `paint_timing`

Testing: Update WPT Expectations

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-24 11:21:23 +00:00
Simon Wülker
d68760964c script: Cleanup the terminology around parser/main thread in async html parser (#42792)
The variable names and comments around the code refer to the main thread
as the "tokenizer" and the parser thread as the "html tokenizer". This
confuses me every time I look at the code, because both tokenize html
and neither can do it without the other.

I've renamed things to be a bit more clear, mostly referring to things
as the "main thread" and the "parser thread".

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-24 10:49:47 +00:00
atbrakhi
960a20c2ab devtools: Fix panic for breakpoint at invalid entry point (#42810)
Fix panic for breakpoint at invalid entry point.

Testing: Added a new test
Fixes: Part of https://github.com/servo/servo/issues/42784

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-24 10:20:03 +00:00
Tim van der Lippe
5853926db0 script: Move contenteditable implementation to dedicated file (#42749)
In preparation of introducing traits for some of these methods,
let's separate them from the basecommand trait. They are not
related to each other and it was making reasoning about where
lives what more difficult.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-24 09:00:43 +00:00
Shubham Gupta
9467721b2f libservo: Wait for WebView to be ready before interacting in test_largest_contentful_paint_js_api (#42807)
Simplified the TestPage using DataURL for Image
This makes sure we load the page completely before evaluating LCP.

Testing: `tests/largest_contentful_paint.rs`
Fixes: #42758

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-24 08:58:03 +00:00
Steven Novaryo
ad358de589 libservo: Add allow_virtual_keyboard flag for InputMethodControl (#42467)
Following the convention of other major UAs of gating the virtual
keyboard by certain user activation, adding a flags to let the embedder
knows about the user activation. This would be used to determine whether
the virtual keyboard needs to be shown or not in android and ohos.

Testing: Manual testing.

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-24 07:30:49 +00:00
Euclid Ye
facab8f642 wdspec: Update ambiguous expectation (#42800)
These were introduced in #39159, #39644 to close intermittent issues.
They are no longer reproducible.
This will prevent potential regression.

Testing: ~I~ Harness ran them for a whole night locally.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-24 06:53:09 +00:00
dependabot[bot]
faaca2c622 build: bump chrono from 0.4.43 to 0.4.44 (#42794)
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.43 to
0.4.44.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/chronotope/chrono/releases">chrono's
releases</a>.</em></p>
<blockquote>
<h2>0.4.44</h2>
<h2>What's Changed</h2>
<ul>
<li>docs: match MSRV with <code>Cargo.toml</code> contents by <a
href="https://github.com/coryan"><code>@​coryan</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1772">chronotope/chrono#1772</a></li>
<li>Add track_caller to non-deprecated functions by <a
href="https://github.com/svix-jplatte"><code>@​svix-jplatte</code></a>
in <a
href="https://redirect.github.com/chronotope/chrono/pull/1774">chronotope/chrono#1774</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c14b4599d0"><code>c14b459</code></a>
Bump version to 0.4.44</li>
<li><a
href="ea832c5090"><code>ea832c5</code></a>
Add track_caller to non-deprecated functions</li>
<li><a
href="cfae889a3a"><code>cfae889</code></a>
Fix panic message in to_rfc2822</li>
<li><a
href="f8900b5a44"><code>f8900b5</code></a>
docs: match MSRV with <code>Cargo.toml</code> contents</li>
<li>See full diff in <a
href="https://github.com/chronotope/chrono/compare/v0.4.43...v0.4.44">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chrono&package-manager=cargo&previous-version=0.4.43&new-version=0.4.44)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 04:51:23 +00:00
dependabot[bot]
b45f5d80eb build: bump clap from 4.5.59 to 4.5.60 (#42795)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.59 to 4.5.60.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.60</h2>
<h2>[4.5.60] - 2026-02-19</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Quote empty default values, possible values</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.60] - 2026-02-19</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Quote empty default values, possible values</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="33d24d844b"><code>33d24d8</code></a>
chore: Release</li>
<li><a
href="9332409f4a"><code>9332409</code></a>
docs: Update changelog</li>
<li><a
href="b7adce5a17"><code>b7adce5</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6166">#6166</a>
from fabalchemy/fix-dynamic-powershell-completion</li>
<li><a
href="009bba44ec"><code>009bba4</code></a>
fix(clap_complete): Improve powershell registration</li>
<li><a
href="d89d57dfb4"><code>d89d57d</code></a>
chore: Release</li>
<li><a
href="f18b67ec3d"><code>f18b67e</code></a>
docs: Update changelog</li>
<li><a
href="9d218eb418"><code>9d218eb</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6165">#6165</a>
from epage/shirt</li>
<li><a
href="126440ca84"><code>126440c</code></a>
fix(help): Correctly calculate padding for short-only args</li>
<li><a
href="9e3c05ef38"><code>9e3c05e</code></a>
test(help): Show panic with short, valueless arg</li>
<li><a
href="c9898d0fec"><code>c9898d0</code></a>
test(help): Verify short with value</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.59...clap_complete-v4.5.60">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.59&new-version=4.5.60)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 02:05:59 +00:00
dependabot[bot]
f9021344e8 build: bump security-framework-sys from 2.16.0 to 2.17.0 (#42789)
Bumps
[security-framework-sys](https://github.com/kornelski/rust-security-framework)
from 2.16.0 to 2.17.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/kornelski/rust-security-framework/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=security-framework-sys&package-manager=cargo&previous-version=2.16.0&new-version=2.17.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 01:33:33 +00:00
dependabot[bot]
759892fac8 build: bump deranged from 0.5.6 to 0.5.8 (#42790)
Bumps [deranged](https://github.com/jhpratt/deranged) from 0.5.6 to
0.5.8.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/jhpratt/deranged/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=deranged&package-manager=cargo&previous-version=0.5.6&new-version=0.5.8)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 01:33:02 +00:00
dependabot[bot]
cb30df1db7 build: bump ohos-abilitykit-sys from 0.1.4 to 0.1.5 (#42793)
Bumps [ohos-abilitykit-sys](https://github.com/openharmony-rs/ohos-sys)
from 0.1.4 to 0.1.5.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/openharmony-rs/ohos-sys/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-abilitykit-sys&package-manager=cargo&previous-version=0.1.4&new-version=0.1.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 01:32:29 +00:00
dependabot[bot]
498ab56b71 build: bump syn from 2.0.116 to 2.0.117 (#42791)
Bumps [syn](https://github.com/dtolnay/syn) from 2.0.116 to 2.0.117.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.117</h2>
<ul>
<li>Fix parsing of <code>self::</code> pattern in first function
argument (<a
href="https://redirect.github.com/dtolnay/syn/issues/1970">#1970</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7bcb37cdb3"><code>7bcb37c</code></a>
Release 2.0.117</li>
<li><a
href="9c6e7d3b8d"><code>9c6e7d3</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1970">#1970</a>
from dtolnay/receiver</li>
<li><a
href="019a84847e"><code>019a848</code></a>
Fix self:: pattern in first function argument</li>
<li><a
href="23f54f3cf6"><code>23f54f3</code></a>
Update test suite to nightly-2026-02-18</li>
<li><a
href="b99b9a627c"><code>b99b9a6</code></a>
Unpin CI miri toolchain</li>
<li>See full diff in <a
href="https://github.com/dtolnay/syn/compare/2.0.116...2.0.117">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=syn&package-manager=cargo&previous-version=2.0.116&new-version=2.0.117)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 01:23:33 +00:00
dependabot[bot]
7519008c30 build: bump zbus from 5.13.2 to 5.14.0 in the zbus-related group (#42788)
Bumps the zbus-related group with 1 update:
[zbus](https://github.com/z-galaxy/zbus).

Updates `zbus` from 5.13.2 to 5.14.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zbus's
releases</a>.</em></p>
<blockquote>
<h2>zbus-5.14.0</h2>
<h3>Added</h3>
<ul>
<li> Add helper for IBus connection creation. <a
href="https://redirect.github.com/z-galaxy/zbus/issues/964">#964</a></li>
<li>🚸 Add Display trait to D-Bus name request reply types.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>🔧 Extend process module run() to all Unix platforms.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>🐛 Do not use SendFlags::NOSIGNAL on Redox.</li>
</ul>
<h3>Other</h3>
<ul>
<li>📦️ Add async-recursion for Unix targets.</li>
<li>🚨 silence unused import on windows.</li>
<li>🚨 silence unused warning on windows test.</li>
</ul>
<h2>zbus_macros-5.14.0</h2>
<ul>
<li>New release to go with zbus 5.14.0</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="02f48c4948"><code>02f48c4</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1725">#1725</a>
from zeenix/releasing</li>
<li><a
href="3467d53f6f"><code>3467d53</code></a>
🔖 zbus_xmlgen: Release 5.3.0</li>
<li><a
href="b59017cbe0"><code>b59017c</code></a>
🔖 zb,zm: Release 5.14.0</li>
<li><a
href="7287f27b6d"><code>7287f27</code></a>
🔖 zv,zd: Release 5.10.0</li>
<li><a
href="bd81484eb4"><code>bd81484</code></a>
🤖 release-plz: <code>🚸</code> commits treated as additions</li>
<li><a
href="f0ae963458"><code>f0ae963</code></a>
⬆️ micro: Update quick-xml to v0.39.2 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1724">#1724</a>)</li>
<li><a
href="3e73afb306"><code>3e73afb</code></a>
⬆️ micro: Update syn to v2.0.117 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1723">#1723</a>)</li>
<li><a
href="734d258ed4"><code>734d258</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1721">#1721</a>
from jackpot51/redox</li>
<li><a
href="9e276dd016"><code>9e276dd</code></a>
⬆️ micro: Update clap to v4.5.60 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1722">#1722</a>)</li>
<li><a
href="91e2ae7894"><code>91e2ae7</code></a>
🐛 Do not use SendFlags::NOSIGNAL on Redox</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zbus-5.13.2...zbus-5.14.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zbus&package-manager=cargo&previous-version=5.13.2&new-version=5.14.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-24 00:57:57 +00:00
Gae24
ea7703c39d script: Preserve the order of entries when parsing an import map (#42754)
Unless the feature `preserve_order` is enabled, serde_json will sort the
map's entries in an alphanumerical order.
The specification instead expect the entries to be visited by the order
they are listed, a latter entry should replace a previous one when they
are resolved to the same url.

I've also removed a couple of `CanGc` introduced in #37405, unless I've
missed something there is not code that can trigger a GC.

Testing: A subtest now pass
Part of #37553

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-23 21:39:37 +00:00
Oriol Brufau
8dfda0979d layout: Let TableSlotCell store an IndependentFormattingContext (#42778)
`TableSlotCell` was storing the `BlockFormattingContext` and the
`LayoutBoxBase` in separate fields. Now it will store an entire
`IndependentFormattingContext` in a single field.

In particular, this fixes the issue that `TableSlotCell::repair_style()`
wasn't calling `BlockFormattingContext::repair_style()`. Now we can just
rely on the correct `IndependentFormattingContext::repair_style()`.

Testing: Adding a new test
Fixes: #42777

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-23 21:17:07 +00:00
Shubham Gupta
6d0b651218 layout: Account opacity for marking first-contentful-paint (#42768)
As per the spec opacity should be considered for
`first-contentful-paint`

> An [element](https://dom.spec.whatwg.org/#concept-element) el is
paintable when all of the following apply:
> 
> - el and all of its ancestors'
[used](https://www.w3.org/TR/css-cascade-5/#used-value)
[opacity](https://www.w3.org/TR/css-color-3/#opacity) is greater than
zero.

Testing: WPT Tests Passed

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-23 16:17:42 +00:00
Narfinger
f7142720c3 base: GenericSharedMemory switch to custom struct (#42083)
This changes the GenericSharedMemory which was previous an alias for
IpcSharedMemory to a custom type. Similar to GenericChannel
it distinguishes between Inprocess mode and Ipc mode. For Inprocess mode
we use an Arc<Vec<u8>>.

This technically reduces the utility of GenericSharedMemory because we
are not implementing DerefMut.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: We have new simple tests for GenericSharedMemory and WPT
(https://github.com/Narfinger/servo/actions/runs/21253723622) should
cover the general usage.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-23 16:02:09 +00:00
Martin Robinson
6b26d86491 fonts: Use the system font API to get a fallback on macOS (#42776)
As a last resort, as the system font API to find a suitable fallback
font on macOS. This allows macOS to use the fonts that are found in the
`/System/Library/Fonts/Supplemental` directory, which normally aren't
available. This is currently used as a last resort because these fonts
cannot currently be shared between font groups. A future change will try
to make this possible and prefer this API to the old system font lists.
For now, this allows text to render in exchange for a bit more memory
usage.

This fixes the rendering of Adlam and many other scripts on macOS.

Testing: WPT tests are not currently run for macOS, but I've verified
that this
improves rendering of Adlam and, in general, in the `alluni.txt`
testcase.
Fixes: #38403. This is part of #41426.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-23 15:28:39 +00:00
Martin Robinson
ff014d9889 layout: Extend damage propagation isolation to table cells and captions (#42717)
These two types of boxes should also be able to isolate damage during
propagation and serve as roots for box tree reconstruction, as their
contents are independent of their containing box.

Testing: This should not change testable behavior so is covered by
existing WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-23 14:26:00 +00:00
webbeef
a4c5ca1070 net: Use the user locale for the Accept-Language header and navigator language (#41919)
That respects the user locale better than hardcoding en-US. This can
also be manually set with the `LANG` environment variable.

Testing: Manual testing with the devtools to check the header sent and
the value of `navigator.language`

Signed-off-by: webbeef <me@webbeef.org>
2026-02-23 13:05:21 +00:00
Narfinger
c6a5eb584a script: Do not unnecessary clone CSP list in Document::get_csp_list (#42716)
We previously clonsed the CSP list unnecessarily which consisted of
roughly 2.7%. 1.2% spend in Document::get_csp_list.
We can easily avoid it with Ref and cloning it deliberately when needed.

Testing: This is functionally identical to the previous code as it is a
change from clone to a Ref<>.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-23 11:49:58 +00:00
eri
158742f72c devtools: Get the correct debuggee in debugger.js (#42774)
Remove the placeholder way of getting a debuggee in `eval` and finds the
correct one in the map. Another way of doing this would be to have two
maps, `debuggeesToPipelineIds` and `pipelineIdsToDebuggees`, I'm open to
both approaches. I think this might be fine since the reverse operation
is only used here, but if it becomes a performance issue we can change
it.

Testing: Ran mach test-devtools
Part of: #36027

cc @atbrakhi

Signed-off-by: eri <eri@igalia.com>
2026-02-23 11:00:48 +00:00
TIN TUN AUNG
64b77376a4 layout: align/justify-self last baseline should be treated as safe end in absolute position box. (#42724)
`align-self: last baseline` should be treated as `safe end` in absolute
position box. Given the `baseline` require a group of box, and in the
context of absolute position box, there always would be only one box, we
can follow the [spec of baseline fallback
spec](https://drafts.csswg.org/css-align-3/#ref-for-fallback-alignment),
make `last baseline` fallback to `end`.

Testing: More WPT test is passing.
Fixes: N/A

---------

Signed-off-by: rayguo17 <rayguo17@gmail.com>
2026-02-23 10:13:28 +00:00
eri
92259af702 devtools: Unify pause handling for breakpoints and interrupt (#42599)
The pause debugger screen should be shown for both pausing manually
(interrupt) and hitting a breakpoint.

Reuse the logic for pausing breakpoints to pause the debugger when the
user manually clicks the pause button.

Rename the pause event to interrupt to match the language of the
DevTools client and to avoid confusion with paused frames, which can
happen on interrupt or on a breakpoint.


https://github.com/user-attachments/assets/ceb0007d-0e57-44d6-a159-55980ff8b517

Testing: New DevTools test and manual testing.
Part of: #36027

cc @atbrakhi

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-02-23 09:29:59 +00:00
Jonathan Schwender
f99d9689b8 Rename nightly.yml to release.yml (#42772)
The workflow is now used both for regular releases and nightly releases.

Testing: Not tested, it's a simple rename and nothing should rely on the
name `nightly.yml` (grep search)

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-23 09:04:58 +00:00
Euclid Ye
c661dd08e1 servo harness: Reduce recursive execution for shutdown (#42770)
I like `servo` runner, or better known as its previous name
`servodriver` to some people.
However, it is getting quite often that I use `legacy`, or better known
as its previous name `servo`.
This is because `servo (previously servodriver)` harness shutdown very
slowly due to its shutdown command
https://github.com/servo/servo/pull/40455

- This PR improves the shutdown command in the way as titled.
- Avoids accidental Prockill that may happen after regular shutdown.
This may be related to @jschwe's report that coverage for WPT still
reports empty more often than it should.

Previously, shutdown is like:
```
 0:15.06 INFO Trying to shut down gracefully by extension command
 0:18.13 DEBUG Servo has shut down normally. HTTPConnectionPool(host='127.0.0.1', port=8378): Max retries exceeded with url: /status (Caused by NewConnectionError("HTTPConnection(host='127.0.0.1', port=8378): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it"))
 0:18.13 DEBUG Stopping WebDriver
 0:20.19 DEBUG Servo has shut down normally. HTTPConnectionPool(host='127.0.0.1', port=8378): Max retries exceeded with url: /status (Caused by NewConnectionError("HTTPConnection(host='127.0.0.1', port=8378): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it"))
 0:22.24 DEBUG Servo has shut down normally. HTTPConnectionPool(host='127.0.0.1', port=8378): Max retries exceeded with url: /status (Caused by NewConnectionError("HTTPConnection(host='127.0.0.1', port=8378): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it"))
 0:14.99 DEBUG Hanging up on WebDriver session
```

Now:
```
 INFO Trying to shut down gracefully by extension command
 0:18.41 DEBUG Servo has shut down normally. HTTPConnectionPool(host='127.0.0.1', port=9098): Max retries exceeded with url: /status (Caused by NewConnectionError("HTTPConnection(host='127.0.0.1', port=9098): Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it"))
 0:18.41 DEBUG TestRunnerManager cleanup
 0:15.30 DEBUG Hanging up on WebDriver session
```

Testing: Locally, this reduce shutdown time from about 5 sec to 1 sec,
counting from "Trying to shut down gracefully by extension command".

[Try](https://github.com/servo/servo/actions/runs/22295662553/job/64492009162).

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-23 08:48:08 +00:00
dependabot[bot]
679e89c2f0 build: bump anyhow from 1.0.101 to 1.0.102 (#42767)
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.101 to
1.0.102.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/anyhow/releases">anyhow's
releases</a>.</em></p>
<blockquote>
<h2>1.0.102</h2>
<ul>
<li>Remove backtrace dependency (<a
href="https://redirect.github.com/dtolnay/anyhow/issues/438">#438</a>,
<a
href="https://redirect.github.com/dtolnay/anyhow/issues/439">#439</a>,
<a
href="https://redirect.github.com/dtolnay/anyhow/issues/440">#440</a>,
<a
href="https://redirect.github.com/dtolnay/anyhow/issues/441">#441</a>,
<a
href="https://redirect.github.com/dtolnay/anyhow/issues/442">#442</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5c657b3252"><code>5c657b3</code></a>
Release 1.0.102</li>
<li><a
href="e737fb6391"><code>e737fb6</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/442">#442</a>
from dtolnay/backtrace</li>
<li><a
href="7fe62b51c6"><code>7fe62b5</code></a>
Further simply backtrace conditional compilation</li>
<li><a
href="c8cb5cae23"><code>c8cb5ca</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/441">#441</a>
from dtolnay/backtrace</li>
<li><a
href="de27df7e0f"><code>de27df7</code></a>
Delete CI use of --features=backtrace</li>
<li><a
href="9b67e5dd60"><code>9b67e5d</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/440">#440</a>
from dtolnay/backtrace</li>
<li><a
href="efdb11a259"><code>efdb11a</code></a>
Simplify <code>std_backtrace</code> conditional code</li>
<li><a
href="b8a9a70783"><code>b8a9a70</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/439">#439</a>
from dtolnay/backtrace</li>
<li><a
href="a42fc2c218"><code>a42fc2c</code></a>
Remove <code>feature = &quot;backtrace&quot;</code> conditional
code</li>
<li><a
href="2a2a3ceb4c"><code>2a2a3ce</code></a>
Re-word backtrace feature comment</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/anyhow/compare/1.0.101...1.0.102">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=anyhow&package-manager=cargo&previous-version=1.0.101&new-version=1.0.102)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 04:19:48 +00:00
dependabot[bot]
0c21c9090e build: bump the gstreamer-related group with 29 updates (#42760)
Bumps the gstreamer-related group with 29 updates:

| Package | From | To |
| --- | --- | --- |
| [glib](https://github.com/gtk-rs/gtk-rs-core) | `0.21.5` | `0.22.0` |
| [glib-sys](https://github.com/gtk-rs/gtk-rs-core) | `0.21.5` |
`0.22.0` |
| gstreamer | `0.24.4` | `0.25.0` |
| gstreamer-app | `0.24.4` | `0.25.0` |
| gstreamer-audio | `0.24.4` | `0.25.0` |
| gstreamer-base | `0.24.4` | `0.25.0` |
| gstreamer-gl | `0.24.4` | `0.25.0` |
| gstreamer-gl-egl | `0.24.4` | `0.25.0` |
| gstreamer-gl-sys | `0.24.4` | `0.25.0` |
| gstreamer-gl-wayland | `0.24.4` | `0.25.0` |
| gstreamer-gl-x11 | `0.24.4` | `0.25.0` |
| gstreamer-play | `0.24.4` | `0.25.0` |
| gstreamer-sdp | `0.24.4` | `0.25.0` |
| gstreamer-sys | `0.24.4` | `0.25.0` |
| gstreamer-video | `0.24.4` | `0.25.0` |
| gstreamer-webrtc | `0.24.4` | `0.25.0` |
| [gio-sys](https://github.com/gtk-rs/gtk-rs-core) | `0.21.5` | `0.22.0`
|
| [glib-macros](https://github.com/gtk-rs/gtk-rs-core) | `0.21.5` |
`0.22.0` |
| [gobject-sys](https://github.com/gtk-rs/gtk-rs-core) | `0.21.5` |
`0.22.0` |
| gstreamer-app-sys | `0.24.4` | `0.25.0` |
| gstreamer-audio-sys | `0.24.4` | `0.25.0` |
| gstreamer-base-sys | `0.24.4` | `0.25.0` |
| gstreamer-gl-egl-sys | `0.24.4` | `0.25.0` |
| gstreamer-gl-wayland-sys | `0.24.4` | `0.25.0` |
| gstreamer-gl-x11-sys | `0.24.4` | `0.25.0` |
| gstreamer-play-sys | `0.24.4` | `0.25.0` |
| gstreamer-sdp-sys | `0.24.4` | `0.25.0` |
| gstreamer-video-sys | `0.24.4` | `0.25.0` |
| gstreamer-webrtc-sys | `0.24.4` | `0.25.0` |

Updates `glib` from 0.21.5 to 0.22.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib's
releases</a>.</em></p>
<blockquote>
<h2>0.22.0</h2>
<pre><code>Bernhard M. Wiedemann:
      glib-macros: Use BTreeMap instead of HashMap
<p>Biagio Festa:<br />
glib-macros/async_test: unwrap result when setting default context<br />
glib-macros/async_test: dont move main context within closure<br />
glib/bytes: relax start offset constraint for
<code>from_bytes</code></p>
<p>Bilal Elmoussaoui:<br />
ci: Switch from gsvbuild to MSVC<br />
Generate bindings for win32/unix GLib/Gio<br />
Build new crates on CI<br />
gio/unix: Remove the manual fallback for MountEntry<br />
glib: Lower host dep requirement<br />
glib/unix: Add missing futures feature<br />
gio/unix: Ignore a clippy lint<br />
gio: Comment out a test &amp; drop UnixFdMessage<br />
gio/tests: Remove no longer useful headers<br />
gio: Move various config options to gio-unix<br />
glib: Remove no longer needed manual ffi functions<br />
glib/sys: Don't generate UnixPipe<br />
Regenerate with fixed GIR files<br />
glib/source: Fix imports on Win32<br />
glib/win32: Add missing imports<br />
gio/win32: Manually implement streams<br />
gio/win32: Add a type for GNetworkMonitorBase and drop duplicated manual
ones<br />
gio/win32: Add missing dep<br />
deny: Drop no longer needed skips<br />
Add missing licenses<br />
Adapt to rust nightly docs changes<br />
gio: Move test to gio-unix<br />
gdk-pixbuf: Ignore another clippy lint<br />
Fix docs for new crates<br />
Force update windows-sys for new crates<br />
win32: Always depend on windows-sys<br />
win32: Guard std::os::windows usage<br />
gio/win32: Add missing feature<br />
Re-export preludes<br />
glib: Use 'static lifetime for nick/name<br />
Use 'a lifetime instead<br />
glib: Mark push_thread_default as renamed</p>
<p>Casey Jao:<br />
Clarify the GObject subclass mechanism<br />
Add missing comment markers<br />
Update glib/src/subclass/mod.rs<br />
Clarify Rust-C analogy for external interface<br />
Improve diagram<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b440606f1"><code>5b44060</code></a>
Update versions to 0.22.0</li>
<li><a
href="838d4400c0"><code>838d440</code></a>
Update dependencies</li>
<li><a
href="0cac69d45e"><code>0cac69d</code></a>
Regenerate with latest gir</li>
<li><a
href="7f631810e2"><code>7f63181</code></a>
Update gir</li>
<li><a
href="f52ab6bdda"><code>f52ab6b</code></a>
glib: Mark push_thread_default as renamed</li>
<li><a
href="e93a49c354"><code>e93a49c</code></a>
build(deps): bump futures-task from 0.3.31 to 0.3.32</li>
<li><a
href="f2d29d9f92"><code>f2d29d9</code></a>
build(deps): bump futures-channel from 0.3.31 to 0.3.32</li>
<li><a
href="46dda5ff4b"><code>46dda5f</code></a>
build(deps): bump libc from 0.2.180 to 0.2.182</li>
<li><a
href="dcc35f7144"><code>dcc35f7</code></a>
build(deps): bump tempfile from 3.24.0 to 3.25.0</li>
<li><a
href="f86b993073"><code>f86b993</code></a>
build(deps): bump futures-core from 0.3.31 to 0.3.32</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.21.5...0.22.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `glib-sys` from 0.21.5 to 0.22.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib-sys's
releases</a>.</em></p>
<blockquote>
<h2>0.22.0</h2>
<pre><code>Bernhard M. Wiedemann:
      glib-macros: Use BTreeMap instead of HashMap
<p>Biagio Festa:<br />
glib-macros/async_test: unwrap result when setting default context<br />
glib-macros/async_test: dont move main context within closure<br />
glib/bytes: relax start offset constraint for
<code>from_bytes</code></p>
<p>Bilal Elmoussaoui:<br />
ci: Switch from gsvbuild to MSVC<br />
Generate bindings for win32/unix GLib/Gio<br />
Build new crates on CI<br />
gio/unix: Remove the manual fallback for MountEntry<br />
glib: Lower host dep requirement<br />
glib/unix: Add missing futures feature<br />
gio/unix: Ignore a clippy lint<br />
gio: Comment out a test &amp; drop UnixFdMessage<br />
gio/tests: Remove no longer useful headers<br />
gio: Move various config options to gio-unix<br />
glib: Remove no longer needed manual ffi functions<br />
glib/sys: Don't generate UnixPipe<br />
Regenerate with fixed GIR files<br />
glib/source: Fix imports on Win32<br />
glib/win32: Add missing imports<br />
gio/win32: Manually implement streams<br />
gio/win32: Add a type for GNetworkMonitorBase and drop duplicated manual
ones<br />
gio/win32: Add missing dep<br />
deny: Drop no longer needed skips<br />
Add missing licenses<br />
Adapt to rust nightly docs changes<br />
gio: Move test to gio-unix<br />
gdk-pixbuf: Ignore another clippy lint<br />
Fix docs for new crates<br />
Force update windows-sys for new crates<br />
win32: Always depend on windows-sys<br />
win32: Guard std::os::windows usage<br />
gio/win32: Add missing feature<br />
Re-export preludes<br />
glib: Use 'static lifetime for nick/name<br />
Use 'a lifetime instead<br />
glib: Mark push_thread_default as renamed</p>
<p>Casey Jao:<br />
Clarify the GObject subclass mechanism<br />
Add missing comment markers<br />
Update glib/src/subclass/mod.rs<br />
Clarify Rust-C analogy for external interface<br />
Improve diagram<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b440606f1"><code>5b44060</code></a>
Update versions to 0.22.0</li>
<li><a
href="838d4400c0"><code>838d440</code></a>
Update dependencies</li>
<li><a
href="0cac69d45e"><code>0cac69d</code></a>
Regenerate with latest gir</li>
<li><a
href="7f631810e2"><code>7f63181</code></a>
Update gir</li>
<li><a
href="f52ab6bdda"><code>f52ab6b</code></a>
glib: Mark push_thread_default as renamed</li>
<li><a
href="e93a49c354"><code>e93a49c</code></a>
build(deps): bump futures-task from 0.3.31 to 0.3.32</li>
<li><a
href="f2d29d9f92"><code>f2d29d9</code></a>
build(deps): bump futures-channel from 0.3.31 to 0.3.32</li>
<li><a
href="46dda5ff4b"><code>46dda5f</code></a>
build(deps): bump libc from 0.2.180 to 0.2.182</li>
<li><a
href="dcc35f7144"><code>dcc35f7</code></a>
build(deps): bump tempfile from 3.24.0 to 3.25.0</li>
<li><a
href="f86b993073"><code>f86b993</code></a>
build(deps): bump futures-core from 0.3.31 to 0.3.32</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.21.5...0.22.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `gstreamer` from 0.24.4 to 0.25.0

Updates `gstreamer-app` from 0.24.4 to 0.25.0

Updates `gstreamer-audio` from 0.24.4 to 0.25.0

Updates `gstreamer-base` from 0.24.4 to 0.25.0

Updates `gstreamer-gl` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-egl` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-wayland` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-x11` from 0.24.4 to 0.25.0

Updates `gstreamer-play` from 0.24.4 to 0.25.0

Updates `gstreamer-sdp` from 0.24.4 to 0.25.0

Updates `gstreamer-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-video` from 0.24.4 to 0.25.0

Updates `gstreamer-webrtc` from 0.24.4 to 0.25.0

Updates `gio-sys` from 0.21.5 to 0.22.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">gio-sys's
releases</a>.</em></p>
<blockquote>
<h2>0.22.0</h2>
<pre><code>Bernhard M. Wiedemann:
      glib-macros: Use BTreeMap instead of HashMap
<p>Biagio Festa:<br />
glib-macros/async_test: unwrap result when setting default context<br />
glib-macros/async_test: dont move main context within closure<br />
glib/bytes: relax start offset constraint for
<code>from_bytes</code></p>
<p>Bilal Elmoussaoui:<br />
ci: Switch from gsvbuild to MSVC<br />
Generate bindings for win32/unix GLib/Gio<br />
Build new crates on CI<br />
gio/unix: Remove the manual fallback for MountEntry<br />
glib: Lower host dep requirement<br />
glib/unix: Add missing futures feature<br />
gio/unix: Ignore a clippy lint<br />
gio: Comment out a test &amp; drop UnixFdMessage<br />
gio/tests: Remove no longer useful headers<br />
gio: Move various config options to gio-unix<br />
glib: Remove no longer needed manual ffi functions<br />
glib/sys: Don't generate UnixPipe<br />
Regenerate with fixed GIR files<br />
glib/source: Fix imports on Win32<br />
glib/win32: Add missing imports<br />
gio/win32: Manually implement streams<br />
gio/win32: Add a type for GNetworkMonitorBase and drop duplicated manual
ones<br />
gio/win32: Add missing dep<br />
deny: Drop no longer needed skips<br />
Add missing licenses<br />
Adapt to rust nightly docs changes<br />
gio: Move test to gio-unix<br />
gdk-pixbuf: Ignore another clippy lint<br />
Fix docs for new crates<br />
Force update windows-sys for new crates<br />
win32: Always depend on windows-sys<br />
win32: Guard std::os::windows usage<br />
gio/win32: Add missing feature<br />
Re-export preludes<br />
glib: Use 'static lifetime for nick/name<br />
Use 'a lifetime instead<br />
glib: Mark push_thread_default as renamed</p>
<p>Casey Jao:<br />
Clarify the GObject subclass mechanism<br />
Add missing comment markers<br />
Update glib/src/subclass/mod.rs<br />
Clarify Rust-C analogy for external interface<br />
Improve diagram<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b440606f1"><code>5b44060</code></a>
Update versions to 0.22.0</li>
<li><a
href="838d4400c0"><code>838d440</code></a>
Update dependencies</li>
<li><a
href="0cac69d45e"><code>0cac69d</code></a>
Regenerate with latest gir</li>
<li><a
href="7f631810e2"><code>7f63181</code></a>
Update gir</li>
<li><a
href="f52ab6bdda"><code>f52ab6b</code></a>
glib: Mark push_thread_default as renamed</li>
<li><a
href="e93a49c354"><code>e93a49c</code></a>
build(deps): bump futures-task from 0.3.31 to 0.3.32</li>
<li><a
href="f2d29d9f92"><code>f2d29d9</code></a>
build(deps): bump futures-channel from 0.3.31 to 0.3.32</li>
<li><a
href="46dda5ff4b"><code>46dda5f</code></a>
build(deps): bump libc from 0.2.180 to 0.2.182</li>
<li><a
href="dcc35f7144"><code>dcc35f7</code></a>
build(deps): bump tempfile from 3.24.0 to 3.25.0</li>
<li><a
href="f86b993073"><code>f86b993</code></a>
build(deps): bump futures-core from 0.3.31 to 0.3.32</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.21.5...0.22.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `glib-macros` from 0.21.5 to 0.22.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">glib-macros's
releases</a>.</em></p>
<blockquote>
<h2>0.22.0</h2>
<pre><code>Bernhard M. Wiedemann:
      glib-macros: Use BTreeMap instead of HashMap
<p>Biagio Festa:<br />
glib-macros/async_test: unwrap result when setting default context<br />
glib-macros/async_test: dont move main context within closure<br />
glib/bytes: relax start offset constraint for
<code>from_bytes</code></p>
<p>Bilal Elmoussaoui:<br />
ci: Switch from gsvbuild to MSVC<br />
Generate bindings for win32/unix GLib/Gio<br />
Build new crates on CI<br />
gio/unix: Remove the manual fallback for MountEntry<br />
glib: Lower host dep requirement<br />
glib/unix: Add missing futures feature<br />
gio/unix: Ignore a clippy lint<br />
gio: Comment out a test &amp; drop UnixFdMessage<br />
gio/tests: Remove no longer useful headers<br />
gio: Move various config options to gio-unix<br />
glib: Remove no longer needed manual ffi functions<br />
glib/sys: Don't generate UnixPipe<br />
Regenerate with fixed GIR files<br />
glib/source: Fix imports on Win32<br />
glib/win32: Add missing imports<br />
gio/win32: Manually implement streams<br />
gio/win32: Add a type for GNetworkMonitorBase and drop duplicated manual
ones<br />
gio/win32: Add missing dep<br />
deny: Drop no longer needed skips<br />
Add missing licenses<br />
Adapt to rust nightly docs changes<br />
gio: Move test to gio-unix<br />
gdk-pixbuf: Ignore another clippy lint<br />
Fix docs for new crates<br />
Force update windows-sys for new crates<br />
win32: Always depend on windows-sys<br />
win32: Guard std::os::windows usage<br />
gio/win32: Add missing feature<br />
Re-export preludes<br />
glib: Use 'static lifetime for nick/name<br />
Use 'a lifetime instead<br />
glib: Mark push_thread_default as renamed</p>
<p>Casey Jao:<br />
Clarify the GObject subclass mechanism<br />
Add missing comment markers<br />
Update glib/src/subclass/mod.rs<br />
Clarify Rust-C analogy for external interface<br />
Improve diagram<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b440606f1"><code>5b44060</code></a>
Update versions to 0.22.0</li>
<li><a
href="838d4400c0"><code>838d440</code></a>
Update dependencies</li>
<li><a
href="0cac69d45e"><code>0cac69d</code></a>
Regenerate with latest gir</li>
<li><a
href="7f631810e2"><code>7f63181</code></a>
Update gir</li>
<li><a
href="f52ab6bdda"><code>f52ab6b</code></a>
glib: Mark push_thread_default as renamed</li>
<li><a
href="e93a49c354"><code>e93a49c</code></a>
build(deps): bump futures-task from 0.3.31 to 0.3.32</li>
<li><a
href="f2d29d9f92"><code>f2d29d9</code></a>
build(deps): bump futures-channel from 0.3.31 to 0.3.32</li>
<li><a
href="46dda5ff4b"><code>46dda5f</code></a>
build(deps): bump libc from 0.2.180 to 0.2.182</li>
<li><a
href="dcc35f7144"><code>dcc35f7</code></a>
build(deps): bump tempfile from 3.24.0 to 3.25.0</li>
<li><a
href="f86b993073"><code>f86b993</code></a>
build(deps): bump futures-core from 0.3.31 to 0.3.32</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.21.5...0.22.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `gobject-sys` from 0.21.5 to 0.22.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/gtk-rs/gtk-rs-core/releases">gobject-sys's
releases</a>.</em></p>
<blockquote>
<h2>0.22.0</h2>
<pre><code>Bernhard M. Wiedemann:
      glib-macros: Use BTreeMap instead of HashMap
<p>Biagio Festa:<br />
glib-macros/async_test: unwrap result when setting default context<br />
glib-macros/async_test: dont move main context within closure<br />
glib/bytes: relax start offset constraint for
<code>from_bytes</code></p>
<p>Bilal Elmoussaoui:<br />
ci: Switch from gsvbuild to MSVC<br />
Generate bindings for win32/unix GLib/Gio<br />
Build new crates on CI<br />
gio/unix: Remove the manual fallback for MountEntry<br />
glib: Lower host dep requirement<br />
glib/unix: Add missing futures feature<br />
gio/unix: Ignore a clippy lint<br />
gio: Comment out a test &amp; drop UnixFdMessage<br />
gio/tests: Remove no longer useful headers<br />
gio: Move various config options to gio-unix<br />
glib: Remove no longer needed manual ffi functions<br />
glib/sys: Don't generate UnixPipe<br />
Regenerate with fixed GIR files<br />
glib/source: Fix imports on Win32<br />
glib/win32: Add missing imports<br />
gio/win32: Manually implement streams<br />
gio/win32: Add a type for GNetworkMonitorBase and drop duplicated manual
ones<br />
gio/win32: Add missing dep<br />
deny: Drop no longer needed skips<br />
Add missing licenses<br />
Adapt to rust nightly docs changes<br />
gio: Move test to gio-unix<br />
gdk-pixbuf: Ignore another clippy lint<br />
Fix docs for new crates<br />
Force update windows-sys for new crates<br />
win32: Always depend on windows-sys<br />
win32: Guard std::os::windows usage<br />
gio/win32: Add missing feature<br />
Re-export preludes<br />
glib: Use 'static lifetime for nick/name<br />
Use 'a lifetime instead<br />
glib: Mark push_thread_default as renamed</p>
<p>Casey Jao:<br />
Clarify the GObject subclass mechanism<br />
Add missing comment markers<br />
Update glib/src/subclass/mod.rs<br />
Clarify Rust-C analogy for external interface<br />
Improve diagram<br />
&lt;/tr&gt;&lt;/table&gt;<br />
</code></pre></p>
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b440606f1"><code>5b44060</code></a>
Update versions to 0.22.0</li>
<li><a
href="838d4400c0"><code>838d440</code></a>
Update dependencies</li>
<li><a
href="0cac69d45e"><code>0cac69d</code></a>
Regenerate with latest gir</li>
<li><a
href="7f631810e2"><code>7f63181</code></a>
Update gir</li>
<li><a
href="f52ab6bdda"><code>f52ab6b</code></a>
glib: Mark push_thread_default as renamed</li>
<li><a
href="e93a49c354"><code>e93a49c</code></a>
build(deps): bump futures-task from 0.3.31 to 0.3.32</li>
<li><a
href="f2d29d9f92"><code>f2d29d9</code></a>
build(deps): bump futures-channel from 0.3.31 to 0.3.32</li>
<li><a
href="46dda5ff4b"><code>46dda5f</code></a>
build(deps): bump libc from 0.2.180 to 0.2.182</li>
<li><a
href="dcc35f7144"><code>dcc35f7</code></a>
build(deps): bump tempfile from 3.24.0 to 3.25.0</li>
<li><a
href="f86b993073"><code>f86b993</code></a>
build(deps): bump futures-core from 0.3.31 to 0.3.32</li>
<li>Additional commits viewable in <a
href="https://github.com/gtk-rs/gtk-rs-core/compare/0.21.5...0.22.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `gstreamer-app-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-audio-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-base-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-egl-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-wayland-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-gl-x11-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-play-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-sdp-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-video-sys` from 0.24.4 to 0.25.0

Updates `gstreamer-webrtc-sys` from 0.24.4 to 0.25.0


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 00:55:57 +00:00
dependabot[bot]
5e1cd35e08 build: bump jiff from 0.2.20 to 0.2.21 (#42764)
Bumps [jiff](https://github.com/BurntSushi/jiff) from 0.2.20 to 0.2.21.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md">jiff's
changelog</a>.</em></p>
<blockquote>
<h1>0.2.21 (2026-02-22)</h1>
<p>This release contains a performance improvement and a bug fix for
<code>civil::Date::new</code> where it could panic on some inputs.</p>
<p>Bug fixes:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/523">#523</a>:
Fix a bug where <code>Date::new</code> could panic. This was a
regression introduced in
<code>jiff 0.2.20</code>.</li>
</ul>
<p>Performance:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/pull/518">#518</a>:
Improve <code>Timestamp</code> to <code>civil::DateTime</code>
conversion performance by ~15%.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6019162783"><code>6019162</code></a>
0.2.21</li>
<li><a
href="7c2b3cd4f1"><code>7c2b3cd</code></a>
changelog: 0.2.21</li>
<li><a
href="9e766682f9"><code>9e76668</code></a>
civil: check for <code>days &lt; 1</code> in <code>Date::new</code></li>
<li><a
href="243d8a04cc"><code>243d8a0</code></a>
changelog: add <a
href="https://redirect.github.com/BurntSushi/jiff/issues/518">#518</a></li>
<li><a
href="d57657ab90"><code>d57657a</code></a>
perf: optimize timestamp -&gt; datetime conversion</li>
<li>See full diff in <a
href="https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.20...jiff-static-0.2.21">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jiff&package-manager=cargo&previous-version=0.2.20&new-version=0.2.21)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 00:51:17 +00:00
dependabot[bot]
d46f722ecf build: bump the zbus-related group with 3 updates (#42763)
Bumps the zbus-related group with 3 updates:
[zbus_macros](https://github.com/z-galaxy/zbus),
[zvariant](https://github.com/z-galaxy/zbus) and
[zvariant_derive](https://github.com/z-galaxy/zbus).

Updates `zbus_macros` from 5.13.2 to 5.14.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zbus_macros's
releases</a>.</em></p>
<blockquote>
<h2>zbus_macros-5.14.0</h2>
<ul>
<li>New release to go with zbus 5.14.0</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="02f48c4948"><code>02f48c4</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1725">#1725</a>
from zeenix/releasing</li>
<li><a
href="3467d53f6f"><code>3467d53</code></a>
🔖 zbus_xmlgen: Release 5.3.0</li>
<li><a
href="b59017cbe0"><code>b59017c</code></a>
🔖 zb,zm: Release 5.14.0</li>
<li><a
href="7287f27b6d"><code>7287f27</code></a>
🔖 zv,zd: Release 5.10.0</li>
<li><a
href="bd81484eb4"><code>bd81484</code></a>
🤖 release-plz: <code>🚸</code> commits treated as additions</li>
<li><a
href="f0ae963458"><code>f0ae963</code></a>
⬆️ micro: Update quick-xml to v0.39.2 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1724">#1724</a>)</li>
<li><a
href="3e73afb306"><code>3e73afb</code></a>
⬆️ micro: Update syn to v2.0.117 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1723">#1723</a>)</li>
<li><a
href="734d258ed4"><code>734d258</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1721">#1721</a>
from jackpot51/redox</li>
<li><a
href="9e276dd016"><code>9e276dd</code></a>
⬆️ micro: Update clap to v4.5.60 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1722">#1722</a>)</li>
<li><a
href="91e2ae7894"><code>91e2ae7</code></a>
🐛 Do not use SendFlags::NOSIGNAL on Redox</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zbus_macros-5.13.2...zbus_macros-5.14.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `zvariant` from 5.9.2 to 5.10.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zvariant's
releases</a>.</em></p>
<blockquote>
<h2>zvariant-5.10.0</h2>
<h3>Added</h3>
<ul>
<li> Implement Basic for more types. <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1681">#1681</a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>🚚 Rename an internal macro.</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>⬆️ Update libfuzzer-sys to v0.4.12 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1709">#1709</a>).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>🐛 Encode bool as single byte in GVariant.</li>
</ul>
<h3>Testing</h3>
<ul>
<li> Add test case for bool encoding.</li>
</ul>
<h2>zvariant_derive-5.10.0</h2>
<ul>
<li>New release to go with zvariant 5.10.0</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="02f48c4948"><code>02f48c4</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1725">#1725</a>
from zeenix/releasing</li>
<li><a
href="3467d53f6f"><code>3467d53</code></a>
🔖 zbus_xmlgen: Release 5.3.0</li>
<li><a
href="b59017cbe0"><code>b59017c</code></a>
🔖 zb,zm: Release 5.14.0</li>
<li><a
href="7287f27b6d"><code>7287f27</code></a>
🔖 zv,zd: Release 5.10.0</li>
<li><a
href="bd81484eb4"><code>bd81484</code></a>
🤖 release-plz: <code>🚸</code> commits treated as additions</li>
<li><a
href="f0ae963458"><code>f0ae963</code></a>
⬆️ micro: Update quick-xml to v0.39.2 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1724">#1724</a>)</li>
<li><a
href="3e73afb306"><code>3e73afb</code></a>
⬆️ micro: Update syn to v2.0.117 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1723">#1723</a>)</li>
<li><a
href="734d258ed4"><code>734d258</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1721">#1721</a>
from jackpot51/redox</li>
<li><a
href="9e276dd016"><code>9e276dd</code></a>
⬆️ micro: Update clap to v4.5.60 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1722">#1722</a>)</li>
<li><a
href="91e2ae7894"><code>91e2ae7</code></a>
🐛 Do not use SendFlags::NOSIGNAL on Redox</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zvariant-5.9.2...zvariant-5.10.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `zvariant_derive` from 5.9.2 to 5.10.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zvariant_derive's
releases</a>.</em></p>
<blockquote>
<h2>zvariant_derive-5.10.0</h2>
<ul>
<li>New release to go with zvariant 5.10.0</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="02f48c4948"><code>02f48c4</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1725">#1725</a>
from zeenix/releasing</li>
<li><a
href="3467d53f6f"><code>3467d53</code></a>
🔖 zbus_xmlgen: Release 5.3.0</li>
<li><a
href="b59017cbe0"><code>b59017c</code></a>
🔖 zb,zm: Release 5.14.0</li>
<li><a
href="7287f27b6d"><code>7287f27</code></a>
🔖 zv,zd: Release 5.10.0</li>
<li><a
href="bd81484eb4"><code>bd81484</code></a>
🤖 release-plz: <code>🚸</code> commits treated as additions</li>
<li><a
href="f0ae963458"><code>f0ae963</code></a>
⬆️ micro: Update quick-xml to v0.39.2 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1724">#1724</a>)</li>
<li><a
href="3e73afb306"><code>3e73afb</code></a>
⬆️ micro: Update syn to v2.0.117 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1723">#1723</a>)</li>
<li><a
href="734d258ed4"><code>734d258</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1721">#1721</a>
from jackpot51/redox</li>
<li><a
href="9e276dd016"><code>9e276dd</code></a>
⬆️ micro: Update clap to v4.5.60 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1722">#1722</a>)</li>
<li><a
href="91e2ae7894"><code>91e2ae7</code></a>
🐛 Do not use SendFlags::NOSIGNAL on Redox</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zvariant_derive-5.9.2...zvariant_derive-5.10.0">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 00:42:34 +00:00
dependabot[bot]
636f110c14 build: bump async-tungstenite from 0.32.1 to 0.33.0 in the tungstenite-related group (#42762)
Bumps the tungstenite-related group with 1 update:
[async-tungstenite](https://github.com/sdroege/async-tungstenite).

Updates `async-tungstenite` from 0.32.1 to 0.33.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sdroege/async-tungstenite/blob/main/CHANGELOG.md">async-tungstenite's
changelog</a>.</em></p>
<blockquote>
<h2>[0.33.0] - 2026-02-20</h2>
<h3>Changed</h3>
<ul>
<li>Update GLib/gio support to version 0.22 of the bindings.</li>
<li>Update MSRV to 1.85.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="faf5ecce65"><code>faf5ecc</code></a>
Update MSRV to 1.85</li>
<li><a
href="fc919693f1"><code>fc91969</code></a>
Release 0.33.0</li>
<li>See full diff in <a
href="https://github.com/sdroege/async-tungstenite/compare/0.32.1...0.33.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-tungstenite&package-manager=cargo&previous-version=0.32.1&new-version=0.33.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-23 00:35:00 +00:00
Taym Haddadi
6fece59b5a Indexeddb: Move IDBFactory to global scope(away from specific globals like window and worker) (#42757)
Move IDBFactory to global scope(away from specific globals like window
and worker)


Testing: no effect on WPT test.
part of https://github.com/servo/servo/issues/40983

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-02-22 23:36:44 +00:00
Kingsley Yung
91c717ccc8 script: Simplify IDL dictionary conversion in SubtleCrypto (#42655)
In `NormalizedAlgorithm::from_object_value`, we use
`dictionary_from_jsval` to convert `HandleValue` into IDL dictionary
types generated by `script_bingings`, and immediately use `From`,
`TryFrom`, `TryFromWithCx` trait implementation to convert them into
webcrypto's subtle dictionary types.

Since our webcrypto implementation doesn't directly use the dictionary
types generated by `script_bingings`, this patch combines the 2 steps of
this conversion into one step, by using `TryFromWithCx` trait
implementation for those dictionaries and moving the
`dictionary_from_jsval` calls into `try_from_with_cx`.

Testing: Refactoring. Existing tests suffice.
Fixes: Preparation for #42579

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-22 23:14:22 +00:00
Simon Wülker
98c63925b6 layout: Create a webrender stacking context for fragments with transform-style: preserve-3d (#42755)
Such elements already establish stacking contexts, but we don't tell
webrender about them.

Two new failures appear, which I believe incorrectly passed before. We
fail because we don't support the concept of a [3D rendering
context](https://drafts.csswg.org/css-transforms-2/#3d-rendering-context).

If I understand correctly then we act as if a 3D rendering context was
the same as a stacking context, but elements in the same stacking
context may use different 3D coordinate systems, see
1903a5a804/css/css-transforms/transform3d-sorting-004.html (L9-L14)
for example.

Fixes https://github.com/servo/servo/issues/30474
Testing: New tests start to pass.

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-22 22:31:24 +00:00
Simon Wülker
742c8f8ef6 script: Don't crash when logging self-referential objects with devtools (#42752)
Testing: This change adds a test
Fixes https://github.com/servo/servo/issues/42742

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-22 22:21:44 +00:00
Tim van der Lippe
f8552ed214 script: Implement remaining query command methods (#42748)
This implements a baseline for these tests. By implementing these dummy
methods, we avoid a lot of test expectation clutter when debugging these
tests to figure out why they aren't passing yet.

For the delete command, since it doesn't have any state or is
indeterminate, we always return the same.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-22 21:35:51 +00:00
Taym Haddadi
1e01b04cc5 FIx Intermittent transaction-scheduling-mixed-scopes test (#42732)
Queue the "complete" event before unblocking later transactions in the
backend. This preserves event ordering for overlapping transactions
created on the same connection.
       
Fixes #42730
Fixes #42718

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-02-22 16:26:25 +00:00
Euclid Ye
27fd7dfa30 webdriver: Check missing params before dispatch scroll action (#42745)
This actually happens at a very early stage:
https://w3c.github.io/webdriver/#dfn-process-a-wheel-action
However, for some reason webdriver crate does not check it for this
particular case.
This PR moves the check to the beginning of dispatch scroll action.

Testing: Added a wdspec test.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-22 13:29:56 +00:00
Sam
43bdd3818d script: Pass &mut JSContext to more dom methods (#42751)
split from https://github.com/servo/servo/pull/42635, some dom methods
are also called from other function, which require passing down cx from
many more places :(

Testing: Just refactor, but should be covered by WPT.
Part of #42638

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-22 13:22:33 +00:00
Euclid Ye
75418e7ace script: Rectify update_active_touch_points_when_early_return (#42733)
- Use `FxHashMap` for `active_pointer_ids`
- Refactor and fix logging message for touch, especially
`update_active_touch_points_when_early_return`
- Randomly fix some typos

Testing: This changes logging message but no other observable
behaviours. The logging should be more accurate, but I didn't test.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-22 13:08:19 +00:00
Tim van der Lippe
039eab4485 wpt: Move exec_command preference to experimental preferences (#42750)
That way, we correctly run it whenever we invoke WPT. This is relevant
for wpt.fyi, where currently we are not seeing any test coverage in the
`/editing` tests. To make tracking of progress possible, it should be
defined in prefs, not in the `.ini` configuration.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-22 10:58:16 +00:00
Tim van der Lippe
c6c29fcd33 script: Implement focus support for contenteditable elements (#42734)
There is no specification for this, but there are relevant
WPT tests in `selection/contenteditable`. This PR implements
the required changes to make sure that when such an element
is focused (programmatically), it selects the correct node.

The implementation is therefore entirely reverse-engineered
based on existing browser behavior and commented to hopefully
make it make sense.

Part of #7492
Part of #12776
Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-22 09:26:15 +00:00
Philipp Albrecht
adee703046 Move run_a_module_script() to GlobalScope (#41459)
Prerequisite for #40365.

Moving `run_a_module_script()` to `GlobalScope` will allow us to execute
module scripts on `WorkerGlobalScope`.

---

Relates to #23308

Signed-off-by: pylbrecht <pylbrecht@mailbox.org>
2026-02-22 09:14:39 +00:00
Servo WPT Sync
c2333e1521 Sync WPT with upstream (22-02-2026) (#42744)
Automated downstream sync of changes from upstream as of 22-02-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-02-22 01:31:52 +00:00
Oriol Brufau
1e7918de60 Move mozjs and egui patching into the right place (#42743)
They need to be under `[patch.crates-io]`. At the previous position,
they wouldn't be patched when e.g. uncommenting the section for patching
Stylo crates.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-21 22:21:47 +00:00
Tim van der Lippe
e505275744 script: Implement queryCommandSupported (#42731)
This method was already present on the document, but
wasn't implemented yet. Note that now more tests are
failing, since before they weren't running. The tests
check if a command is enabled before they started
running.

The selection API doesn't yet take into account
contenteditable containers, which is why these
tests don't consider a command enabled, since the
range of the selection is empty.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-21 20:36:26 +00:00
Kingsley Yung
00a36b27b8 script: Use reflect_dom_object_with_cx in CryptoKey::new (#42738)
Use the new `reflect_dom_object_with_cx` introduced in #42725 in
`CryptoKey::new`.

Testing: Refactoring. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-21 10:57:43 +00:00
Sam
1bf985a92a script: Use reflect_dom_object_with_cx and without proto if possible (#42737)
This was left over from
https://github.com/servo/servo/pull/42725#pullrequestreview-3832117437

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-21 08:44:18 +00:00
aquaThirsty
235dd18b79 fixup: inline CanGc and use CurrentRealm in get_gatt_children (#42735)
Follow-up PR to #42720 (addressing nits by @sagudev)

Testing: It compiles without any errors
Fixes: Part of issue #42638 and PR #42720

Signed-off-by: TimurBora <timurborisov5561@gmail.com>
2026-02-21 05:24:42 +00:00
Tim van der Lippe
32936858df script: Implement canonicalize whitespace (#42704)
What I thought would be a small algorithm turns out required tons of
other implementations of various definitions, most of it around nodes.

Therefore, to keep things manageable, it only implements this algorithm
and relevant parts, but leaves the other parts of the delete command
untouched. For now, it is good if tests keep on working without
crashing. Later, once the full delete command is implemented, more tests
should be passing.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-20 18:42:50 +00:00
Martin Robinson
e7ee1171d8 script: Remove some proprietary Servo-only testing methods from Window (#42728)
These three methods date back from the very early history of Servo and
are no longer necessary:

1. `Window.debug`: `console.log` is a better replacement for this method
   now. A manual test that tests the very basics of JavaScript used
   this. This test is removed as well.
2. `Window.gc`: This can be replaced with `TestUtils.gc`, which is part
    of a W3C specification.
3. `Window.js_backtrace`: This method is moved to `ServoTestUtils`.

Testing: Tests are updated to reflect these changes.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-20 17:32:34 +00:00
Sam
f69ee078d2 script: Add reflect_dom_object_with_cx (#42725)
Just to complement existing with_proto method introduced in #42699.

Justification for arg ordering: reflect_dom_* have arguments reversed,
so first one is Box (the most important) then global, proto and lastly
cx.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-20 16:19:15 +00:00
Sam
9f1e5d084e script: Pass &mut JSContext in FetchResponseListener::process_response_eof (#42729)
`process_response_eof` is the only method that needs cx at least right
now. This PR removes one temp_cx and introduces one, removing that one
will is hard (needs VirtualMethods and a lot of work)

Testing: Just refactor
Part of #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-20 16:03:21 +00:00
Taym Haddadi
0bc3b61a74 indexeddb: propagate legacy didThrow from version-change event dispatch (#42669)
indexeddb: propagate legacy didThrow from version-change event dispatch

Testing: fire-upgradeneeded-event-exception.any.js,
upgrade-transaction-deactivation-timing.any.js are passing.

depends on https://github.com/servo/servo/pull/41508

part of https://github.com/servo/servo/issues/40983

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-02-20 15:50:46 +00:00
Luke Warlow
853fcf4fda script: Introduce ServoTestUtils and a forceLayout() function (#42714)
This introduces a new `ServoTestUtils` namespace with a `forceLayout()`
function. This `forceLayout()` function returns an object which
currently has an array of the phases ran by layout. Also moves
`panic()`, `crashHard()` and `advanceClock()` from `TestBinding` to this
new namespace.  `TestBinding` is meant to test the bindings generation,
but these are more generic helpers for Servo-only tests.

Testing: This change adds a series of Servo-only tests that verify the
behavior of the new `forceLayout()` function. Tests that rely on the
moved interfaces are updated and should continue to pass.

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-20 13:00:06 +00:00
Kingsley Yung
b6f714c73d script: Pass &mut JSContext to methods of SubtleCrypto (#42726)
This patch changes the methods of `SubtleCrypto` to use the new `&mut
JSContext` and `&mut CurrentRealm`, Those methods are `Encrypt`,
`Decrypt`, `Sign`, `Verify`, `GenerateKey`, `DeriveKey`, `DeriveBits`,
`Digest`, `ImportKey`, `ExportKey`, `WrapKey`, `UnwrapKey`,
`EncapsulateKey`, `EncapsulateBits`, `DecapsulateKey`,
`DecapsulateBits`.

The change also propagate to the all internal methods within the
`subtlecrypto` module.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #42638

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-20 11:18:29 +00:00
Aki
58994df9c9 script: Use decode_with_bom_removal for UTF-8 decoding in Blob, Worker, and Module (#42265)
This PR replaces decode with decode_with_bom_removal when decoding UTF-8
text in several places. Some UTF-8 files start with a BOM (Byte Order
Mark). The specification says this should be removed when decoding.
decode_with_bom_removal does this correctly, so this change makes the
behavior more spec-compliant.

Testing: The project builds successfully.
Fixes: #42239

---------

Signed-off-by: lunlunsan <210350985+lunlunsan@users.noreply.github.com>
Signed-off-by: act2510akitake <210350985+act2510akitake@users.noreply.github.com>
Signed-off-by: Aki <210350985+act2510akitake@users.noreply.github.com>
Signed-off-by: act2510akitake <210350985+act2510akitake@users.noreply.github.com.>
Co-authored-by: lunlunsan <210350985+lunlunsan@users.noreply.github.com>
Co-authored-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-20 10:47:43 +00:00
Euclid Ye
e98e4c9d30 script: Use touchstart element as event target for touchmove/touchend/touchcancel (#42654)
[Spec](https://w3c.github.io/touch-events/#dfn-touchend:~:text=screen%2E-,The,element,-%2E)
for touchmove/touchend/touchcancel:
> The target of this event must be the same Element on which the [touch
point](https://w3c.github.io/touch-events/#dfn-touch-point) started when
it was first placed on the surface, even if the [touch
point](https://w3c.github.io/touch-events/#dfn-touch-point) has since
moved outside the interactive area of the target element.

Also, previously `touchend` can be fired after `touchcancel`, which was
wrong and fixed in this PR.

Testing: Fully passes `/touch-events/multi-touch-interfaces.html` (511
subtests) and new passes in
`pointerevents\compat\pointerevent_touch_target_after_pointerdown_target_removed.tentative.html`.

We also take the chance to update `pointercancel` related tests
introduced in https://github.com/servo/servo/pull/41937: `touchcancel`
should not be followed by `touchend` according to
[spec](https://w3c.github.io/touch-events/#dfn-touchcancel).

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-20 09:42:43 +00:00
aquaThirsty
47bd830c8b script/dom/bluetooth: Move to &mut js::context::JSContext (#42720)
Move from `InRealm` to `&mut CurrentRealm` and from `CanGc` to `&mut
js::context::JSContext`

Testing: `/mach build`, `/mach test-unit` and `/mach test-tidy`
Fixes: Part of #42638

Signed-off-by: TimurBora <timurborisov5561@gmail.com>
2026-02-20 08:25:14 +00:00
shuppy
c07682f222 libservo: Allow the embedder to activate accessibility (#42336)
this patch adds a Servo::set_accessibility_active() method that
embedders can use to tell Servo to start building and sending
accessibility trees to the platform, as long as the pref is enabled
(#42333). doing so sets a global flag in the constellation, which is
then propagated to the layout of all existing and future pipelines.

Testing: none yet, no functional change
Fixes: part of #4344

---------

Signed-off-by: delan azabani <dazabani@igalia.com>
Signed-off-by: Alice Boxhall <alice@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-02-20 05:56:15 +00:00
dependabot[bot]
e400c5a632 build: bump werkzeug from 3.1.5 to 3.1.6 (#42723)
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 3.1.5 to
3.1.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/werkzeug/releases">werkzeug's
releases</a>.</em></p>
<blockquote>
<h2>3.1.6</h2>
<p>This is the Werkzeug 3.1.6 security fix release, which fixes a
security issue but does not otherwise change behavior and should not
result in breaking changes compared to the latest feature release.</p>
<p>PyPI: <a
href="https://pypi.org/project/Werkzeug/3.1.6/">https://pypi.org/project/Werkzeug/3.1.6/</a>
Changes: <a
href="https://werkzeug.palletsprojects.com/page/changes/#version-3-1-6">https://werkzeug.palletsprojects.com/page/changes/#version-3-1-6</a></p>
<ul>
<li><code>safe_join</code> on Windows does not allow special devices
names in multi-segment paths. <a
href="https://github.com/pallets/werkzeug/security/advisories/GHSA-29vq-49wr-vm6x">GHSA-29vq-49wr-vm6x</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/werkzeug/blob/main/CHANGES.rst">werkzeug's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.6</h2>
<p>Released 2026-02-19</p>
<ul>
<li><code>safe_join</code> on Windows does not allow special devices
names in
multi-segment paths. :ghsa:<code>29vq-49wr-vm6x</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="04da1b5221"><code>04da1b5</code></a>
release version 3.1.6</li>
<li><a
href="f407712fdc"><code>f407712</code></a>
Merge commit from fork</li>
<li><a
href="f54fe98026"><code>f54fe98</code></a>
safe_join prevents Windows special device names in multi-segment
paths</li>
<li><a
href="d005985ef6"><code>d005985</code></a>
start version 3.1.6</li>
<li><a
href="8565c2cbd6"><code>8565c2c</code></a>
document rule priority (<a
href="https://redirect.github.com/pallets/werkzeug/issues/3102">#3102</a>)</li>
<li><a
href="3febc7e900"><code>3febc7e</code></a>
document rule priority</li>
<li><a
href="2525b82764"><code>2525b82</code></a>
remove state machine docs</li>
<li><a
href="4abfbd553c"><code>4abfbd5</code></a>
rewrite build docstring (<a
href="https://redirect.github.com/pallets/werkzeug/issues/3097">#3097</a>)</li>
<li><a
href="161c18b2a8"><code>161c18b</code></a>
rewrite build docstring</li>
<li><a
href="86e11c29e4"><code>86e11c2</code></a>
release version 3.1.5 (<a
href="https://redirect.github.com/pallets/werkzeug/issues/3085">#3085</a>)</li>
<li>See full diff in <a
href="https://github.com/pallets/werkzeug/compare/3.1.5...3.1.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=werkzeug&package-manager=uv&previous-version=3.1.5&new-version=3.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-20 04:11:31 +00:00
Alice
2ca69d3576 Bump accesskit version and patch egui to use updated accesskit (#42402)
We need to bump the accesskit version in order to use
[subtrees](https://docs.rs/accesskit/latest/accesskit/struct.Node.html#method.tree_id),
which are required to join the servo tree into the embedder tree.
We need to patch egui for servoshell, as we're waiting for them to land
the patch bumping their version of accesskit.
Once https://github.com/emilk/egui/pull/7850 lands and a new version of
egui is pushed out, we'll be able to remove the patch.

Testing: No tests.
Fixes: Part of #4344

Signed-off-by: Alice Boxhall <alice@igalia.com>
2026-02-20 03:01:44 +00:00
Ashwin Naren
c056f9b08e indexeddb: Report memory usage (#42486)
Reports memory usage, including partial sqlite3 memory usage stats for
the sqlite3 engine.

Testing: Manual
2026-02-19 21:00:51 +00:00
Oriol Brufau
4b76780972 build(deps): bump Stylo to "Merge stylo_config crate into stylo_static_prefs" (#42605)
Bumps Stylo to https://github.com/servo/stylo/pull/312

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-19 16:59:03 +00:00
Narfinger
ab4b0ab384 prefs: Add rustdoc for Preferences::session_history_max_size (#42701)
Add a comment to the preference session_history_max_size that explains
the current behavi

Testing: Comments do not have tests.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-19 15:54:49 +00:00
Martin Robinson
042d95220a layout: Replace dirty root approach with flexible box tree layout (#42700)
Replace the old dirty root box tree layout approach with one that works
based on independent formatting contexts. Instead of just allowing a
single dirty root to be the source of box tree reconstruction, allow box
tree reconstruction to happen anywhere in the tree that can isolate box
tree damage from ancestors. This essentially combines damage propagation
and box tree construction into a single step.

There is currently one downside to this approach compared to the dirty
root approach which is that we currently cannot detect and start box
tree layout when the dirty has a compatible `display` and `position`
value. This can mean the scope of box tree layout extends further up the
tree. We will address this in a followup -- but have not noticed any
major performance implications (currently fragment tree layout is much
more expensive than box tree layout).

Benefits:
 1. Damage propagation now only happens under the dirty root.
 2. Future changes can limit the scope of damage up the tree and perhaps
    preserve the inline content size cache between box tree rebuilds.

Testing: This should not change behavior in a testable way (we currently
do
not have robust performance tests), so WPT test results should not
change.

---------

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-19 14:31:13 +00:00
Taym Haddadi
590ae85779 Indexeddb: transaction lifecycle (#41508)
Indexeddb: transaction lifecycle

Testing: more Indexeddb test should pass
part of #40983

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-02-19 11:05:33 +00:00
Sam
3cde83447e script: always let cx = &mut cx in codegen and support cx in Constructor (#42712)
#42681 did not actually allowed using cx in Constructor, but it did most
heavy lifting. Now we need to pass cx to Constructor call (and skip
CanGc) if cx is requested in Bindings.conf. This PR also test this on
testbindings.

Also we now always use `let cx = &mut cx`, so we can always use just cx
(compiler will automatically deref it into &cx if needed). This is
important because codegen stuff is called from many places to it make
sense/easier to just unify this.

Testing: It compiles

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-19 08:57:40 +00:00
Narfinger
00fa5d3088 devtools: Allow specifiying an address to listen to and default to localhost (#42502)
Previously we listened to 0.0.0.0. which means any connection coming to
a specific port. That seems a bit ill advised as not everybody has a
good firewall setup. Now we default listen only on 127.0.0.1 but
optionally can describe a full SocketAddr such as "192.168.1.23:1234".

Side note: Cleaned up the ipc-channel syntax.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Currently we don't have an automatic way to test this. Manually
run devtools and it connects.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-19 03:24:56 +00:00
Narfinger
07b120e0d0 etc: Add script to vendor all dependencies, modify the toml and create an archive (#42507)
This adds a simple script to vendor all the dependencies and creating a
servo.tar.gz archive that should build without downloading.
Note: `./mach bootstrap` is still assumed to have been run to setup the
build environment.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: I tested the creation of the archive.
This is the first part of #40189

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Co-authored-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-19 03:21:21 +00:00
Narfinger
9610c3b3bd CI: Ohos add screenshot for bencher failure (#42598)
Currently we have spurious errors in various bencher runs. This updates
hitrace-bench and the workflow to save a screenshot if this happens.


Testing: CI does not have automatic tests but here is a run without the
error, proving at least that this does not break the normal workflow.
https://github.com/Narfinger/servo/actions/runs/21987493140/job/63526108222

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-19 02:50:32 +00:00
dependabot[bot]
d7b097d89b build: bump async-compression from 0.4.39 to 0.4.40 (#42710)
Bumps
[async-compression](https://github.com/Nullus157/async-compression) from
0.4.39 to 0.4.40.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9d848a02f1"><code>9d848a0</code></a>
chore: release (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/452">#452</a>)</li>
<li><a
href="9df508b037"><code>9df508b</code></a>
Fix update of bytes read in the encoder state machine. (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/456">#456</a>)</li>
<li><a
href="0370b470db"><code>0370b47</code></a>
Stop consuming input on errors in codecs. (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/451">#451</a>)</li>
<li><a
href="9a4b0961f9"><code>9a4b096</code></a>
chore(deps): update rand requirement from 0.9 to 0.10 (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/449">#449</a>)</li>
<li>See full diff in <a
href="https://github.com/Nullus157/async-compression/compare/async-compression-v0.4.39...async-compression-v0.4.40">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-compression&package-manager=cargo&previous-version=0.4.39&new-version=0.4.40)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-19 01:03:16 +00:00
dependabot[bot]
0ac113e5fa build: bump aws-lc-rs from 1.15.4 to 1.16.0 (#42708)
Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.15.4 to
1.16.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs  v1.16.0</h2>
<h2>What's Changed</h2>
<ul>
<li>MSRV bumped to 1.71.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1035">aws/aws-lc-rs#1035</a></li>
<li>aws-lc-sys v0.37.1 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1036">aws/aws-lc-rs#1036</a></li>
<li>Deterministic seed-based key generation for ML-DSA
(<code>PqdsaKeyPair::from_seed</code>) per FIPS 204 by <a
href="https://github.com/LatticeArc-Founder"><code>@​LatticeArc-Founder</code></a>
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1034">aws/aws-lc-rs#1034</a></li>
<li><code>DecapsulationKey</code> serialization support for ML-KEM by <a
href="https://github.com/LatticeArc-Founder"><code>@​LatticeArc-Founder</code></a>
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1029">aws/aws-lc-rs#1029</a></li>
<li>Improved testability: <code>unsealed::SecureRandom</code> and
agreement key generation for testing by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1021">aws/aws-lc-rs#1021</a></li>
<li>Updated <a href="https://aws.github.io/aws-lc-rs/index.html">User
Guide</a> by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1041">aws/aws-lc-rs#1041</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Add Clang support on Windows by <a
href="https://github.com/aminya"><code>@​aminya</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1032">aws/aws-lc-rs#1032</a></li>
<li>Support cranelift backend on Windows by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1030">aws/aws-lc-rs#1030</a></li>
<li>Fix support for OpenWrt; respect
<code>TARGET_CC</code>/<code>TARGET_CXX</code>/<code>TARGET_CFLAGS</code>
env vars by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1026">aws/aws-lc-rs#1026</a></li>
<li>Skip memcmp check for cross-compilation by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1037">aws/aws-lc-rs#1037</a></li>
</ul>
<h3>Issues Being Closed</h3>
<ul>
<li>Clang compilation fails on Windows -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1031">aws/aws-lc-rs#1031</a></li>
<li>Unable to build w/ rustc_codegen_cranelift compiler backend (on
Windows) -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/537">aws/aws-lc-rs#537</a></li>
<li>OpenWrt cross-compilation fails -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1009">aws/aws-lc-rs#1009</a></li>
<li>Respect <code>TARGET_CC</code> over <code>CC</code> for
cross-compilation -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1025">aws/aws-lc-rs#1025</a></li>
<li>Provide unsealed SecureRandom for testing -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1020">aws/aws-lc-rs#1020</a></li>
<li>ML-KEM DecapsulationKey serialization -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/799">aws/aws-lc-rs#799</a></li>
<li>Large performance regression 1.14.0 -&gt; 1.14.1 -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/899">aws/aws-lc-rs#899</a></li>
<li>Request: Update the User Guide to mention more *nix systems -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/643">aws/aws-lc-rs#643</a></li>
</ul>
<h2>Other Merged PRs</h2>
<ul>
<li>Prepare v1.16.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1046">aws/aws-lc-rs#1046</a></li>
<li>Update criterion dependency by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1039">aws/aws-lc-rs#1039</a></li>
<li>Speedup CI completion by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1040">aws/aws-lc-rs#1040</a></li>
<li>Enable CI for mips64-unknown-linux-muslabi64 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1017">aws/aws-lc-rs#1017</a></li>
<li>Fix rustls integ test by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1019">aws/aws-lc-rs#1019</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/LatticeArc-Founder"><code>@​LatticeArc-Founder</code></a>
made their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1034">aws/aws-lc-rs#1034</a></li>
<li><a href="https://github.com/aminya"><code>@​aminya</code></a> made
their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1032">aws/aws-lc-rs#1032</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.4...v1.16.0">https://github.com/aws/aws-lc-rs/compare/v1.15.4...v1.16.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="198d9bab79"><code>198d9ba</code></a>
Prepare v1.16.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1046">#1046</a>)</li>
<li><a
href="3be1c0f26b"><code>3be1c0f</code></a>
Update documentation (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1041">#1041</a>)</li>
<li><a
href="1dd30ab4d6"><code>1dd30ab</code></a>
Speedup CI completion (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1040">#1040</a>)</li>
<li><a
href="a357198f8f"><code>a357198</code></a>
feat(pqdsa): Add deterministic seed-based key generation for ML-DSA (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1034">#1034</a>)</li>
<li><a
href="9dc08af38f"><code>9dc08af</code></a>
Update criterion dependency (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1039">#1039</a>)</li>
<li><a
href="a8cac6622a"><code>a8cac66</code></a>
Bump aws-lc-sys to v0.37.1 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1036">#1036</a>)</li>
<li><a
href="dd434425fa"><code>dd43442</code></a>
skip memcmp_invalid_stripped_check for cross-compilation (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1037">#1037</a>)</li>
<li><a
href="8530f18793"><code>8530f18</code></a>
Bump MSRV to 1.71.0; Fix rustls integration - webpki (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1035">#1035</a>)</li>
<li><a
href="fcec9cd4ae"><code>fcec9cd</code></a>
Improve Testability: <code>unsealed::SecureRandom</code> and agreement
(<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1021">#1021</a>)</li>
<li><a
href="819879d30a"><code>819879d</code></a>
Support cranelift backend on Windows (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1030">#1030</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.4...v1.16.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.15.4&new-version=1.16.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-19 00:43:56 +00:00
dependabot[bot]
46d6355dc8 build: bump bumpalo from 3.19.1 to 3.20.1 (#42707)
Bumps [bumpalo](https://github.com/fitzgen/bumpalo) from 3.19.1 to
3.20.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/fitzgen/bumpalo/blob/main/CHANGELOG.md">bumpalo's
changelog</a>.</em></p>
<blockquote>
<h2>3.20.1</h2>
<p>Released 2026-02-18.</p>
<h3>Fixed</h3>
<ul>
<li>Restored <code>Send</code> and <code>Sync</code> implementations for
<code>Box&lt;T&gt;</code> when <code>T: Send</code> and <code>T:
Sync</code> respectively.</li>
</ul>
<hr />
<h2>3.20.0</h2>
<p>Released 2026-02-18.</p>
<h3>Added</h3>
<ul>
<li>Added the <code>bumpalo::collections::Vec::pop_if</code>
method.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fixed a bug in the <code>bumpalo::collections::String::retain</code>
method in the face
of panics.</li>
<li>Made <code>bumpalo::collections::Box&lt;T&gt;</code> covariant with
<code>T</code> (just like
<code>std::boxed::Box&lt;T&gt;</code>).</li>
</ul>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7c8d1f3870"><code>7c8d1f3</code></a>
Bump to 3.20.1 (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/310">#310</a>)</li>
<li><a
href="e06b36ba0c"><code>e06b36b</code></a>
Restore Send and Sync for Box (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/309">#309</a>)</li>
<li><a
href="cb7f03318f"><code>cb7f033</code></a>
Bump to 3.20.0 (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/307">#307</a>)</li>
<li><a
href="d97d31cdc5"><code>d97d31c</code></a>
Make box covariant (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/304">#304</a>)</li>
<li><a
href="f9256f785d"><code>f9256f7</code></a>
Pin quickcheck (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/306">#306</a>)</li>
<li><a
href="a006efb3a1"><code>a006efb</code></a>
Fix String::retain panic safety yielding invalid UTF-8 (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/302">#302</a>)</li>
<li><a
href="96ba386514"><code>96ba386</code></a>
Add pop_if() to Vec (<a
href="https://redirect.github.com/fitzgen/bumpalo/issues/301">#301</a>)</li>
<li>See full diff in <a
href="https://github.com/fitzgen/bumpalo/compare/v3.19.1...v3.20.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bumpalo&package-manager=cargo&previous-version=3.19.1&new-version=3.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-19 00:37:50 +00:00
Narfinger
0271df14d3 constellation: Session cleanup use iterator chain (#42703)
Small possible performance increase to use iterator chaining instead of
allocating and extending the vector.

Testing: This is equal behavior so it does not need a test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-18 16:13:20 +00:00
Sam
366f34d4a3 script: Introduce reflect_dom_object_with_proto_and_cx and use it in 2d canvas (#42699)
Testing: Should be covered by WPT tests.
Part of #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-18 12:07:11 +00:00
Asset Malik
4b49510cf8 etc: Fix blink_perf_test's parsing and output for ci compatability (#42367)
This PR fixes the blink_perf_test_runner's issues with parsing in
* flexbox-lots-of-data.html
* nested-blocks-with-percent-height-and-max-height.html
And also changes `results.json` values from str to float to be
compatible with bencher.dev format

Testing: run `uv run etc/blink-perf-test-runner/main.py -w 13002
./target/production/servo` to get results.json

---------

Signed-off-by: janeoa <5373400+janeoa@users.noreply.github.com>
Signed-off-by: jane <5373400+janeoa@users.noreply.github.com>
2026-02-18 11:21:24 +00:00
atbrakhi
3c8c46d32f devtools: implement pause and resume in debugger (#42580)
When a breakpoint is hit, the script thread now pauses execution and
notifies devtools clients with a "paused" event. The script
thread enters a loop that processes devtools messages until
a Resume command is received.

This change does not implement manual pause

Testing: Added new test
Fixes: part of https://github.com/servo/servo/issues/36027




https://github.com/user-attachments/assets/c619db20-4579-4f77-aa60-0e43e6e7e575

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-18 10:08:46 +00:00
dependabot[bot]
b000770490 build: bump libc from 0.2.181 to 0.2.182 (#42697)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.181 to 0.2.182.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.182</h2>
<h3>Added</h3>
<ul>
<li>Android, Linux: Add <code>tgkill</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4970">#4970</a>)</li>
<li>Redox: Add <code>RENAME_NOREPLACE</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4968">#4968</a>)</li>
<li>Redox: Add <code>renameat2</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4968">#4968</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.182/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.181...0.2.182">0.2.182</a>
- 2026-02-13</h2>
<h3>Added</h3>
<ul>
<li>Android, Linux: Add <code>tgkill</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4970">#4970</a>)</li>
<li>Redox: Add <code>RENAME_NOREPLACE</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4968">#4968</a>)</li>
<li>Redox: Add <code>renameat2</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4968">#4968</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e879ee90b6"><code>e879ee9</code></a>
chore: Release libc 0.2.182</li>
<li><a
href="2efe72f4da"><code>2efe72f</code></a>
remove copyright year in LICENSE-MIT</li>
<li><a
href="634bc4e66e"><code>634bc4e</code></a>
ci: Update the list of tested and documented targets</li>
<li><a
href="d7aa109ab5"><code>d7aa109</code></a>
Revert &quot;Disable hexagon-unknown-linux-musl testing for
now&quot;</li>
<li><a
href="14e2f5641e"><code>14e2f56</code></a>
Revert &quot;ci: Skip hexagon-unknown-linux-musl&quot;</li>
<li><a
href="b7807c369b"><code>b7807c3</code></a>
Revert &quot;aix: Temporarily skip checking powerpc64-ibm-aix
builds&quot;</li>
<li><a
href="abe93a0bfe"><code>abe93a0</code></a>
feat(linux): add <code>tgkill</code> for Linux and Android</li>
<li><a
href="25f7dde943"><code>25f7dde</code></a>
feat(redox): add <code>RENAME_NOREPLACE</code></li>
<li><a
href="4b4ce4f220"><code>4b4ce4f</code></a>
feat(redox): add <code>renameat2</code></li>
<li><a
href="ab8c36c493"><code>ab8c36c</code></a>
build(deps): bump vmactions/solaris-vm from 1.2.8 to 1.3.0</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.181...0.2.182">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.181&new-version=0.2.182)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 09:24:10 +00:00
Martin Robinson
a753fbb26a layout: Preserve fragment tree layout caches in clean subtrees (#42687)
Instead of clearing the fragment tree layout cache in a clean subtree of
a node that needs a new fragment, preserve caches when crossing
(roughly) independent formatting context boundaries [^1]. This should
allow layout to preserve more fragments when, for instance, a node
changes size, but its children do not.

[^1]: Currently things like table cells and captions do not do this.
Support for these will be added gradually.

Testing: This should not change behavior in a testable way, but should
result in less work done during layout.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-18 09:02:27 +00:00
Martin Robinson
8fe9c2dd49 script: Gracefully handle lack of threadpool in ElementStylesheetLoader (#42685)
If the number of layout threads is set to 1, then there sometimes is no
style thread pool. Instead of panicking in this case, we should just run
the code in question on the main thread with no thread pool. This fixes
a crash when `-y 1` is passed to servoshell.

Testing: This fixes a crash, but we currently do not run any automated
tests
with a single layout thread.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-18 09:02:08 +00:00
Narfinger
6e05bf89ad ohos CI: Ignore certificate errors for hitrace-bencher (#42683)
Currently the bencher tests for harmonyos have a suspiciously low ram
usage. However, Scenario tests and speedometer work.
The most likely explanation is that we forgot to add the certificate
while switching hitrace-bencher to use mitmproxy.
Hence, we add the flag.

Testing: This does not have an automatic test but manually testing shows
that we will have the certificate errors otherwise.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-18 08:36:01 +00:00
Euclid Ye
9079c0a9e0 deps-bot: Add futures-rs group (#42694)
This is a foundational repo from rust-lang. Things should get bumped
together.
Otherwise you would see #42645, #42646, #42648, #42673 at same time.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-18 07:48:36 +00:00
Domenico Rizzo
24f2303811 script: Defers GPUComputePipeline drop to a helper struct (#42690)
Moves the drop implementation for `GPUComputePipeline` to a separate
`DroppableGPUComputePipeline` struct.

Removes `allowDropImpl` from the bindings configuration.

Testing: No tests added because of webgpu tests existent coverage
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-02-18 04:22:50 +00:00
dependabot[bot]
24175fdbee build: bump unicode-ident from 1.0.23 to 1.0.24 (#42693)
Bumps [unicode-ident](https://github.com/dtolnay/unicode-ident) from
1.0.23 to 1.0.24.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/unicode-ident/releases">unicode-ident's
releases</a>.</em></p>
<blockquote>
<h2>1.0.24</h2>
<ul>
<li>Compress trie even further by 1.9% using bipartite matching (<a
href="https://redirect.github.com/dtolnay/unicode-ident/issues/46">#46</a>,
thanks <a
href="https://github.com/yongqli"><code>@​yongqli</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5b54a63270"><code>5b54a63</code></a>
Release 1.0.24</li>
<li><a
href="e55318f8fb"><code>e55318f</code></a>
Ignore unwrap_or_default clippy lint</li>
<li><a
href="51554021d2"><code>5155402</code></a>
Touch up PR 46</li>
<li><a
href="57872e39a4"><code>57872e3</code></a>
Wrap PR 46 comments to 80 columns</li>
<li><a
href="98ccaf88b9"><code>98ccaf8</code></a>
Format PR 46 with rustfmt</li>
<li><a
href="e0549d6ef6"><code>e0549d6</code></a>
Ignore items_after_statements pedantic clippy lint</li>
<li><a
href="73d7aaa3f0"><code>73d7aaa</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/unicode-ident/issues/46">#46</a>
from yongqli/master</li>
<li><a
href="5aed8996ef"><code>5aed899</code></a>
Replace greedy half-chunk compression with optimal bipartite
matching</li>
<li>See full diff in <a
href="https://github.com/dtolnay/unicode-ident/compare/1.0.23...1.0.24">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=unicode-ident&package-manager=cargo&previous-version=1.0.23&new-version=1.0.24)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 00:53:43 +00:00
dependabot[bot]
fe02b04904 build: bump ml-kem from 0.2.2 to 0.2.3 (#42692)
Bumps [ml-kem](https://github.com/RustCrypto/KEMs) from 0.2.2 to 0.2.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="72dbb072b7"><code>72dbb07</code></a>
ml-kem v0.2.3</li>
<li>See full diff in <a
href="https://github.com/RustCrypto/KEMs/compare/ml-kem/v0.2.2...ml-kem/v0.2.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ml-kem&package-manager=cargo&previous-version=0.2.2&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-18 00:32:43 +00:00
aquaThirsty
87ff2021a2 script: Turn scrollParent into a function and change wpt tests (#42689)
Turn `scrollParent` into a function as the CSSWG resolved in
https://github.com/w3c/csswg-drafts/issues/12731#issuecomment-3885728833

Testing: updating wpt tests
`tests/wpt/tests/css/cssom-view/scrollParent.html` and
`tests/wpt/tests/css/cssom-view/scrollParent-shadow-tree.html`
Fixes: #42547

Signed-off-by: TimurBora <timurborisov5561@gmail.com>
2026-02-17 21:21:12 +00:00
Narfinger
0c623f5281 pixels: Avoid unnecessary clone (#42684)
We do not need to clone the vector just to clone it again for an
GenericSharedMemory to take it.

In real life tests this copy can take up to 30% of the
`webrender_image_descriptor_and_data_for_frame` function.


Testing: This does not change functionality and just reorders the
allocation.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-17 16:47:37 +00:00
Narfinger
45eb43c1a7 canvas: Change canvas to use JSContext instead of CanGc (#42662)
This changes the methods in dom/canvas to use the new JSContext/&mut
JSContext instead of CanGc.

Part of https://github.com/servo/servo/issues/40600

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: This is a refactor, hence, compilation is the test.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-17 16:12:01 +00:00
Gae24
e2e93a214a script: remove unused code inside globalscope.rs (#42686)
- `resolved_module_set_mut()` was replaced by
`add_module_to_resolved_module_set`
- `send_to_constellation()`, all code use
`script_to_constellation_chan()` and optionally handle errors
- `from_object_maybe_wrapped` one usage was removed in #36966, not clear
if that was the only one or more were removed later on

Testing: A successful build is enough
Part of #40882

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-17 16:08:54 +00:00
Gae24
09bb43ed8d script: check if resolved module specifier starts with the specifier of the imported maps (#42668)
After debugging some of the failing tests, it appears spec text is
wrong.
Inside [merge existing and new import
maps](https://html.spec.whatwg.org/multipage/#merge-existing-and-new-import-maps)
algorithm, when checking which imports needs to be ignored,
specification will check if each _specifier_ of _newImportMap's imports_
will override any specifier of [resolved module
set](https://html.spec.whatwg.org/multipage/#resolved-module-set), by
checking if specifier starts with `record.specifier`.

Since each specifier gets normalized before they are inserted in the
resolved module set, the are cases where the check fails and we end up
overriding a module resolution.

This was an oversight, since for _newImportMap's scopes_ specification
performs the right check:
`specifierKey is a code unit prefix of record's specifier;`

Testing: More tests are now passing
Part of #37553

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-17 14:07:03 +00:00
Gae24
8a3738dc43 script: pass down &mut JSContext in post_connection_steps (#42679)
Pass down `&mut JSContext` in `post_connection_steps` 

Testing: No functionality change, a successful build is enough
Part of #40600

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-17 13:20:52 +00:00
Tim van der Lippe
92e2d00083 script: Implement check for supported and enabled commands (#42634)
The first step of `execCommand` commands is to figure out
if they are supported and enabled. Therefore, implement
these two pieces with only 1 command: delete.

The implementation of `delete` is currently mostly dummy,
to have at least something going. But the main part of
this change is to setup the infrastructure to figure out
when commands are supported and enabled.

For the first part, its simply the list of commands we
currently have implemented, which is only delete.

For the second part, we need to consider the active range
of the current selection and do various checks, as well as
check the presence of `contenteditable`.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-17 13:19:41 +00:00
Sam
f623081537 script: Pass &mut JSContext to Constructor and Wrap (#42681)
Testing: Just refactor, but should be covered by WPT
Part of #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-17 13:15:24 +00:00
Simon Wülker
a60f9370c7 devtools: Apply attribute modifications in the inspector to the DOM tree (#42601)
The inspector view allows modifying the attributes of DOM elements.
However, we lie to the devtools client: While it looks like the
attributes change, the changes are never actually applied to the DOM.

This change fixes that, and also makes it so attribute modifications
from non-inspector sources are shown in the inspector.

Testing: This change adds two tests

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-17 13:05:41 +00:00
Euclid Ye
cad0ded8b3 deps: Deduplicate futures, disable features & improve consistency (#42678)
- Remove deps on `futures@0.1.31`. Update deny
- Remove `compat` features of futures. This is not used anywhere and
introduces duplication.
- Move deps to root. Fix weird field like `futures = { version = "0.3",
package = "futures" }`. Use 0.3 instead of minor version as recommended
by
[README](https://github.com/rust-lang/futures-rs/tree/master/futures-executor#readme)
- Use workspace version for sha2
- Update `futures` & `futures-executor` to 0.3.32
- Disable default features of `futures`: this decreases binary size by
12KB in release.

Testing: Existing UT.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-17 08:19:00 +00:00
Keerti Gupta this side!!
a1e269675d mach: enable type checking for etc/ci python files (#42659)
This enables type checking for Python files under etc/ci by adding
etc/ci/*.py to pyrefly's project-includes in pyproject.toml.

Enabling these checks surfaced a few type issues, which are addressed
here :

a) Use text=True in subprocess usage to avoid bytes/str mismatches
b) Remove unnecessary encode/decode calls
c) Guard against None stdout in chaos_monkey_test.py
d) Suppress unresolved optional imports in upload_nightly.py
    (runtime dependencies declared via uv script metadata)

After these changes, ./mach test-tidy passes successfully locally.

Fixes: #42653

Signed-off-by: Keerti Gupta <24bsm032@iiitdmj.ac.in>
2026-02-17 07:13:39 +00:00
Tim van der Lippe
e413d45982 script: Move ImportScripts to &mut JSContext (#42665)
Part of #42638

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-17 05:37:59 +00:00
Tim van der Lippe
3665659dbe script: Move attribute-related methods to &mut JSContext (#42667)
Part of #42638

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-17 05:36:38 +00:00
dependabot[bot]
c4572a6d8f build: bump clap from 4.5.58 to 4.5.59 (#42672)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.58 to 4.5.59.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.59</h2>
<h2>[4.5.59] - 2026-02-16</h2>
<h3>Fixes</h3>
<ul>
<li><code>Command::ignore_errors</code> no longer masks help/version on
subcommands</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.59] - 2026-02-16</h2>
<h3>Fixes</h3>
<ul>
<li><code>Command::ignore_errors</code> no longer masks help/version on
subcommands</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0bb3ad7e12"><code>0bb3ad7</code></a>
chore: Release</li>
<li><a
href="5cb5ce3873"><code>5cb5ce3</code></a>
docs: Update changelog</li>
<li><a
href="245c8ba75a"><code>245c8ba</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6149">#6149</a>
from epage/wrap</li>
<li><a
href="dd17a418a9"><code>dd17a41</code></a>
fix(help): Correctly calculate wrap points with ANSI escape codes</li>
<li><a
href="2cc4e350b9"><code>2cc4e35</code></a>
test(ui): Avoid override term width</li>
<li><a
href="93e3559b1e"><code>93e3559</code></a>
refactor(help): Clarify that we're carrying over indentation</li>
<li><a
href="b1c46e633c"><code>b1c46e6</code></a>
refactor(help): Clarify var name</li>
<li><a
href="03b9b38df0"><code>03b9b38</code></a>
test(help): Show styled wrapping behavior</li>
<li><a
href="c9a39a534c"><code>c9a39a5</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6146">#6146</a>
from clap-rs/renovate/actions-checkout-5.x</li>
<li><a
href="58599fb7bf"><code>58599fb</code></a>
chore(deps): Update actions/checkout action to v5</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.58...clap_complete-v4.5.59">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.58&new-version=4.5.59)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 03:35:59 +00:00
dependabot[bot]
452cceeb76 build: bump bitflags from 2.10.0 to 2.11.0 (#42676)
Bumps [bitflags](https://github.com/bitflags/bitflags) from 2.10.0 to
2.11.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/bitflags/bitflags/releases">bitflags's
releases</a>.</em></p>
<blockquote>
<h2>2.11.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix use of Result in macro output by <a
href="https://github.com/james7132"><code>@​james7132</code></a> in <a
href="https://redirect.github.com/bitflags/bitflags/pull/462">bitflags/bitflags#462</a></li>
<li>Add methods to get the known/unknown bits from a flags value by <a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a>
in <a
href="https://redirect.github.com/bitflags/bitflags/pull/473">bitflags/bitflags#473</a></li>
<li>Prepare for 2.11.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/bitflags/bitflags/pull/474">bitflags/bitflags#474</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/james7132"><code>@​james7132</code></a>
made their first contribution in <a
href="https://redirect.github.com/bitflags/bitflags/pull/462">bitflags/bitflags#462</a></li>
<li><a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a>
made their first contribution in <a
href="https://redirect.github.com/bitflags/bitflags/pull/473">bitflags/bitflags#473</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/bitflags/bitflags/compare/2.10.0...2.11.0">https://github.com/bitflags/bitflags/compare/2.10.0...2.11.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md">bitflags's
changelog</a>.</em></p>
<blockquote>
<h1>2.11.0</h1>
<h2>What's Changed</h2>
<ul>
<li>Fix use of Result in macro output by <a
href="https://github.com/james7132"><code>@​james7132</code></a> in <a
href="https://redirect.github.com/bitflags/bitflags/pull/462">bitflags/bitflags#462</a></li>
<li>Add methods to get the known/unknown bits from a flags value by <a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a>
in <a
href="https://redirect.github.com/bitflags/bitflags/pull/473">bitflags/bitflags#473</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/james7132"><code>@​james7132</code></a>
made their first contribution in <a
href="https://redirect.github.com/bitflags/bitflags/pull/462">bitflags/bitflags#462</a></li>
<li><a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a>
made their first contribution in <a
href="https://redirect.github.com/bitflags/bitflags/pull/473">bitflags/bitflags#473</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/bitflags/bitflags/compare/2.10.0...2.11.0">https://github.com/bitflags/bitflags/compare/2.10.0...2.11.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="60c6a72743"><code>60c6a72</code></a>
Merge pull request <a
href="https://redirect.github.com/bitflags/bitflags/issues/474">#474</a>
from bitflags/cargo/2.11.0</li>
<li><a
href="79f4c050c5"><code>79f4c05</code></a>
prepare for 2.11.0 release</li>
<li><a
href="81d5fac0f2"><code>81d5fac</code></a>
Merge pull request <a
href="https://redirect.github.com/bitflags/bitflags/issues/473">#473</a>
from WaterWhisperer/feat/get-unknown-bits</li>
<li><a
href="a1c40f0c52"><code>a1c40f0</code></a>
Fix clippy error</li>
<li><a
href="b5d15b6878"><code>b5d15b6</code></a>
Add tests</li>
<li><a
href="2041dc3ceb"><code>2041dc3</code></a>
Add methods to get the known/unknown bits from a flags value</li>
<li><a
href="90488e522d"><code>90488e5</code></a>
Merge pull request <a
href="https://redirect.github.com/bitflags/bitflags/issues/462">#462</a>
from james7132/serde_core</li>
<li><a
href="bc3c4fa8a0"><code>bc3c4fa</code></a>
Use serde_core instead of serde</li>
<li>See full diff in <a
href="https://github.com/bitflags/bitflags/compare/2.10.0...2.11.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bitflags&package-manager=cargo&previous-version=2.10.0&new-version=2.11.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 01:10:05 +00:00
dependabot[bot]
6d88122508 build: bump memmap2 from 0.9.9 to 0.9.10 (#42675)
Bumps [memmap2](https://github.com/RazrFalcon/memmap2-rs) from 0.9.9 to
0.9.10.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/RazrFalcon/memmap2-rs/blob/master/CHANGELOG.md">memmap2's
changelog</a>.</em></p>
<blockquote>
<h2>[0.9.10] - 2026-02-15</h2>
<h3>Fixed</h3>
<ul>
<li>Fix compilation on AIX targets.
<a
href="https://github.com/xingxue-ibm"><code>@​xingxue-ibm</code></a></li>
</ul>
<h3>Changed</h3>
<ul>
<li>Return <code>ErrorKind::Unsupported</code> on unsupported platforms
to allow reliable runtime detection.
<a href="https://github.com/daxpedda"><code>@​daxpedda</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1f0196ab31"><code>1f0196a</code></a>
Merge pull request <a
href="https://redirect.github.com/RazrFalcon/memmap2-rs/issues/163">#163</a>
from RazrFalcon/release/v0.9.10</li>
<li><a
href="341bc13e04"><code>341bc13</code></a>
Bump version to 0.9.10.</li>
<li><a
href="01273a7c4a"><code>01273a7</code></a>
Merge pull request <a
href="https://redirect.github.com/RazrFalcon/memmap2-rs/issues/161">#161</a>
from daxpedda/stable-unsupported</li>
<li><a
href="b51beb58c9"><code>b51beb5</code></a>
Address review</li>
<li><a
href="8de56f3579"><code>8de56f3</code></a>
Return <code>ErrorKind::Unsupported</code> from stub implementation</li>
<li><a
href="a36f67f764"><code>a36f67f</code></a>
Merge pull request <a
href="https://redirect.github.com/RazrFalcon/memmap2-rs/issues/159">#159</a>
from xingxue-ibm/fix-madvise</li>
<li><a
href="d2054a2c92"><code>d2054a2</code></a>
Cast the 'addr' argument of 'madvise()' to match the AIX function
signature i...</li>
<li>See full diff in <a
href="https://github.com/RazrFalcon/memmap2-rs/compare/v0.9.9...v0.9.10">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=memmap2&package-manager=cargo&previous-version=0.9.9&new-version=0.9.10)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 00:58:04 +00:00
dependabot[bot]
dcf00b3ccb build: bump security-framework from 3.5.1 to 3.6.0 (#42674)
Bumps
[security-framework](https://github.com/kornelski/rust-security-framework)
from 3.5.1 to 3.6.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="265c53be73"><code>265c53b</code></a>
Bye, Intel</li>
<li><a
href="03bbc73bfc"><code>03bbc73</code></a>
Bump</li>
<li><a
href="e801003645"><code>e801003</code></a>
Mark macOS-only APIs</li>
<li><a
href="7ef06e4f5d"><code>7ef06e4</code></a>
Support accessRef in SecItemImport</li>
<li><a
href="bc2a966f04"><code>bc2a966</code></a>
Support explicit pkcs12 format in SecItemImport</li>
<li><a
href="13e63a8766"><code>13e63a8</code></a>
Bump</li>
<li><a
href="8e9258ad0e"><code>8e9258a</code></a>
Real non_exhaustive</li>
<li><a
href="c2d848c215"><code>c2d848c</code></a>
Fewer casts</li>
<li><a
href="b030081246"><code>b030081</code></a>
Use match ergonomics</li>
<li><a
href="3f8a8f12fe"><code>3f8a8f1</code></a>
Simplify shared ImportedIdentity</li>
<li>Additional commits viewable in <a
href="https://github.com/kornelski/rust-security-framework/compare/v3.5.1...v3.6.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=security-framework&package-manager=cargo&previous-version=3.5.1&new-version=3.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 00:51:14 +00:00
dependabot[bot]
ef8ca71323 build: bump toml_parser from 1.0.8+spec-1.1.0 to 1.0.9+spec-1.1.0 (#42671)
Bumps [toml_parser](https://github.com/toml-rs/toml) from
1.0.8+spec-1.1.0 to 1.0.9+spec-1.1.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="500b26979f"><code>500b269</code></a>
chore: Release</li>
<li><a
href="daeba3e10b"><code>daeba3e</code></a>
docs: Update changelog</li>
<li><a
href="0f40c40b0c"><code>0f40c40</code></a>
fix(parser): Report errors for <code>-_1</code> (<a
href="https://redirect.github.com/toml-rs/toml/issues/1104">#1104</a>)</li>
<li><a
href="447b05c964"><code>447b05c</code></a>
fix(parser): Report errors for <code>-_1</code></li>
<li><a
href="5a7b742018"><code>5a7b742</code></a>
fix(parser): Improve error location for digit sep after prefix</li>
<li><a
href="5c978e57be"><code>5c978e5</code></a>
refactor(parser): Improve consistency in error calcs</li>
<li><a
href="8a3c0b029f"><code>8a3c0b0</code></a>
fix(parser): Be consistent about digit sep error</li>
<li><a
href="3e63bc4a2e"><code>3e63bc4</code></a>
test(parser): Check different digit separator cases</li>
<li>See full diff in <a
href="https://github.com/toml-rs/toml/compare/toml_parser-v1.0.8...toml_parser-v1.0.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=toml_parser&package-manager=cargo&previous-version=1.0.8+spec-1.1.0&new-version=1.0.9+spec-1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-17 00:33:29 +00:00
Sam
97990a2615 webgl: correctly handle corner case of active texture (the one at MAX_COMBINED_TEXTURE_IMAGE_UNITS) (#42660)
#42639 was actually the real issue, just solved less ideally. Instead of
doing negative checks, which are easy to go wrong like before, we know
do positive check which is more clear IMO. Because counting of units is
0-based, we need to not include upper limit.

WebGL spec is a mess, so I will rather link this MDN:
https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/activeTexture#exceptions

Testing: Added test to WebGL CTS:
https://github.com/KhronosGroup/WebGL/pull/3757, live at:
https://sagudev.github.io/WebGL/sdk/tests/conformance/textures/misc/texture-active-bind.html
Fixes: #42639

Co-authored-by: Weixie Cui <cuiweixie@gmail.com>

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-16 18:58:39 +00:00
Alice
00e07a6736 Bump rust version to 1.92.0 (#42661)
This is a prerequisite for using the new version of egui introduced in
https://github.com/servo/servo/pull/42402.

Testing: No new behaviour.

Signed-off-by: Alice Boxhall <alice@igalia.com>
2026-02-16 18:58:15 +00:00
Tim van der Lippe
e23c14aabd script: Implement support for contenteditable (#42633)
This is required for `document.execCommand`, since it needs to check the
active range of the selection whether it has the attribute or not.

It also turns on the relevant WPT tests, with 1
pre-existing failure for absolute positioned pseudo elements. These
currently do not render correctly, regardless of the existence of
contenteditable.

Fixes #12776

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-16 18:55:42 +00:00
Martin Robinson
6842da5f5b script: Use the Weak<ScriptThread> reference for tracing instead of thread-local storage (#42657)
This changes makes it so that tracing accesses the `ScriptThread` via a
weak reference set on the `Runtime` rather than thread local storage.
The idea is to use TLS less and less as time goes on. This is done by
creating a new data structure that holds all the data that is necessary
for SpiderMonkey callbacks in the `ScriptThread`.

Testing: This should not change behavior in a way that is observable
via testing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-16 14:45:55 +00:00
TIN TUN AUNG
97f0cb29b7 stylo: Treat empty css url string as invalid (#42622)
Parallel Servo PR for https://github.com/servo/stylo/pull/313

Testing: two wpt tests start passing.

Signed-off-by: rayguo17 <tin.tun.aung1@huawei.com>
2026-02-16 14:19:43 +00:00
Shubham Gupta
3d18f331db layout: Consider border-image contentful for first-contentful-paint (#42581)
We have test for border-image with svg. Adding this with png

Testing: `wpt/tests/paint-timing/fcp-only/fcp-border-image.html`
Fixes: #42618

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-16 12:38:55 +00:00
Martin Robinson
59f2325ff1 layout: Clear all node damage during damage traversal (#42600)
Instead of waiting until the box tree construction phase of layout to
clear node damage, clear it during the damage traversal. This means that
damage is cleared in the same way in all types of situations, which
simplifies the code and will make it easier to implement future
optimizations.

Testing: This should not really change behavior (other than being
marginally more
efficient when there is a dirty root), so existing tests should suffice.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-16 11:11:02 +00:00
Domenico Rizzo
8a16d8ca7d script: Refactors GPUComputePassEncoder to manage drop logic (#42656)
Moves the drop logic for `GPUComputePassEncoder` to a separate
`DroppableGPUComputePassEncoder` struct.

Testing: Tests that coverages webgpu just exist
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-02-16 11:10:27 +00:00
Gae24
c13d8a2eff script: Start using &mut JSContext in devtools and webdriver code (#42640)
This is a first step to compile scripts using `&mut JSContext`.

Testing: Refactor, covered by existing WPT tests.
Part of #40600

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-16 08:32:08 +00:00
dependabot[bot]
9ff1173166 build: bump cc from 1.2.55 to 1.2.56 (#42649)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.55 to 1.2.56.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.56</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1676">#1676</a>)</li>
<li>Fix <code>clang-cl</code> target when cross-compiling (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1670">#1670</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.55...cc-v1.2.56">1.2.56</a>
- 2026-02-13</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1676">#1676</a>)</li>
<li>Fix <code>clang-cl</code> target when cross-compiling (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1670">#1670</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="709c27f9aa"><code>709c27f</code></a>
chore(cc): release v1.2.56 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1677">#1677</a>)</li>
<li><a
href="743f2c9f7f"><code>743f2c9</code></a>
Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1676">#1676</a>)</li>
<li><a
href="9eda981969"><code>9eda981</code></a>
Fix <code>clang-cl</code> target when cross-compiling (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1670">#1670</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.55...cc-v1.2.56">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.55&new-version=1.2.56)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 03:13:50 +00:00
dependabot[bot]
22a1e758d4 build: bump uuid from 1.20.0 to 1.21.0 (#42651)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.20.0 to 1.21.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.21.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Update getrandom to 0.4 by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/858">uuid-rs/uuid#858</a></li>
<li>feat: impl core::error::Error for Error by <a
href="https://github.com/XAMPPRocky"><code>@​XAMPPRocky</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/852">uuid-rs/uuid#852</a></li>
<li>Prepare for 1.21.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/859">uuid-rs/uuid#859</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/XAMPPRocky"><code>@​XAMPPRocky</code></a> made
their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/852">uuid-rs/uuid#852</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.20.0...v1.21.0">https://github.com/uuid-rs/uuid/compare/v1.20.0...v1.21.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a38fa19b3d"><code>a38fa19</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/859">#859</a> from
uuid-rs/cargo/v1.21.0</li>
<li><a
href="e45b10fbc5"><code>e45b10f</code></a>
prepare for 1.21.0 release</li>
<li><a
href="f6f5d48273"><code>f6f5d48</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/852">#852</a> from
XAMPPRocky/main</li>
<li><a
href="9bee4bd565"><code>9bee4bd</code></a>
Merge branch 'main' into main</li>
<li><a
href="cb8f156391"><code>cb8f156</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/858">#858</a> from
uuid-rs/chore/getrandom-04</li>
<li><a
href="a59c061243"><code>a59c061</code></a>
bump msrv to 1.85.0 for getrandom</li>
<li><a
href="b9a31578fa"><code>b9a3157</code></a>
bump msrv to 1.81.0</li>
<li><a
href="2a0a7a3117"><code>2a0a7a3</code></a>
force an earlier nightly for miri</li>
<li><a
href="a6e0aa10da"><code>a6e0aa1</code></a>
update rand to 0.10</li>
<li><a
href="576d47bc63"><code>576d47b</code></a>
update getrandom to 0.4</li>
<li>Additional commits viewable in <a
href="https://github.com/uuid-rs/uuid/compare/v1.20.0...v1.21.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.20.0&new-version=1.21.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 01:30:05 +00:00
dependabot[bot]
56425bf372 build: bump async-executor from 1.13.3 to 1.14.0 (#42650)
Bumps [async-executor](https://github.com/smol-rs/async-executor) from
1.13.3 to 1.14.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/async-executor/releases">async-executor's
releases</a>.</em></p>
<blockquote>
<h2>v1.14.0</h2>
<ul>
<li>Bump MSRV to 1.65. (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/146">#146</a>)</li>
<li>Fix docs.rs build. (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/152">#152</a>)</li>
<li>Upstreaming parts of the Hermit <code>no_std</code> patchset:
<ul>
<li>Use <code>Self</code> where possible (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/155">#155</a>)</li>
<li>Import items from <code>core</code> and <code>alloc</code> if
possible (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/160">#160</a>)</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/smol-rs/async-executor/blob/master/CHANGELOG.md">async-executor's
changelog</a>.</em></p>
<blockquote>
<h1>Version 1.14.0</h1>
<ul>
<li>Bump MSRV to 1.65. (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/146">#146</a>)</li>
<li>Fix docs.rs build. (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/152">#152</a>)</li>
<li>Upstreaming parts of the Hermit <code>no_std</code> patchset:
<ul>
<li>Use <code>Self</code> where possible (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/155">#155</a>)</li>
<li>Import items from <code>core</code> and <code>alloc</code> if
possible (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/160">#160</a>)</li>
</ul>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="543403e773"><code>543403e</code></a>
Release 1.14.0</li>
<li><a
href="071235715a"><code>0712357</code></a>
chore: add <code>use Box</code> (for no-std compatibility)</li>
<li><a
href="150ca2238b"><code>150ca22</code></a>
refactor: import items from core and alloc if possible</li>
<li><a
href="cc6941ac53"><code>cc6941a</code></a>
refactor: return <code>Self</code></li>
<li><a
href="47d7f7a6dc"><code>47d7f7a</code></a>
Merge pull request <a
href="https://redirect.github.com/smol-rs/async-executor/issues/154">#154</a>
from smol-rs/dependabot/cargo/criterion-0.8</li>
<li><a
href="86bcbf839b"><code>86bcbf8</code></a>
Update criterion requirement from 0.7 to 0.8</li>
<li><a
href="b0f396c8e5"><code>b0f396c</code></a>
Fix failing docs build (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/152">#152</a>)</li>
<li><a
href="c10412c6c7"><code>c10412c</code></a>
Pin an Executor's State to minimize atomic operations. (<a
href="https://redirect.github.com/smol-rs/async-executor/issues/146">#146</a>)</li>
<li>See full diff in <a
href="https://github.com/smol-rs/async-executor/compare/v1.13.3...v1.14.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-executor&package-manager=cargo&previous-version=1.13.3&new-version=1.14.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 00:58:56 +00:00
dependabot[bot]
e079718b62 build: bump futures-util from 0.3.31 to 0.3.32 (#42647)
Bumps [futures-util](https://github.com/rust-lang/futures-rs) from
0.3.31 to 0.3.32.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/releases">futures-util's
releases</a>.</em></p>
<blockquote>
<h2>0.3.32</h2>
<ul>
<li>Bump MSRV of utility crates to 1.71. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2989">#2989</a>)</li>
<li>Soft-deprecate <code>ready!</code> macro in favor of
<code>std::task::ready!</code> added in Rust 1.64 (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>)</li>
<li>Soft-deprecate <code>pin_mut!</code> macro in favor of
<code>std::pin::pin!</code> added in Rust 1.68 (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li>
<li>Add <code>FuturesOrdered::clear</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2927">#2927</a>)</li>
<li>Add <code>mpsc::*Receiver::recv</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2947">#2947</a>)</li>
<li>Add <code>mpsc::*Receiver::try_recv</code> and deprecate
<code>mpsc::*Receiver::::try_next</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2944">#2944</a>)</li>
<li>Implement <code>FusedStream</code> for <code>sink::With</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2948">#2948</a>)</li>
<li>Add <code>no_std</code> support for <code>shared</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2868">#2868</a>)</li>
<li>Make <code>Mutex::new()</code> const (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li>
<li>Add <code>#[clippy::has_significant_drop]</code> to guards (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li>
<li>Remove dependency to <code>pin-utils</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li>
<li>Remove dependency on <code>num_cpus</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2946">#2946</a>)</li>
<li>Performance improvements (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li>
<li>Documentation improvements (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2926">#2926</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2940">#2940</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md">futures-util's
changelog</a>.</em></p>
<blockquote>
<h1>0.3.32 - 2026-02-15</h1>
<ul>
<li>Bump MSRV of utility crates to 1.71. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2989">#2989</a>)</li>
<li>Soft-deprecate <code>ready!</code> macro in favor of
<code>std::task::ready!</code> added in Rust 1.64 (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>)</li>
<li>Soft-deprecate <code>pin_mut!</code> macro in favor of
<code>std::pin::pin!</code> added in Rust 1.68 (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li>
<li>Add <code>FuturesOrdered::clear</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2927">#2927</a>)</li>
<li>Add <code>mpsc::*Receiver::recv</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2947">#2947</a>)</li>
<li>Add <code>mpsc::*Receiver::try_recv</code> and deprecate
<code>mpsc::*Receiver::::try_next</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2944">#2944</a>)</li>
<li>Implement <code>FusedStream</code> for <code>sink::With</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2948">#2948</a>)</li>
<li>Add <code>no_std</code> support for <code>shared</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2868">#2868</a>)</li>
<li>Make <code>Mutex::new()</code> const (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li>
<li>Add <code>#[clippy::has_significant_drop]</code> to guards (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li>
<li>Remove dependency to <code>pin-utils</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2929">#2929</a>)</li>
<li>Remove dependency on <code>num_cpus</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2946">#2946</a>)</li>
<li>Performance improvements (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li>
<li>Documentation improvements (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2925">#2925</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2926">#2926</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2940">#2940</a>,
<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d9bba94c23"><code>d9bba94</code></a>
Release 0.3.32</li>
<li><a
href="151e0b90de"><code>151e0b9</code></a>
Add comments on rust-version field in Cargo.toml</li>
<li><a
href="4aaf00c351"><code>4aaf00c</code></a>
Bump MSRV of utility crates to 1.71</li>
<li><a
href="a4cce12c55"><code>a4cce12</code></a>
perf: improve AtomicWaker::wake performance (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2983">#2983</a>)</li>
<li><a
href="ba9d102ca6"><code>ba9d102</code></a>
Add <code>#[clippy::has_significant_drop]</code> to guards (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2967">#2967</a>)</li>
<li><a
href="20396a83ef"><code>20396a8</code></a>
Fix rustdoc::broken_intra_doc_links warning</li>
<li><a
href="815f6eb4e4"><code>815f6eb</code></a>
Fix documentation of <code>BiLock::lock</code> (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2971">#2971</a>)</li>
<li><a
href="0f0db0421d"><code>0f0db04</code></a>
futures-util: make <code>Mutex::new()</code> const (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2956">#2956</a>)</li>
<li><a
href="5d6fc5e408"><code>5d6fc5e</code></a>
ci: Test big-endian target (s390x Linux)</li>
<li><a
href="9f739fe40b"><code>9f739fe</code></a>
Ignore dead_code lint on Fn1 trait</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/futures-rs/compare/0.3.31...0.3.32">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=futures-util&package-manager=cargo&previous-version=0.3.31&new-version=0.3.32)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 00:50:45 +00:00
dependabot[bot]
a6f83efec6 build: bump arc-swap from 1.8.1 to 1.8.2 (#42644)
Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.8.1 to
1.8.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md">arc-swap's
changelog</a>.</em></p>
<blockquote>
<h1>1.8.2</h1>
<ul>
<li>Proper gate of <code>Pin</code> (since 1.39 - we are not using only
<code>Pin</code>, but also
<code>Pin::into_inner</code>, <a
href="https://redirect.github.com/vorner/arc-swap/issues/197">#197</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="19f0d661a2"><code>19f0d66</code></a>
Version 1.8.2</li>
<li>See full diff in <a
href="https://github.com/vorner/arc-swap/compare/v1.8.1...v1.8.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arc-swap&package-manager=cargo&previous-version=1.8.1&new-version=1.8.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 00:29:22 +00:00
dependabot[bot]
02d1606ca5 build: bump syn from 2.0.115 to 2.0.116 (#42643)
Bumps [syn](https://github.com/dtolnay/syn) from 2.0.115 to 2.0.116.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.116</h2>
<ul>
<li>Optimize parse_fn_arg_or_variadic for less lookahead on erroneous
receiver (<a
href="https://redirect.github.com/dtolnay/syn/issues/1968">#1968</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a62e54a48b"><code>a62e54a</code></a>
Release 2.0.116</li>
<li><a
href="5a8ed9f32e"><code>5a8ed9f</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1968">#1968</a>
from dtolnay/receiver</li>
<li><a
href="813afcc773"><code>813afcc</code></a>
Optimize parse_fn_arg_or_variadic for less lookahead on erroneous
receiver</li>
<li><a
href="c172150113"><code>c172150</code></a>
Add regression test for issue 1718</li>
<li><a
href="0071ab367c"><code>0071ab3</code></a>
Ignore type_complexity clippy lint</li>
<li>See full diff in <a
href="https://github.com/dtolnay/syn/compare/2.0.115...2.0.116">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=syn&package-manager=cargo&previous-version=2.0.115&new-version=2.0.116)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-16 00:24:25 +00:00
Sam
3283fcfb3d script: Move CSSStyleSheetMethods to &mut JSContext (#42637)
Demonstrate how to change some methods:
- [from `InRealm` to `&mut
CurrentRealm`](0132fc0fbe)
- [from `CanGc` to `&mut
JSContext`](36e5b32ee1)

Testing: Just refactor, should be covered by WPT.
Part of #40600

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-15 15:30:27 +00:00
Tim van der Lippe
2eeaf05af9 script: Check trusted types for execCommand (#42626)
We should only do this for the `insertHTML` command.
All other commands are unaffected.

Part of #25005

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-15 12:55:05 +00:00
Gae24
4f1f128307 script: ensure resolve_module_specifier picks the most specific scope (#42630)
According to
[specification](https://html.spec.whatwg.org/multipage/#the-resolution-algorithm)
when resolving a module specifier we should prioritize more specific
scopes, we achieve it by sorting the scopes in descending order.

Testing: A test is now passing
Part of #37553

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-15 09:42:44 +00:00
Euclid Ye
16f9f7500e webdriver: Retrieve viewport size in CSS pixel (#42628)
According to
[spec](https://w3c.github.io/webdriver/#ref-for-dfn-move-target-out-of-bounds-2:~:text=the%20viewport%20in%20CSS%20pixels),
we are supposed to retrieve viewport size in CSS pixel.

This is a critical step when performing scroll/pointermove, to stop
invalid actions that happen outside viewport.

Testing: Tested with tests in headed mode manually, narrowing
discrepancy between headed/headless mode. Should not have effect on
automated tests in CI.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-15 07:55:08 +00:00
Servo WPT Sync
9b6b9ccd2e Sync WPT with upstream (15-02-2026) (#42627)
Automated downstream sync of changes from upstream as of 15-02-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-02-15 07:12:51 +00:00
Tim van der Lippe
ae390d8bf8 script: Add baseline for editing/ WPT tests (#42621)
In preparation of the actual implementation.

Also had to update the codegen to be able to handle default values for
DOMString.

Part of #25005

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-14 20:36:49 +00:00
Sam
e7c35d5445 script: &mut JSContext in native functions and make them safer (#42619)
Testing: Just refactor, should be covered by WPT
Part of #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-14 12:11:14 +00:00
Gae24
49adfed9a8 script: implement resolve_a_module_integrity_metadata (#42604)
`ImportMap` _integrity_ entry was practically unused, since it is only
needed for [resolving a module integrity
metadata](https://html.spec.whatwg.org/multipage/#resolving-a-module-integrity-metadata).
Now, we correctly initialize `ScriptFetchOptions` when loading a
module's descendants.
I slightly modified `nonimport-integrity.html` test to run
`modulepreload` test cases at the end. Since we haven't an
implementation for it, the test timeout, making the test cases that
comes after them not run.

Testing: More tests start passing
Part of #37553

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-14 10:26:49 +00:00
Shubham Gupta
ebcb92d6c1 layout: Simply check of non-zero bounding rect for contentful_paint (#42617)
Use helper function to evaluate non-zero bounding rect size 

Testing: Existing WPT Tests Passed. No change in behaviour.

Signed-off-by: Shubham Gupta <shubham13297@gmail.com>
2026-02-14 10:05:13 +00:00
Sam
62ae12b6a5 script: Pass &mut JSContext to timers, abort controller, some transfers and some streams (#42616)
I just wanted to do abort signal, but then this happend.

Testing: Just refactor, should be covered by WPT tests
Part of #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-14 10:03:25 +00:00
dependabot[bot]
42d208ab92 build: bump toml_parser from 1.0.7+spec-1.1.0 to 1.0.8+spec-1.1.0 (#42611)
Bumps [toml_parser](https://github.com/toml-rs/toml) from
1.0.7+spec-1.1.0 to 1.0.8+spec-1.1.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="767747fe1a"><code>767747f</code></a>
chore: Release</li>
<li><a
href="c68aa8705c"><code>c68aa87</code></a>
fix(parser): Plug another whole in synthetic events (<a
href="https://redirect.github.com/toml-rs/toml/issues/1102">#1102</a>)</li>
<li><a
href="17dc3ddbc5"><code>17dc3dd</code></a>
fix(parser): Plug another whole in synthetic events</li>
<li><a
href="0f32a02fc8"><code>0f32a02</code></a>
test(parse): Add another test case</li>
<li><a
href="9fef741aa7"><code>9fef741</code></a>
docs: Update changelog</li>
<li><a
href="3c596112ef"><code>3c59611</code></a>
fix(edit): Remove panics on bad input (<a
href="https://redirect.github.com/toml-rs/toml/issues/1101">#1101</a>)</li>
<li><a
href="796812017d"><code>7968120</code></a>
fix(edit): On missing value, ensure a span is used</li>
<li><a
href="b91d460cc8"><code>b91d460</code></a>
fix(edit): Don't panic on inline table keys without values</li>
<li><a
href="c8087a6bc6"><code>c8087a6</code></a>
fix(parser): Improve unclosed array messages</li>
<li><a
href="f0a47d4a1f"><code>f0a47d4</code></a>
fix(parser): Improve unclosed inline table messages</li>
<li>Additional commits viewable in <a
href="https://github.com/toml-rs/toml/compare/toml_parser-v1.0.7...toml_parser-v1.0.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=toml_parser&package-manager=cargo&previous-version=1.0.7+spec-1.1.0&new-version=1.0.8+spec-1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-14 01:10:11 +00:00
dependabot[bot]
8bd60f3b37 build: bump security-framework-sys from 2.15.0 to 2.16.0 (#42612)
Bumps
[security-framework-sys](https://github.com/kornelski/rust-security-framework)
from 2.15.0 to 2.16.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/kornelski/rust-security-framework/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=security-framework-sys&package-manager=cargo&previous-version=2.15.0&new-version=2.16.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-14 01:06:14 +00:00
dependabot[bot]
3a0bb1acd5 build: bump zmij from 1.0.20 to 1.0.21 (#42613)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.20 to 1.0.21.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6531ba31cc"><code>6531ba3</code></a>
Release 1.0.21</li>
<li><a
href="ec5058e88d"><code>ec5058e</code></a>
Sync to vitaut/zmij@b35b64a</li>
<li><a
href="968821350f"><code>9688213</code></a>
Restore support for rustc older than 1.83</li>
<li><a
href="1daaf0c258"><code>1daaf0c</code></a>
Sync to vitaut/zmij@f59cbcf</li>
<li><a
href="afc76e9c2c"><code>afc76e9</code></a>
Pin CI miri to nightly-2026-02-11</li>
<li><a
href="3812b15cd4"><code>3812b15</code></a>
Sync to vitaut/zmij@e458b55</li>
<li>See full diff in <a
href="https://github.com/dtolnay/zmij/compare/1.0.20...1.0.21">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.20&new-version=1.0.21)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-14 00:53:18 +00:00
dependabot[bot]
01058ae371 build: bump jiff from 0.2.19 to 0.2.20 (#42610)
Bumps [jiff](https://github.com/BurntSushi/jiff) from 0.2.19 to 0.2.20.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md">jiff's
changelog</a>.</em></p>
<blockquote>
<h1>0.2.20 (2026-02-11)</h1>
<p>This release contains a major internal refactor that moves off of
using ranged
integers internally. There are also some small bug fixes and added
support for
finding the system time zone on emscripten targets.</p>
<p>Enhancements:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/11">#11</a>:
Stop using ranged integers internally.</li>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/490">#490</a>:
Add support for retrieving the system time zone on emscripten
targets.</li>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/500">#500</a>:
Update comparison with the <code>time</code> crate in the Jiff
documentation.</li>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/502">#502</a>:
Enable some non-default features for the Rust Playground
deployment.</li>
</ul>
<p>Bug fixes:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/485">#485</a>:
Fix bug with padding for negative integers in
<code>strftime</code>.</li>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/486">#486</a>:
Make <code>%^c</code> result in uppercase strings where
appropriate.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="76f2a9eb65"><code>76f2a9e</code></a>
0.2.20</li>
<li><a
href="28e9b16485"><code>28e9b16</code></a>
changelog: 0.2.20</li>
<li><a
href="1e492c8428"><code>1e492c8</code></a>
strtime: fix padding with negative values in strftime</li>
<li><a
href="0cfd63b4f7"><code>0cfd63b</code></a>
strtime: apply uppercase flag to compound specifiers</li>
<li><a
href="7ed75bf197"><code>7ed75bf</code></a>
docs: tighten up the MSRV policy</li>
<li><a
href="b6977a12f2"><code>b6977a1</code></a>
examples: add program demonstrating Diesel footgun with `TIMESTAMP
WITHOUT TI...</li>
<li><a
href="b303488ae9"><code>b303488</code></a>
readme: update note about Jiff 1.0</li>
<li><a
href="e9e07b700a"><code>e9e07b7</code></a>
tz: add support for <code>emscripten</code> system timezone</li>
<li><a
href="4c33013130"><code>4c33013</code></a>
cargo: remove <code>js</code> feature from Playground metadata</li>
<li><a
href="2a884b8424"><code>2a884b8</code></a>
ci: tweak msrv build</li>
<li>Additional commits viewable in <a
href="https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.19...jiff-static-0.2.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jiff&package-manager=cargo&previous-version=0.2.19&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-14 00:46:23 +00:00
Oriol Brufau
63858e868e build(deps): bump keccak from 0.1.5 to 0.1.6 (#42607)
Version 0.1.5 has been yanked.

This unblocks CI.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-13 23:44:56 +00:00
Oriol Brufau
2b8f5e95b9 build(deps): bump Stylo to "Allow the embedder to override all preferences" (#42491)
Bumps Stylo to servo/stylo#309

Testing: no behavior change, though this will allow Servo to override
Stylo preferences in the future.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-13 18:10:53 +00:00
Shubham Gupta
01bb13ee99 layout: Consider image backgrounds as contentful for the first-contentful-paint paint metric (#42569)
As per W3C [spec](https://www.w3.org/TR/paint-timing/#sec-terminology)

> An [element](https://dom.spec.whatwg.org/#concept-element) target is
contentful when one or more of the following apply:
> - target has a
[background-image](https://www.w3.org/TR/css-backgrounds-3/#propdef-background-image)
which is a [contentful
image](https://www.w3.org/TR/paint-timing/#contentful-image), and its
[used](https://www.w3.org/TR/css-cascade-5/#used-value)
[background-size](https://www.w3.org/TR/css-backgrounds-3/#background-size)
has non-zero width and height values.

Testing: Updated WPT Expectations
Fixes: #42568

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-13 17:41:14 +00:00
Martin Robinson
150f767b19 layout: Store a fallback cache in the FontGroup (#42466)
Store a list of recently used fallbacks in the `FontGroups`, keyed by
`lang` property and the detected `UnicodeBlock` and `Script` of the
character in question. This should mean that less work is done when
switching between falling back and not falling back. In addition, this
will allow better caching of `FontRef`s that come directly from the
platform font backend -- something necessary for the next generation
font fallback code.

Testing: This should not change rendering output so is covered by
existing
tests. It might have a minor affect on performance.
Fixes: This is part of #41426.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-13 17:01:41 +00:00
Simon Wülker
53ffdda2a1 devtools: Properly handle opening and closing client connections (#42583)
Both the `DevtoolsInstance` and the `BrowsingContextActor` maintain a
list of live connections. When a new global is created, its
`BrowsingContextActor` copies the list of active connections from the
`DevtoolsInstance`. When a client handler thread exits, the
`BrowsingContextActor`s remove the connection from their list of
connections.

This has two implications:
* `BrowsingContextActor`s don't know about connections that are created
after they were constructed, causing them to possibly incorrectly tell
script that it doesn't need to send devtools updates anymore
* the `DevtoolsInstance` never notices when connections are closed and
panics when writing to them.

To fix this, I've removed the list of connections from the
`BrowsingContextActor` and adjusted the logic to notify script when
updates aren't needed anymore accordingly.

For some reason, our tests always open two connections and close the
first one immediately, which is how I found this bug in the first place.

Part of https://github.com/servo/servo/issues/42454 - previously
d5d400c7d6/components/script/dom/globalscope.rs (L240-L242)
was always false during our tests.

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-13 14:39:47 +00:00
Martin Robinson
0c182904f5 layout: Clear dirty box tree nodes during damage traversal (#42596)
Instead of keeping dirty box tree nodes around after the damage
traversal, clear them readily (like `display: none` nodes). This
simplifies the logic during box tree reconstruction and also prepares
the damage traversal for future work.

In addition, restructure the logic of the damage traversal to make it a
bit easier to follow.

Testing: This shouldn't change observable behavior so should be covered
by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-13 13:43:13 +00:00
Kingsley Yung
ca9652df3c script: Remove unused trait implementation in subtlecrypto.rs (#42597)
After commit 4539c7e, we no longer use `From<NormalizedAlgorithm>` trait
implementation for `SubtleAlgorithm` and `KeyAlgorithmAndDerivatives`.
We can remove these unused code.

Testing: Cleaning up. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-13 13:16:46 +00:00
Narfinger
0634e53437 OHOS: reverse bump HarmonyOS version number (#42595)
It turns out the HarmonyOS version numbers can be confusing. This now
puts it as the same as the OpenHarmony version numbers.
As the SDKs are backwards compatible everything should still work with
newer SDKs.

Testing: CI will test compilation and installation and manually tested
by me.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-13 08:44:30 +00:00
Shubham Gupta
53bef8e484 layout: Only mark contentful for non-zero bounding rect (#42178)
Check for non-zero width and height values for marking contentful.

Testing: Existing WPT Tests Passed
Fixes: #42592

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-13 08:39:33 +00:00
Shubham Gupta
0c2962e2c2 layout: Introduce PaintTimingHandler (#42541)
This PR aims to open doors for common handler for all `PaintTiming`
protocols.
Will add more logic related to `PaintTiming` here targeting completeness
of it.

Changes included in this PR.
1. Ports existing `LargestContentfulPaintCandidateCollector` to
`PaintTimingHandler`.
2. Aligns more close to **W3C** specs, added few steps as well.
3. Adding helper functions.

Testing: No change in behavior expected.
- `components/servo/tests/largest_contentful_paint.rs`

Signed-off-by: Shubham Gupta <shubham13297@gmail.com>
2026-02-13 07:09:33 +00:00
TIN TUN AUNG
6438cb1cd6 image: take exif orientation into account when decoding static image (#42567)
When decoding static image, change the layout of rgba value based on
exif orientation metadata.

Testing: More wpt are passing
Fixes: N/A

Note: 
This change will make the wpt test related to `image-orientation: none`
failed, because this change apply the exif orientation unconditionally.
But, given the [`image-orientation`
spec](https://drafts.csswg.org/css-images/#the-image-orientation):
> This property is optional for implementations.

And there are more wpt tests passing, we may be able to deprioritize the
tests for `image-orientation`.

---------

Signed-off-by: rayguo17 <rayguo17@gmail.com>
2026-02-13 06:55:12 +00:00
dependabot[bot]
3be015e09f build: bump syn from 2.0.114 to 2.0.115 (#42591)
Bumps [syn](https://github.com/dtolnay/syn) from 2.0.114 to 2.0.115.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/syn/releases">syn's
releases</a>.</em></p>
<blockquote>
<h2>2.0.115</h2>
<ul>
<li>Enable GenericArgument::Constraint parsing in non-full mode (<a
href="https://redirect.github.com/dtolnay/syn/issues/1966">#1966</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3610c34ebd"><code>3610c34</code></a>
Release 2.0.115</li>
<li><a
href="f22e80627f"><code>f22e806</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/syn/issues/1966">#1966</a>
from dtolnay/constraint</li>
<li><a
href="a3faba715b"><code>a3faba7</code></a>
Enable GenericArgument::Constraint parsing in non-full mode</li>
<li><a
href="90651578ef"><code>9065157</code></a>
Pin CI miri to nightly-2026-02-11</li>
<li><a
href="530e7e7601"><code>530e7e7</code></a>
Update toml from 0.9 to 1.0</li>
<li><a
href="0b9544a877"><code>0b9544a</code></a>
Update test suite to nightly-2026-02-11</li>
<li><a
href="6142490071"><code>6142490</code></a>
Update test suite to nightly-2026-02-09</li>
<li><a
href="92a0aa4096"><code>92a0aa4</code></a>
Raise required compiler to Rust 1.71</li>
<li><a
href="f85f4ac895"><code>f85f4ac</code></a>
Resolve unnecessary_map_or clippy lint</li>
<li><a
href="a9c0919d57"><code>a9c0919</code></a>
Raise required compiler to Rust 1.70</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/syn/compare/2.0.114...2.0.115">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=syn&package-manager=cargo&previous-version=2.0.114&new-version=2.0.115)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 00:46:36 +00:00
Martin Robinson
dca5250222 layout: Clear display: none boxes during damage traversal (#42584)
There is no need to wait until box tree layout to do this and we want to
make clearing boxes a thing that happens in the damage traversal.

Testing: This should not change behavior in an observable way, so should
be covered by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-12 18:54:58 +00:00
Oriol Brufau
5b855021a3 build(deps): bump Stylo to "Stop setting layout.css.marker.restricted to true" (#42585)
Bumps Stylo to servo/stylo#311

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-12 18:34:46 +00:00
Narfinger
028afda6d8 servoshell: Trigger reload when the F5 key is pressed (#42538)
Whenever I open Servoshell and reload, I want to hit F5. Alas it does
nothing.
Now it will.

Testing: This level of functionality in servoshell is not tested at the
moment.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-12 18:29:02 +00:00
Oriol Brufau
28065dfc4f layout: Fix intrinsic size of replaced with ratio and natural height only (#42577)
If a replaced element has a natural width and a natural height, then the
natural width wins, and the intrinsic height is computed thru the
preferred aspect ratio.

If it has no natural width and no natural height, then the width falls
back to 300px, and again compute the intrinsic height thru the ratio.

However, if it has a natural height but no natural width, then we should
compute the intrinsic width from the natural height thru the ratio. We
were still letting the 300px fallback width win.

Testing: Some tests pass
Fixes: #42573

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-12 18:03:45 +00:00
Josh Matthews
36c436ac12 storage: Do not panic if sqlite fails to open a DB. (#42444)
#42442 triggered a bunch of intermittent panics due to DBs being cleaned
up while tests were still trying to use them. This is very difficult to
test reliably, but replacing calls to unwrap with sending error values
to the script thread is clearly an improvement.

Testing: Some intermittent crashes now turn into intermittent timeouts.

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-12 17:31:11 +00:00
Alice
55589e941f net/fetch: Don't write Response::termination_reason in closure (#42572)
Writing `termination_reason` in the closure in `http_network_fetch()`
had no effect, as the response is captured by value, and cannot be
captured by mutable reference as it is needed later in the outer
function.

This is flagged as a warning with Rust 1.92:


https://github.com/servo/servo/actions/runs/21750902723/job/62748597306?pr=42402

Note: I don't understand this code deeply, I was just trying my best to
fix the warning. I'm more than happy to close this PR or change the code
if someone more familiar has a better idea of how to fix it.

Testing: Existing tests, no behaviour change.

Signed-off-by: Alice Boxhall <alice@igalia.com>
2026-02-12 16:58:56 +00:00
Martin Robinson
260eb8688c layout: Preserve boxes in rebuilt subtrees underneath independent formatting contexts (#42582)
When a box needs to be rebuilt due to a style change, it previously
would rebuild the entire box subtree, including all descendants. This is
probably unnecessary when crossing independent formatting context
boundaries. This change limits box tree damage pushed downward when
entering certain types of independent formatting contexts. The types can
be expanded later, but this is just a first conservative step. This is
necessary in order to start preserving fragments in these subtrees.

Testing: This should not change observable layout behavior. We do not
really
have tests to verify these kind of optimizations.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-12 16:08:10 +00:00
Sam
d5d400c7d6 script: Use CString for Error::Type and Error::Range (#42576)
Continuation of https://github.com/servo/servo/pull/42135, switch
Error::Type and Error::Range to also use CStrings internally, as they
are converted to CString for throwing JS exceptions (other get thrown as
DomException object, which uses rust string internally).

Changes in script crate are mechanical.

Testing: Should be covered by WPT tests.
Part of #42126

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-12 15:17:30 +00:00
Shubham Gupta
c67143634a paint: Get rid of unnecessary trait from LCPCandidateID (#42571)
Just remove some extra traits.

Testing: No behavior change

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-12 12:23:32 +00:00
Martin Robinson
25b4121ad7 layout: Ensure layout damage clears inline content size cache of parent (#42574)
This change fixes an issue where layout damage to a node was not
clearing the inline content size cache of the parent node. In addition
it starts to clean up the damage traversal logic in preparation for
changes to the way that damage is processed and box tree layout is done.

Testing: This change adds a new WPT test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
2026-02-12 12:21:50 +00:00
Martin Robinson
6d2960ab36 layout: Properly set parent of dirty root after box tree layout (#42535)
When laying out the box tree from a dirty root, we were replacing the
inner layout
box contents of the dirty root, but not updating its parent. This change
fixes
that. This is important because any sort of operation that will need the
parent
will subsequently fail unless it is properly set. We do not use the
parent now, but
we will in the future.

Testing: The parent is currently unused, but it will be used in the
future. This
shouldn't change the functioning of Servo currently.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-12 10:00:11 +00:00
Onur Şahin
fb9bef66fd script: Implement DocumentOrShadowRoot.FullscreenDocument (#42401)
Implement
[DocumentOrShadowRoot.FullscreenDocument](https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement).

## Changes
- Update IDL definition by removing `Document.fullscreenElement` and
declaring it in `DocumentOrShadowRoot` mixin as per the
[spec](https://fullscreen.spec.whatwg.org/#api)
- Implement [fullscreenElement
getter](https://fullscreen.spec.whatwg.org/#dom-document-fullscreenelement)
as a method in `DocumentOrShadowroot.get_fullscreen_element` which is
used by `Document` and `ShadowRoot`.
- Changedbubble and composed flags for fullscreen enter and exit events
to true.
- Delete `shadowroot-fullscreen-element.html.ini` since the test now
passes.

## Testing
Enable `shadowroot-fullscreen-element.html` WPT test.

Passing WPT run: https://github.com/onsah/servo/actions/runs/21872882492

## Fixes
https://github.com/servo/servo/issues/42234

Signed-off-by: Onur Sahin <sahinonur2000@hotmail.com>
2026-02-12 09:55:11 +00:00
Euclid Ye
b088ee4697 script: Use snakecase for variables in CSS implementation files (#42558)
Use snakecase to be consistent. Also these names are normally quite long
already.

Testing: Just renaming.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-12 09:54:38 +00:00
Sam
3f3c6a5d90 script: Pass more CStr(ing) instead of rust strings (#42135)
This is companion to https://github.com/servo/mozjs/pull/703 which makes
mozjs to use CStr(ing) in the API (where we would silently do conversion
in mozjs). This way we can avoid rust string -> c string allocations.

In the followup PR we should switch Error::Type and Error::Range to also
use CStrings internally, as they are converted to CString for throwing
JS exceptions (other get thrown as DomException object, which uses rust
string internally - although this gets converted to JSString somewhere).

Testing: It should be just refactor without any side effects so there
should be no changes to WPT results.
Try run: https://github.com/sagudev/servo/actions/runs/21328878448
Part of #42126

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-12 08:46:14 +00:00
Shubham Gupta
baf2f4f8bf compositing: Re-enable LCP calculation on WebViews after they have been reloaded/navigated (#41169)
Re-enable LCP calculation on WebViews after they have been
reloaded/navigated.

Scenario: LCP calculation is stopped when user interaction is detected.
When page is reloaded. No, LCP is observed. So, can't develop the
performance or benchmark tools.

Motivation: No explicit specs found for this, but this was missed during
implementation from my side. And also observed inconsistent with Chrome.
 
Testing: `components/servo/tests/largest_contentful_paint.rs`

Fixes: #42533

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-12 07:32:40 +00:00
Euclid Ye
f34ed13e3f paint: Consider opportunity to send touchmove to ScriptThread regardless of existence of ScrollZoomEvent (#42528)
We still keep the key performance optimization. But it is important to
send the event to script, if other conditions are still satisfied.

Testing: 
- `multi-touch-interfaces.html` no longer TIMEOUT, which contains 494
subtests.
-
`pointerevent_pointerout_after_pointercancel_touch.html`/`pointerevent_pointerleave_after_pointercancel_touch.html`
no longer scroll **indefinitely**. These two tests will work once we
have `pointerout` and `pointerleave`.

Part of #41923.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-12 07:07:54 +00:00
Euclid Ye
7b1a59460c mach (Android): Remove CC_ & CXX_ for build environment (#42563)
This reverts the workaround introduced in
https://github.com/servo/servo/pull/42232#discussion_r2740827196 which
enabled CC builder, given https://github.com/aws/aws-lc-rs/pull/1026 in
the new release.

Depends on: #42551
Testing: Android build:
https://github.com/servo/servo/actions/runs/21931411344
Fixes: #42242

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-12 05:16:21 +00:00
dependabot[bot]
d8a3679dfe build: bump avif-serialize from 0.8.6 to 0.8.8 (#42550)
Bumps [avif-serialize](https://github.com/kornelski/avif-serialize) from
0.8.6 to 0.8.8.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="78fbc09753"><code>78fbc09</code></a>
Bump</li>
<li><a
href="42646cd8d9"><code>42646cd</code></a>
Fix tests</li>
<li><a
href="84601afbbf"><code>84601af</code></a>
feat: add clli and mdcv HDR metadata box support</li>
<li>See full diff in <a
href="https://github.com/kornelski/avif-serialize/compare/v0.8.6...v0.8.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=avif-serialize&package-manager=cargo&previous-version=0.8.6&new-version=0.8.8)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 05:03:43 +00:00
dependabot[bot]
06875dbcea build: bump deranged from 0.5.5 to 0.5.6 (#42553)
Bumps [deranged](https://github.com/jhpratt/deranged) from 0.5.5 to
0.5.6.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/jhpratt/deranged/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=deranged&package-manager=cargo&previous-version=0.5.5&new-version=0.5.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 05:03:31 +00:00
dependabot[bot]
a5a636c48e build: bump aws-lc-sys from 0.37.0 to 0.37.1 (#42551)
Bumps [aws-lc-sys](https://github.com/aws/aws-lc-rs) from 0.37.0 to
0.37.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a8cac6622a"><code>a8cac66</code></a>
Bump aws-lc-sys to v0.37.1 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1036">#1036</a>)</li>
<li><a
href="dd434425fa"><code>dd43442</code></a>
skip memcmp_invalid_stripped_check for cross-compilation (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1037">#1037</a>)</li>
<li><a
href="8530f18793"><code>8530f18</code></a>
Bump MSRV to 1.71.0; Fix rustls integration - webpki (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1035">#1035</a>)</li>
<li><a
href="fcec9cd4ae"><code>fcec9cd</code></a>
Improve Testability: <code>unsealed::SecureRandom</code> and agreement
(<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1021">#1021</a>)</li>
<li><a
href="819879d30a"><code>819879d</code></a>
Support cranelift backend on Windows (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1030">#1030</a>)</li>
<li><a
href="7a08a8c86c"><code>7a08a8c</code></a>
Add Clang support on Windows (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1032">#1032</a>)</li>
<li><a
href="57adbafbf8"><code>57adbaf</code></a>
feat(kem): Add DecapsulationKey serialization support (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1029">#1029</a>)</li>
<li><a
href="c0db59e46b"><code>c0db59e</code></a>
Fix support for OpenWrt; respect TARGET_XXX env vars (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1026">#1026</a>)</li>
<li><a
href="824141d9fe"><code>824141d</code></a>
Enable CI for mips64-unknown-linux-muslabi64 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1017">#1017</a>)</li>
<li><a
href="75017834b6"><code>7501783</code></a>
Fix rustls integ test (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1019">#1019</a>)</li>
<li>See full diff in <a
href="https://github.com/aws/aws-lc-rs/compare/aws-lc-sys/v0.37.0...aws-lc-sys/v0.37.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-sys&package-manager=cargo&previous-version=0.37.0&new-version=0.37.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 04:10:56 +00:00
Oriol Brufau
ec984b3c76 layout: SVG with zero size should get natural ratio from viewBox (#42545)
This logic was (accidentally?) changed in #40761. Revert it back to the
original one, which is simpler, and matches Blink and WebKit.

Testing: Adding new test

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-12 04:10:48 +00:00
Josh Matthews
ab85eafc7e Revert "script: Introduce end of loading phases" (#42562)
Reverts servo/servo#42446 . Too many new intermittent timeouts caused by
missing document load events.

Fixes: #42555
Fixes: #42556
Fixes: #42560
Fixes: #42557
Fixes: #42561 
Fixes: #42559 
Fixes: #42554
2026-02-12 04:10:30 +00:00
dependabot[bot]
896fa308fc build: bump clap from 4.5.57 to 4.5.58 (#42549)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.57 to 4.5.58.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.58</h2>
<h2>[4.5.58] - 2026-02-11</h2>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.58] - 2026-02-11</h2>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="88f13cb4b0"><code>88f13cb</code></a>
chore: Release</li>
<li><a
href="fe2d731605"><code>fe2d731</code></a>
docs: Update changelog</li>
<li><a
href="b256739045"><code>b256739</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6131">#6131</a>
from mernen/do-not-suggest-opts-after-escape</li>
<li><a
href="8aaf704f56"><code>8aaf704</code></a>
fix(complete): Do not suggest options after &quot;--&quot;</li>
<li><a
href="4a86fee1b5"><code>4a86fee</code></a>
test(complete): Illustrate current behavior</li>
<li><a
href="281f8aec7c"><code>281f8ae</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6126">#6126</a>
from epage/p</li>
<li><a
href="3cbce42cc2"><code>3cbce42</code></a>
docs(cookbook): Make typed-derive easier to maintain</li>
<li><a
href="9fd4dc9e4e"><code>9fd4dc9</code></a>
docs(cookbook): Provide a custom TypedValueParser</li>
<li><a
href="8f8e861345"><code>8f8e861</code></a>
docs(cookbook): Add local enum to typed-derive</li>
<li><a
href="926bafef0b"><code>926bafe</code></a>
docs(cookbook): Hint at overriding value_name</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.57...clap_complete-v4.5.58">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.57&new-version=4.5.58)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-12 00:29:01 +00:00
Tim van der Lippe
94f418c6e6 script: Introduce end of loading phases (#42446)
Since the steps for
https://html.spec.whatwg.org/multipage/parsing.html#the-end are
scattered throughout various pieces, it has been difficult to figure out
when to run what.

To remedy that, introduce the concept of phases. These phases are
checked in every method that needs to
"Spin the event loop" to know whether

1. It is the appropriate time to continue with #the-end
2. It has fully achieved its goal

For example, when processing deferred scripts, we need to do this after
a deferred script has finished loading. But we also need to do it at the
start of parsing, since we might not have any deferred scripts at all.

Therefore, each previous step sets the appropriate phase and calls the
corresponding next step. Each step then verifies its conditions and
continues if required.

Part of #41972

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-02-11 21:45:14 +00:00
dependabot[bot]
bf1d203b1b build: bump pillow from 12.0.0 to 12.1.1 in /etc/ci/scenario (#42544)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 12.0.0 to
12.1.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/releases">pillow's
releases</a>.</em></p>
<blockquote>
<h2>12.1.1</h2>
<p><a
href="https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html">https://pillow.readthedocs.io/en/stable/releasenotes/12.1.1.html</a></p>
<h2>Dependencies</h2>
<ul>
<li>Patch libavif for svt-av1 4.0 compatibility <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9413">#9413</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
</ul>
<h2>Other changes</h2>
<ul>
<li>Fix OOB Write with invalid tile extents <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9427">#9427</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>12.1.0</h2>
<p><a
href="https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html">https://pillow.readthedocs.io/en/stable/releasenotes/12.1.0.html</a></p>
<h2>Deprecations</h2>
<ul>
<li>Deprecate getdata(), in favour of new get_flattened_data() <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9292">#9292</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Documentation</h2>
<ul>
<li>Specify APNG duration type when opening <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9368">#9368</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9350">#9350</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9366">#9366</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update ImageMorph documentation <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9349">#9349</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Docs: update major bump cadence <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9334">#9334</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Add release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9070">#9070</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9320">#9320</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated Ubuntu version <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9306">#9306</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update macOS tested Pillow versions <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9265">#9265</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Dependencies</h2>
<ul>
<li>Update harfbuzz to 12.3.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9355">#9355</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update xz to 5.8.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9343">#9343</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libjpeg-turbo to 3.1.3 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9333">#9333</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated zlib-ng to 2.3.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9324">#9324</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libpng to 1.6.53 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9325">#9325</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update actions/checkout action to v6 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9323">#9323</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Update dependency mypy to v1.19.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9322">#9322</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated libpng to 1.6.51 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9305">#9305</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated brotli to 1.2.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9284">#9284</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update libimagequant to 4.4.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9301">#9301</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update zlib-ng to 2.3.1, except on manylinux2014 aarch64 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9312">#9312</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated harfbuzz to 12.2.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9289">#9289</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update github-actions <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9277">#9277</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
</ul>
<h2>Testing</h2>
<ul>
<li>Replace pre-commit with prek <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9360">#9360</a>
[<a href="https://github.com/hugovk"><code>@​hugovk</code></a>]</li>
<li>Test PyQt6 on Python 3.14 on Windows <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9353">#9353</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Test 32-bit Windows on Windows Server 2022 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9345">#9345</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Correct variable type <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9335">#9335</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5158d98c80"><code>5158d98</code></a>
12.1.1 version bump</li>
<li><a
href="9000313cc5"><code>9000313</code></a>
Fix OOB Write with invalid tile extents (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9427">#9427</a>)</li>
<li><a
href="cd0111849f"><code>cd01118</code></a>
Patch libavif for svt-av1 4.0 compatibility</li>
<li><a
href="46f45f674d"><code>46f45f6</code></a>
12.1.0 version bump</li>
<li><a
href="c9ac097edb"><code>c9ac097</code></a>
Simplify band splitting (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9291">#9291</a>)</li>
<li><a
href="3baedf2648"><code>3baedf2</code></a>
Deprecate getdata(), in favour of new get_flattened_data() (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9292">#9292</a>)</li>
<li><a
href="b51a036685"><code>b51a036</code></a>
Specify APNG duration type when opening (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9368">#9368</a>)</li>
<li><a
href="8d08e31533"><code>8d08e31</code></a>
Add release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9348">#9348</a>
(<a
href="https://redirect.github.com/python-pillow/Pillow/issues/9369">#9369</a>)</li>
<li><a
href="432707ea81"><code>432707e</code></a>
Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/9348">#9348</a></li>
<li><a
href="2d589107fb"><code>2d58910</code></a>
Specify APNG duration type when opening</li>
<li>Additional commits viewable in <a
href="https://github.com/python-pillow/Pillow/compare/12.0.0...12.1.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pillow&package-manager=uv&previous-version=12.0.0&new-version=12.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 18:08:40 +00:00
Simon Wülker
a20e2981b8 devtools: Handle disconnected error gracefully when shutting down servo (#42543)
When the servo window is closed while there is an active devtools
connection then the devtools threads reliably panics because it can't
talk to script anymore. We can simply ignore the `Disconnected` error
when shutting down. If the script thread already shut down then there's
nothing meaningful for the devtools to send anyways.

Testing: This kind of interaction is hard to test. I've not written an
automated test.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-11 18:06:53 +00:00
Keerti Gupta this side!!
2532c53414 libservo: Fix build warnings for unfulfilled dead_code lint expectations in tests (#42479)
The `#[expect(dead_code)]` annotations in
`components/servo/tests/common/mod.rs` and
`components/servo/tests/multiprocess.rs` were no longer valid because
the related helpers are currently used by tests. Removed unfulfilled
`#[expect(dead_code)]` annotations from the above files.

Testing: Tests compile cleanly after this change.
Fixes: #42412

Signed-off-by: Keerti Gupta <24bsm032@iiitdmj.ac.in>
2026-02-11 15:32:49 +00:00
Gae24
a83e1973d5 script: implement import.meta.resolve (#42506)
Our implementation of
[HostGetImportMetaProperties](https://html.spec.whatwg.org/multipage/#hostgetimportmetaproperties)
wasn't providing `resolve` function to mozjs.

Testing: Covered by existing tests, results updated
Part of #37553

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-11 15:14:37 +00:00
Shubham Gupta
83fdf34193 layout: Limit LCP stopping to actual user input events. (#41999)
This basically doesn't halt LCP on Mouse Move.

Reference: https://www.w3.org/TR/largest-contentful-paint/#limitations

Testing: `components/servo/tests/largest_contentful_paint.rs`
Fixes: #42534

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-11 14:31:05 +00:00
Shubham Gupta
f1ff08ca0e layout: Get rid of LargestContentfulPaintType struct (#42539)
LargestContentfulPaintType is not useful.

Testing: No behaviour change expected

Signed-off-by: Shubham Gupta <shubham13297@gmail.com>
2026-02-11 13:49:59 +00:00
Simon Wülker
929e275fcd devtools: Show attached event listeners in inspector tab (#42355)
This change makes the devtools inspector show any event listeners that
are attached to a node. The primary motivation is making the devtools
more useful for debugging real-world websites.

<img width="536" height="268" alt="image"
src="https://github.com/user-attachments/assets/5ba13e41-14b4-4202-b994-eadff5d1c6b5"
/>

You can also click on the event listener to show some more info, though
most of that (everything except the event type and the event phase) is
currently just placeholder text:

<img width="1360" height="456" alt="image"
src="https://github.com/user-attachments/assets/ec025847-43fc-489c-8b26-46afb6dada64"
/>


Testing: This change adds a new test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-11 13:31:25 +00:00
Narfinger
2b6a260125 devtools: Plugin to about:memory (#42480)
This implements the final glue to have memory reporting for devtools.

Testing: Run some webpages and connected to devtools and looked at
about:memory
Fixes: https://github.com/servo/servo/issues/42453

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-11 13:23:05 +00:00
Shubham Gupta
c0e74d730d tests: Move javascript_evaluators tests to a separate file (#42500)
Move Javascript tests to a separate file as `tests/webview.rs` is
getting too cluttered.

Testing: Existing Tests Passed

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-11 13:08:03 +00:00
pralkarz
0dc5bee60a devtools: handle syntax highlighting booleans in console.log (#42513)
Testing: `./mach test-devtools` (added a new test)
Fixes: #42503

---------

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-11 12:46:35 +00:00
Euclid Ye
62926adaaf script_bindings/libservo: Fix build script to use uv to build instead of python3 (#42532)
- Redirect stdin to null device when testing Python command. This fixes
the issue with Windows.
- Use `--frozen` for both test command and actual command used in build.
This is what we've been doing for `mach`.

Before this PR, uv fails due to the missing `--frozen` and we fall back
to python3 in CI for various platforms.

Fixes: #42527

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-11 11:48:36 +00:00
Narfinger
9993a2168a CI: OHOS Use mitmproxy with forwarding mode in hitrace-bench (#42508)
This updates to a new hitrace-bench version which supports to handle
mitmproxy by automatically starting and destroying it for the
benchmarks.

Currently we are only in forwarding mode and do _not_ replay responses.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing:
https://github.com/Narfinger/servo/actions/runs/21867906670/job/63114716882

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
Co-authored-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-02-11 10:25:30 +00:00
Shubham Gupta
dbc8a7f9da layout: Do not consider iframe fragments at contentful for paint timing (#42498)
This aligns `first-contentful-paint` about `iframe` according to
[specs](https://www.w3.org/TR/paint-timing/#mark-paint-timing), Step:
10.2.1.
 
> NOTE: A parent frame should not be aware of the paint events from its
child iframes, and vice versa. This means that a frame that contains
just iframes will have [first
paint](https://www.w3.org/TR/paint-timing/#first-paint) (due to the
enclosing boxes of the iframes) but no [first contentful
paint](https://www.w3.org/TR/paint-timing/#first-contentful-paint).

Testing: Update WPT tests expectations.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-11 09:43:02 +00:00
Narfinger
4b87712d64 script: Switch QueuedTask to a struct to support MallocSizeOf (#42531)
This switches the QueuedTask type to a proper struct allowing us to have
MallocSizeOf and similar.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-11 08:40:49 +00:00
Narfinger
2f619821ac webxr: Implement MallocSizeOf (#42505)
Implement MallocSizeOf for most of WebXr. Mostly uncontroversal changes.
Of note:
- Implementation of size_of for euclid::RigidTransform
- Implementation of size_of for euclid::Vector3D
- Join is currently ignored as the type is very complicated.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

*Describe the changes that this pull request makes here. This will be
the commit message.*

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-11 08:39:03 +00:00
Shubham Gupta
b76354f058 Update expected results for paint-timing tests (#42525)
Updates the WPT expectations for #42411. 

#42433 changed the expectations recently.

Testing: WPT Tests Passed
Fixes #42359
Fixes #42360

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-11 01:48:54 +00:00
dependabot[bot]
d3ebee1b19 build: bump cryptography from 46.0.4 to 46.0.5 (#42526)
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.4
to 46.0.5.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst">cryptography's
changelog</a>.</em></p>
<blockquote>
<p>46.0.5 - 2026-02-10</p>
<pre><code>
* An attacker could create a malicious public key that reveals portions
of your
private key when using certain uncommon elliptic curves (binary curves).
This version now includes additional security checks to prevent this
attack.
This issue only affects binary elliptic curves, which are rarely used in
real-world applications. Credit to **XlabAI Team of Tencent Xuanwu Lab
and
Atuin Automated Vulnerability Discovery Engine** for reporting the
issue.
  **CVE-2026-26007**
* Support for ``SECT*`` binary elliptic curves is deprecated and will be
  removed in the next release.
<p>.. v46-0-4:<br />
</code></pre></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="06e120e682"><code>06e120e</code></a>
bump version for 46.0.5 release (<a
href="https://redirect.github.com/pyca/cryptography/issues/14289">#14289</a>)</li>
<li><a
href="0eebb9dbb6"><code>0eebb9d</code></a>
EC check key on cofactor &gt; 1 (<a
href="https://redirect.github.com/pyca/cryptography/issues/14287">#14287</a>)</li>
<li><a
href="bedf6e186b"><code>bedf6e1</code></a>
fix openssl version on 46 branch (<a
href="https://redirect.github.com/pyca/cryptography/issues/14220">#14220</a>)</li>
<li>See full diff in <a
href="https://github.com/pyca/cryptography/compare/46.0.4...46.0.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cryptography&package-manager=uv&previous-version=46.0.4&new-version=46.0.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 01:47:47 +00:00
Narfinger
67521a9b08 CI: OHOS Use mitmproxy in record and replay mode (#42482)
We now use a replay recorded via mitmproxy to run the benchmarks.
1. Check the GitHub cache for a mitmproxy dump.
2. If it does not exists create it with update_mitmproxy_dump and store
it in the GitHub cache
3. Run mitmproxy in Replay mode instead of Forward mode with the above
given dump.

This should reduce the jitter of tests that depend on network.
This works currently for the scenariotests and speedometer with
hitrace-bencher soon to follow.

Testing: Tested with two separate runs.
https://github.com/Narfinger/servo/actions/runs/21828840808 has the
cache already populated.
The noisy output of mitmdump actually shows that it is answering the
queries from replay for all scenario tests.

https://github.com/Narfinger/servo/actions/runs/21831381306/job/62991977638
shows how before the scenario tests the cache is created and stored.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-11 01:17:27 +00:00
Simon Wülker
a0be22dca7 script: Fix check whether object is an array in console.log (#42510)
In https://github.com/servo/servo/pull/42296 i made a mistake during the
final changes, accidentally inverting a condition. This was not caught
by CI because we don't run devtools tests in CI.

Testing: `./mach test-devtools` now passes again

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-11 01:03:18 +00:00
dependabot[bot]
9c3457ba60 build: bump quickcheck from 1.0.3 to 1.1.0 (#42524)
Bumps [quickcheck](https://github.com/BurntSushi/quickcheck) from 1.0.3
to 1.1.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d58e3cffb7"><code>d58e3cf</code></a>
quickcheck_macros-1.1.0</li>
<li><a
href="03ab585865"><code>03ab585</code></a>
Fix README examples</li>
<li><a
href="826f10baa1"><code>826f10b</code></a>
Add shrinking support for arrays (<a
href="https://redirect.github.com/BurntSushi/quickcheck/issues/330">#330</a>)</li>
<li><a
href="87b46b90ec"><code>87b46b9</code></a>
Update some links (<a
href="https://redirect.github.com/BurntSushi/quickcheck/issues/332">#332</a>)</li>
<li><a
href="a0216c932f"><code>a0216c9</code></a>
Revert <code>Gen</code> renaming, rename <code>gen</code> method</li>
<li><a
href="2c2cd21935"><code>2c2cd21</code></a>
Update to rand 0.9</li>
<li><a
href="9ddbbd6b68"><code>9ddbbd6</code></a>
deps: update to syn 2.0 (<a
href="https://redirect.github.com/BurntSushi/quickcheck/issues/317">#317</a>)</li>
<li><a
href="238f340a36"><code>238f340</code></a>
Bump MSRV to 1.71</li>
<li><a
href="32d7bc4edf"><code>32d7bc4</code></a>
Upgrade to 2021 edition</li>
<li><a
href="44b81bebcf"><code>44b81be</code></a>
deps: update to env_logger 0.11 (<a
href="https://redirect.github.com/BurntSushi/quickcheck/issues/327">#327</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/BurntSushi/quickcheck/compare/1.0.3...quickcheck_macros-1.1.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quickcheck&package-manager=cargo&previous-version=1.0.3&new-version=1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 00:59:58 +00:00
dependabot[bot]
f752069fe5 build: bump toml_parser from 1.0.6+spec-1.1.0 to 1.0.7+spec-1.1.0 (#42523)
Bumps [toml_parser](https://github.com/toml-rs/toml) from
1.0.6+spec-1.1.0 to 1.0.7+spec-1.1.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e3c7aa75eb"><code>e3c7aa7</code></a>
chore: Release</li>
<li><a
href="2dabe11acd"><code>2dabe11</code></a>
docs: Update changelog</li>
<li><a
href="fb98198faf"><code>fb98198</code></a>
fix(parser): Don't panic on bad hex characters (<a
href="https://redirect.github.com/toml-rs/toml/issues/1097">#1097</a>)</li>
<li><a
href="85761c401d"><code>85761c4</code></a>
fix(parser): Avoid panic</li>
<li><a
href="5edb4770ad"><code>5edb477</code></a>
fix(parser): Don't panic on bad hex characters</li>
<li><a
href="cac04afcdd"><code>cac04af</code></a>
test(parser): Show another assert case</li>
<li><a
href="d96417a06f"><code>d96417a</code></a>
fix(parser): Consistently assume spaces mean strings</li>
<li><a
href="88b657fee9"><code>88b657f</code></a>
test(parser): Show assert case</li>
<li><a
href="0bf5c6dc3a"><code>0bf5c6d</code></a>
refactor(parser): Clarify index arithmetic</li>
<li><a
href="f115dcb966"><code>f115dcb</code></a>
refactor(parser): Reduce decode/scalar visibility</li>
<li>Additional commits viewable in <a
href="https://github.com/toml-rs/toml/compare/toml_parser-v1.0.6...toml_parser-v1.0.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=toml_parser&package-manager=cargo&previous-version=1.0.6+spec-1.1.0&new-version=1.0.7+spec-1.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 00:40:19 +00:00
dependabot[bot]
c8e35720b5 build: bump libfuzzer-sys from 0.4.10 to 0.4.12 (#42522)
Bumps [libfuzzer-sys](https://github.com/rust-fuzz/libfuzzer) from
0.4.10 to 0.4.12.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-fuzz/libfuzzer/blob/main/CHANGELOG.md">libfuzzer-sys's
changelog</a>.</em></p>
<blockquote>
<h2>0.4.12</h2>
<p>Released 2026-02-10.</p>
<h3>Changed</h3>
<ul>
<li>Recommend <code>SmallRng</code> over <code>StdRng</code> in the
examples for faster, more lightweight
seeding and sampling</li>
<li>Updated <code>rand</code> dependency from 0.8.5 to 0.10</li>
<li>Updated <code>flate2</code> dependency from 1.0.24 to 1.1</li>
<li>Rename <code>gen</code> variable to <code>rng</code> for better 2024
Edition compatibility</li>
</ul>
<hr />
<h2>0.4.11</h2>
<p>Released 2026-02-10.</p>
<h3>Changed</h3>
<ul>
<li>Updated to <code>libFuzzer</code> commit <code>a47b42eb9f9b</code>
(<code>release/22.x</code>).</li>
</ul>
<hr />
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/rust-fuzz/libfuzzer/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libfuzzer-sys&package-manager=cargo&previous-version=0.4.10&new-version=0.4.12)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 00:36:53 +00:00
Ashwin Naren
086863398d webstorage: Improve storage memory size reporting (#42484)
`local_storage_origins` is ~2-3kb of memory, which is probably large
enough to be included in the report, given that it likely can grow much
more. A much bigger memory user is sqlite3, but I'm still working on
finding a way to extract memory usage for it.

Testing: Manual

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-10 17:42:53 +00:00
webbeef
f1953afec0 media: enable default controls on top-level media elements (#42488)
This makes it possible to actually play media when loaded as top level
content and not already in a video or audio element.

Testing: manual testing with `./mach run
https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.webm`

Signed-off-by: webbeef <me@webbeef.org>
2026-02-10 17:34:18 +00:00
Narfinger
870576f948 devtools: Implement MallocSizeOf for DevtoolsInstance (#42478)
This implements MallocSizeOf for DevtoolsInstance. Major changes:
- Newtype for ActorRegistry because AtomicRefCell<HashMap<String,
Arc<dyn Actor>>> did not like mallocsizeof (even with trait bound on
Actor)
- Implement MallocSizeOf for BTreeSet.
- Implement MallocSizeOf of 0 for AtomicU32 and TcpStream
- Ignore a couple of MallocSizeof for http::Method, http::HeaderMap and
json::Value

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation is the test.
Fixes: Part of addressing https://github.com/servo/servo/issues/42453

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-10 17:32:47 +00:00
Narfinger
40c780f98b media: Implement MallocSizeOf for most of the types used (#42504)
Implement MallocSizeOf for most of former servo media crate.
Most of this should be uncontroversal as it is just adding derives.

Of note are implementation of std::sync::mpsc::Sender<T> with currently
size_of=0 and an ignored Box<[f32, MAX_FFT_SIZE]>.


Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-10 17:29:59 +00:00
Domenico Rizzo
ddb31c180f script: Move GPUCommandBuffer drop logic to separate struct (#42511)
Moves the `Drop` implementation for `GPUCommandBuffer` to a separate
struct, `DroppableGPUCommandBuffer`. Updates bindings config to remove
`allowDropImpl` which is no longer needed.

Testing: No tests added
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-02-10 17:29:36 +00:00
Alice
60efb42dc6 config: Add a pref for the experimental accessibility code (#42333)
This adds a pref which will be used to enable the experimental
accessibility tree.

Testing: No testing: just adds a pref which is currently unused.
Fixes: part of #4344

Signed-off-by: Alice Boxhall <alice@igalia.com>
Co-authored-by: delan azabani <dazabani@igalia.com>
2026-02-10 17:13:28 +00:00
Shubham Gupta
8d474e7fa0 layout: Mark Contentful for Images only if they have ImageKey (#42411)
This PR checks if `ImageKey` is available, then it marks it as
`Contentful`. For Videos, if valid `poster` or `first frame`, it will be
stored in `ImageKey`.
Hence, appropriate way to mark `Contentful`.

Testing: 

- `/paint-timing/fcp-only/fcp-video-poster.html`
-  `/paint-timing/fcp-only/fcp-video-frame.html`

Fixes #42359
Fixes #42360

Signed-off-by: Shubham Gupta <shubham13297@gmail.com>
2026-02-10 12:50:32 +00:00
Martin Robinson
3292a6edc4 script: Close existing context menus when a new one opens (#42487)
No longer allow showing two context menus as once. Instead only allow a
single context menu at a time. Multiple context menus cause issues with
egui, so it's quite likely that this will cause issues with even more
embedders. This fixes an issue where egui draws scary runtime errors all
over servoshell when opening multiple context menus.

Testing: This changes adds a new WebView API test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-10 11:42:02 +00:00
Simon Wülker
60c8b8fad5 devtools: Support sending js objects to firefox devtools from console.log (#42296)
This allows us to `console.log` objects from JS and have a preview of
them appear in the console.
Interacting with said preview doesn't work yet, because the devtools
object actor is a stub.

<img width="600" height="78" alt="image"
src="https://github.com/user-attachments/assets/d896471f-3982-4406-94d4-b13eebabe337"
/>

Testing: This change adds a test

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-10 10:31:17 +00:00
npiesco
70eb04d8ad fix(build): Fix Windows build hang in Python detection (#42340)
Build hangs on Windows because running `python` with no arguments in
non-TTY context waits for stdin indefinitely.

Python's behavior differs by platform:
- Linux: Detects non-TTY stdin, exits immediately
- Windows: Waits for stdin regardless, hangs forever

Fix: Add `--version` to probe so it exits immediately on all platforms.
Since `--version` is now part of the probe, return fresh Command to
prevent it from persisting into actual script invocation.

---------

Signed-off-by: npiesco <ngpiesco@gmail.com>
2026-02-10 08:37:22 +00:00
Mukilan Thiyagarajan
b682f03394 layout: Move UserAgentStylesheets struct from stylo to layout. (#42499)
This struct is only ever used by Servo so there is not reason to have it
defined in stylo. A follow-up PR in stylo will remove the struct.


Testing: This change simply moves an existing struct from stylo, so
shouldn't have any behavioral changes.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
2026-02-10 08:02:34 +00:00
Shubham Gupta
914271933b libservo: Remove implicit unit tests entries from Cargo.toml (#42464)
Tests are implicitly detected by `cargo`. So, it is not required to
mention them unless required custom requirments.

Testing: Existing Unit Tests Passed.

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-10 07:56:34 +00:00
webbeef
39d946b01d script: Implement pointer events (#41290)
Remaining failures are due to the missing implementation of the pointer
capture and pointer lock APIs, as well as:

Requires User Activation support:
/html/user-activation/activation-trigger-pointerevent.html?mouse

Blocked on https://github.com/servo/servo/issues/41227 :
/pointerevents/compat/pointerevent_mouse-pointer-on-scrollbar.html

Requires persistentDeviceId:

/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-event.tentative.html
/pointerevents/persistentDeviceId/get-persistendeviceid-from-pointer-mouse-event.tentative.html

Requires pointerenter, pointerover, pointerout, pointerleave events:
/pointerevents/pointerevent_pointerId_scope.html

Requires pointerrawupdate event:
/pointerevents/pointerevent_pointerrawupdate.html
/pointerevents/pointerevent_pointerrawupdate.https.html

Consider implementing non-standard attributes toElement and fromElement:
See https://w3c.github.io/pointerevents/#attributes-and-default-actions

Fails because the pointerId is always 0 for pointermove, maybe caused by
commit 7b00b54ee8 :
/pointerevents/pointerevent_pointermove_isprimary_same_as_pointerdown.html?touch
https://github.com/servo/servo/issues/41250


Testing: Updated wpt expectations
Fixes: https://github.com/servo/servo/issues/38435

Signed-off-by: webbeef <me@webbeef.org>
2026-02-10 07:44:59 +00:00
Tim van der Lippe
8ae4cbebaf script: Fix crash when failed requests finish from a previous generation (#42481)
Most likely a regression introduced in #42208 where the pending loads
counter has been reset. For successful request this wasn't an issue, but
for failed requests it was. Therefore, guard against these generation
request problems by bailing out as soon as we post-process the request
(which we do for all failed requests).

Fixes #42477

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-10 07:00:48 +00:00
dependabot[bot]
020125d521 build: bump unicode-ident from 1.0.22 to 1.0.23 (#42494)
Bumps [unicode-ident](https://github.com/dtolnay/unicode-ident) from
1.0.22 to 1.0.23.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/unicode-ident/releases">unicode-ident's
releases</a>.</em></p>
<blockquote>
<h2>1.0.23</h2>
<ul>
<li>Update <code>rand</code> dev dependency to 0.10</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="94f16bda86"><code>94f16bd</code></a>
Release 1.0.23</li>
<li><a
href="4fb03ab205"><code>4fb03ab</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/unicode-ident/issues/45">#45</a>
from dtolnay/rand</li>
<li><a
href="93f6598c48"><code>93f6598</code></a>
Raise required compiler to Rust 1.71</li>
<li><a
href="b8973569fb"><code>b897356</code></a>
Update rand from 0.9 to 0.10</li>
<li><a
href="189659d596"><code>189659d</code></a>
Exclude benchmark dependencies from being compiled by miri</li>
<li><a
href="4a21330970"><code>4a21330</code></a>
Update actions/upload-artifact@v5 -&gt; v6</li>
<li><a
href="8c3d7d7121"><code>8c3d7d7</code></a>
Update actions/upload-artifact@v4 -&gt; v5</li>
<li><a
href="c96169e542"><code>c96169e</code></a>
Update to 2021 edition</li>
<li><a
href="8f51926b02"><code>8f51926</code></a>
Raise required compiler to Rust 1.68</li>
<li><a
href="88c4aec114"><code>88c4aec</code></a>
Raise minimum tested compiler to rust 1.86</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/unicode-ident/compare/1.0.22...1.0.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=unicode-ident&package-manager=cargo&previous-version=1.0.22&new-version=1.0.23)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 03:18:54 +00:00
dependabot[bot]
251d56641e build: bump zmij from 1.0.19 to 1.0.20 (#42495)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.19 to 1.0.20.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="41df483ad3"><code>41df483</code></a>
Release 1.0.20</li>
<li><a
href="4d804ff133"><code>4d804ff</code></a>
Sync to vitaut/zmij@378575c</li>
<li><a
href="5a8a035dd5"><code>5a8a035</code></a>
Shrink unused Pow10SignificandsTable data</li>
<li><a
href="b7080177a3"><code>b708017</code></a>
Sync to vitaut/zmij@e9bf7b3</li>
<li><a
href="cb145cccda"><code>cb145cc</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/zmij/issues/20">#20</a> from
dtolnay/rand</li>
<li><a
href="1fe8dffd51"><code>1fe8dff</code></a>
Raise required compiler to Rust 1.71</li>
<li><a
href="87278a4090"><code>87278a4</code></a>
Update rand from 0.9 to 0.10</li>
<li><a
href="871d1e2d7f"><code>871d1e2</code></a>
Sync to vitaut/zmij@9415751</li>
<li><a
href="4043fa767b"><code>4043fa7</code></a>
Ignore modulo_one clippy lint</li>
<li><a
href="077ffb362c"><code>077ffb3</code></a>
Sync to vitaut/zmij@7dede32</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/zmij/compare/1.0.19...1.0.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.19&new-version=1.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 03:10:39 +00:00
dependabot[bot]
84bf52a02f build: bump hyper-util from 0.1.19 to 0.1.20 (#42496)
Bumps [hyper-util](https://github.com/hyperium/hyper-util) from 0.1.19
to 0.1.20.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper-util/releases">hyper-util's
releases</a>.</em></p>
<blockquote>
<h2>v0.1.20</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(matcher): improve domain matching case insensitivity by <a
href="https://github.com/chen-hongzhi"><code>@​chen-hongzhi</code></a>
in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/251">hyperium/hyper-util#251</a></li>
<li>fix(matcher): improve subdomain matching case insensitivity by <a
href="https://github.com/0x676e67"><code>@​0x676e67</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/252">hyperium/hyper-util#252</a></li>
<li>fix(docs): correct malformed reference link in set_interface by <a
href="https://github.com/magurotuna"><code>@​magurotuna</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/254">hyperium/hyper-util#254</a></li>
<li>chore(ci): update to actions/checkout@v6 by <a
href="https://github.com/tottoto"><code>@​tottoto</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/261">hyperium/hyper-util#261</a></li>
<li>chore: remove unused mac imports by <a
href="https://github.com/bts"><code>@​bts</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/260">hyperium/hyper-util#260</a></li>
<li>bump MSRV to 1.64 by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper-util/pull/258">hyperium/hyper-util#258</a></li>
<li>chore: bump <code>system-configuration</code> to 0.7 by <a
href="https://github.com/BugenZhao"><code>@​BugenZhao</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/256">hyperium/hyper-util#256</a></li>
<li>chore: use standard library api by <a
href="https://github.com/tottoto"><code>@​tottoto</code></a> in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/263">hyperium/hyper-util#263</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/chen-hongzhi"><code>@​chen-hongzhi</code></a>
made their first contribution in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/251">hyperium/hyper-util#251</a></li>
<li><a href="https://github.com/bts"><code>@​bts</code></a> made their
first contribution in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/260">hyperium/hyper-util#260</a></li>
<li><a href="https://github.com/BugenZhao"><code>@​BugenZhao</code></a>
made their first contribution in <a
href="https://redirect.github.com/hyperium/hyper-util/pull/256">hyperium/hyper-util#256</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/hyperium/hyper-util/compare/v0.1.19...v0.1.20">https://github.com/hyperium/hyper-util/compare/v0.1.19...v0.1.20</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper-util/blob/master/CHANGELOG.md">hyper-util's
changelog</a>.</em></p>
<blockquote>
<h1>0.1.20 (2026-02-02)</h1>
<ul>
<li>Fix <code>proxy::Matcher</code> to properly match domains regardless
of casing</li>
<li>Fix system proxy matcher dependency on macOS when used in sandboxed
environements.</li>
<li>Increased MSRV to 1.64.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b23a13e2b7"><code>b23a13e</code></a>
v0.1.20</li>
<li><a
href="ffa53913be"><code>ffa5391</code></a>
chore: use standard library api (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/263">#263</a>)</li>
<li><a
href="b43aeabab2"><code>b43aeab</code></a>
chore: bump <code>system-configuration</code> to 0.7 (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/256">#256</a>)</li>
<li><a
href="d841f5d7d4"><code>d841f5d</code></a>
bump MSRV to 1.64 (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/258">#258</a>)</li>
<li><a
href="af1965639f"><code>af19656</code></a>
chore(client): remove unused mac imports in system proxy (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/260">#260</a>)</li>
<li><a
href="ad6a63da3e"><code>ad6a63d</code></a>
chore(ci): update to actions/checkout@v6 (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/261">#261</a>)</li>
<li><a
href="d5503b2b47"><code>d5503b2</code></a>
docs(client): correct malformed reference link in set_interface (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/254">#254</a>)</li>
<li><a
href="8c4f4a0b4b"><code>8c4f4a0</code></a>
fix(matcher): improve subdomain matching case insensitivity (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/252">#252</a>)</li>
<li><a
href="1b3fa96b1b"><code>1b3fa96</code></a>
fix(matcher): improve domain matching case insensitivity (<a
href="https://redirect.github.com/hyperium/hyper-util/issues/251">#251</a>)</li>
<li>See full diff in <a
href="https://github.com/hyperium/hyper-util/compare/v0.1.19...v0.1.20">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=hyper-util&package-manager=cargo&previous-version=0.1.19&new-version=0.1.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 03:03:26 +00:00
dependabot[bot]
5de612f26a build: bump libc from 0.2.180 to 0.2.181 (#42493)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.180 to 0.2.181.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.181</h2>
<h3>Added</h3>
<ul>
<li>Apple: Add <code>MADV_ZERO</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4924">#4924</a>)</li>
<li>Redox: Add <code>makedev</code>, <code>major</code>, and
<code>minor</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4928">#4928</a>)</li>
<li>GLibc: Add <code>PTRACE_SET_SYSCALL_INFO</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4933">#4933</a>)</li>
<li>OpenBSD: Add more kqueue related constants for (<a
href="https://redirect.github.com/rust-lang/libc/pull/4945">#4945</a>)</li>
<li>Linux: add CAN error types (<a
href="https://redirect.github.com/rust-lang/libc/pull/4944">#4944</a>)</li>
<li>OpenBSD: Add siginfo_t::si_status (<a
href="https://redirect.github.com/rust-lang/libc/pull/4946">#4946</a>)</li>
<li>QNX NTO: Add <code>max_align_t</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4927">#4927</a>)</li>
<li>Illumos: Add <code>_CS_PATH</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4956">#4956</a>)</li>
<li>OpenBSD: add <code>ppoll</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4957">#4957</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>AIX: Change 'tv_nsec' of 'struct timespec' to type 'c_long' (<a
href="https://redirect.github.com/rust-lang/libc/pull/4931">#4931</a>)</li>
<li>AIX: Use 'struct st_timespec' in 'struct stat{,64}' (<a
href="https://redirect.github.com/rust-lang/libc/pull/4931">#4931</a>)</li>
<li>Glibc: Link old version of <code>tc{g,s}etattr</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4938">#4938</a>)</li>
<li>Glibc: Link the correct version of <code>cf{g,s}et{i,o}speed</code>
on mips{32,64}r6 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4938">#4938</a>)</li>
<li>OpenBSD: Fix constness of tm.tm_zone (<a
href="https://redirect.github.com/rust-lang/libc/pull/4948">#4948</a>)</li>
<li>OpenBSD: Fix the definition of <code>ptrace_thread_state</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4947">#4947</a>)</li>
<li>QuRT: Fix type visibility and defs (<a
href="https://redirect.github.com/rust-lang/libc/pull/4932">#4932</a>)</li>
<li>Redox: Fix dev_t (<a
href="https://redirect.github.com/rust-lang/libc/pull/4928">#4928</a>)</li>
<li>Redox: Fix values for <code>PTHREAD_MUTEX_{NORMAL, RECURSIVE}</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4943">#4943</a>)</li>
<li>Various: Mark additional fields as private padding (<a
href="https://redirect.github.com/rust-lang/libc/pull/4922">#4922</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Fuchsia: Update <code>SO_*</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4937">#4937</a>)</li>
<li>Revert &quot;musl: convert inline timespecs to timespec&quot;
(resolves build issues on targets only supported by Musl 1.2.3+ ) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4958">#4958</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.181/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.180...0.2.181">0.2.181</a>
- 2026-02-09</h2>
<h3>Added</h3>
<ul>
<li>Apple: Add <code>MADV_ZERO</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4924">#4924</a>)</li>
<li>Redox: Add <code>makedev</code>, <code>major</code>, and
<code>minor</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4928">#4928</a>)</li>
<li>GLibc: Add <code>PTRACE_SET_SYSCALL_INFO</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4933">#4933</a>)</li>
<li>OpenBSD: Add more kqueue related constants for (<a
href="https://redirect.github.com/rust-lang/libc/pull/4945">#4945</a>)</li>
<li>Linux: add CAN error types (<a
href="https://redirect.github.com/rust-lang/libc/pull/4944">#4944</a>)</li>
<li>OpenBSD: Add siginfo_t::si_status (<a
href="https://redirect.github.com/rust-lang/libc/pull/4946">#4946</a>)</li>
<li>QNX NTO: Add <code>max_align_t</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4927">#4927</a>)</li>
<li>Illumos: Add <code>_CS_PATH</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4956">#4956</a>)</li>
<li>OpenBSD: add <code>ppoll</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4957">#4957</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>AIX: Change 'tv_nsec' of 'struct timespec' to type 'c_long' (<a
href="https://redirect.github.com/rust-lang/libc/pull/4931">#4931</a>)</li>
<li>AIX: Use 'struct st_timespec' in 'struct stat{,64}' (<a
href="https://redirect.github.com/rust-lang/libc/pull/4931">#4931</a>)</li>
<li>Glibc: Link old version of <code>tc{g,s}etattr</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4938">#4938</a>)</li>
<li>Glibc: Link the correct version of <code>cf{g,s}et{i,o}speed</code>
on mips{32,64}r6 (<a
href="https://redirect.github.com/rust-lang/libc/pull/4938">#4938</a>)</li>
<li>OpenBSD: Fix constness of tm.tm_zone (<a
href="https://redirect.github.com/rust-lang/libc/pull/4948">#4948</a>)</li>
<li>OpenBSD: Fix the definition of <code>ptrace_thread_state</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4947">#4947</a>)</li>
<li>QuRT: Fix type visibility and defs (<a
href="https://redirect.github.com/rust-lang/libc/pull/4932">#4932</a>)</li>
<li>Redox: Fix dev_t (<a
href="https://redirect.github.com/rust-lang/libc/pull/4928">#4928</a>)</li>
<li>Redox: Fix values for <code>PTHREAD_MUTEX_{NORMAL, RECURSIVE}</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4943">#4943</a>)</li>
<li>Various: Mark additional fields as private padding (<a
href="https://redirect.github.com/rust-lang/libc/pull/4922">#4922</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Fuchsia: Update <code>SO_*</code> constants (<a
href="https://redirect.github.com/rust-lang/libc/pull/4937">#4937</a>)</li>
<li>Revert &quot;musl: convert inline timespecs to timespec&quot;
(resolves build issues on targets only supported by Musl 1.2.3+ ) (<a
href="https://redirect.github.com/rust-lang/libc/pull/4958">#4958</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d37b0aa96f"><code>d37b0aa</code></a>
chore: Release libc 0.2.181</li>
<li><a
href="08f7df78c0"><code>08f7df7</code></a>
Revert &quot;musl: convert inline timespecs to timespec&quot;</li>
<li><a
href="7710a7f3e9"><code>7710a7f</code></a>
tests linux: do not skip tests requiring kernel &lt;= 6.8</li>
<li><a
href="83360a32ca"><code>83360a3</code></a>
CI linux: Move to Ubuntu25.04 for i686</li>
<li><a
href="cab60d9e14"><code>cab60d9</code></a>
Macro cleanups.</li>
<li><a
href="a6168e102b"><code>a6168e1</code></a>
Remove <code>__item!</code>.</li>
<li><a
href="52fcf32016"><code>52fcf32</code></a>
checks termios size in the baud test</li>
<li><a
href="5971f2fe49"><code>5971f2f</code></a>
fix libc-test ctest on mips64 and sparc64</li>
<li><a
href="1813ac84ea"><code>1813ac8</code></a>
links old version for glibc on mips{32,64}r6</li>
<li><a
href="6c7e28237f"><code>6c7e282</code></a>
links old version of tc{g,s}etattr for glibc on mips(64) and
sparc(64)</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.180...0.2.181">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.180&new-version=0.2.181)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 02:46:45 +00:00
Sebastian C
cb11e797b5 script: cookiestore: implement steps to 'set a cookie' (#42435)
Implements the `set_a_cookie` behavior from the cookiestore spec.

Testing: cookiestore WPT tests cover this

---------

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2026-02-09 20:16:46 +00:00
Narfinger
c324141fb4 base: This cleans up some old unneeded ignore annotation for MallocSizeOf and updates some descriptions (#42483)
We implemented many more MallocSizeOf tests (even if some such as
channels are zero).
Meaning we can not ignore more of it making the code cleaner.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-09 17:34:03 +00:00
Ashwin Naren
232d434701 Add servo:config page (#40324)
Similar to about:config from firefox. All preferences are editable;
editing them mid-runtime is not guaranteed to cause any effects. This is
separate from servo:preferences, which selectively groups and exposes
preferences. This probably would become more useful if/when preferences
become persistent.

<img width="1136" height="880" alt="Screenshot 2025-10-31 at 10 19
57 PM"
src="https://github.com/user-attachments/assets/2ef759d8-06a4-457f-b9df-331cc3525338"
/>


Followup work:
- Remove `getStringPreference`, `getIntPreference`, and
`getBoolPreference`. Using `getPreference` and `preferenceType` is more
flexible.
- Make more of these config options work on the fly.
- Allow for reverting config options.

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-09 17:31:59 +00:00
Narfinger
48581c8de7 deps: Update ipc-channel (#42161)
This updates ipc-channel.

Companion Pr in servo media: https://github.com/servo/media/pull/486

This currently uses git revisions temporarily.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Full try run here:
https://github.com/Narfinger/servo/actions/runs/21471578693

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-09 17:25:53 +00:00
Asset Malik
1a406e4b71 ohos CI: Update hitrace-bench to 0.10.0 to add LCP and FCP metrics (#42164)
Update ohos.yml hitrace-bench and runs.json to 0.10.0

Testing: This should be testing using CI

Signed-off-by: jane <5373400+janeoa@users.noreply.github.com>
2026-02-09 14:32:38 +00:00
Manuel Rego
2fc31b7ff8 Fix comment in the nightly workflow (#42475)
Testing: No needed just fixing a comment.

Signed-off-by: Manuel Rego Casasnovas <rego@igalia.com>
2026-02-09 13:58:15 +00:00
pralkarz
b1012479fd mach: run fmt with the root dir as cwd (#42473)
`contextdir.chdir` is not thread-safe, but the formatting runs
synchronously in a single thread, so it's fine.

Testing: Made some changes to various `.rs`, `.py`, and `.toml` files,
and ran `../mach fmt` from a few different subdirectories to ensure it
picks up the files to reformat.
Fixes: #42472

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-09 13:27:00 +00:00
pralkarz
fbdb62ac93 IndexedDB: correct the expected result for a test set (#42449)
After the changes from #42443, there are no longer any unhandled errors
in the`idbobjectstore_createIndex.any.worker.html` tests, so the result
is `TIMEOUT` rather than `ERROR`.

Also remove the now-passing test labels for consistency with other
`.ini` files.

Testing: No unexpected results in
`idbobjectstore_createIndex.any.worker.html`, the tests now run as
expected.
Fixes: #42445

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-09 13:05:03 +00:00
atbrakhi
d6097d1967 devtools: Implement debugger Eval event (#42306)
Replace the `EvaluateJS` function to use `debugger.js` `Eval` event and
the proper context. This takes the global context and calls
[executeInGlobal](https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Object.html#executeinglobal-code-options).

In future we also add the version that takes a frame and calls
[eval](https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Frame.html#eval-code-options).

Testing: No new tests added yet, Old tests are not impacted by this
change.
Fixes: Part of https://github.com/servo/servo/issues/36027

---------

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-02-09 12:58:51 +00:00
Asset Malik
7cf131106e servoshell: Support formatting key,value pairs of events via hitrace on ohos (#41738)
`start_trace_ex` includes not only name, but fields and values of the
trace

Testing: I've passed LargestContentfulPaint pref and got it in the
hitrace.

---------

Signed-off-by: jane <5373400+janeoa@users.noreply.github.com>
2026-02-09 11:46:01 +00:00
Oriol Brufau
2a3f23c78d Upgrade Stylo to 2026-02-02 (#42361)
This continues #41916

Changelog:
- Upstream:
360787fff5...7cd2a178d3
- Servo fixups:
e4d50e905e...d9831d464b

Stylo tracking issue: https://github.com/servo/stylo/issues/305

In particular, this adds support for `alignment-baseline` and
`baseline-shift`, and turns `vertical-align` into a shorthand of them.
This also introduces `vertical-align: center`.

Testing: Various tests improve. Some internal tests are updated because
they were wrong. And some fail because we don't support presentation
attributes on SVG elements.

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-09 11:16:42 +00:00
Martin Robinson
489c0f0159 servoshell: Foward WindowEvent::Focused events to egui (#42470)
When doing event handling on desktop servoshell, ensure that
`WindowEvent::Focused(true)` is forwarded to egui. This makes it so that
egui knows to show the text cursor in the URL bar input field.

Testing: We currently do not have a way to test visual behavior at this
level of servoshell.
Fixes: #42091.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-09 10:20:35 +00:00
Euclid Ye
03d8d16748 paint: Track TouchId in PendingTouchInputEvent (#42468)
As you can tell from branch name, the initial goal is to add multi-touch
support for touchmove.
But things get too messy, so I decide to split into two PRs.

This PR
- Track `TouchId` in `PendingTouchInputEvent`
- Rename `id` to `touch_id` for `TouchId`. This is to make distinction
from `id: InputEventId`,
which became very confusing while implementing the initial goal.

Testing: No behaviour change.
Part of #41923

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-09 08:49:38 +00:00
Narfinger
7488c127db OHOS: Update openharmony versions to api lvl 21 (#42404)
This updates the Openharmony required version to API lvl 21 (6.0.0.1
OpenHarmony and 6.0.1 HarmonyOS).
We need API level 19+ for https://github.com/servo/servo/pull/41738,
however an API level 19 SDK was never released for OpenHarmony. API-20
seems to be the same as the the 6.0-beta release, so we are playing it
safe and directly going for the API-21 release, which is also the 6.0.1
release that the actual HarmonyOS 6 update was, so it should be the most
polished.
This also has the update for the version used in CI.

The HarmonyOS runners are already updated.

Testing: Successful openharmony run here:
https://github.com/Narfinger/servo/actions/runs/21755920480

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-09 02:28:05 +00:00
dependabot[bot]
d5fb51a563 build: bump memchr from 2.7.6 to 2.8.0 (#42462)
Bumps [memchr](https://github.com/BurntSushi/memchr) from 2.7.6 to
2.8.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="886ca4ca48"><code>886ca4c</code></a>
2.8.0</li>
<li><a
href="7de50d0f7a"><code>7de50d0</code></a>
memmem: add owned finder constructor variants</li>
<li><a
href="1230fc5c63"><code>1230fc5</code></a>
benchmarks: fix date in file name</li>
<li><a
href="43300c6cb6"><code>43300c6</code></a>
benchmarks: add latest x86-64 benchmark results</li>
<li><a
href="9bf2301912"><code>9bf2301</code></a>
benchmarks: update everything</li>
<li>See full diff in <a
href="https://github.com/BurntSushi/memchr/compare/2.7.6...2.8.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=memchr&package-manager=cargo&previous-version=2.7.6&new-version=2.8.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 00:43:23 +00:00
dependabot[bot]
fe85fe7c01 build: bump async-compression from 0.4.37 to 0.4.39 (#42459)
Bumps
[async-compression](https://github.com/Nullus157/async-compression) from
0.4.37 to 0.4.39.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b1da57fecf"><code>b1da57f</code></a>
chore(async-compression): release v0.4.39 (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/447">#447</a>)</li>
<li><a
href="f95a4b9203"><code>f95a4b9</code></a>
Revert &quot;Fix decoding of empty response streams.&quot; (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/446">#446</a>)</li>
<li><a
href="b4e46d8d68"><code>b4e46d8</code></a>
chore(async-compression): release v0.4.38 (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/443">#443</a>)</li>
<li><a
href="e67f0b123a"><code>e67f0b1</code></a>
Fix decoding of empty response streams. (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/444">#444</a>)</li>
<li><a
href="f5e532e298"><code>f5e532e</code></a>
chore(deps): update proptest-derive requirement from 0.7 to 0.8 (<a
href="https://redirect.github.com/Nullus157/async-compression/issues/442">#442</a>)</li>
<li>See full diff in <a
href="https://github.com/Nullus157/async-compression/compare/async-compression-v0.4.37...async-compression-v0.4.39">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=async-compression&package-manager=cargo&previous-version=0.4.37&new-version=0.4.39)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 00:43:16 +00:00
dependabot[bot]
41986f9a2c build: bump clap from 4.5.56 to 4.5.57 (#42460)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.56 to 4.5.57.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.57</h2>
<h2>[4.5.57] - 2026-02-03</h2>
<h3>Fixes</h3>
<ul>
<li>Regression from 4.5.55 where having an argument with
<code>.value_terminator(&quot;--&quot;)</code> caused problems with an
argument with <code>.last(true)</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.57] - 2026-02-03</h2>
<h3>Fixes</h3>
<ul>
<li>Regression from 4.5.55 where having an argument with
<code>.value_terminator(&quot;--&quot;)</code> caused problems with an
argument with <code>.last(true)</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="69c0ddbbfb"><code>69c0ddb</code></a>
chore: Release</li>
<li><a
href="8206bba73f"><code>8206bba</code></a>
docs: Update changelog</li>
<li><a
href="c109d67ea4"><code>c109d67</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6104">#6104</a>
from epage/hide</li>
<li><a
href="9d7f2128f7"><code>9d7f212</code></a>
fix(complete): Hide dot files on dynamic completer</li>
<li><a
href="77b3fdbbea"><code>77b3fdb</code></a>
test(complete): Show dot file behavior</li>
<li><a
href="f89b9b8d1b"><code>f89b9b8</code></a>
test(derive): Make stable across upgrade</li>
<li><a
href="58eb8a937a"><code>58eb8a9</code></a>
chore: Release</li>
<li><a
href="10a2a7559b"><code>10a2a75</code></a>
docs: Update changelog</li>
<li><a
href="a42eebf56b"><code>a42eebf</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6103">#6103</a>
from epage/mut_subcommands</li>
<li><a
href="5335f54d73"><code>5335f54</code></a>
feat: Add Command::mut_subcommands</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.56...clap_complete-v4.5.57">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.56&new-version=4.5.57)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 00:32:04 +00:00
dependabot[bot]
12928eb97f build: bump ryu from 1.0.22 to 1.0.23 (#42458)
Bumps [ryu](https://github.com/dtolnay/ryu) from 1.0.22 to 1.0.23.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/ryu/releases">ryu's
releases</a>.</em></p>
<blockquote>
<h2>1.0.23</h2>
<ul>
<li>Update <code>rand</code> dev dependency to 0.10</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f0b52bb194"><code>f0b52bb</code></a>
Release 1.0.23</li>
<li><a
href="631348be50"><code>631348b</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/ryu/issues/62">#62</a> from
dtolnay/rand</li>
<li><a
href="e9960fd2cd"><code>e9960fd</code></a>
Raise required compiler to Rust 1.71</li>
<li><a
href="04a394cdfa"><code>04a394c</code></a>
Update rand from 0.9 to 0.10</li>
<li><a
href="a3085c5842"><code>a3085c5</code></a>
Update rand_xorshift dev-dependency to 0.5 release candidate</li>
<li><a
href="989ed6173d"><code>989ed61</code></a>
Ignore rand_xorshift 0.5.0 until release of rand 0.10.0</li>
<li><a
href="8fa153cd97"><code>8fa153c</code></a>
Sync to ulfjack/ryu@e3e090c</li>
<li><a
href="03cc7950de"><code>03cc795</code></a>
Switch to 9975WX benchmark data</li>
<li><a
href="b236111376"><code>b236111</code></a>
Sync to ulfjack/ryu@1264a94</li>
<li><a
href="e4cdd4988c"><code>e4cdd49</code></a>
Delete old chart code</li>
<li>See full diff in <a
href="https://github.com/dtolnay/ryu/compare/1.0.22...1.0.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ryu&package-manager=cargo&previous-version=1.0.22&new-version=1.0.23)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 00:24:24 +00:00
dependabot[bot]
c75b95be6c build: bump sea-query from 1.0.0-rc.30 to 1.0.0-rc.31 in the sea-query-related group (#42457)
Bumps the sea-query-related group with 1 update:
[sea-query](https://github.com/SeaQL/sea-query).

Updates `sea-query` from 1.0.0-rc.30 to 1.0.0-rc.31
<details>
<summary>Commits</summary>
<ul>
<li><a
href="94d7e90cf1"><code>94d7e90</code></a>
1.0.0-rc.31</li>
<li><a
href="11afe6845e"><code>11afe68</code></a>
Add Expr eq_any and ne_all</li>
<li><a
href="3100ce95c0"><code>3100ce9</code></a>
Add Value::array_type</li>
<li><a
href="66d422749b"><code>66d4227</code></a>
Revert &quot;Support &amp;[String]&quot;</li>
<li><a
href="5d8c2f9141"><code>5d8c2f9</code></a>
Support &amp;[String]</li>
<li><a
href="d3bcb0dfd1"><code>d3bcb0d</code></a>
Fix GENERATED ALWAYS</li>
<li><a
href="0000060896"><code>0000060</code></a>
clarify default behaviour on StringLen</li>
<li><a
href="af866a9d69"><code>af866a9</code></a>
Implement SELECT INTO for Postgres</li>
<li><a
href="cf2e79ad21"><code>cf2e79a</code></a>
sea-query-sqlx 0.8.0-rc.14</li>
<li>See full diff in <a
href="https://github.com/SeaQL/sea-query/compare/1.0.0-rc.30...1.0.0-rc.31">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sea-query&package-manager=cargo&previous-version=1.0.0-rc.30&new-version=1.0.0-rc.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-09 00:21:06 +00:00
Euclid Ye
c5b391390e paint: Unify scrolling/pinch zoom behaviour across platforms (#42387)
There has been a weird discrepancy between headed/headless test
automation,
as stated in #42386 and
https://github.com/servo/servo/issues/42320#issuecomment-3846005540.
The problem identified is more general than the intial issue: 
we need to use CSS Pixel and Device Pixel consistently in these cases.

- Convert threshold unit to ensure cross-platform consistency.
- Adjust `TOUCH_PAN_MIN_SCREEN_PX`: this is tested on Android/Ohos,
to match the pinch/scrolling threshold of Firefox/Chrome.

This is critical for test automation which always relies on CSS pixel.

Testing: Added which ensures pinch zoom does happen, and there is no
crash for #42320.
Fixes: #42386

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-09 00:01:30 +00:00
Amin-Missaoui
ea3ae4be1b script: remove is_modal and replace with ElementState::MODAL instead (#42426) (#42448)
Removed `is_modal` and replaced with `ElementState::MODAL` inside all
conditional checks as per suggestion by
[@Loirooriol](https://github.com/servo/servo/issues/42426).

Testing: Not needed, no behavior change
Fixes: #42426

Signed-off-by: Amin <aminmissaoui12@gmail.com>
2026-02-08 16:56:09 +00:00
Oriol Brufau
e0212b38e8 Enable layout.css.attr.enabled pref for css-values tests (#42410)
The implementation of `attr()` in Stylo is not complete, but this way we
can start testing for it.

Bumps Stylo to https://github.com/servo/stylo/pull/306

Testing: Various tests pass, also a few failures. No impact on users,
even with experimental features enabled.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-08 13:51:07 +00:00
quint3ns
15ad383c9f IndexedDB: Throw InvalidStateError if object store is deleted in createIndex/deleteIndex (#42443)
This PR adds a check to ensure that createIndex and deleteIndex throw an
InvalidStateError if the object store has been deleted, aligning with
the W3C spec.

I checked the spec to make sure the error check happens in the right
order (checking the transaction mode before the deleted state). I've
verified this with the Web Platform Tests, and the createIndex test is
now passing.

Fixes #42436

---------

Signed-off-by: bulltickr <verbroekj@gmail.com>
2026-02-08 10:20:30 +00:00
Ashwin Naren
3442a91766 indexeddb: Implement index retrieval (#42440)
Retrieve already stored indexes from the backend when querying for other
object store data.

Also removes the extraneous blocking IPC call when creating an
`IDBObjectStore` object by batching all the info into a single struct.

Testing: WPT
Fixes: #42438

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-08 09:22:50 +00:00
Ashwin Naren
7a810eda0a indexeddb: Expose keypath in idbindex (#42431)
Implements `IDBIndex.keypath`.

Testing: WPT
Fixes: Partially #38100

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-08 05:25:57 +00:00
Servo WPT Sync
614c4e407e Sync WPT with upstream (08-02-2026) (#42433)
Automated downstream sync of changes from upstream as of 08-02-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-02-08 03:49:29 +00:00
Euclid Ye
ccd271c8a5 testdriver harness: Allow duration 0 for actions/tick (#42398)
Previously, even if you explicitly set duration 0, it still ends up with
`None`.
But you can set duration 0 in wdspec python tests.
This complies with
[spec](https://w3c.github.io/webdriver/#dfn-process-a-wheel-action:~:text=If%20duration%20is%20not%20undefined%20and%20duration%20is%20not%20an%20Integer%20greater%20than%20or%20equal%20to%200%2C%20return%20error%20with%20error%20code%20invalid%20argument%2E):
duration can be greater than or equal to 0.

Testing: There is no existing testdriver tests that use duration 0.
Fixes: https://github.com/web-platform-tests/wpt/issues/57606
Found in:
https://github.com/servo/servo/pull/42387#issuecomment-3859501808

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-08 01:25:31 +00:00
Oriol Brufau
9ac519da73 wpt: Unskip most css-inline tests (#42430)
This is in preparation of #42361, which will add support for
`baseline-shift`, so we shouldn't skip these tests.

The `animation` and `model` and `parsing` subdirectories also seem
relevant.

Thus this only skips `initial-letter` and `text-box-trim`.

Testing: Just enabling more tests

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-08 00:32:38 +00:00
Martin Robinson
36aa8e9c73 layout: Expand text clipping boundaries based on the largest advance in run (#42403)
Servo does not yet calculate the ink overflow area, as this sort of
thing is usually a result of `contain: paint` which Servo does not
support yet. We just need to ensure that text clipping is large
enough to contain the ink of all of the glyphs in the run. This change
just expands the rectangle based on glyph advances by 2 times the
largest advance, which should be big enough for most glyphs.

This is a big of a workaround until we have support for `contain:
paint`.

Testing:
- This change adds a Servo-specific test to ensure glyphs are fully
inked. While this test would run just fine in other browsers, it isn't
very
useful to them as this is test is very specific to the way that Servo
draws
glyphs.
- This also fixes a variety of existing WPT tests.

Fixes: #41413.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-07 22:12:15 +00:00
Ashwin Naren
879f3e1451 indexeddb: IDBIndex creation and deletion (#38840)
Implements `createIndex` and `deleteIndex`, they have already been
implemented in the backend.

Testing: WPT
Fixes: Partially #38100

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-07 21:41:25 +00:00
Bryan Smith
a6a3b1a0e5 Script: Use &mut JSContext in BroadcastChannel::PostMessage (#42417)
Replace `crate::script_runtime::JSContext` with `js::context::JSContext`
in `BroadcastChannel::PostMessage` and update interface binding.

Testing: Builds and runs locally.
Part of: https://github.com/servo/servo/issues/42347

---------

Signed-off-by: BryanSmith00 <bryansmith8023@tuta.com>
2026-02-07 19:53:00 +00:00
Sebastian C
c330c7c436 script: cookiestore: Normalize cookie name and value in Get and Set (#42427)
Trims leading and trailing spaces and tabs for names and values in
Get/GetAll/Set. The specification does this in the query/set cookie
methods but those functions are split across the script, resource
thread, and cookie storage. Instead I'm normalize the values at the API
entry points so we have the normalized values everywhere.

Testing: Cookiestore WPT tests cover this

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2026-02-07 19:48:04 +00:00
Sebastian C
ceab4b6094 mach: use --no-verify for mach try push command (#42429)
Skip push hooks for try command. This speeds up try for me, which
normally means waiting for clippy a second time. The commit step is
already using `--no-verify`.

Testing: tested this change locally and it works

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2026-02-07 18:46:00 +00:00
webbeef
5b54abeac7 websocket: resolve relative urls in constructor (#42425)
Implement steps 1. and 2. of the websocket constructor to resolve the
url against the current settings API base URL.

Testing: Some WPT tests are now passing

Signed-off-by: webbeef <me@webbeef.org>
2026-02-07 15:58:35 +00:00
Kingsley Yung
05d1bb60e1 script: Combine import key operations of RSA algorithms (#42422)
The import key operations of

- RSASSA-PKCS1-v1_5 (`rsassa_pkcs1_v1_5_operation::import_key`)
- RSA-PSS (`rsa_pss::import_key`)
- RSA_OAEP (`rsa_oaep::import_key`)

only differ from each other by a few steps. This patch combines them
into a single function (`rsa_common::import_key`) shared among them.

The enum variant `RsaAlgorithm::RsaSsaPkcs1v15` is also renamed as
`RsaAlgorithm::RsassaPkcs1v1_5` for clarity.

Testing: Refactoring. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-07 12:20:09 +00:00
Tim van der Lippe
cc0e98d3a9 script: Start implementation of shared attribute processing for iframes (#42254)
Start with implementing the new algorithms per the spec. This fixes the
case where the load event should be fired, but only if a src exists and
it is about:blank and it is connected for the very first time.

Part of #31973

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-07 08:48:35 +00:00
Sebastian C
639fccd03f Fix cookiestore defaults propagation (#42418)
Also fixes propagating expiry clamping to underlying cookie object. This
matters when attempting to inspect expiry time from a retrieved cookie.
According to the WPT tests, setting max-age in a cookie string is
supposed to be visible in the retrieved expiry.


Testing: cookiestore WPT tests cover this behavior

Signed-off-by: Sebastian C <sebsebmc@gmail.com>
2026-02-07 07:10:01 +00:00
Shubham Gupta
60fc5c3e52 script: Expose toJSON on PerformancePaintTiming (#42396)
This PR targets on adding JSON to `IDL`.

Testing: `components/servo/tests/performance_paint_timing.rs`
Fixes: Updated expectations for Existing WPT Tests.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-07 07:06:39 +00:00
Tim van der Lippe
cb37480071 script: Fix last remaining base element test (#42339)
This was the last failure in this directory. To fix it, I had to spelunk
into a couple of places:

1. We shouldn't use the `base_element()` of the document, but select the
first base element, regardless if it has an empty href or not
2. We didn't implement target checking for elements. Only some values
are valid and an empty target (which the test also confusingly uses) is
not valid. Hence, it should fallback to the base element
3. We weren't sanitizing the value in case it contains an ASCII tab or
newline + U+003C. This is true for both the form target as well as for
other link elements.

All in all, added a lot more specification text to figure out what was
going on.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-07 03:36:34 +00:00
Narfinger
c6fbaf33e2 ohos ci: Remove HOS smoketest (#42334)
Smoketest is subsumed by scenario test and can be removed.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: *Describe how this pull request is tested or why it doesn't
require tests*

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-06 17:42:43 +00:00
Martin Robinson
eeb31a3cec deps: Merge the servo/media repository (#42369)
This change merges http://github.com/servo/media into this repository.
It is only used by Servo and version upgrades are complicated by having
two repositories. In addition, this avoids the need to refer to
individual commit hashes in the Servo `Cargo.toml`. The hope is that
merging these two repositories will lead to better code organization /
simplification like we have seen with the WebXR support. Initiailly, the
idea was that this media support could be shared with the wider Rust
ecosystem, but I think that hasn't worked out as planned due to the fact
that it is difficult to use the various media packaes outside of the
Servo project and the fact that no one seems to be doing this.

Some changes were made when importing the code:
- The second commit in this PR addresses new clippy warnings from the
imported code.
 - GStreamer Packages are no longer renamed in the media code, so that
   they are named the same as they are currently in Servo.
 - Some examples are not ported as they require being run interactively
   and depend on older version of important libraries like winit.
   Having these dependencies in the core part of Servo isn't very
   convenient. Removed examples:
   - `audio_decoder.rs`: This is meant to be run interactively with a
     file so isn't very useful for testing.
   - Depended on winit GUI (`player` subdirectory):
     - `media_element_source_node.rs`
     - `play_media_stream.rs`
     - `simple_player.rs`
     - `muted_player.rs`
   - `siple_webrtc.rs`: Depended on `webrtc` library:

Testing: This is covered by existing tests. In addition, the job which
runs
the media examples is added to the unit test workflow.

---------

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-06 17:00:03 +00:00
Josh Matthews
8d54bf0a4b servo: Remove Servo::constellation_sender (#42389)
This shouldn't be public, and does not appear to be used anywhere.

Testing: Build-only change.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-02-06 16:59:17 +00:00
TIN TUN AUNG
0fa52e7791 script_bindings: add generic type to webidl record typedefs containing dom interfaces (#42388)
when generating rust bindings for webidl typedef, the `<D>` generic Type
would not be added for record<Key, DomInterface> because
`containsDomInterface` does not take record into account. This change
add the is_Record check in `containsDomInterface`, so `typedef
record<Key, DomInterface>` can be successfully build.

Testing: Manually tested with
https://github.com/servo/servo/issues/42362, and building from scratch
with `./mach build` is successful.
Fixes: https://github.com/servo/servo/issues/42362

---------

Signed-off-by: rayguo17 <rayguo17@gmail.com>
2026-02-06 16:41:50 +00:00
Shubham Gupta
2ca7808083 script: Remove Worker scope from PerformancePaintTiming (#42409)
This will align `PerformancePaintTiming` interface according to `W3C`
specifications.

Specifiactions:
[PerformancePaintTiming](https://w3c.github.io/paint-timing/#sec-PerformancePaintTiming)

Testing: `_mozilla/mozilla/interfaces.worker.html`

Signed-off-by: Shubham Gupta <shubham13297@gmail.com>
2026-02-06 16:32:05 +00:00
Simon Wülker
b6be493876 script: Call ElementStylesheetLoader::load_with_element directly (#42406)
When a `<link>` element loads a stylesheet then it calls
`ElementStylesheetLoader::new`, followed immediately by
calling `load` on the new loader. This is the only place where these
functions are used, so we can coalesce them together and avoid an
unreachable assertion in the process.

This should have no impact on the end user, it's just a cleanup.

Testing: Regressions should be covered by existing tests

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-06 16:30:03 +00:00
Narfinger
b48612a948 Revert "CI: OHOS: Better test for hdc device connected (#42365)" (#42407)
This reverts commit 071f064e2e.

Seems the devices are more finicky in CI.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-06 14:29:30 +00:00
Euclid Ye
5a5d71d67e wpt: Fix syntax error in pointerevent_touch-propagates-when-target-is-video_touch.html (#42405)
The syntax is wrong. We cannot pass an Element as duration. Only Firefox
[was passing
this](https://wpt.fyi/results/pointerevents/pointerevent_touch-propagates-when-target-is-video_touch.html?run_id=5098406608633856&run_id=5170937667518464&run_id=4715813002280960&run_id=5136051728547840),
which is a bug of geckodriver: 


Testing: Updated expectation of existing tests.
This blocks https://github.com/servo/servo/pull/42398,
https://github.com/servo/servo/pull/42387.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-06 14:04:33 +00:00
Martin Robinson
edbce7e854 layout: Properly count characters when segmenting IFC text (#42399)
There was a bug where characters were not properly counted when
segmeting IFC text. Immediately incrementing the
`current_character_index` meant that the count was always one character
off. This character count is mainly used for drawing selections and
really matters when multiple text segments are in a single IFC. This
change fixes that by counting characters in the same way we were
counting byte indices for the text.

Testing: This change adds a Servo-specific WPT-style test. As it is
quite
difficult to reproduce the correct display in a different way, a
mismatch test
is used. Since this is mainly about appearance and is very specific to
our
implementation the test is Servo-specific.
Fixes: #42354.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-06 13:37:19 +00:00
Narfinger
4e85b9946f script: Add check for IntersectionObserver to not connect to the same document multiple times. (#42366)
Previous IntersectionObserver had only connect_to_owner_unchecked
method. We replace this with a checked method to not add the same
IntersectionObserver to the same document multiple times.

This should improve performance as the same IntersectionObserver was
tested multiple times.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation and println statements to see if we do not add us
again to the document.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-06 12:40:23 +00:00
Keerti Gupta this side!!
4c2327e225 libservo: Fix dead code warning and fix two typos in unit tests (#42375)
This PR addresses a dead code warning removed during test builds by
ensuring the servo test helper constructor is exercised. None of the
functional behaviors are changed and this only improves test clarity and
keeps the compiler output warning-free.

Fixes: #42364

---------

Signed-off-by: Keerti Gupta this side!! <24bsm032@iiitdmj.ac.in>
Signed-off-by: Keerti Gupta <24bsm032@iiitdmj.ac.in>
2026-02-06 12:08:19 +00:00
Narfinger
071f064e2e CI: OHOS: Better test for hdc device connected (#42365)
Use a different method to test for phone being connected to the CI.

Fixes: https://github.com/servo/servo/issues/42335

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-06 10:44:52 +00:00
Steven Novaryo
936aaf1ec5 script: Check whether window is top level before looking for it in the ScriptThread (#42390)
Instead of immediately looking for the top-level browsing context's
`Document` in the `ScriptThread`, check whether `Window` is top-level
beforehand. This is a small optimization.

Testing: Existing WPTs (no behavior changes)

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-02-06 10:24:40 +00:00
webbeef
86403fa4e5 layout: get rid of some collect() calls (#42327)
Profiling a speedometer run showed significant time spent in some layout
function in vector allocations. The main change is to switch the result
of `query_box_areas()` from a Vec<T> to and iterator.

Testing: refactoring with no expected test changes

Signed-off-by: webbeef <me@webbeef.org>
2026-02-06 09:38:49 +00:00
Euclid Ye
10209cc183 deny: Skip GHSA-r6v5-fh4h-64xc to unblock CI (#42392)
Unblock the CI.

We cannot upgrade time right now due to MSRV.
This thing has high attack complexity.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-06 08:50:27 +00:00
dependabot[bot]
27faa7ddaa build: bump jiff from 0.2.18 to 0.2.19 (#42381)
Bumps [jiff](https://github.com/BurntSushi/jiff) from 0.2.18 to 0.2.19.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/BurntSushi/jiff/blob/master/CHANGELOG.md">jiff's
changelog</a>.</em></p>
<blockquote>
<h1>0.2.19 (2026-02-05)</h1>
<p>This is a small release with a performance optimization (with respect
to doing
heavily contended arithmetic on <code>Zoned</code> values) and a bug fix
for a panic
that can occur when using <code>%2s</code> in <code>strftime</code>.</p>
<p>Enhancements:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/491">#491</a>:
Avoid cloning <code>TimeZone</code> for consuming operations on
<code>Zoned</code>.</li>
</ul>
<p>Bug fixes:</p>
<ul>
<li><a
href="https://redirect.github.com/BurntSushi/jiff/issues/497">#497</a>:
Fix a panic in <code>timestamp.strftime(&quot;%2s&quot;)</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="52b2b0fcf6"><code>52b2b0f</code></a>
0.2.19</li>
<li><a
href="ef47ecc17f"><code>ef47ecc</code></a>
changelog: 0.2.19</li>
<li><a
href="196442da64"><code>196442d</code></a>
fmt: fix panic in <code>strftime</code> for <code>%2s</code></li>
<li><a
href="3c9ba66739"><code>3c9ba66</code></a>
zoned: kinda optimize <code>Zoned::default()</code></li>
<li><a
href="4c9c982269"><code>4c9c982</code></a>
ci: fix emscripten build</li>
<li><a
href="d41b397367"><code>d41b397</code></a>
zoned: optimize <code>Zoned::{add,sub,add_assign,sub_assign}</code> when
<code>Zoned</code> is cons...</li>
<li><a
href="66ba0fe164"><code>66ba0fe</code></a>
fmt: rip ranged integers out of Temporal RFC 9557 parser</li>
<li><a
href="a651ac7326"><code>a651ac7</code></a>
error: update <code>Error::is_range</code> predicate</li>
<li><a
href="c2dcbca9f8"><code>c2dcbca</code></a>
fmt: refactor Temporal parser to get rid of input capture</li>
<li><a
href="d439a66e87"><code>d439a66</code></a>
fmt: rename <code>strtime::format</code> to
<code>strtime::print</code></li>
<li>Additional commits viewable in <a
href="https://github.com/BurntSushi/jiff/compare/jiff-static-0.2.18...jiff-static-0.2.19">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jiff&package-manager=cargo&previous-version=0.2.18&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 05:59:02 +00:00
Shubham Gupta
80601ce8e6 tests: Enable paint-timing tests (#42025)
We have a implementation of PaintTiming , so we should run the tests
associated with them.

Testing: New tests enabled.

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-02-06 05:58:35 +00:00
Oriol Brufau
4d0606c0c7 Add test tracking web-exposed CSS properties (#42385)
When doing a Stylo upgrade, it may happen that a commit imported from
upstream accidentally enables a CSS property on Servo. That is even more
likely after https://phabricator.services.mozilla.com/D280900, since the
new default is that properties are enabled everywhere.

Therefore, this test will help detect these accidents. Ideally, the test
would only track CSS properties exposed to stable, but that requires
running the test without experimental features, or using internal APIs.
So for now, the test will also track experimental properties.

Testing: just adding a new test, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-06 03:51:57 +00:00
Daniel Paoliello
0f2adc6f05 mach: Force the use of arm64 Python when running with Windows on arm64 (#42371)
There is currently [a bug in
UV](https://github.com/astral-sh/uv/issues/12906) that results in it
using the x64 flavor of Python when running on Arm64 Windows. This then
causes all Python scripts to believe they are on an x64 device and so
Server installs the wrong dependencies and builds for the wrong
architecture.

Testing: Local on my Arm64 Windows device
Contributes to fixing #40611

Signed-off-by: Daniel Paoliello <daniel@meta-sys.info>
2026-02-06 02:58:37 +00:00
npiesco
aa5854ffe3 fix(background_hang_monitor): Use DummySampler on Windows ARM64 (#42341)
Windows ARM64 (aarch64, MSVC) does not support native profiling. PR
updates platform configuration to route Windows ARM64 to DummySampler,
aligning it with other unsupported targets (e.g., Linux musl) and fixing
build compatibility.

PR #42312
- Updates platform configuration + conditional compilation
- Background hang monitor (lib.rs) now selects DummySampler on Windows
ARM64
- Uses DummySampler as SamplerImpl for aarch64 Windows

build/compatibility fix only.

---------

Signed-off-by: npiesco <ngpiesco@gmail.com>
2026-02-06 02:56:16 +00:00
dependabot[bot]
be6a2f99a1 build: bump zerocopy from 0.8.38 to 0.8.39 (#42382)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.38 to
0.8.39.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.39</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Minor doc comment improvements by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2936">google/zerocopy#2936</a></li>
<li>Adopt and document a preference for aligned loads in validation by
<a href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2985">google/zerocopy#2985</a></li>
<li>[derive] Implement <code>#[zerocopy(on_error = skip/fail)]</code> by
<a href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2982">google/zerocopy#2982</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.38...v0.8.39">https://github.com/google/zerocopy/compare/v0.8.38...v0.8.39</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e85ea41a64"><code>e85ea41</code></a>
Release 0.8.39 (<a
href="https://redirect.github.com/google/zerocopy/issues/2993">#2993</a>)</li>
<li><a
href="0cceb237d7"><code>0cceb23</code></a>
[derive] Implement <code>#[zerocopy(on_error = skip/fail)]</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2982">#2982</a>)</li>
<li><a
href="735980cf35"><code>735980c</code></a>
[test] Detect and warn about using cargo for development (<a
href="https://redirect.github.com/google/zerocopy/issues/2990">#2990</a>)</li>
<li><a
href="d10ca3fe90"><code>d10ca3f</code></a>
[tests] Rely on <code>cargo-zerocopy</code> toolchain resolution (<a
href="https://redirect.github.com/google/zerocopy/issues/2989">#2989</a>)</li>
<li><a
href="4f98f5c99a"><code>4f98f5c</code></a>
[test] Move <code>impl_or_verify!</code> tests to <code>doctests</code>
(<a
href="https://redirect.github.com/google/zerocopy/issues/2988">#2988</a>)</li>
<li><a
href="8c01bd1e9a"><code>8c01bd1</code></a>
[cargo-zerocopy] Pass <code>RUSTDOCFLAGS</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2987">#2987</a>)</li>
<li><a
href="d296c262e0"><code>d296c26</code></a>
Adopt and document a preference for aligned loads in validation (<a
href="https://redirect.github.com/google/zerocopy/issues/2985">#2985</a>)</li>
<li><a
href="6b813740fe"><code>6b81374</code></a>
Re-parent orphaned comment (<a
href="https://redirect.github.com/google/zerocopy/issues/2935">#2935</a>)</li>
<li><a
href="67c0fff662"><code>67c0fff</code></a>
Minor doc comment improvements (<a
href="https://redirect.github.com/google/zerocopy/issues/2936">#2936</a>)</li>
<li><a
href="e36bfa1faa"><code>e36bfa1</code></a>
[cargo-zerocopy] Pass --cfg __ZEROCOPY_INTERNAL_USE_ONL_TOOLCHAIN=...
(<a
href="https://redirect.github.com/google/zerocopy/issues/2983">#2983</a>)</li>
<li>See full diff in <a
href="https://github.com/google/zerocopy/compare/v0.8.38...v0.8.39">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.38&new-version=0.8.39)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 01:01:44 +00:00
dependabot[bot]
dcc7f8a8de build: bump anyhow from 1.0.100 to 1.0.101 (#42380)
Bumps [anyhow](https://github.com/dtolnay/anyhow) from 1.0.100 to
1.0.101.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/anyhow/releases">anyhow's
releases</a>.</em></p>
<blockquote>
<h2>1.0.101</h2>
<ul>
<li>Add #[inline] to anyhow::Ok helper (<a
href="https://redirect.github.com/dtolnay/anyhow/issues/437">#437</a>,
thanks <a
href="https://github.com/Ibitier"><code>@​Ibitier</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="80bfe291b1"><code>80bfe29</code></a>
Release 1.0.101</li>
<li><a
href="dff8c432f9"><code>dff8c43</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/437">#437</a>
from Ibitier/inline-ok-helper</li>
<li><a
href="85d9ea9a1c"><code>85d9ea9</code></a>
Add #[inline] to anyhow::Ok helper</li>
<li><a
href="54036cc289"><code>54036cc</code></a>
Update ui test suite to nightly-2026-01-21</li>
<li><a
href="cce0579d85"><code>cce0579</code></a>
Update actions/upload-artifact@v5 -&gt; v6</li>
<li><a
href="f2c598ca0e"><code>f2c598c</code></a>
Update actions/upload-artifact@v4 -&gt; v5</li>
<li><a
href="2c0bda4ce9"><code>2c0bda4</code></a>
Update to 2021 edition</li>
<li><a
href="0d82268129"><code>0d82268</code></a>
Remove rustc version requirement from readme</li>
<li><a
href="67df01216d"><code>67df012</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/anyhow/issues/436">#436</a>
from dtolnay/up</li>
<li><a
href="c8984880a8"><code>c898488</code></a>
Raise required compiler to Rust 1.68</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/anyhow/compare/1.0.100...1.0.101">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=anyhow&package-manager=cargo&previous-version=1.0.100&new-version=1.0.101)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 00:47:48 +00:00
dependabot[bot]
bd27b97dfb build: bump ohos-sys-opaque-types from 0.1.8 to 0.1.9 (#42379)
Bumps
[ohos-sys-opaque-types](https://github.com/openharmony-rs/ohos-sys) from
0.1.8 to 0.1.9.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/openharmony-rs/ohos-sys/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ohos-sys-opaque-types&package-manager=cargo&previous-version=0.1.8&new-version=0.1.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-06 00:45:05 +00:00
Martin Robinson
1db3ad5bd4 fonts: Port macOS font code to use objc2-* crates (#41711)
This change moves Servo's macOS font code away from using our homegrown
`core-*` crates and toward the more general-purpose `objc2-*` crates.
Development of these crates is more active and they use automatic code
generation to have more complete coverage of the relevant platform APIs.
In
addition, this means that it is easier to understand Servo's code if you
are familiar with the platform APIs as the `objc2` crate are a more
direct Rust wrapper over them. In comparison, our wrappers had more
batteries-included behavior that was less flexible.

This change:
- is the first step toward more flexible font fallback on macOS (#41426)
- means we can now remove our manually FFI bindings for font variation
code.

Testing: This should not change behavior and macOS is currently untested
via WPT on the Ci.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-05 20:55:47 +00:00
pralkarz
9e02b0ce65 script: use &mut JSContext in Window::PostMessage (#42370)
Replace `crate::script_runtime::JSContext` with `js::context::JSContext`
in `Window::PostMessage`'s API.

Testing: Builds and runs locally.
Part of: https://github.com/servo/servo/issues/42347

Signed-off-by: pralkarz <pralkarz@tuta.com>
2026-02-05 20:13:11 +00:00
Luke Warlow
5f884cfe29 layout: Do not consider pseudo-elements widgets for the purposes of replaced content (#42332)
When an element has an image content value or list-style-image value
they end up duplicating the content of the element inside the generated
'::marker'.

This is caused by code inside IndependentFormattingContext for user
agent widgets (all user agent shadow dom), this code is specifically
aimed at video and audio elements.

This patch adapts that code to be more specific to elements without a
pseudo-element chain (e.g. audio and video)

Testing: newly added test crashes on main servo (slightly flakily), but
passes consistently now.
Fixes: #42329 
Fixes: #41231

---------

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-02-05 16:01:35 +00:00
Mukilan Thiyagarajan
79ed814ec1 libservo: Expand the UserContentManager API. (#42288)
The patch adds the following functionality to the per-WebView
`UserContentManager` API.
- Removing a `UserScript` at that was previously added.
- Adding a new `UserStyleSheet` representing a user-origin style sheet.
allow removing user script
- Removing a previously added `UserStyleSheet`.

There might be scope for some improvements in the API:
- `UserScript` and `UserStyleSheet` have different ways of representing
the source location - a `PathBuf` and `Url` respectively. This is due to
how those values are used by the underlying evaluation APIs in script
and stylo. More investigation is needed here and could be addressed in
future patches.

Testing: New unit tests are added for the user stylesheet APIs. Existing
tests have been updated to test the removal of user scripts.
2026-02-05 13:26:54 +00:00
Gae24
3748667775 chore: move ClassicScript related code to a new module (#42363)
As discussed on a [Zulip
thread](https://servo.zulipchat.com/#narrow/channel/263398-general/topic/Code.20organization/with/571886607),
move `ClassicScript` code to a new module.

Testing: A successful build is enough

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-05 12:32:38 +00:00
Euclid Ye
8dc7b5c06b webdriver: Remove last dependency on RefCell (#42358)
`pending_input_event_receivers` is the last thing that uses `RefCell`. 
This PR improves safety as we rely on static check, and performance
slightly too.

Testing: Just refactor.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-05 09:33:08 +00:00
Euclid Ye
edac9de9c1 paint: Do not unwrap in stop_fling_if_needed to fix pinch zoom panic (#42350)
Touch sequence may have already been removed before stopping potential
fling during Paint update.
This can happen when we touch up both fingers quickly after the touch
move,
before updates are performed in Paint.
We should not play with fire and `unwrap`.

Testing: Tested with Android, ohos and WebDriver. I can no longer
replicate the panic with Pinch Zoom.
Fixes: #42320, which is very verbose but provides the entire story.

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-05 09:27:12 +00:00
Sam
ce513d5355 CI: Add uv.lock to all sparse-checkouts (#42353)
Fixes #42352

---------

Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-05 07:47:33 +00:00
Jonathan Schwender
22ead03548 perf tests: Fix minor issues in blink layout tests runner (#42346)
- Catch MaxRetryError exception and retry, to avoid logging warnings.
This was observed on macos and can happen during startup of servo.
- Change the default port, since 7000 was reported by multiple people to
cause "port in use" errors.

Testing: Manual testing

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-05 04:11:33 +00:00
dependabot[bot]
b7afca1214 build: bump bpaf from 0.9.22 to 0.9.23 (#42349)
Bumps [bpaf](https://github.com/pacak/bpaf) from 0.9.22 to 0.9.23.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pacak/bpaf/blob/master/Changelog.md">bpaf's
changelog</a>.</em></p>
<blockquote>
<h2>bpaf [0.9.23], bpaf_derive [0.5.23] - 2026-02-03</h2>
<ul>
<li>code produced by derive macro is now won't trigger missing-docs
lint</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/pacak/bpaf/commits/v0.9.23">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bpaf&package-manager=cargo&previous-version=0.9.22&new-version=0.9.23)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-05 00:52:16 +00:00
Josh Matthews
e2dba87301 script: Remove named window proxy map entry when destroying nested browsing context (#42344)
Leaving the entries sitting around both unnecessarily increases memory
usage and breaks code that looks up window proxies by name and reuses
names for iframes within the same page.

Testing: Newly-passing tests.
Fixes: #15258

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-02-04 19:46:06 +00:00
Gae24
97aac6e70a script: use &mut JSContext inside workers PostMessage api (#42342)
Switch `PostMessage` of `Worker`, `DedicatedWorkerGlobalScope` and
`ServiceWoker` to use `&mut JSContext`, propagating it to
`post_message_impl`.

Testing: A successful build is enough

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-04 18:40:32 +00:00
Oriol Brufau
7ead1e4855 Bump Stylo to servo/stylo#303 (#42337)
Bumps Stylo to "Sort static prefs by name".

Testing: Unneeded (no behavior change)

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-02-04 16:47:07 +00:00
Luke Warlow
7bf00ecb51 script: Match :modal when dialog is modal (#42201)
In addition, clean-up the UA stylesheet for dialogs.

Stylo PR: servo/stylo#301
Testing: change causes several WPT tests to start passing.

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-02-04 15:00:50 +00:00
eri
818fc718dd devtools: Only highlight fragments that share the first encountered SpatialId for a node (#42330)
Remove the assertion and only highlight the first `SpatialId` if there
are multiple ones. It should be the bottom-most.

Testing: This fixes the test case at
https://github.com/servo/servo/issues/40851#issuecomment-3846717049,
which can only be tested manually. In general, there are not automated
Devtools tests for these kind of interactions.
Fixes: #40851
Fixes: #41142

---------

Signed-off-by: eri <eri@igalia.com>
Signed-off-by: eri <eri@inventati.org>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-02-04 14:03:20 +00:00
Narfinger
1abe25839b CI: Use mitmproxy in OHOS Ci (#41885)
This has a couple of changes to use mitmproxy (see more
https://book.servo.org/contributing/profiling.html?highlight=mitmproxy#webpage-snapshots)
in the ohos benchmarking CI.

- We include an easy script to create a mitmproxy dump
(etc/ci/scenario/update-mitmproxy-dump.py).
- We set the port forwarding in the common_function_for_servo_test (with
a refactor of the code).
- We added the use of mitmproxy to scenario test and bencher runs. This
currently runs in strictly forwarding mode. But because we skip the wifi
connection and use a wired connection, this should defeat jitter a bit.
- This does _not_ include the smoketest and hitrace-bench.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing:
https://github.com/Narfinger/servo/actions/runs/21630846381/job/62343433828

In the future we will add smoketest and hitrace-bench to use mitmproxy
and finally switch mitmproxy to record and replay mode.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-04 12:49:19 +00:00
Euclid Ye
a900d9506b paint: Reduce unnecessary memory reallocation/mutable getter (#42328)
- Retain capacity of `pending_touch_move_actions` with `fn
remove_pending_touch_move_actions`
- Remove unnecessary mutable getter in `fn move_allowed`
- Reduces visibility of functions in `touch.rs`

Just a refactor.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-04 10:10:14 +00:00
Narfinger
fd4198d742 Allow llvm-coverage to write file on webdriver exit (#41141)
This adds a `cfg` to servo that uses the llvm profile-runtime function
for writing the coverage file to disk.

When the webdriver shuts down we should make sure to write the
llvm_coverage file. This is only required on platforms like android or
ohos, where there is no real exiting of the process, so we need to
manually dump the profile to disk.

See also https://clang.llvm.org/docs/SourceBasedCodeCoverage.html

Testing: Tested '/mach build -r --coverage && ./mach test-wpt -r
--coverage' and there do not seem any parsing errors anymore.
Fixes: https://github.com/servo/servo/issues/40942

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-04 09:38:32 +00:00
Euclid Ye
1eb5e96907 wpt/UT: Disable https_proxy for local tests (#42322)
This helps buddies from MI5, MI6, NSA etc. to run tests behind proxy.

Testing: Tested locally behind proxy. For some reason, I already set
`127.0.0.1` and `localhost` in `no_proxy`, but it does not work.
Fixes: #42321

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-04 08:39:17 +00:00
Martin Robinson
445e04ddad script: Move WebVTT interfaces into a webvtt directory (#42326)
This change organizes the rest of the media-related interfaces by moving
the WebVTT-related[^1] interfaces into their own directory and two more
media-related interfaces into the `media` directory.

Testing: This just moves source files around, so a successful build
should be a good enough test.
Fixes: This is part of #38901.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-04 08:15:12 +00:00
Martin Robinson
f3fa9668cf layout: Handle zero-sized positioning areas when laying out a dimension for background-repeat (#42303)
The specification says that the rounding of the tile size should only
happen
when the positioning size is not zero. This change makes us follow the
specification in this case.

Testing: This PR adds a new WPT crash test.
Fixes: #42216

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-02-04 07:53:15 +00:00
Kingsley Yung
db95883dc0 script: Move more steps of AES algorithms to aes_common module (#42323)
Move some common/similar steps of the import key operations of AES-CTR,
AES-CBC, AES-GCM, AES-KW and AES-OCB to the shared module `aes_common`.

Some comments are also added to the shared module `aes_common` to
explain the small difference in the specification of AES-OCB operations.

Testing: Refactoring. Existing tests suffice.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-02-04 07:05:27 +00:00
Gae24
fe932a4d1f script: Start using &mut JSContext and wrappers2 functions inside module script code (#42294)
Start using `&mut JSContext` and wrappers2 functions for module script
code.


Testing: A successful build should be enough

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-02-04 06:01:23 +00:00
dependabot[bot]
6a1103f1df build: bump zerocopy from 0.8.37 to 0.8.38 (#42319)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.37 to
0.8.38.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.38</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[macros] Clarify size/align behavior of try macros by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2975">google/zerocopy#2975</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.37...v0.8.38">https://github.com/google/zerocopy/compare/v0.8.37...v0.8.38</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="78088c4168"><code>78088c4</code></a>
[macros] Clarify size/align behavior of try macros (<a
href="https://redirect.github.com/google/zerocopy/issues/2975">#2975</a>)</li>
<li><a
href="42ff03b1a9"><code>42ff03b</code></a>
[agents] Update review guidelines for TODOs (<a
href="https://redirect.github.com/google/zerocopy/issues/2967">#2967</a>)</li>
<li><a
href="5e3d16eac2"><code>5e3d16e</code></a>
[ci] Update <code>Cargo.lock</code> from releasing script (<a
href="https://redirect.github.com/google/zerocopy/issues/2958">#2958</a>)</li>
<li><a
href="406a35a285"><code>406a35a</code></a>
[cargo-zerocopy] Pass --cfg __ZEROCOPY_INTERNAL_USE_ONLY_DEV_MODE (<a
href="https://redirect.github.com/google/zerocopy/issues/2960">#2960</a>)</li>
<li><a
href="36e8abee9b"><code>36e8abe</code></a>
Update <code>Cargo.lock</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2957">#2957</a>)</li>
<li><a
href="72a26a0e67"><code>72a26a0</code></a>
ci: Fix yq installation failure by pinning version and disabling sumdb
check ...</li>
<li>See full diff in <a
href="https://github.com/google/zerocopy/compare/v0.8.37...v0.8.38">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.37&new-version=0.8.38)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 03:07:47 +00:00
dependabot[bot]
b7ef03a0b2 build: bump flate2 from 1.1.8 to 1.1.9 (#42317)
Bumps [flate2](https://github.com/rust-lang/flate2-rs) from 1.1.8 to
1.1.9.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="19ddb18bf1"><code>19ddb18</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/flate2-rs/issues/529">#529</a>
from folkertdev/update-zlib-rs-0.6.0</li>
<li><a
href="c956e127d6"><code>c956e12</code></a>
upgrade zlib-rs to version <code>0.6.0</code></li>
<li><a
href="21d5eebe91"><code>21d5eeb</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/flate2-rs/issues/528">#528</a>
from wgyt/wgyt/patch</li>
<li><a
href="54f848477c"><code>54f8484</code></a>
update LICENSE-MIT</li>
<li><a
href="f4924fefb3"><code>f4924fe</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/flate2-rs/issues/527">#527</a>
from jongiddy/crc-tests</li>
<li><a
href="8b9b7a6db6"><code>8b9b7a6</code></a>
Add tests to check data CRC</li>
<li><a
href="fd17c74baa"><code>fd17c74</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/flate2-rs/issues/526">#526</a>
from folkertdev/zlib-rs-crc32</li>
<li><a
href="aef26ac674"><code>aef26ac</code></a>
check that zlib-rs no longer compiles crc32fast</li>
<li><a
href="5ec7647e67"><code>5ec7647</code></a>
make <code>crc32fast</code> an optional dependency</li>
<li><a
href="c584e97041"><code>c584e97</code></a>
use <code>zlib-rs</code> for crc32 (when available)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/flate2-rs/compare/1.1.8...1.1.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=flate2&package-manager=cargo&previous-version=1.1.8&new-version=1.1.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 01:07:31 +00:00
dependabot[bot]
de9445f9d5 build: bump regex from 1.12.2 to 1.12.3 (#42318)
Bumps [regex](https://github.com/rust-lang/regex) from 1.12.2 to 1.12.3.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/regex/blob/master/CHANGELOG.md">regex's
changelog</a>.</em></p>
<blockquote>
<h1>1.12.3 (2025-02-03)</h1>
<p>This release excludes some unnecessary things from the archive
published to
crates.io. Specifically, fuzzing data and various shell scripts are now
excluded. If you run into problems, please file an issue.</p>
<p>Improvements:</p>
<ul>
<li><a
href="https://redirect.github.com/rust-lang/regex/pull/1319">#1319</a>:
Switch from a Cargo <code>exclude</code> list to an <code>include</code>
list, and exclude some
unnecessary stuff.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b028e4f40e"><code>b028e4f</code></a>
1.12.3</li>
<li><a
href="5e195de266"><code>5e195de</code></a>
regex-automata-0.4.14</li>
<li><a
href="a3433f6918"><code>a3433f6</code></a>
regex-syntax-0.8.9</li>
<li><a
href="0c07fae444"><code>0c07fae</code></a>
regex-lite-0.1.9</li>
<li><a
href="6a810068f0"><code>6a81006</code></a>
cargo: exclude development scripts and fuzzing data</li>
<li><a
href="4733e28ba4"><code>4733e28</code></a>
automata: fix <code>onepass::DFA::try_search_slots</code> panic when too
many slots are ...</li>
<li>See full diff in <a
href="https://github.com/rust-lang/regex/compare/1.12.2...1.12.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=regex&package-manager=cargo&previous-version=1.12.2&new-version=1.12.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 01:03:32 +00:00
dependabot[bot]
aabe8e3406 build: bump webpki-root-certs from 1.0.5 to 1.0.6 (#42316)
Bumps [webpki-root-certs](https://github.com/rustls/webpki-roots) from
1.0.5 to 1.0.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rustls/webpki-roots/releases">webpki-root-certs's
releases</a>.</em></p>
<blockquote>
<h2>v/1.0.6</h2>
<p>&quot;e-Szigno TLS Root CA 2023&quot; added, see <a
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1873057">https://bugzilla.mozilla.org/show_bug.cgi?id=1873057</a></p>
<h2>What's Changed</h2>
<ul>
<li>Update dependencies by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/111">rustls/webpki-roots#111</a></li>
<li>Trigger CI workflow on merge groups by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/113">rustls/webpki-roots#113</a></li>
<li>webpki-roots: 1.0.6 by <a
href="https://github.com/ctz"><code>@​ctz</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/115">rustls/webpki-roots#115</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6">https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c97def9fb9"><code>c97def9</code></a>
webpki-roots: 1.0.6 (<a
href="https://redirect.github.com/rustls/webpki-roots/issues/115">#115</a>)</li>
<li><a
href="d30d2482e9"><code>d30d248</code></a>
Trigger CI workflow on merge groups</li>
<li><a
href="2a4b8458d1"><code>2a4b845</code></a>
Take semver-compatible dependency updates</li>
<li><a
href="17c2013582"><code>17c2013</code></a>
Bump webpki-ccadb version to 0.2.1</li>
<li><a
href="3883a1602a"><code>3883a16</code></a>
Upgrade to x509-parser 0.18</li>
<li><a
href="6bfc62dc0b"><code>6bfc62d</code></a>
Upgrade reqwest to 0.13</li>
<li>See full diff in <a
href="https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpki-root-certs&package-manager=cargo&previous-version=1.0.5&new-version=1.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 00:43:58 +00:00
dependabot[bot]
058c69eb0e build: bump webpki-roots from 1.0.5 to 1.0.6 (#42315)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [webpki-roots](https://github.com/rustls/webpki-roots) from 1.0.5
to 1.0.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rustls/webpki-roots/releases">webpki-roots's
releases</a>.</em></p>
<blockquote>
<h2>v/1.0.6</h2>
<p>&quot;e-Szigno TLS Root CA 2023&quot; added, see <a
href="https://bugzilla.mozilla.org/show_bug.cgi?id=1873057">https://bugzilla.mozilla.org/show_bug.cgi?id=1873057</a></p>
<h2>What's Changed</h2>
<ul>
<li>Update dependencies by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/111">rustls/webpki-roots#111</a></li>
<li>Trigger CI workflow on merge groups by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/113">rustls/webpki-roots#113</a></li>
<li>webpki-roots: 1.0.6 by <a
href="https://github.com/ctz"><code>@​ctz</code></a> in <a
href="https://redirect.github.com/rustls/webpki-roots/pull/115">rustls/webpki-roots#115</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6">https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c97def9fb9"><code>c97def9</code></a>
webpki-roots: 1.0.6 (<a
href="https://redirect.github.com/rustls/webpki-roots/issues/115">#115</a>)</li>
<li><a
href="d30d2482e9"><code>d30d248</code></a>
Trigger CI workflow on merge groups</li>
<li><a
href="2a4b8458d1"><code>2a4b845</code></a>
Take semver-compatible dependency updates</li>
<li><a
href="17c2013582"><code>17c2013</code></a>
Bump webpki-ccadb version to 0.2.1</li>
<li><a
href="3883a1602a"><code>3883a16</code></a>
Upgrade to x509-parser 0.18</li>
<li><a
href="6bfc62dc0b"><code>6bfc62d</code></a>
Upgrade reqwest to 0.13</li>
<li>See full diff in <a
href="https://github.com/rustls/webpki-roots/compare/v/1.0.5...v/1.0.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=webpki-roots&package-manager=cargo&previous-version=1.0.5&new-version=1.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 00:29:21 +00:00
dependabot[bot]
a327c08c67 build: bump regex-syntax from 0.8.8 to 0.8.9 (#42314)
Bumps [regex-syntax](https://github.com/rust-lang/regex) from 0.8.8 to
0.8.9.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a3433f6918"><code>a3433f6</code></a>
regex-syntax-0.8.9</li>
<li><a
href="0c07fae444"><code>0c07fae</code></a>
regex-lite-0.1.9</li>
<li><a
href="6a810068f0"><code>6a81006</code></a>
cargo: exclude development scripts and fuzzing data</li>
<li><a
href="4733e28ba4"><code>4733e28</code></a>
automata: fix <code>onepass::DFA::try_search_slots</code> panic when too
many slots are ...</li>
<li><a
href="5ea3eb1e95"><code>5ea3eb1</code></a>
1.12.2</li>
<li><a
href="ab0b07171b"><code>ab0b071</code></a>
regex-automata-0.4.13</li>
<li>See full diff in <a
href="https://github.com/rust-lang/regex/compare/regex-syntax-0.8.8...regex-syntax-0.8.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=regex-syntax&package-manager=cargo&previous-version=0.8.8&new-version=0.8.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 00:26:28 +00:00
Taym Haddadi
b18d119261 fetch: implement multipart/form-data parsing for Request::formData() (#42041)
Testing: More test passed in `fetch/api/abort/request.any.js.ini`

fixes: #25106

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-02-03 23:31:41 +00:00
Steven Novaryo
42359b26a2 script: Impl UserActivation interface (#42060)
User activation is a concept used to prevents annoying usage of specific
API (Fullscreen API, Virtual Keyboard) to the user by states that the
API needs to have in order to process. This PR implements the
`UserActivation` interface and keep track of the last user interaction.
Each `Window` will keep track the [last activation time
stamp](https://html.spec.whatwg.org/multipage/interaction.html#last-activation-timestamp),
which will be set if there are a triggering input event firing in the
`Window` and propagating across the browsing contexts ancestors and
descendants. These timestamp could be consumed, and the timestamp will
be set to negative infinite.

It is then used to gate some APIs within browser that is determined as
transient activation consuming-gated APIs, which needs transient
activation to be true and consumes the activation. For the purpose of
testing, this PR would implement this behavior on fullscreen API which
is used to test activation consuming behavior.

Spec:
https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface

Testing: Existing WPT

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-02-03 23:20:54 +00:00
Euclid Ye
67e601b026 webdriver: Improve input event synchronization time-complexity from O(N²) to O(N) (#42309)
- Rename `wait_for_user_agent_handling_complete` to
`wait_for_input_event_handled`
- Reduce the time-complexity from $O(N^2)$ to $O(N)$: we are waiting for
all `pending_input_event_receivers` anyway. There is no need for
`crossbeam_channel::Select` as the sender won't block, and channel is
`unbound`.
- Add a TODO: Some DOM events may not have been produced at the end of
wait.

Testing: This is refactor.
https://github.com/servo/servo/actions/runs/21627646437

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-03 18:43:43 +00:00
Narfinger
6a9876a41e etc: Include script for running blink perf tests (#41224)
This is a simple webdriver script that can run a folder of the
blink_perf_tests and output a bmf json file.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Does not require testing as it is a separate tool.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-02-03 17:13:50 +00:00
Osoro Bironga
8d4f2db3c9 script: Start a performance timeline entry for iframe documents (#42270)
Added resource timing that was missing for an iframe document.

Testing: Added
Fixes: https://github.com/servo/servo/issues/41666

---------

Signed-off-by: Osoro Bironga <fanosoro@gmail.com>
2026-02-03 16:07:10 +00:00
Josh Matthews
3cf0c07fd0 deps: Update bytes crate to 0.11.1 (#42310)
This resolves the following error:
```
  | /a/servo/servo/deny.toml:107: Integer overflow in `BytesMut::reserve`: bytes 1.11.0 registry+https://github.com/rust-lang/crates.io-index
```

Testing: `./mach test-tidy` passes.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-02-03 16:06:41 +00:00
Jonathan Schwender
de7c9d2e43 Bump servoshell to 0.0.5 (#42305)
This version bump is a bit delayed, since I forgot to open the PR before
FOSDEM. The actual release will thus likely not be based on this commit,
but backported to the release branch, to stay in sync with our monthly
report.
There still has been no resolution on the `0.1` version bump situation,
hence another bump of the patch version.

Testing: Not required

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-03 14:05:55 +00:00
Jonathan Schwender
b5df4bc90a mach: use uv run --frozen (#42169)
This will avoid updating the lockfile during regular operations. Also
ignore the `servo.egg-info` directory, which
the new python requirement installation mechanism via setuptools
creates.
To update the lockfile one can run `uv lock`. This is also done
automatically, when syncing requirements from WPT.

This PR also updates the uv version in CI to a newer one. If you
encounter any issues with the lockfile after this PR, it might be
necessary to update your local instance of uv.

Testing: Build still works. [mach try
full](https://github.com/servo/servo/actions/runs/21624364040)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-02-03 12:43:04 +00:00
atbrakhi
138857a8e8 devtools: cleanup debugger.js (#42308)
Debugger.js had many repetitive code, this change creates 2 helper
functions and renames some functions/variables to make it more clear.

Testing: This should not change any functionality

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-03 12:26:37 +00:00
dependabot[bot]
100ccbef15 build: bump bytemuck from 1.24.0 to 1.25.0 (#42302)
Bumps [bytemuck](https://github.com/Lokathor/bytemuck) from 1.24.0 to
1.25.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Lokathor/bytemuck/blob/main/changelog.md">bytemuck's
changelog</a>.</em></p>
<blockquote>
<h1><code>bytemuck</code> changelog</h1>
<h2>1.25</h2>
<ul>
<li><a
href="https://redirect.github.com/Lokathor/bytemuck/pull/333">Remove
extern &quot;stdcall&quot; fn ptr impls on non-x86-32 windows.</a></li>
<li><a href="https://redirect.github.com/Lokathor/bytemuck/pull/344">Fix
nightly_portable_simd after LaneCount removal.</a></li>
</ul>
<h2>1.24</h2>
<ul>
<li><a href="https://redirect.github.com/Lokathor/bytemuck/pull/322">use
new stable avx512 types from rust 1.89</a></li>
<li><a
href="https://redirect.github.com/Lokathor/bytemuck/pull/317">impl
AnyBitPattern for [MaybeUninit&lt;T: AnyBitPattern&gt;; N]</a></li>
<li>bump <code>derive</code> minimum version.</li>
</ul>
<h2>1.23.2</h2>
<ul>
<li>bump <code>derive</code> minimum version.</li>
</ul>
<h2>1.23.1</h2>
<ul>
<li>Added a windows-only <code>ZeroableInOption</code> impl for
&quot;stdcall&quot; functions.</li>
</ul>
<h2>1.23</h2>
<ul>
<li><code>impl_core_error</code> crate feature adds
<code>core::error::Error</code> impl.</li>
<li>More <code>ZeroableInOption</code> impls.</li>
</ul>
<h2>1.22</h2>
<ul>
<li>Add the <code>pod_saturating</code> feature, which adds
<code>Pod</code> impls for <code>Saturating&lt;T&gt;</code>
when <code>T</code> is already <code>Pod</code>.</li>
<li>A bump in the minimum <code>bytemuck_derive</code> dependency from
1.4.0 to 1.4.1 to
avoid a bug if you have a truly ancient <code>cargo.lock</code> file
sitting around.</li>
<li>Adds <code>Send</code> and <code>Sync</code> impls to
<code>BoxBytes</code>.</li>
</ul>
<h2>1.21</h2>
<ul>
<li>Implement <code>Pod</code> and <code>Zeroable</code> for
<code>core::arch::{x86, x86_64}::__m512</code>, <code>__m512d</code> and
<code>__m512i</code> without nightly.
Requires Rust 1.72, and is gated through the <code>avx512_simd</code>
cargo feature.</li>
<li>Allow the use of <code>must_cast_mut</code> and
<code>must_cast_slice_mut</code> in const contexts.
Requires Rust 1.83, and is gated through the
<code>must_cast_extra</code> cargo feature.</li>
<li>internal: introduced the <code>maybe_const_fn</code> macro that
allows defining some function
to be const depending upon some <code>cfg</code> predicate.</li>
</ul>
<h2>1.20</h2>
<ul>
<li>New functions to allocate zeroed <code>Arc</code> and
<code>Rc</code>. Requires Rust 1.82</li>
<li><code>TransparentWrapper</code> impls for
<code>core::cmp::Reverse</code> and
<code>core::num::Saturating</code>.</li>
<li>internal: Simplified the library's <code>fill_zeroes</code> calls to
<code>write_bytes</code></li>
</ul>
<h2>1.19</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="164cedda0e"><code>164cedd</code></a>
chore: Release bytemuck version 1.25.0</li>
<li><a
href="10a9319fa4"><code>10a9319</code></a>
that was a derive PR</li>
<li><a
href="a35eaea74a"><code>a35eaea</code></a>
changelog</li>
<li><a
href="7009d79870"><code>7009d79</code></a>
Fix <code>nightly_portable_simd</code> after <code>LaneCount</code>
removal. (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/344">#344</a>)</li>
<li><a
href="58c62034e9"><code>58c6203</code></a>
Make derive(NoUninit) have the same constraints as Pod (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/341">#341</a>)</li>
<li><a
href="e4bce3b32c"><code>e4bce3b</code></a>
docs: fix typo (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/337">#337</a>)</li>
<li><a
href="316607cdf1"><code>316607c</code></a>
Fix CheckedBitPattern derive tests on big-endian (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/336">#336</a>)</li>
<li><a
href="92d78d2689"><code>92d78d2</code></a>
Remove <code>extern &quot;stdcall&quot;</code> fn ptr impls on
non-x86-32 windows. (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/333">#333</a>)</li>
<li><a
href="0afbe8fc2d"><code>0afbe8f</code></a>
Fix 32bit tests (<a
href="https://redirect.github.com/Lokathor/bytemuck/issues/331">#331</a>)</li>
<li>See full diff in <a
href="https://github.com/Lokathor/bytemuck/compare/v1.24.0...v1.25.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bytemuck&package-manager=cargo&previous-version=1.24.0&new-version=1.25.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 05:45:08 +00:00
Euclid Ye
d2b4b039e7 webdriver: Remove orphan Handler::num_pending_actions (#42297)
`Handler::num_pending_actions` has been a poor orphan since
who-knows-when.
This also removes the only dependency on `Cell`.

Testing: This removes unused field. Covered by existing tests.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-03 05:38:04 +00:00
dependabot[bot]
e2a62bfb68 build: bump portable-atomic from 1.13.0 to 1.13.1 (#42301)
Bumps [portable-atomic](https://github.com/taiki-e/portable-atomic) from
1.13.0 to 1.13.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/portable-atomic/blob/main/CHANGELOG.md">portable-atomic's
changelog</a>.</em></p>
<blockquote>
<h2>[1.13.1] - 2026-01-31</h2>
<ul>
<li>
<p>Update to stabilized <a
href="https://redirect.github.com/rust-lang/rust/pull/147996">PowerPC64</a>
inline assembly. (<a
href="92b02f8a27">92b02f8a</a>)</p>
</li>
<li>
<p>Work around <a
href="https://redirect.github.com/rust-lang/rustc_codegen_gcc/issues/821#issuecomment-3793567607">rustc_codegen_gcc
bugs on x86_64</a>. (<a
href="ae4c501aec">ae4c501</a>)</p>
</li>
<li>
<p>Optimize x86_64 128-bit atomics. (<a
href="a9d61ebf8d">a9d61eb</a>,
<a
href="90a17ca40a">90a17ca4</a>)</p>
</li>
<li>
<p>Improve compile-time detection of RISC-V target features. (<a
href="535fced071">535fced</a>)</p>
</li>
<li>
<p>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1639861c66"><code>1639861</code></a>
Release portable-atomic 1.13.1</li>
<li><a
href="59cbe84d1a"><code>59cbe84</code></a>
Release portable-atomic-util 0.2.5</li>
<li><a
href="0fdd05b636"><code>0fdd05b</code></a>
Update changelog</li>
<li><a
href="e1d570224e"><code>e1d5702</code></a>
ci: Temporarily disable AIX build</li>
<li><a
href="f2ee23f0ca"><code>f2ee23f</code></a>
tests: Update test-helper</li>
<li><a
href="e481f46020"><code>e481f46</code></a>
util: Sync Arc with upstream</li>
<li><a
href="e4e0588968"><code>e4e0588</code></a>
util: Update docs/comments</li>
<li><a
href="6204993349"><code>6204993</code></a>
ci: Temporarily pin toolchain for mips r6</li>
<li><a
href="60400336f6"><code>6040033</code></a>
ci: Replace some custom targets with new builtin targets</li>
<li><a
href="10b67754ad"><code>10b6775</code></a>
tests/asm-test: Update to LLVM 22</li>
<li>Additional commits viewable in <a
href="https://github.com/taiki-e/portable-atomic/compare/v1.13.0...v1.13.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=portable-atomic&package-manager=cargo&previous-version=1.13.0&new-version=1.13.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 05:36:16 +00:00
dependabot[bot]
fd80bafd75 build: bump arc-swap from 1.8.0 to 1.8.1 (#42300)
Bumps [arc-swap](https://github.com/vorner/arc-swap) from 1.8.0 to
1.8.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vorner/arc-swap/blob/master/CHANGELOG.md">arc-swap's
changelog</a>.</em></p>
<blockquote>
<h1>1.8.1</h1>
<ul>
<li>Some more careful orderings (<a
href="https://redirect.github.com/vorner/arc-swap/issues/195">#195</a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c222a22864"><code>c222a22</code></a>
Release 1.8.1</li>
<li><a
href="cccf3548a8"><code>cccf354</code></a>
Upgrade the other ordering too, for transitivity</li>
<li><a
href="e94df5511a"><code>e94df55</code></a>
Merge pull request <a
href="https://redirect.github.com/vorner/arc-swap/issues/195">#195</a>
from 0xfMel/master</li>
<li><a
href="bd5d3276e4"><code>bd5d327</code></a>
Fix Debt::pay failure ordering</li>
<li><a
href="22431daf64"><code>22431da</code></a>
Merge pull request <a
href="https://redirect.github.com/vorner/arc-swap/issues/189">#189</a>
from atouchet/rdm</li>
<li><a
href="b142bd81da"><code>b142bd8</code></a>
Update Readme</li>
<li>See full diff in <a
href="https://github.com/vorner/arc-swap/compare/v1.8.0...v1.8.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=arc-swap&package-manager=cargo&previous-version=1.8.0&new-version=1.8.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-03 05:12:49 +00:00
Euclid Ye
aedbebbb35 webdriver: Support interspersed pointerMove actions via event queue (#42289)
For `pointerMove` with duration, we need to wait asynchronously and
execute in parallel for subsequent moves.
But we never did this correctly: we waited in a blocking way which broke
the whole point of tick: making sure we simultaneously perform actions
from multiple sources within a single unit time.

To avoid async borrow-checker hell, we achieve the same effect using a
event queue.

> Spec: The initial pointer movement is performed synchronously. This
ensures determinism in the sequence of the first event triggered by each
action in the tick.
> 
> Subsequent movements (if any) are performed asynchronously. This
allows events from two
[pointerMove](https://w3c.github.io/webdriver/#dfn-pointermove) actions
in the tick to be interspersed.

Testing: Existing WPT tests not affected, which is a good sign.
Fixes: #42235
This is a pre-requisite to #41923: multi-touch support.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-02-03 04:08:58 +00:00
Ashwin Naren
2c96178ff1 geolocation: Support errorCallback (#42295)
Support `errorCallback` in geolocation position request functions and
throw the necessary errors.

Testing: Passes 3 more WPT tests
Fixes: Partially #38903

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-02-03 02:33:39 +00:00
Simon Wülker
10563019bb script: Implement HTMLInputElement.alpha (#42293)
Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-02 23:38:45 +00:00
atbrakhi
8ea5b4bf95 devtools: Remove redundant addDebuggee call (#42290)
Remove duplicate addDebuggee call in debugger.js 

Testing: This change should not change functionality.

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-02 15:42:40 +00:00
Tim van der Lippe
19c2f93cab script: Fix handling changes to relevant attributes for stylesheets (#42273)
We weren't removing stylesheets when we should be doing so. This most
notably happens when the stylesheet no longer has a href or its "rel"
changes.

The crash is also fixed, since the issue was that we were passing the
value of the attribute that was changed as if it were an href. However,
if we set the type attribute, then that's not the href.

To fix that, we now retrieve the href inside the method so we always
have the correct value.

Fixes #42259

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-02-02 13:37:38 +00:00
Tim van der Lippe
e8aa7d51ba script: Set host for template content (#42276)
A template element should set the host of a DocumentFragment. However,
it didn't have a host yet. That's because ShadowRoot declares a host
attribute which returns Element, but its property is declared on
DocumentFragment.

Therefore, define the host on DocumentFragment instead and use it in all
relevant points for shadow roots. Then, update the pre-insert validity
check to use the correct host-including variant of inclusive ancestors.
Lastly, set the host of the template to wire it all up.

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-02-02 08:25:54 +00:00
TIN TUN AUNG
17f7c87088 script: add force option for assign-slottables for a tree (#42250)
In the case of node removal, if the subtree of the removed node contains
`<slot>` element, force traverse down to each `<slot>` element is needed
to reset the assignment of the slottables that currently being assigned
to the `<slot>` element. This changes add this force option to
`assign_slottables_for_a_tree`, and only set true to node removal.

Testing: Should be covered by current WPT test, [try
run](https://github.com/rayguo17/servo/actions/runs/21504337658)
Fixes: https://github.com/servo/servo/issues/35188
https://github.com/servo/servo/issues/42182

cc @TimvdLippe @simonwuelker @xiaochengh

---------

Signed-off-by: rayguo17 <tin.tun.aung1@huawei.com>
Signed-off-by: rayguo17 <rayguo17@gmail.com>
2026-02-02 07:25:13 +00:00
Simon Wülker
83bf475370 script: Support different colorspaces for <input type=color> (#42279)
This change adds support for the `colorspace` attribute on color inputs
and implements serialization of the input value accordingly.

The color picker from servoshell doesn't yet support non-rgb colorspaces
(and neither does the embedding API), so we convert to and from rgb when
communicating with the embedder.

Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-02 06:21:41 +00:00
Gregory Terzian
91ee834195 Indexeddb: connection lifecycle (#42082)
Implement the full connection lifecycle, from opening and potentially
upgrading a database, waiting on existing connections to close, firing
the versionchange and blocked events, and updating pending open requests
when connections close.

Testing: WPT
Fixes: Part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
2026-02-02 06:14:27 +00:00
dependabot[bot]
c60c646f3d build: bump portable-atomic-util from 0.2.4 to 0.2.5 (#42285)
Bumps [portable-atomic-util](https://github.com/taiki-e/portable-atomic)
from 0.2.4 to 0.2.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/taiki-e/portable-atomic/releases">portable-atomic-util's
releases</a>.</em></p>
<blockquote>
<h2>portable-atomic-util 0.2.5</h2>
<ul>
<li>
<p>Add <code>Arc::{new_zeroed,new_zeroed_slice}</code> at Rust 1.36+.
(align to the <a
href="https://redirect.github.com/rust-lang/rust/pull/144091">std
<code>Arc</code> change in Rust 1.92</a>) (<a
href="f8affb661a">f8affb6</a>,
<a
href="ae5aba7cbe">ae5aba7</a>)</p>
</li>
<li>
<p>Implement <code>Default</code> for <code>Pin&lt;Arc&lt;T&gt;:
Default&gt;</code>. (align to the <a
href="https://redirect.github.com/rust-lang/rust/pull/143717">std
<code>Arc</code> change in Rust 1.91</a>) (<a
href="2d8d33c127">2d8d33c</a>)</p>
</li>
<li>
<p>Implement <code>From&lt;&amp;mut {[T],str}&gt;</code> for
<code>Arc&lt;{[T],str}&gt;</code> at Rust 1.36+. (align to the <a
href="https://redirect.github.com/rust-lang/rust/pull/129329">std
<code>Arc</code> change in Rust 1.84</a>) (<a
href="99640d656f">99640d6</a>,
<a
href="ae5aba7cbe">ae5aba7</a>)</p>
</li>
<li>
<p>Implement <code>{AsFd, AsRawFd}</code> for <code>Arc&lt;T&gt;</code>
on Trusty. (<a
href="1b09ffbc30">1b09ffb</a>)</p>
</li>
<li>
<p>Support slice-related methods that previously required Rust 1.44+ at
Rust 1.36+. (<a
href="ae5aba7cbe">ae5aba7</a>)</p>
</li>
<li>
<p>Support <code>AsRawFd for Arc&lt;T&gt;</code> implementation on Unix
in all Rust versions. Previously, it was only for Rust 1.63+. (<a
href="1b09ffbc30">1b09ffb</a>)</p>
</li>
<li>
<p>Fix build error when building for HermitOS with <code>std</code>
feature in Rust 1.63-1.68. (<a
href="1b09ffbc30">1b09ffb</a>)</p>
</li>
<li>
<p>Documentation improvements.</p>
</li>
<li>
<p>Enable <a
href="https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/immutable-releases">release
immutability</a>.</p>
</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="59cbe84d1a"><code>59cbe84</code></a>
Release portable-atomic-util 0.2.5</li>
<li><a
href="0fdd05b636"><code>0fdd05b</code></a>
Update changelog</li>
<li><a
href="e1d570224e"><code>e1d5702</code></a>
ci: Temporarily disable AIX build</li>
<li><a
href="f2ee23f0ca"><code>f2ee23f</code></a>
tests: Update test-helper</li>
<li><a
href="e481f46020"><code>e481f46</code></a>
util: Sync Arc with upstream</li>
<li><a
href="e4e0588968"><code>e4e0588</code></a>
util: Update docs/comments</li>
<li><a
href="6204993349"><code>6204993</code></a>
ci: Temporarily pin toolchain for mips r6</li>
<li><a
href="60400336f6"><code>6040033</code></a>
ci: Replace some custom targets with new builtin targets</li>
<li><a
href="10b67754ad"><code>10b6775</code></a>
tests/asm-test: Update to LLVM 22</li>
<li><a
href="a19d8158a6"><code>a19d815</code></a>
ci: Update Valgrind suppression for s390x</li>
<li>Additional commits viewable in <a
href="https://github.com/taiki-e/portable-atomic/compare/portable-atomic-util-0.2.4...portable-atomic-util-0.2.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=portable-atomic-util&package-manager=cargo&previous-version=0.2.4&new-version=0.2.5)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 01:00:05 +00:00
dependabot[bot]
6b17936fbd build: bump slab from 0.4.11 to 0.4.12 (#42286)
Bumps [slab](https://github.com/tokio-rs/slab) from 0.4.11 to 0.4.12.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/slab/releases">slab's
releases</a>.</em></p>
<blockquote>
<h2>v0.4.12</h2>
<ul>
<li>Help the compiler elide copies in <code>try_remove()</code> (<a
href="https://redirect.github.com/tokio-rs/slab/issues/160">#160</a>)</li>
<li>Add security policy (<a
href="https://redirect.github.com/tokio-rs/slab/issues/154">#154</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/slab/blob/master/CHANGELOG.md">slab's
changelog</a>.</em></p>
<blockquote>
<h1>0.4.12 (January 31, 2026)</h1>
<ul>
<li>Help the compiler elide copies in <code>try_remove()</code> (<a
href="https://redirect.github.com/tokio-rs/slab/issues/160">#160</a>)</li>
<li>Add security policy (<a
href="https://redirect.github.com/tokio-rs/slab/issues/154">#154</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a1e4346070"><code>a1e4346</code></a>
Release v0.4.12 (<a
href="https://redirect.github.com/tokio-rs/slab/issues/161">#161</a>)</li>
<li><a
href="1a97b80856"><code>1a97b80</code></a>
Help the compiler elide copies in try_remove() (<a
href="https://redirect.github.com/tokio-rs/slab/issues/160">#160</a>)</li>
<li><a
href="4955f79e3f"><code>4955f79</code></a>
fix: add missing semicolon (<a
href="https://redirect.github.com/tokio-rs/slab/issues/158">#158</a>)</li>
<li><a
href="7f1f3a16df"><code>7f1f3a1</code></a>
Add security policy (<a
href="https://redirect.github.com/tokio-rs/slab/issues/154">#154</a>)</li>
<li>See full diff in <a
href="https://github.com/tokio-rs/slab/compare/v0.4.11...v0.4.12">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=slab&package-manager=cargo&previous-version=0.4.11&new-version=0.4.12)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 00:59:19 +00:00
dependabot[bot]
4bed7dd68c build: bump zerocopy from 0.8.36 to 0.8.37 (#42284)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.36 to
0.8.37.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.37</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[macros] Fix doc bug in <code>transmute_mut!</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2951">google/zerocopy#2951</a></li>
<li>[layout] Support sized-&gt;unsized, sized-&gt;sized casts by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2950">google/zerocopy#2950</a></li>
<li>Support sized-to-unsized <code>transmute_{ref,mut}!</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2943">google/zerocopy#2943</a></li>
<li>Support unsized <code>try_transmute_{ref,mut}!</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2944">google/zerocopy#2944</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.36...v0.8.37">https://github.com/google/zerocopy/compare/v0.8.36...v0.8.37</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c6a94900c0"><code>c6a9490</code></a>
Release 0.8.37 (<a
href="https://redirect.github.com/google/zerocopy/issues/2955">#2955</a>)</li>
<li><a
href="6d1e9b021f"><code>6d1e9b0</code></a>
Support unsized <code>try_transmute_{ref,mut}!</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2944">#2944</a>)</li>
<li><a
href="e574d06c12"><code>e574d06</code></a>
Support sized-to-unsized <code>transmute_{ref,mut}!</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2943">#2943</a>)</li>
<li><a
href="f28e01691a"><code>f28e016</code></a>
[layout] Support sized-&gt;unsized, sized-&gt;sized casts (<a
href="https://redirect.github.com/google/zerocopy/issues/2950">#2950</a>)</li>
<li><a
href="7dc98fd5d0"><code>7dc98fd</code></a>
[macros] Fix doc bug in <code>transmute_mut!</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2951">#2951</a>)</li>
<li><a
href="34f572d19b"><code>34f572d</code></a>
Update <code>Cargo.lock</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2949">#2949</a>)</li>
<li>See full diff in <a
href="https://github.com/google/zerocopy/compare/v0.8.36...v0.8.37">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.36&new-version=0.8.37)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 00:53:36 +00:00
dependabot[bot]
af556b8976 build: bump clap from 4.5.55 to 4.5.56 (#42283)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.55 to 4.5.56.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.56</h2>
<h2>[4.5.56] - 2026-01-29</h2>
<h3>Fixes</h3>
<ul>
<li>On conflict error, don't show conflicting arguments in the
usage</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.56] - 2026-01-29</h2>
<h3>Fixes</h3>
<ul>
<li>On conflict error, don't show conflicting arguments in the
usage</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9cec1007ac"><code>9cec100</code></a>
chore: Release</li>
<li><a
href="00e72e06f4"><code>00e72e0</code></a>
docs: Update changelog</li>
<li><a
href="c7848ff6fc"><code>c7848ff</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6094">#6094</a>
from epage/home</li>
<li><a
href="60184fb76a"><code>60184fb</code></a>
feat(complete): Expand ~ in native completions</li>
<li><a
href="09969d3c1a"><code>09969d3</code></a>
chore(deps): Update Rust Stable to v1.89 (<a
href="https://redirect.github.com/clap-rs/clap/issues/6093">#6093</a>)</li>
<li><a
href="520beb5ec2"><code>520beb5</code></a>
chore: Release</li>
<li><a
href="2bd8ab3c00"><code>2bd8ab3</code></a>
docs: Update changelog</li>
<li><a
href="220875b585"><code>220875b</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6091">#6091</a>
from epage/possible</li>
<li><a
href="e5eb6c9d84"><code>e5eb6c9</code></a>
fix(help): Integrate 'Possible Values:' into 'Arg::help'</li>
<li><a
href="594a771030"><code>594a771</code></a>
refactor(help): Make empty tracking more consistent</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.55...clap_complete-v4.5.56">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.55&new-version=4.5.56)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 00:37:48 +00:00
dependabot[bot]
a5d0ee64d3 build: bump cc from 1.2.54 to 1.2.55 (#42282)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.54 to 1.2.55.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.55</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1667">#1667</a>)</li>
<li>Fix RUSTFLAGS typo in test-linker-plugin-lto (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1665">#1665</a>)</li>
<li>Disable PIC for armv7-sony-vita-newlibeabihf (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1664">#1664</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.54...cc-v1.2.55">1.2.55</a>
- 2026-01-30</h2>
<h3>Other</h3>
<ul>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1667">#1667</a>)</li>
<li>Fix RUSTFLAGS typo in test-linker-plugin-lto (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1665">#1665</a>)</li>
<li>Disable PIC for armv7-sony-vita-newlibeabihf (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1664">#1664</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0767349e1d"><code>0767349</code></a>
chore: release (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1668">#1668</a>)</li>
<li><a
href="268daebeb6"><code>268daeb</code></a>
Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1667">#1667</a>)</li>
<li><a
href="6fb617d2dd"><code>6fb617d</code></a>
Fix RUSTFLAGS typo in test-linker-plugin-lto (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1665">#1665</a>)</li>
<li><a
href="16a52824ac"><code>16a5282</code></a>
Disable PIC for armv7-sony-vita-newlibeabihf (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1664">#1664</a>)</li>
<li><a
href="0b52cf2bf4"><code>0b52cf2</code></a>
Add <code>find_windows_sdk</code> API (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1663">#1663</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.54...cc-v1.2.55">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.54&new-version=1.2.55)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 00:30:49 +00:00
dependabot[bot]
937d35d5b8 build: bump zmij from 1.0.17 to 1.0.19 (#42281)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.17 to 1.0.19.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="990ad7ec83"><code>990ad7e</code></a>
Release 1.0.19</li>
<li><a
href="3aeb815d16"><code>3aeb815</code></a>
Sync to vitaut/zmij@d8cb945</li>
<li><a
href="b804b08d99"><code>b804b08</code></a>
Sync to vitaut/zmij@68481e5</li>
<li><a
href="e0655607d2"><code>e065560</code></a>
Sync to vitaut/zmij@a3133ab</li>
<li><a
href="3a9446327c"><code>3a94463</code></a>
Release 1.0.18</li>
<li><a
href="9e4dd29537"><code>9e4dd29</code></a>
Match upstream's inline attributes</li>
<li><a
href="8b9832a732"><code>8b9832a</code></a>
Sync to vitaut/zmij@fb4fafa</li>
<li><a
href="6d82497878"><code>6d82497</code></a>
Sync to vitaut/zmij@f54583c</li>
<li><a
href="699276b24c"><code>699276b</code></a>
Sync to vitaut/zmij@2fb44e1</li>
<li><a
href="fb0bfcfc8a"><code>fb0bfcf</code></a>
Sync to vitaut/zmij@d922b15</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/zmij/compare/1.0.17...1.0.19">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.17&new-version=1.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-02 00:25:16 +00:00
Simon Wülker
f822959d7e script: Add navigator.pdfViewerEnabled (#42277)
Servo doesn't have a pdf viewer, so we simply set the property to
`false`.

Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-01 20:58:06 +00:00
Simon Wülker
2204bb23eb script: Allow any valid CSS color for color input values (#42275)
Testing: New tests start to pass
Closes: https://github.com/servo/servo/issues/42117

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-02-01 20:05:33 +00:00
WaterWhisperer
f405ddeaf7 script: Implement base-uri CSP check (#42272)
Testing: `./mach test-wpt /content-security-policy/base-uri`
Fixes: #42261

Signed-off-by: WaterWhisperer <waterwhisperer24@qq.com>
2026-02-01 17:03:23 +00:00
atbrakhi
b6a1761198 Expose a GamepadProvider and use Responder types for messages (#41568)
Expose a `GamepadProvider` and use `Responder` types for messages

Testing: 
Fixes: https://github.com/servo/servo/issues/41453

---------

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-02-01 13:24:01 +00:00
Sam
0f9f601eb9 script: Correctly handle Reflector with AssociatedMemory and remove associated memory in finalize instead of drop (#42271)
Reviewable per commits:

As noted in
https://github.com/servo/servo/pull/42180#discussion_r2749861902
transmuting `&Reflector<AssociatedMemory>` to `&Reflector<()>` will
ignore AssociatedMemory information and thus it will not remove extra
associated memory. By returning `&Reflector<Self::ReflectorType>` from
`DomObject::reflector()` we will preserve this information and thus
correctly handle cases with associated memory. We also do not need
`overrideMemoryUsage` in bindings.conf anymore. 🎉

Instead of removing associated memory in drop code we should do it as
part of finalizers, otherwise we have problems in nested (inherited)
structs, where drop is run for both parent and child, but we only added
associated memory for child (on init_reflector) which already included
size of parent. The only exception here is promise, because it is RCed
and not finalized.

Testing: Tested locally that it fixes speedometer.
Fixes #42269

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-02-01 10:57:08 +00:00
Servo WPT Sync
c197caff99 Sync WPT with upstream (01-02-2026) (#42267)
Automated downstream sync of changes from upstream as of 01-02-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-02-01 01:31:35 +00:00
Martin Robinson
db2a7cbe2a layout: Add support for -webkit-text-security (#42181)
This change adds support for the unspecified `-webkit-text-security`
property. All major browsers support this property. The benefit of
adding this property is that the first addition of a prefixed CSS
property will allow us to start running MotionMark.

This depends on servo/stylo#295.

Testing: Three new Servo-specific tests are added for this change. There
are a few `-webkit-text-security` tests in WPT, but they do not seem
to test basic functionality.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-31 19:12:59 +00:00
Sam
6237aa4677 Merge DomObject proc-macro into #[dom_struct] (#42262)
DomObject derive should not be used standalone so let's just inline it
into dom_struct macro. This will help me with
https://github.com/servo/servo/issues/26488#issuecomment-3824301234

This should (I did not test) also improve compile times, because we do
one macro expansion less on dom_struct.

Testing: It compiles.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-31 18:06:25 +00:00
Oriol Brufau
8637ee6388 layout: Simplify logic for border specificity (#42264)
When CSS tables collapse borders, we need to compare their specificities
to determine which border wins. One thing that the specificity takes
into account is the border-style. We were manually mapping each possible
BorderStyle to its priority, but Stylo already provides Ord, so we can
just use that instead.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-31 16:18:02 +00:00
Euclid Ye
624e9b49e1 css: Enable registered custom properties with CSSOM but stay unanimatable (#42136)
Many websites use Tailwind CSS script which utilizes registered custom
properties.
This PR makes such websites look as expected, such as #42129.

Before: 
<img width="485" height="120" alt="image"
src="https://github.com/user-attachments/assets/428000b1-eed1-4f10-bbf8-eca9e7b630f5"
/>

After:
<img width="487" height="82" alt="image"
src="https://github.com/user-attachments/assets/ab016cbf-9c00-4bd8-adc8-be28f13e42e5"
/>


Testing: Updated existing WPT results.
Fixes: #42129
Fixes: #41417 

Stylo Companion: https://github.com/servo/stylo/pull/293

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-31 14:11:35 +00:00
Martin Robinson
1900ebc447 script: Do not consider a node an ancestor of itself in Node::is_ancestor_of (#42263)
This change fixes a crash in options collections due to the fact that a
`<select>` element was being considered an ancestor of itself. This
regression likely introduced in #40776.

This change also fills in the specification text for
`HTMLOptionCollect::Add`.

Testing: This change adds a WPT crash test.
Fixes: #41080.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-31 10:22:23 +00:00
Tim van der Lippe
e5af3ee964 script: Fix timing of frozen base URL (#42255)
Make it runs at the correct time and then also performs checks for its
scheme. The CSP check is left for a follow-up PR.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-31 05:34:59 +00:00
Gae24
9c4d17e9e1 script: support JSON modules (#42138)
With import attributes enabled we can now support non javascript
modules, for now we are limited to json ones.
Switch `GlobalScope` `modulemap` to be keyed by the tuple url and
module's type.

Testing: Enabled a new directory, new tests should pass

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-01-31 01:18:51 +00:00
webbeef
58b56edf97 dom: reduce traversal in CompareDocumentPosition (#42260)
We can avoid doing 2 traversals and stop at the first matching child we
find. This ensures we are never doing the longest iteration.

Testing: covered by WPT

Signed-off-by: webbeef <me@webbeef.org>
2026-01-31 01:18:30 +00:00
Martin Robinson
68fa945f38 constellation: Gracefully handle non-existent WebViews in history changes (#42238)
Due to timing issues, history changes for closed `WebView`s can be
processed in the constellation. The best way to handle this would be to
move these operations to be methods on the `ConstellationWebView`, but
that is a larger refactor. This changes makes it so that the current
code handles this situation more gracefully.

Testing: It is difficult to test this issue because it requires opening
and
closing WebViews and is difficult to reproduce. This is a speculative
fix.
Fixes: #41079.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-30 18:13:30 +00:00
Sam
8ed35f1ce9 script: Add basic memory pressure reporting to SpiderMonkey (#42180)
By reporting memory usage of rust objects back to SM it can trigger GC
sooner and release more memory (I hope that we could use this to avoid
OOB in webgpu in the future).

Currently we use simple `size_of::<DomStruct>() +
size_of::<Box<DomStruct>>()` but it's possible to override reported
memory with `update_memory_size(self, nbytes);` on reflector. This is
mostly useful for canvases and buffers which usually have large
associated data.

Testing: None, but I am wondering if we can connect this to
`about:memory`.
Fixes: #42168

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-30 18:11:06 +00:00
Narfinger
db052c4990 script: Change some HashSets to FxHashSet (#42257)
This changes 3 occurences of HashSet to FxHashSet for speed
improvements:
- dom/notifications::pending_request_ids: Pending Request ids are
Uuid::new_v4, hence, not user assignable.
- script_thread: painters_generating_frames: These are pipeline ids and,
hence, ideal for FxHash.
- script_thread:: docs_with_no_blocking_loads: These are Dom<Document>
and their hash is the ptr address, so ideal for FxHash.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: These do not change functionality.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-30 17:02:58 +00:00
Euclid Ye
34c644d5b8 webdriver: Wait indefinitely with None timeout (#42184)
So far for `None`
[timeout](https://w3c.github.io/webdriver/#dfn-timeouts-configuration),
we've treated it effectively as no wait which is wrong:
https://github.com/web-platform-tests/wpt/pull/57332#issuecomment-3804242966.

This PR makes all `None` timeouts wait indefinitely. The funny part is,
we somehow have only done it correctly for `pageload`:
https://w3c.github.io/webdriver/#dfn-timeouts-configuration

Testing: We add test for script execution with `None` script timeout.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-30 09:54:07 +00:00
Narfinger
8173d821be script/storage: Switch remaining instances of bincode to postcard (#42236)
Because of the deprecation of bincode we are switching to postcard
(which will already be used by ipc-channel).
This changes all usages to postcard.

Sadly there are still some dependencies using bincode, so we are
probably increasing the binary size.

Currently we do not modify the deny.toml because we have dependencies
that depend on bincode.

Testing: Compilation should be enough for test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-30 07:23:38 +00:00
Euclid Ye
962fde45f2 ci: Add 30 mins timeout to bootstrap of bencher, android, ohos, linux UT & WPT (#42249)
Also increases timeout from 10 mins to 30mins for linux build job.
Fixes: #42247

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-30 05:36:10 +00:00
dependabot[bot]
ecb4549e11 build: bump zerocopy from 0.8.35 to 0.8.36 (#42246)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.35 to
0.8.36.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.36</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Add generic <code>Ptr::try_with</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2946">google/zerocopy#2946</a></li>
<li>[pointer] Fix bug in <code>try_cast_into_no_leftover</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2937">google/zerocopy#2937</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.35...v0.8.36">https://github.com/google/zerocopy/compare/v0.8.35...v0.8.36</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1803e2c814"><code>1803e2c</code></a>
Release 0.8.36 (<a
href="https://redirect.github.com/google/zerocopy/issues/2948">#2948</a>)</li>
<li><a
href="a5aa985619"><code>a5aa985</code></a>
[pointer] Fix bug in <code>try_cast_into_no_leftover</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2937">#2937</a>)</li>
<li><a
href="d161a87fc5"><code>d161a87</code></a>
Add generic <code>Ptr::try_with</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2946">#2946</a>)</li>
<li><a
href="381021b662"><code>381021b</code></a>
Commit <code>Cargo.lock</code> and <code>tools/Cargo.lock</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2932">#2932</a>)</li>
<li>See full diff in <a
href="https://github.com/google/zerocopy/compare/v0.8.35...v0.8.36">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.35&new-version=0.8.36)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-30 03:57:26 +00:00
minghuaw
611f3ef162 script: Ensure web fonts in shadow root stylesheets are downloaded (#42151)
Added calls to download web font from stylesheet when stylesheets are
added to shadow root.

Testing: Manual testing. Added a new WPT testcase

---------

Signed-off-by: Minghua Wu <michael.wu1107@gmail.com>
2026-01-30 02:14:43 +00:00
Taym Haddadi
c847e6bc5e wpt: Add a test ensuring non-autoplay audio stays paused after a back navigation (#42109)
Testing: New WPT test added.
Fixes: #41281

---------

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-01-29 22:14:57 +00:00
Tim van der Lippe
1133eb229a wpt: Use Webdriver for all WPT runs (#41511)
All other browsers use a single configuration for their browser
invocations on WPT. Servo historically had two: servo and servodriver.
Now that we run WPT on Servo GitHub CI with Webdriver using the
servodriver, we can align our configuration with theirs.

The existing "servo" configuration is renamed to "servo_legacy" and
"servodriver" is then renamed to "servo". This way, we preserve the
"servo" product name as defined on wpt.fyi, but we do use its webdriver
configuration.

Since webdriver is not fully working yet for debugging purposes, we keep
the "servo_legacy" configuration now. In the future, once the debugging
story has improved, we can remove "servo_legacy".

All in all, this ensures that both on local, Servo GitHub CI and on
wpt.fyi we all use the exact same configuration. I tested this locally
by running the following test:

```
./mach test-wpt tests/wpt/tests/css/css-overflow/scrollbar-gutter-dynamic-004.html
```

This does times out with the servo binary and works with the servodriver
binary.

Running the servo_legacy configuration is done via the `--servo-legacy`
flag:

```
./mach test-wpt tests/wpt/mozilla/tests/mozilla/caption.html --servo-legacy
```

Fixes #40751

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-29 20:47:03 +00:00
Domenico Rizzo
2c770c162c [26488] Refactors GPUCanvasContext to manage context dropping. (#42243)
Moves the `Drop` implementation for `GPUCanvasContext` to a new
`DroppableGPUCanvasContext` struct.

This ensures the context destruction logic is correctly handled, as the
`GPUCanvasContext` struct itself is a DOM struct and should not have a
drop implementation. This change aligns with the requirement that DOM
types should not implement Drop.

Testing: No tests added
Fixes: #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-01-29 18:02:31 +00:00
Luke Warlow
bd779d141a script: Add support for :open pseudo-class (#42195)
Add support for `:open` pseudo-class. This is supported on dialog,
details and select elements.


Stylo PR: servo/stylo#297
Testing: WPTs but also
`data:text/html,<select><option>123</option></select><style>:open {
background-color: red; }</style>`. There are some tests that now error,
these previously failed due to missing `:open` and now make it further
along hitting test_driver.send_keys() which causes them to error
Fixes: #41277.

---------

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-01-29 17:08:51 +00:00
Euclid Ye
9e3cb9c42e mach (Android): Use CC instead of forcing CMake to build aws-lc-sys (#42232)
In #41912, the bump of `aws-lc-sys` breaks the Android build, as it
replaces CMake build with cc builder for all platforms. As fallback, we
use CMake for Android only.

Another bump of it today #42226 is supposed to fix the issue:

> Fix building for older Android targets by
[@​justsmth](https://github.com/justsmth) in
[aws/aws-lc-rs#1013](https://redirect.github.com/aws/aws-lc-rs/pull/1013)

, but it [does
not](https://github.com/servo/servo/actions/runs/21467527086/job/61832707394).

After investigation, we properly set up environment variable to make
sure C/C++ compiler bundled with NDK can be used.
This makes Android consistent with other platforms.

Testing:
https://github.com/servo/servo/actions/runs/21468482975/job/61835557765

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-29 14:15:10 +00:00
Martin Robinson
d6197ee2f0 script: Clear layout data on shadow root during attachShadow (#42237)
When a node has `attachShadow()` successfully called on it, its
descendants are no longer in the flat tree. This change makes it so that
the layout data of these descendants is cleared during `attachShadow()`
so that the node is no longer considered to have a layout box.

Testing: This change includes a new WPT crash test.
Fixes: #42215.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-29 13:08:39 +00:00
Martin Robinson
9a48e7b9d5 base: When normalizing RopeIndex ensure it does not intersect a character (#42240)
When doing operations on `RopeIndex` that need to make slices of lines,
this change makes it so that the resulting index does not intersect a
character. This is important because Rust will panic if you attempt to
slice a string that way.

Testing: This change adds a WPT crash test and a `Rope` unit test.
Fixes: #42217.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-29 12:01:39 +00:00
Narfinger
f250e706b2 devcontainer: Use copy instead of mount for package list (#42223)
Selinux enabled systems have stricter permissions and a bind mount might
not work correctly. Hence, we copy the package list.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Build the devcontainer on fedora machine.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-29 10:49:32 +00:00
Narfinger
3ecde12e81 layout: Do not send display lists over a ipc::bytes_channel() (#41178)
This improves the sending (and receiving) of displaylist.
- In the case that we are not in IPC mode, we essentially replace
serialization with a clone of 'DisplayListInfo'.
This the desktop total time spend in the receiving the DisplayList by
half and increases the sending slightly.
Perfetto shows for sending 51_354_000 vs 71_476_000 and receiving from
440_455_008 vs 194_509_000). All numbers are on desktop machines but
mobile phones on different tests are similar big improvements.

- More surprisingly, in the IPC cases. we still get a slight improvement
in this case too. We go from the overall handling case from 24_842_000
to 30_989_752 (handle displaylist) but a significant decrease in the
send decrease in the sending from 88_199_572 to 23_025_033.
The reason is a bit of a mystery to me.

This also makes the code cleaner as we do not have to implement the
GenericByteReceiver channel.

Testing: It essentially just changes types and how they are serialized.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-29 09:47:05 +00:00
Steven Novaryo
c90d7d0a64 script: Ensure UA shadow DOM is initialized on <textarea> bind to tree (#42233)
Ensure that the UA shadow DOM for `<textarea>` is initialized when we
are binding to a tree.

Testing: New WPT.
Fixes: #42231

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-01-29 08:37:53 +00:00
Gae24
dfed00367a script: Enable module scripts import attributes (#42185)
While working on #42138 I found out that import attributes are an opt-in
feature, which can be enabled by `ContextOptionsRef`'s
`compileOptions_`.
This is likely the reason why `GetRequestedModuleSpecifier` wouldn't
fail.
Now we catch any `GetRequestedModuleSpecifier` exception and pass it to
`load_state`.

Testing: Covered by existing tests

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-01-29 07:46:02 +00:00
dependabot[bot]
f1440d3b29 build: bump aws-lc-rs from 1.15.3 to 1.15.4 (#42226)
Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.15.3 to
1.15.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs v1.15.4</h2>
<h2>What's Changed</h2>
<ul>
<li>HKDF: Fewer allocations by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1011">aws/aws-lc-rs#1011</a></li>
<li>aws-lc-sys v0.37.0 aligns with <a
href="https://github.com/aws/aws-lc/releases/tag/v1.67.0">AWS-LC
v1.67.0</a> by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1016">aws/aws-lc-rs#1016</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Fix non-CMake <code>*-windows-gnullvm</code> cross-compilation by <a
href="https://github.com/AlexTMjugador"><code>@​AlexTMjugador</code></a>
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1010">aws/aws-lc-rs#1010</a></li>
<li>Fix building for older Android targets by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1013">aws/aws-lc-rs#1013</a></li>
<li>Support Windows 7 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1000">aws/aws-lc-rs#1000</a></li>
</ul>
<h3>Issues Being Closed</h3>
<ul>
<li>Android Build Failure with cc-builder -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1006">aws/aws-lc-rs#1006</a></li>
<li>aws-lc-sys build faild on
ghcr.io/cross-rs/x86_64-pc-windows-msvc-cross:local -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1004">aws/aws-lc-rs#1004</a></li>
<li>Windows 7 support? Missing ProcessPrng -- <a
href="https://redirect.github.com/aws/aws-lc/issues/1997">aws/aws-lc#1997</a></li>
</ul>
<h2>Other Merged PRs</h2>
<ul>
<li>Prepare aws-lc-rs v1.15.4 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1018">aws/aws-lc-rs#1018</a></li>
<li>target-specific cc_builder files not needed by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1003">aws/aws-lc-rs#1003</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/AlexTMjugador"><code>@​AlexTMjugador</code></a>
made their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/1010">aws/aws-lc-rs#1010</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.3...v1.15.4">https://github.com/aws/aws-lc-rs/compare/v1.15.3...v1.15.4</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="13ff670d7f"><code>13ff670</code></a>
Prepare aws-lc-rs v1.15.4 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1018">#1018</a>)</li>
<li><a
href="9227112be7"><code>9227112</code></a>
Prepare aws-lc-sys v0.37.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1016">#1016</a>)</li>
<li><a
href="97a963f7db"><code>97a963f</code></a>
HKDF: Fewer allocations (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1011">#1011</a>)</li>
<li><a
href="4d96702258"><code>4d96702</code></a>
target-specific cc_builder files not needed (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1003">#1003</a>)</li>
<li><a
href="16fb367f40"><code>16fb367</code></a>
Support Windows 7 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1000">#1000</a>)</li>
<li><a
href="855f5caeb9"><code>855f5ca</code></a>
Fix building for older Android targets (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1013">#1013</a>)</li>
<li><a
href="ba7b312235"><code>ba7b312</code></a>
Fix non-CMake <code>*-windows-gnullvm</code> cross-compilation (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/1010">#1010</a>)</li>
<li>See full diff in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.3...v1.15.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.15.3&new-version=1.15.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 02:10:25 +00:00
dependabot[bot]
babf735a20 build: bump iana-time-zone from 0.1.64 to 0.1.65 (#42225)
Bumps [iana-time-zone](https://github.com/strawlab/iana-time-zone) from
0.1.64 to 0.1.65.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/strawlab/iana-time-zone/blob/main/CHANGELOG.md">iana-time-zone's
changelog</a>.</em></p>
<blockquote>
<h2>[0.1.65] - 2026-01-28</h2>
<h3>Changed</h3>
<ul>
<li>Add wasi support (<a
href="https://redirect.github.com/strawlab/iana-time-zone/pull/190">#190</a>)</li>
<li>Add support for emscripten (<a
href="https://redirect.github.com/strawlab/iana-time-zone/pull/189">#189</a>)</li>
<li>Add s390x target to Rust CI workflow (<a
href="https://redirect.github.com/strawlab/iana-time-zone/pull/182">#182</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3726968181"><code>3726968</code></a>
Bump version number to 0.1.65</li>
<li><a
href="f0c7cd4a33"><code>f0c7cd4</code></a>
CI: add github release workflow for trusted publishing</li>
<li><a
href="7ef287061f"><code>7ef2870</code></a>
Merge pull request <a
href="https://redirect.github.com/strawlab/iana-time-zone/issues/190">#190</a>
from bschoenmaeckers/wasi</li>
<li><a
href="5c72c92ac5"><code>5c72c92</code></a>
CI: test wasi</li>
<li><a
href="06ad6d8f3d"><code>06ad6d8</code></a>
Add wasi support</li>
<li><a
href="3e5688c9f0"><code>3e5688c</code></a>
Merge pull request <a
href="https://redirect.github.com/strawlab/iana-time-zone/issues/189">#189</a>
from bschoenmaeckers/emscripten</li>
<li><a
href="4c0e9698f7"><code>4c0e969</code></a>
Pin actions to hash</li>
<li><a
href="b55c8dd061"><code>b55c8dd</code></a>
Add ci job</li>
<li><a
href="187c2a972d"><code>187c2a9</code></a>
Drop <code>emscripten-functions</code> dependency</li>
<li><a
href="a9ddeda718"><code>a9ddeda</code></a>
Use <code>emscripten_functions</code></li>
<li>Additional commits viewable in <a
href="https://github.com/strawlab/iana-time-zone/compare/v0.1.64...v0.1.65">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=iana-time-zone&package-manager=cargo&previous-version=0.1.64&new-version=0.1.65)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 02:07:27 +00:00
dependabot[bot]
e337b3e710 build: bump zerocopy from 0.8.34 to 0.8.35 (#42227)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.34 to
0.8.35.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.35</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>[transmute] Remove <code>SizeEq</code> super-trait bound by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2920">google/zerocopy#2920</a></li>
<li>[transmute] Remove some <code>SizeEq</code> impls by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2922">google/zerocopy#2922</a></li>
<li>Introduce <code>ProjectField</code> trait by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2886">google/zerocopy#2886</a></li>
<li>[derive] In tests, assert hygiene of output by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2918">google/zerocopy#2918</a></li>
<li>Replace <code>unsafe_with_size_eq!</code> with
<code>transmute_with</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2923">google/zerocopy#2923</a></li>
<li>Introduce <code>ReadOnly&lt;T&gt;</code> which is unconditionally
<code>Immutable</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2866">google/zerocopy#2866</a></li>
<li>[transmute] Encode cast in <code>TryTransmuteFromPtr</code> params
by <a href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2921">google/zerocopy#2921</a></li>
<li>[projection] Clarify comment explaining fallibility by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2939">google/zerocopy#2939</a></li>
<li>[project] Support projecting enum tags by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2940">google/zerocopy#2940</a></li>
<li>Use <code>ReadOnly</code> in <code>TryFromBytes::is_bit_valid</code>
by <a href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2873">google/zerocopy#2873</a></li>
<li>[derive] Allow <code>TryFromBytes</code> on
non-<code>Immutable</code> unions by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2876">google/zerocopy#2876</a></li>
<li>[util] <code>use</code> more items to make code more concise by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2942">google/zerocopy#2942</a></li>
<li>Simplify <code>try_transmute!</code> (and friends) internals by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2938">google/zerocopy#2938</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.34...v0.8.35">https://github.com/google/zerocopy/compare/v0.8.34...v0.8.35</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="29d3ee4a51"><code>29d3ee4</code></a>
Release 0.8.35 (<a
href="https://redirect.github.com/google/zerocopy/issues/2945">#2945</a>)</li>
<li><a
href="971ea9b756"><code>971ea9b</code></a>
Simplify <code>try_transmute!</code> (and friends) internals (<a
href="https://redirect.github.com/google/zerocopy/issues/2938">#2938</a>)</li>
<li><a
href="7dedd50d82"><code>7dedd50</code></a>
[util] <code>use</code> more items to make code more concise (<a
href="https://redirect.github.com/google/zerocopy/issues/2942">#2942</a>)</li>
<li><a
href="84eaf29461"><code>84eaf29</code></a>
[derive] Allow <code>TryFromBytes</code> on non-<code>Immutable</code>
unions (<a
href="https://redirect.github.com/google/zerocopy/issues/2876">#2876</a>)</li>
<li><a
href="a7d3fdab40"><code>a7d3fda</code></a>
Use <code>ReadOnly</code> in <code>TryFromBytes::is_bit_valid</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2873">#2873</a>)</li>
<li><a
href="b66e6cf3c2"><code>b66e6cf</code></a>
[project] Support projecting enum tags (<a
href="https://redirect.github.com/google/zerocopy/issues/2940">#2940</a>)</li>
<li><a
href="1876c9d7e6"><code>1876c9d</code></a>
[ci] Replace Rust caching with generic caching (<a
href="https://redirect.github.com/google/zerocopy/issues/2931">#2931</a>)</li>
<li><a
href="1f5eea23ee"><code>1f5eea2</code></a>
[projection] Clarify comment explaining fallibility (<a
href="https://redirect.github.com/google/zerocopy/issues/2939">#2939</a>)</li>
<li><a
href="4f2643c88c"><code>4f2643c</code></a>
[ci] Roll <code>cargo-llvm-cov</code> to 0.8.0 (<a
href="https://redirect.github.com/google/zerocopy/issues/2929">#2929</a>)</li>
<li><a
href="5fcf3722a5"><code>5fcf372</code></a>
[transmute] Encode cast in <code>TryTransmuteFromPtr</code> params (<a
href="https://redirect.github.com/google/zerocopy/issues/2921">#2921</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/google/zerocopy/compare/v0.8.34...v0.8.35">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.34&new-version=0.8.35)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 00:57:30 +00:00
Andreu Botella
b0399561d6 layout: Support content: <image> on non-pseudo-elements (#41480)
Per CSS-CONTENT-3, one of the possible values of the `content` CSS
property is `<content-replacement>`, which evaluates to a single
`<image>`. This value is also allowed on regular elements, not just on
pseudo-elements, and it will make the element into a replaced element
representing the given image, discarding its contents.

This patch implements this in `traverse_element`: if the `display` value
is not `none` or `contents`, we first check whether the `contents`
property should make the element replaced, and if it shouldn't, then we
check whether the element itself is replaced or a widget.

Per the spec, an invalid image must be treated as representing a
transparent black image with zero natural width and height – in
particular, it must not show a broken image icon. We added the method
`ReplacedContents::zero_sized_invalid_image` to implement this.

This patch adds support for image URL references, but not for color
gradients, which are treated as invalid images. The reason for this is
that currently Servo does not support gradients in
`ReplacedContentKind`. This is left as a follow-up change.

Testing: Some of the existing `css/css-content/element-replacement*` WPT
tests now pass with this patch. We also added some new ones dealing with
replacing the document root.

Fixes: #41479

Signed-off-by: Andreu Botella <andreu@andreubotella.com>
2026-01-28 17:46:18 +00:00
Luke Warlow
0da3103a55 layout: Properly propagate baselines of flex items that do not participate in baseline alignment (#42038)
Fix baseline propagation from flex containers

Flex item layout previously conflated baselines that got propagated and
baseline alignment within flex.

Testing: Before and after layout of the manual test cases.


[test.html](https://github.com/user-attachments/files/24796669/test.html)
(from original issue)

<img width="645" height="464" alt="image"
src="https://github.com/user-attachments/assets/57ef6fe7-963c-44b7-96ef-6c81132c9b96"
/>


[test2.html](https://github.com/user-attachments/files/24796679/test2.html)
(from Oriol's comment)

<img width="164" height="299" alt="image"
src="https://github.com/user-attachments/assets/54dc8cf6-8b0c-4077-8eca-fd18b11f2584"
/>


Fixes: #41905

---------

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-28 16:36:42 +00:00
Euclid Ye
185b9e7e97 wpt: Unskip css-properties-values-api tests (#42222)
This will allow us to see the test improvements from #42136.

Testing: Existing WPT

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-28 16:27:32 +00:00
Martin Robinson
da7027a6df layout: Ensure legacy alignment-related presentational hints match specification (#42220)
The legacy alignment presentation hints differed from the specification
in a way that was breaking them when dealing with `<img>`. The culprit
seems to be the selector `img[type = image i]` which seems a little
nonsensical. This change makes the CSS in `presentational-hints.css`
match what is found in the specification.

There is still an issue with "bottom" alignment of replaced elements and
more investigation is necessary to understand what specified or
unspecified behavior we are failing to implement.

Testing: This fixes a variety of WPT tests.
Fixes: #41048.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-28 16:12:00 +00:00
eri
6e781aaf74 devtools: Remove unsupported serde annotations from shared/devtools.rs (#42219)
There were some `#[serde(untagged)]` and `#[serde(skip*)]` annotations
in the shared devtools types. These are needed for correct JSON
serialization when sending messages to Firefox, but they fail in
multiprocess mode since we are sharing them through the IPC channel with
bincode, which doesn't support certain serde tags.

The workaround is to keep all shared types free from problematic
annotations, and defining wrapping types that are only used in the
devtools crate.

One instance are console messages and page errors. They have been moved
to `console.rs`, with `shared/devtools` only keeping the parts that are
needed for communication between threads.

The other instance are auto margins. Now the final message is built in
`page_style.rs`.

Apologies since both of them were introduced by me, I wasn't aware that
we were limited by bincode in multiprocess mode. A warning has been
added to `shared/devtools` listing the problematic annotations that
shouldn't be used in this file.

Testing: `mach test-devtools` and manual testing using `--multiprocess`.
Fixes: #42170

Signed-off-by: eri <eri@igalia.com>
2026-01-28 15:48:59 +00:00
Jonathan Schwender
6b12ecf26b Increase stylo stack size in asan and debug builds (#42115)
This bumps stylo to allow configuring the stack size of the stylo
threads, which fixes crashes with asan and debug builds.

Testing: Manual testing with `--with-asan` and with the debug profile.
Fixes: #40814

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-28 15:39:49 +00:00
Luke Warlow
aad7424150 Update details to support ::details-content pseudo element. (#42107)
Update details to support `::details-content` pseudo element.

This is currently not element-backed but will support the basic styling.

This replaces the existing `::-servo-details-content` styling.

Testing: WPTs and manually using
https://demo.lukewarlow.dev/css-forms.html

<img width="159" height="66" alt="image"
src="https://github.com/user-attachments/assets/8e72e7f3-2b49-43c6-9a4e-dbea0586739e"
/>

Stylo PR: https://github.com/servo/stylo/pull/292

Signed-off-by: Luke Warlow <lwarlow@igalia.com>
2026-01-28 14:52:50 +00:00
Narfinger
d41bb930e1 painter: Insert a cache for animation with smarter updates (#41956)
This inserts a cache in painter that keeps data for animating images in
Painter.
We then can send cheap ImageUpdate::UpdateAnimation to just get the
required bytes from the cache.

There are some warts with the current design:
- ImageUpdate::AddImage only adds images in the cache that have the data
in SerializableImageData::Raw. Potentially there could be image
animations in other ways which then for a following
ImageUpdate::UpdateAnimation we do not have the data. We can probably
fix this on the sender side.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Tested on the usecase in
https://github.com/servo/servo/issues/41818 and WPT test here:
https://github.com/Narfinger/servo/actions/runs/21063721427
Fixes: https://github.com/servo/servo/issues/41818

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-28 14:07:27 +00:00
Martin Robinson
3b60a0784b mach: Do not track the uv.lock file (#42214)
This is a temporary fix until a more complete solution, such
as the one from #42169, works consistently.

Testing: This should be tested by the CI run.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-28 12:13:03 +00:00
Martin Robinson
dd292e6ba9 deps: Switch to the webrender@0.68 from crates.io (#42213)
This switches Servo to the version of WebRender published on crates.io.

Testing: This change should not change behavior.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-28 11:39:49 +00:00
Olexandr88
1165f7cde7 ci: bump upload-artifact to v6 (#42212)
Bump GitHub Actions upload-artifact to v6 across workflows

---------

Signed-off-by: Olexandr88 <radole1203@gmail.com>
2026-01-28 11:11:33 +00:00
Steven Novaryo
45c39d7496 script: Notify PinchZoom resizes to ScriptThread's VisualViewport (#41754)
Continuing the implementation of `VisualViewport`, the resizing of
`PinchZoom` should be notified to `ScriptThread` to update the
`VisualViewport` interface and to fire the appropriate JS event. Top
level `Window`/`Pipeline` would have a `VisualViewport` interface that
mirrors the `PinchZoom` viewport, while nested `Window` would have a
default value that represent layout viewport of the relevant iframe. The
`VisualViewport` of an iframe is updated after each reflow that
calculate the rectangle of the iframe.

The updates of DOM's `VisualViewport` occurs immediately (instead of
waiting for the event loop like the viewport) but integrates with the
event loop for the JS events. This behavior would helps with the fact
that `VisualViewport` needs to be updated both when it is scrolled or
resized.

Testing: Existing WPTs and new unit test.
Part of: https://github.com/servo/servo/issues/41341

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-01-28 09:33:55 +00:00
Narfinger
67c0ce7e75 CI/mach: Run wpt tests, smoketest and devtools tests in multiprocess mode (#41684)
According to discussions in
https://servo.zulipchat.com/#narrow/channel/263398-general/topic/GenericChannel.20and.20testing.20of.20ipc-mode/with/565017052
it would be a good idea to test servo in multiprocess
mode as more channels are switched to GenericChannel.
This changes the test-wpt, test-webdriver and smoketest to have a
multiprocess argument for most tests.


Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: WPT test run here:
https://github.com/Narfinger/servo/actions/runs/20713369574

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-28 08:56:18 +00:00
dependabot[bot]
55a278819f build: bump zerocopy from 0.8.33 to 0.8.34 (#42198)
Bumps [zerocopy](https://github.com/google/zerocopy) from 0.8.33 to
0.8.34.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/google/zerocopy/releases">zerocopy's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.34</h2>
<!-- raw HTML omitted -->
<h2>What's Changed</h2>
<ul>
<li>Generate trait implementations for tuples by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2862">google/zerocopy#2862</a></li>
<li>Simplify MutationCompatible impls by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2877">google/zerocopy#2877</a></li>
<li>[derive] Refactor is_bit_valid tests by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2879">google/zerocopy#2879</a></li>
<li>[derive] Unify handling of #[allow] attributes by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2882">google/zerocopy#2882</a></li>
<li>Rename <code>HasField::project</code> to
<code>HasField::project_raw</code> by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2884">google/zerocopy#2884</a></li>
<li>Introduce <code>HasField::project_inner</code> by <a
href="https://github.com/jswrenn"><code>@​jswrenn</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2885">google/zerocopy#2885</a></li>
<li>[derive] Fix unused variable bug in tests by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2891">google/zerocopy#2891</a></li>
<li>[derive] Rename module ext -&gt; util by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2892">google/zerocopy#2892</a></li>
<li>Tighten impl of CastUnsized by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2887">google/zerocopy#2887</a></li>
<li>Simplify projection methods by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2895">google/zerocopy#2895</a></li>
<li>Fix stale comments by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2896">google/zerocopy#2896</a></li>
<li>[derive] Split repr(C) logic from derive_known_layout_inner by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2888">google/zerocopy#2888</a></li>
<li>[derive] Move find_zero_variant to enum module by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2889">google/zerocopy#2889</a></li>
<li>[derive] Introduce Ctx type by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2890">google/zerocopy#2890</a></li>
<li>[derive] Improve hygiene testing by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2898">google/zerocopy#2898</a></li>
<li>[derive] Factor out <code>core_reexport</code> path generation by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2899">google/zerocopy#2899</a></li>
<li>[derive] Refactor into more modules by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2901">google/zerocopy#2901</a></li>
<li>[derive] Store output test goldens in separate files by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2904">google/zerocopy#2904</a></li>
<li>[derive] Automatically bless output test output by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2905">google/zerocopy#2905</a></li>
<li>[cast] Fix safety comment bug for CastUnsized by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2908">google/zerocopy#2908</a></li>
<li>Clarify semantics of size-preserving transmutes by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2911">google/zerocopy#2911</a></li>
<li>Make SizeEq safe by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2907">google/zerocopy#2907</a></li>
<li>[tools] Remove now-obsolete <code>rm Cargo.lock</code> by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2916">google/zerocopy#2916</a></li>
<li>[derive] Avoid ambiguities referring to associated items by <a
href="https://github.com/joshlf"><code>@​joshlf</code></a> in <a
href="https://redirect.github.com/google/zerocopy/pull/2917">google/zerocopy#2917</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/salmanmkc"><code>@​salmanmkc</code></a>
made their first contribution in <a
href="https://redirect.github.com/google/zerocopy/pull/2914">google/zerocopy#2914</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/google/zerocopy/compare/v0.8.33...v0.8.34">https://github.com/google/zerocopy/compare/v0.8.33...v0.8.34</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c358fd5d33"><code>c358fd5</code></a>
[derive] Avoid ambiguities referring to associated items (<a
href="https://redirect.github.com/google/zerocopy/issues/2917">#2917</a>)</li>
<li><a
href="da40b0afbd"><code>da40b0a</code></a>
[ci] Work around bugs in <code>nextest</code> and <code>llvm-cov</code>
(<a
href="https://redirect.github.com/google/zerocopy/issues/2924">#2924</a>)</li>
<li><a
href="dce155c9b6"><code>dce155c</code></a>
[tools] Remove now-obsolete <code>rm Cargo.lock</code> (<a
href="https://redirect.github.com/google/zerocopy/issues/2916">#2916</a>)</li>
<li><a
href="8f361d9467"><code>8f361d9</code></a>
Vendor dependencies (<a
href="https://redirect.github.com/google/zerocopy/issues/2883">#2883</a>)</li>
<li><a
href="43736bd82e"><code>43736bd</code></a>
Upgrade GitHub Actions to latest versions (<a
href="https://redirect.github.com/google/zerocopy/issues/2914">#2914</a>)</li>
<li><a
href="5754fd78f3"><code>5754fd7</code></a>
Make SizeEq safe (<a
href="https://redirect.github.com/google/zerocopy/issues/2907">#2907</a>)</li>
<li><a
href="d6fd7f3079"><code>d6fd7f3</code></a>
Clarify semantics of size-preserving transmutes (<a
href="https://redirect.github.com/google/zerocopy/issues/2911">#2911</a>)</li>
<li><a
href="6aae3de31d"><code>6aae3de</code></a>
[ci] Check for orphaned UI test .stderr files (<a
href="https://redirect.github.com/google/zerocopy/issues/2909">#2909</a>)</li>
<li><a
href="7cc13f19f0"><code>7cc13f1</code></a>
[cast] Fix safety comment bug for CastUnsized (<a
href="https://redirect.github.com/google/zerocopy/issues/2908">#2908</a>)</li>
<li><a
href="5c67d2c8d8"><code>5c67d2c</code></a>
[derive] Automatically bless output test output (<a
href="https://redirect.github.com/google/zerocopy/issues/2905">#2905</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/google/zerocopy/compare/v0.8.33...v0.8.34">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zerocopy&package-manager=cargo&previous-version=0.8.33&new-version=0.8.34)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 08:19:32 +00:00
dependabot[bot]
21fa2be64c build: bump clap from 4.5.54 to 4.5.55 (#42200)
Bumps [clap](https://github.com/clap-rs/clap) from 4.5.54 to 4.5.55.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.5.55</h2>
<h2>[4.5.55] - 2026-01-27</h2>
<h3>Fixes</h3>
<ul>
<li>Fix inconsistency in precedence between positionals with a
<code>value_terminator(&quot;--&quot;)</code> and escapes
(<code>--</code>) where <code>./foo -- bar</code> means the first arg is
empty, rather than escaping future args</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.5.55] - 2026-01-27</h2>
<h3>Fixes</h3>
<ul>
<li>Fix inconsistency in precedence between positionals with a
<code>value_terminator(&quot;--&quot;)</code> and escapes
(<code>--</code>) where <code>./foo -- bar</code> means the first arg is
empty, rather than escaping future args</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4c039309b6"><code>4c03930</code></a>
chore: Release</li>
<li><a
href="fb948a25ff"><code>fb948a2</code></a>
docs: Update changelog</li>
<li><a
href="0f602396a3"><code>0f60239</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6057">#6057</a>
from GilShoshan94/master</li>
<li><a
href="83d4206ff1"><code>83d4206</code></a>
test: Update fixture to cover all cases + styling</li>
<li><a
href="b13274d869"><code>b13274d</code></a>
fix: Rename <code>pvs</code> to <code>dvs</code> for default values</li>
<li><a
href="df92ea02bb"><code>df92ea0</code></a>
feat(help): Allow styling for inline context</li>
<li><a
href="0e535e518d"><code>0e535e5</code></a>
chore(deps): Update compatible (dev) (<a
href="https://redirect.github.com/clap-rs/clap/issues/6054">#6054</a>)</li>
<li><a
href="de57287f30"><code>de57287</code></a>
chore(deps): Update Rust Stable to v1.88 (<a
href="https://redirect.github.com/clap-rs/clap/issues/6048">#6048</a>)</li>
<li><a
href="5504a13468"><code>5504a13</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6047">#6047</a>
from clap-rs/revert-6045-cleanup-docsrs</li>
<li><a
href="c1c243c924"><code>c1c243c</code></a>
Revert &quot;Cleanup docs.rs related issues&quot;</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.5.54...clap_complete-v4.5.55">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap&package-manager=cargo&previous-version=4.5.54&new-version=4.5.55)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Euclid Ye <euclid.ye@huawei.com>
2026-01-28 08:15:33 +00:00
Rocketjumper
e950e5c2ca layout: Suppress soft wrap opportunities between NU/AL/AI/ID characters to respect word-break: keep-all (#42088)
This change modifies `LineBreaker` to properly handle `word-break:
keep-all` by adjusting the arguments passed to
`icu_segmenter::LineSegmenter`.

- [CSS
specification](https://drafts.csswg.org/css-text/#valdef-word-break-keep-all)
- Stylo PR : servo/stylo#289

Testing: Created a WPT test for this change, specifically:
`tests/wpt/tests/css/css-text/word-break/word-break-keep-all-011.html`.
Fixes: #42047

---------

Signed-off-by: Richard Tjokroutomo <richard.tjokro2@gmail.com>
2026-01-28 08:11:33 +00:00
dependabot[bot]
1b4c281e10 build: bump cc from 1.2.53 to 1.2.54 (#42199)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.53 to 1.2.54.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.54</h2>
<h3>Other</h3>
<ul>
<li>Fix x86_64-unknown-linux-gnuasan parsing (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1661">#1661</a>)</li>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1660">#1660</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.53...cc-v1.2.54">1.2.54</a>
- 2026-01-23</h2>
<h3>Other</h3>
<ul>
<li>Fix x86_64-unknown-linux-gnuasan parsing (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1661">#1661</a>)</li>
<li>Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1660">#1660</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="85466d853f"><code>85466d8</code></a>
chore(cc): release v1.2.54 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1662">#1662</a>)</li>
<li><a
href="e580d49f53"><code>e580d49</code></a>
Fix x86_64-unknown-linux-gnuasan parsing (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1661">#1661</a>)</li>
<li><a
href="48b7b539bc"><code>48b7b53</code></a>
Regenerate target info (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1660">#1660</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.53...cc-v1.2.54">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.53&new-version=1.2.54)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-28 07:56:51 +00:00
Josh Matthews
7358d73f7f script: Do not track outdated oustanding loads for stylesheets. (#42208)
The `HTMLLinkElement::pending_loads` field should only be used to track
outstanding loads for the current generation; any loads from previous
generations can be ignored. This avoids confusion about when to dispatch
load/error events. See
https://github.com/servo/servo/issues/42187#issuecomment-3808888585 for
more details about how the timing of multiple loads for the same
`<link>` element resulted in intermittent timeouts in one WPT test.

Testing: Intermittent failure did not appear within 75 runs; previously
reproduced within 15.
Fixes: #42187

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-28 07:56:50 +00:00
Josh Matthews
81e4f28708 script: Use global's origin in Request constructor. (#42207)
There are subtle differences between a global's origin and its URL's
origin, and it's easy to hit them with special URLs like about:blank.
The code being replaced was written before we has separate origins for
globals.

Testing: Newly passing WPT test.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-28 07:46:28 +00:00
Jonathan Schwender
73af1bf099 devcontainer: Use our own dockerfile (#42166)
Switch to using our own dockerfile, and install the required
dependencies into our image.
In follow-ups we can build the docker image in CI, so that users can
download a prebuilt docker image to save time.

Testing: Manually tested by opening servo in the devcontainer and
running `./mach build`

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-28 05:18:40 +00:00
Euclid Ye
e137bec9cc deny: Ignore GHSA-hcp2-x6j4-29j7 to unblock CI. (#42203)
This vulnerability is just issued 3 hours ago. It is patched in
>=0.1.0-rc.3, but we tried last week: it takes significant effort to
upgrade:
https://github.com/servo/servo/pull/42120#issuecomment-3793543197

Given that it blocks the CI, no exploit is known yet, and the high
attack complexity, we should ignore it for now.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-28 03:28:38 +00:00
Simon Wülker
c0583492d6 webgl: Get rid of a silly expect(unused) (#42193)
The function ends right after this declaration. Instead of ignoring the
fact that its unused, let's remove it.

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-27 18:15:33 +00:00
Tim van der Lippe
c0b55a2c34 script: Add about_base_url (#42104)
We populate the required field for all relevant entrypoints
and set it to `document.base_url` when the url is `about:blank`
or `about:srcdoc`. In all other cases, it uses
`document.about_base_url`.

Testing: WPT
Fixes #41836

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-27 18:09:01 +00:00
Narfinger
caae16a8ba script: Fix cycle in TransmitBodyConnectHandler (#42183)
As described in the stop_reading method:
into_net_request_body constructs an ipc-channel sender and receiver
pair. The sender will be given to the TransmitBodyHandler which uses it
in various script callbacks.
On BodyChunkRequest::Done, previously we did not destroy the sender,
hence, did not destroy the receiver for this and keep the structure
alive in memory.
For safety we now destroy the sender in the BodyChunkRequest::Done (we
also take the IpcSenders and IpcSharedMemory when applicable).


Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Using the script from
https://github.com/servo/servo/issues/41202 we get less file descriptor
usage.
Fixes: This partially fixes https://github.com/servo/servo/issues/41202
but not completely.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-27 17:11:49 +00:00
atbrakhi
e28a0f6d6c devtools: implement clearBreakpoint (#42154)
Add an event listener for `clearBreakpoint` to `debugger.js` and the
necessary glue to access it from the `devtools` crate.

Testing: `./mach test-devtools` and manual testing.
Fixes: Part of: https://github.com/servo/servo/issues/36027

---------

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: eri <eri@igalia.com>
2026-01-27 15:46:54 +00:00
eri
33bb35c5da devtools: Handle messages in object actor (#42186)
Handle `enumProperties`, `enumSymbols` and `prototype` messages.

Create `PropertyIteratorActor` and `SymbolIteratorActor`.

This shows hover information when paused in the debugger, but only for
built-in Javascript objects. Next step would be to fix `evaluateJSAsync`
to take into account the frame / context in which we are evaluating
messages, so that we can do the same for local variables and functions.

Testing: Ran `mach test-tidy` and manual testing.
Part-of: #36027

@atbrakhi

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-01-27 14:15:42 +00:00
Martin Robinson
bfccb3ec41 layout: Improve and make consistent the look of various form controls (#42085)
This change makes a variety of changes to form controls to improve their
appearance. In general, they now look more similar to Chrome and
Firefox:

- Padding is added everywhere
- Checkboxes and radio buttons are more centered in their containers
  and they no longer affect the baseline of their surroundings.
- Buttons react when hovered and clicked.
- Form control styles are organized a bit.
- More controls have a style making it obvious they are disabled.

There's more work to do here, but it is saved for followup changes
- Checkbox checks are not well positioned -- they should likely be an
image.
- More work is necessary to ensure that the controls look consistent at
all font sizes and that font sizes from the surrounding content do not
leak in.
 
Testing: This change causes some WPT tests to start passing some to
start failing,
due to the fact that we do not properly implement all of the behavior of
form controls.

Failures:
 - `/css/css-flexbox/stretch-flex-item-checkbox-input.html` and
`/css/css-flexbox/stretch-flex-item-checkbox-input.html`: These test the
  behavior of checkboxes and radio buttons in flex containers, but since
  we do not have a Shadow DOM or custom rendering for our controls, we
  must limit the height and width of the controls. Further refinement
  is necessary here to get this working properly, though it only affects
  controls in flex.
- `/css/css-grid/subgrid/subgrid-button.html`,
  `/css/css-transforms/transform-input-002.html`,
`/html/rendering/widgets/button-layout/scrollbars.html`: These two seem
to be
  minor subpixel variations in the output.
-
`/html/rendering/widgets/baseline-alignment-and-overflow.tentative.html`:
This tests uspecified behavior about where baselines come from in
controls.
  We do not implement this yet.
-
`/pointerevents/pointerevent_lostpointercapture_for_disconnected_shadow_host.html`:
We do not support the `lostpointercapture` event so I suspect this is
just
  timing out in a slightly different way.

Fixes: #34969.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-27 10:28:00 +00:00
Tim van der Lippe
22df064c81 script: Fix render blocking stylesheet load fire ordering (#41973)
While adding various spec comments to the parts of `#the-end` (which are
scattered throughout the script crate), I stumbled upon the render
blocking stylesheets implementation. There was a HTML PR to make clear
when it should run and the corresponding WPT tests have been fixed.

Fixes #22715

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-27 04:12:34 +00:00
dependabot[bot]
d8d4f9a484 build: bump sea-query from 1.0.0-rc.29 to 1.0.0-rc.30 in the sea-query-related group (#42172)
Bumps the sea-query-related group with 1 update:
[sea-query](https://github.com/SeaQL/sea-query).

Updates `sea-query` from 1.0.0-rc.29 to 1.0.0-rc.30
<details>
<summary>Commits</summary>
<ul>
<li><a
href="955d55057f"><code>955d550</code></a>
1.0.0-rc.30</li>
<li><a
href="7b5d59e6e9"><code>7b5d59e</code></a>
one more test case</li>
<li><a
href="5d3f210b9f"><code>5d3f210</code></a>
Tokenizer supports comment parsing</li>
<li><a
href="575c0f69ab"><code>575c0f6</code></a>
Tokenizer supports comment parsing</li>
<li><a
href="a6e58a186e"><code>a6e58a1</code></a>
One more test case</li>
<li><a
href="6c2ba2dd7c"><code>6c2ba2d</code></a>
Give up on ranged dependency</li>
<li><a
href="5e40a4ef66"><code>5e40a4e</code></a>
Try fix CI</li>
<li><a
href="c3d09a6c46"><code>c3d09a6</code></a>
Try fix CI</li>
<li><a
href="2e9ed5f84c"><code>2e9ed5f</code></a>
Fixup</li>
<li><a
href="6bf098e567"><code>6bf098e</code></a>
Reduce dependency on specific versions of value type crates</li>
<li>Additional commits viewable in <a
href="https://github.com/SeaQL/sea-query/compare/1.0.0-rc.29...1.0.0-rc.30">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sea-query&package-manager=cargo&previous-version=1.0.0-rc.29&new-version=1.0.0-rc.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-27 02:17:53 +00:00
dependabot[bot]
b1410a960a build: bump zmij from 1.0.16 to 1.0.17 (#42176)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.16 to 1.0.17.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="60c35b195b"><code>60c35b1</code></a>
Release 1.0.17</li>
<li><a
href="32942883ce"><code>3294288</code></a>
Sync to vitaut/zmij@25bd96e</li>
<li><a
href="4444a23546"><code>4444a23</code></a>
Sync to vitaut/zmij@f087a34</li>
<li><a
href="2d4ef16b6d"><code>2d4ef16</code></a>
Sync to vitaut/zmij@df35b9c</li>
<li><a
href="414e8a0e50"><code>414e8a0</code></a>
Sync to vitaut/zmij@6589ede</li>
<li><a
href="e3d6fb7513"><code>e3d6fb7</code></a>
Sync to vitaut/zmij@408ebfb</li>
<li><a
href="72d4f623c5"><code>72d4f62</code></a>
Sync to vitaut/zmij@98d01d3</li>
<li><a
href="ee9805135b"><code>ee98051</code></a>
Sync to vitaut/zmij@ddbc414</li>
<li><a
href="a3b929841d"><code>a3b9298</code></a>
Sync to vitaut/zmij@6df7f2a</li>
<li><a
href="bf1da59c92"><code>bf1da59</code></a>
Sync to vitaut/zmij@6f0247e</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/zmij/compare/1.0.16...1.0.17">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.16&new-version=1.0.17)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-27 01:45:49 +00:00
dependabot[bot]
e55a648371 build: bump siphasher from 1.0.1 to 1.0.2 (#42174)
Bumps [siphasher](https://github.com/jedisct1/rust-siphash) from 1.0.1
to 1.0.2.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="db8172048a"><code>db81720</code></a>
1.0.2</li>
<li><a
href="edb3edec49"><code>edb3ede</code></a>
Add serde for sip128</li>
<li><a
href="064daf3855"><code>064daf3</code></a>
2026</li>
<li><a
href="aa490a9fd8"><code>aa490a9</code></a>
Cleaner</li>
<li><a
href="914adf99c7"><code>914adf9</code></a>
Implement Eq for Hash128</li>
<li><a
href="d83e1840bc"><code>d83e184</code></a>
Nits</li>
<li><a
href="8c23e5d035"><code>8c23e5d</code></a>
Add issues.yml</li>
<li>See full diff in <a
href="https://github.com/jedisct1/rust-siphash/compare/1.0.1...1.0.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=siphasher&package-manager=cargo&previous-version=1.0.1&new-version=1.0.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-27 01:29:59 +00:00
dependabot[bot]
6fe0689dac build: bump libm from 0.2.15 to 0.2.16 (#42173)
Bumps [libm](https://github.com/rust-lang/compiler-builtins) from 0.2.15
to 0.2.16.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/compiler-builtins/releases">libm's
releases</a>.</em></p>
<blockquote>
<h2>libm-v0.2.16</h2>
<h3>Fixed</h3>
<ul>
<li>Fix an incorrect result for <code>fminimum</code> and
<code>fmaximum</code> with the input (-0, NaN)</li>
<li>Fix a typo in <code>libm::Libm::roundeven</code></li>
<li>Fix the <code>expm1f</code> overflow threshold</li>
<li>Change <code>CmpResult</code> to use a pointer-sized return
type</li>
<li>Compare against <code>CARGO_CFG_TARGET_FAMILY</code> in a
multi-valued fashion</li>
<li>Implement <code>exp</code> and its variants for i586 with inline
assembly</li>
<li>Implement <code>floor</code> and <code>ceil</code> in assembly on
<code>i586</code></li>
</ul>
<h3>Other</h3>
<ul>
<li>Significantly optimize <code>fmod</code> worst case performance (<a
href="https://redirect.github.com/rust-lang/compiler-builtins/pull/1002">#1002</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="dfd2203a4d"><code>dfd2203</code></a>
chore: release libm v0.2.16</li>
<li><a
href="0f5c3414fc"><code>0f5c341</code></a>
Set <code>codegen-units=1</code> for benchmarks</li>
<li><a
href="723335fb9a"><code>723335f</code></a>
Implement __sync builtins for thumbv6-none-eabi (<a
href="https://redirect.github.com/rust-lang/compiler-builtins/issues/1050">#1050</a>)</li>
<li><a
href="65624df7f5"><code>65624df</code></a>
compiler-builtins: Enable AArch64 <code>__chkstk</code> for MinGW</li>
<li><a
href="a33e08ea7c"><code>a33e08e</code></a>
ci: Move the dependency installs and wall time benchmarks to
scripts</li>
<li><a
href="4ce6a08da2"><code>4ce6a08</code></a>
Fix a typo in <code>libm::Libm::roundeven</code></li>
<li><a
href="2d56e4d2f8"><code>2d56e4d</code></a>
Ignore unused_unsafe lint in libm/src/math/arch/x86/detect.rs</li>
<li><a
href="93d8cb5ff5"><code>93d8cb5</code></a>
compiler-builtins: Revert &quot;cpuid is safe since the stdarch sync, so
remove un...</li>
<li><a
href="66ffdef3f0"><code>66ffdef</code></a>
Merge ref '23d01cd24125' from rust-lang/rust</li>
<li><a
href="be448fff6e"><code>be448ff</code></a>
Prepare for merging from rust-lang/rust</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/compiler-builtins/compare/libm-v0.2.15...libm-v0.2.16">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libm&package-manager=cargo&previous-version=0.2.15&new-version=0.2.16)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-27 01:23:23 +00:00
Narfinger
618f40540e net: Remove exterior mutability from FileManager (#42111)
This switches FileManager from being behind an Arc<Mutex<FileManager>>>
to just FileManager.
This saves us the Arc and Mutex and the compiler makes sure that we do
not have Race Conditions.

FileManager is already easily cloneable because it consist of store:
Arc<> and GenericEmbedderProxy.

Testing: Compilation and unit tests are the tests.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-27 01:22:02 +00:00
Martin Robinson
c5de959ebe fonts: Ensure detailed glyphs are also added to the glyph buffer (#42162)
This changes fixes a major issue with #42105 where detailed glyphs were
added to the detailed glyph vector, but did not have corresponding
entries in the glyph buffer.

Testing: This undoes some of the test result changes from #42105. It
turns out that some were real regressions.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-26 21:46:27 +00:00
Martin Robinson
c639bb1a7b layout: Do not enable letter-spacing for cursive scripts (#42165)
This is specified in CSS Text 3.

Testing: This fixes a WPT test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-26 21:34:39 +00:00
Ashwin Naren
ccc0d95930 Update servo.exe.manifest for servoshell (#42167)
Bumps servoshell version to actual version and updates `./mach release`
to update it.

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-01-26 20:23:18 +00:00
Narfinger
8dfeaaf339 webgl: Move from IpcChannel to GenericChannel (#42033)
This moves WebGL component from IpcChannel to GenericChannel. Of note
are the following changes:
- Removal of WebGlSender and WebGlReceiver type alias. As we removed
them in a similar component earlier.
- Moving from IpcByteSender to IpcSender over serde_bytes::ByteBuf. I
think the tradeoff for easier reading is worth it.


Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation and unit tests.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Co-authored-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-01-26 18:04:13 +00:00
Martin Robinson
2a7d2780b3 fonts: Store shaping output per-character rather than per-code point (#42105)
This change is a reworking of the shaping code and simplification of the
`GlyphRun` data structure.

The shaper was written between 2012 and 2014 against an early version of
Rust. It was originally written to have a single glyph entry per UTF-8
code point. This is useful when you always need to iterate through
glyphs based on UTF-8 code points. Unfortunately, this required a
tri-level data structure to hold detailed glyphs and meant that CJK
characters took over 3x the memory usage of ASCII characters. In
addition, iterating through glyphs (the most common and basic operation
on shaped text) required doing a lookup involving a binary search for
detailed glyphs (ones that had large advances or mapped to more or less
than a single UTF-8 code point).

The new design of the `GlyphStore` is instead based on `chars` in the
input string. These are tracked during layout so that the resulting
glyph output can be interpreted relatively to its original character
offset in the containing IFC. We are already dealing with IFC text on a
per-character basis for a variety of reasons (such as text
transformation and whitespace collapse). In addition, we will now able
to
implement mapping between the character offsets before and after layout
transformations of the original DOM string.

Now the penalty of more complex glyph iteration is only paid when
transforming glyph offsets to character offsets. Currently this is only
done for selections and clicking in text boxes, both of which are much
less common than layout.

This change does not properly handle selections in RTL text, though
rendering and basic selection and visual movement works (though buggy).

It does not seem like this affects the performance of shaping based on
measurement using the text shaping performance counters. This likely
means that the performance of shaping is dominated on our machines by
HarfBuzz. We noticed no performance degradation in Speedometer when run
on a M3 Mac.

Followup work:
 - Properly handle selection in RTL text.
 - Support mapping from original DOM character offsets to offsets in
   layout after text transformation and whitespace collapse. This is now
   possible.

Testing: This causes some tests to pass and a few to fail. This is
likely
due to the fact that we are handling glyphs more consistently while
shaping. Of the new failures:
- `letter-spacing-bengali-yaphala-001.html`,
`letter-spacing-cursive-001.html`, `font-feature-settings-tibetan.html`
where passing before probably because we were not applying letter
spacing to detailed glyphs. These scripts should not have letter spacing
applied to them, because they are cursive -- which we never implemented
properly. It will be handled in a a followup.
- `shaping-arabic-diacritics-001.html`: This was a false pass. The tests
verifies that Arabic diacritics are applied to NBSP. This wasn't
happening before nor after this change, but the results matched anyway.
Now they don't, but before and after are equally broken.
 - 
Fixes: #216
Part of #35540.

---------

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-01-26 12:38:04 +00:00
Martin Robinson
4ad2e92b9c script: Handle when debugger global is active in DedicatedWorkerGlobalScope interrupt (#42159)
When interrupting `DedicatedWorkerGlobalScope` execution, handle the
case that the `DebuggerGlobalScope` is running its script by just
terminating. It seems that this happens sometimes when trusted types
terminates a worker script.

Testing: This should fix some flaky `expect` failure panics in trusted
types WPT tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-26 11:45:05 +00:00
araya
2964846451 net/fetch: Improve HTTP fetch error handling for gzip content decompressions (#39438)
This PR fixes error handling in Servo's HTTP fetch implementations to
properly handle content decompression failures (e.g., bad gzip content)
by treating them as network errors as defined in WPT.

- Fixed some previously failing tests in bad-gzip-body.any.js that now
properly reject when consuming bodies with bad gzip content
  - Several fetch metadata tests now pass correctly

---------

Signed-off-by: araya <araya@araya.dev>
2026-01-26 11:05:33 +00:00
Sam
3047b9946f script: Remove AsVoidPtr and AsCCharPtrPtr traits (#42153)
We migrated most uses some years ago, so let's finally remove them. It's
more clear what we are doing if we inline stuff then hiding dangerous
cast behind trait.

Testing: Covered by WPT, try run:
https://github.com/sagudev/servo/actions/runs/21350967668

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-26 10:47:35 +00:00
Narfinger
3bb7c5f1f4 profile: Implement MallocSizeOf for GenericCallback (#42152)
Implement MallocSizeOf for profile::GenericCallback.

Additionally, we implement a more acurate version of MallocSizeOf for
GenericSender.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Implementing traits do not need tests.
Fixes: https://github.com/servo/servo/issues/42110

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-26 10:44:58 +00:00
Steven Novaryo
cc56218b0c script: Update documentation and minor conformance improvement for Fullscreen API (#42068)
Improve the `requestFullscreen` and `exitFullscreen` spec conformance
and notes the todos with comments with issues.

Testing: Existing WPTs

---------

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-01-26 10:01:11 +00:00
Martin Robinson
b33391da3e ci: Disable self-hosted WPT runs (#42155)
This has caused a regression in job time. This change disables the
self-hosted WPT runners until the regression is addressed.

Testing: This is a CI change so it is the test of itself.
Fixes: #42121.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-26 09:44:56 +00:00
Jonathan Schwender
ca24f1c861 mach: Move package list to a text based format (#41775)
This allows us to reuse the list without python, e.g. from a
shell-script. This is useful to build docker image layers, without
requiring python / uv / mach first.
Future changes will split the list into multiple text files, so we can
install only required subsets (e.g. skipping gstreamer) and a workflow
to automatically sync changes to the book.

Testing: `./mach bootstrap` still works.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
Signed-off-by: Jonathan Schwender <55576758+jschwe@users.noreply.github.com>
2026-01-26 09:43:47 +00:00
Tim van der Lippe
13472304a5 script: Support blocking attribute for style and link elements (#42096)
Testing: WPT

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-01-26 09:12:38 +00:00
Thomas Cummings
ffb91ac4b1 script: Evict stale SVGs from image cache (#41675)
Parsed and vectorized representations of SVGs in the image cache are
never evicted when SVGs are updated, leading to stale SVGs staying in
the image cache alongside updated ones. This PR:
- adds a stringified uuid field to SVGSVGElement
- adds a map of `SVGSVGElement` uuid to `PendingImageId` in
`ImageCacheImpl`
- adds an optional argument for the uuid to
`ImageCacheImpl::rasterize_vector_image`, which, if provided, removes
any existing parsed svgs associated with the uuid and stores a new entry
of uuid -> `PendingImageId`
- implements `unbind_from_tree` on SVGSVGElement, which clears the
associated images/representations from the image_cache (from
`vector_images`, `rasterized_vector_images`, and `completed_loads`) as
well as from the layout image resolver image cache.

Testing: Each of the following documents should display their (very
flashy) content correctly and memory usage should stay constant
<details>
<summary>Changing SVGSVGElement</summary>

```

<svg height="100" width="100" xmlns="http://www.w3.org/2000/svg">
  <circle id="c" r="1" cx="50" cy="50" fill="red" />
</svg>
<script>
let c = document.querySelector("#c");
let r = 1;
setInterval(() => {
  r += 1;
  c.setAttribute("r", r.toString());
  let tmp = document.createTextNode("ignored");
  c.parentNode.appendChild(tmp);
  tmp.remove();
}, 100);
</script>

```

</details>
<details>
<summary>Unbinding SVGSVGElements</summary>

```

<div id="parent_div">
  <svg id="test" height="100" width="100" xmlns="http://www.w3.org/2000/svg">
    <circle id="c" r="10" cx="50" cy="50" fill="red" />
  </svg>
</div>
<script>
  let div = document.querySelector("#parent_div");
  let svg_html_string = div.innerHTML;
  let svg = document.querySelector("#test");
  let r = 10;
  setInterval(() => {
    svg.remove();
    div.innerHTML = svg_html_string;
    svg = document.querySelector("#test");
    let circle = document.querySelector("#c");
    r += 1;
    circle.setAttribute("r", r.toString());
  }, 100);
</script>

```

</details>
<details>
<summary>Unbinding SVGSVGElements (and rebinding the same SVG)</summary>

This didn't work until I also evicted the associated image from the
layout image resolver image cache and the image cache's
`completed_loads` on SVGSVGElement unbind, so it seems like a useful, if
a bit redundant, test.

```

<div id="parent_div">
  <svg id="test" height="100" width="100" xmlns="http://www.w3.org/2000/svg">
    <circle id="c" r="10" cx="50" cy="50" fill="red" />
  </svg>
</div>
<script>
  let div = document.querySelector("#parent_div");
  let svg_html_string = div.innerHTML;
  let svg = document.querySelector("#test");
  let r = 10;
  setInterval(() => {
    svg.remove();
    div.innerHTML = svg_html_string;
    svg = document.querySelector("#test");
  }, 100);
</script>

```

</details>

Fixes: #41070

---------

Signed-off-by: Tom Cummings <cummings.t287@gmail.com>
2026-01-26 06:02:50 +00:00
Gae24
047cb39fa9 script: Drop ModuleTree network_error and simplify pending fetches logic (#42127)
Since we use `NetworkError` just for logging reasons, we don't really
need to pass it around; instead lets follow spec more closely and pass a
`None` on network failures.
Make more explicit if a `modulemap` entry is currently fetching or
ready.

Testing: No functional change, covered by existing tests

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-01-26 05:43:12 +00:00
Euclid Ye
68f6dba669 webdriver: Test interactability for Element Clear (#42124)
Test interactability for Element Clear.

There is also a related spec change:
https://github.com/w3c/webdriver/pull/1943 to match the implementation
of vendors, and the reality.

Testing: New passing

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-26 03:42:13 +00:00
dependabot[bot]
14572b7f70 build: bump web_atoms from 0.2.1 to 0.2.3 (#42141)
Bumps [web_atoms](https://github.com/servo/html5ever) from 0.2.1 to
0.2.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="8c91888894"><code>8c91888</code></a>
v0.2.3</li>
<li><a
href="d7d33c2bee"><code>d7d33c2</code></a>
Upgrade to rustc 1.4.0-nightly (8f1b0aa32 2015-08-21)</li>
<li><a
href="c3d2717295"><code>c3d2717</code></a>
v0.2.2</li>
<li><a
href="6e13c25d68"><code>6e13c25</code></a>
Merge remote-tracking branch 'upstream/stable'</li>
<li><a
href="3656fcd0d4"><code>3656fcd</code></a>
Auto merge of <a
href="https://redirect.github.com/servo/html5ever/issues/155">#155</a> -
nox:quadratic-add-attrs-if-missing, r=SimonSapin</li>
<li><a
href="dfd64ecdff"><code>dfd64ec</code></a>
Fix the algorithmic complexity of RcDom::add_attrs_if_missing()</li>
<li><a
href="9ba6f62faa"><code>9ba6f62</code></a>
Promise that add_attrs_if_missing() is called only on elements (fixes <a
href="https://redirect.github.com/servo/html5ever/issues/121">#121</a>)</li>
<li><a
href="2b006fafcd"><code>2b006fa</code></a>
Auto merge of <a
href="https://redirect.github.com/servo/html5ever/issues/154">#154</a> -
servo:rustup, r=nox</li>
<li><a
href="491e0ea267"><code>491e0ea</code></a>
Upgrade to rustc 1.4.0-nightly (e35fd7481 2015-08-17)</li>
<li><a
href="bdb254b8df"><code>bdb254b</code></a>
Auto merge of <a
href="https://redirect.github.com/servo/html5ever/issues/152">#152</a> -
scaevola:patch-1, r=Manishearth</li>
<li>Additional commits viewable in <a
href="https://github.com/servo/html5ever/compare/v0.2.1...v0.2.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=web_atoms&package-manager=cargo&previous-version=0.2.1&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 01:15:05 +00:00
dependabot[bot]
2789278018 build: bump uuid from 1.19.0 to 1.20.0 (#42144)
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.19.0 to 1.20.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/uuid-rs/uuid/releases">uuid's
releases</a>.</em></p>
<blockquote>
<h2>v1.20.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Derive Ord and PartialOrd for NonNilUuid by <a
href="https://github.com/mivort"><code>@​mivort</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/854">uuid-rs/uuid#854</a></li>
<li>Implement Deserialize on adapter types by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/855">uuid-rs/uuid#855</a></li>
<li>Deprecate <code>macro-diagnostics</code> by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/856">uuid-rs/uuid#856</a></li>
<li>Prepare for 1.20.0 release by <a
href="https://github.com/KodrAus"><code>@​KodrAus</code></a> in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/857">uuid-rs/uuid#857</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/mivort"><code>@​mivort</code></a> made
their first contribution in <a
href="https://redirect.github.com/uuid-rs/uuid/pull/854">uuid-rs/uuid#854</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/uuid-rs/uuid/compare/v1.19.0...v1.20.0">https://github.com/uuid-rs/uuid/compare/v1.19.0...v1.20.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c3346ddf2a"><code>c3346dd</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/857">#857</a> from
uuid-rs/cargo/v1.20.0</li>
<li><a
href="66eebc34ae"><code>66eebc3</code></a>
prepare for 1.20.0 release</li>
<li><a
href="3b66758622"><code>3b66758</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/856">#856</a> from
uuid-rs/docs/bytes-le-ordering</li>
<li><a
href="e2bdd44ec3"><code>e2bdd44</code></a>
don't run UI tests in wasm</li>
<li><a
href="b6dc7ece22"><code>b6dc7ec</code></a>
note that ordering applies to fields in to/from_bytes_le</li>
<li><a
href="a0281cd2f7"><code>a0281cd</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/855">#855</a> from
uuid-rs/feat/serde-fmt</li>
<li><a
href="db27b67d87"><code>db27b67</code></a>
Merge pull request <a
href="https://redirect.github.com/uuid-rs/uuid/issues/854">#854</a> from
mivort/non-nil-uuid-ord</li>
<li><a
href="efb06f21eb"><code>efb06f2</code></a>
implement Deserialize on adapter types</li>
<li><a
href="50d44ad3c5"><code>50d44ad</code></a>
Derive Ord and PartialOrd for NonNilUuid</li>
<li>See full diff in <a
href="https://github.com/uuid-rs/uuid/compare/v1.19.0...v1.20.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=uuid&package-manager=cargo&previous-version=1.19.0&new-version=1.20.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 00:59:47 +00:00
dependabot[bot]
d42460c80b build: bump quote from 1.0.43 to 1.0.44 (#42143)
Bumps [quote](https://github.com/dtolnay/quote) from 1.0.43 to 1.0.44.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/quote/releases">quote's
releases</a>.</em></p>
<blockquote>
<h2>1.0.44</h2>
<ul>
<li>Support raw lifetime syntax <code>'r#async</code> (<a
href="https://redirect.github.com/dtolnay/quote/issues/323">#323</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ad9fb4019e"><code>ad9fb40</code></a>
Release 1.0.44</li>
<li><a
href="6df23cd31b"><code>6df23cd</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/quote/issues/323">#323</a>
from dtolnay/lifetime</li>
<li><a
href="f7848915a1"><code>f784891</code></a>
Support raw lifetime</li>
<li><a
href="508dbdd734"><code>508dbdd</code></a>
Add test of raw lifetime</li>
<li><a
href="27cb8c941e"><code>27cb8c9</code></a>
Update ui test suite to nightly-2026-01-21</li>
<li><a
href="bdd36fc744"><code>bdd36fc</code></a>
Touch up PR 321</li>
<li><a
href="d62d6ec2a0"><code>d62d6ec</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/quote/issues/321">#321</a>
from tamird/doc-alloc-format</li>
<li><a
href="242c683b95"><code>242c683</code></a>
doc: restore link to <code>format!</code></li>
<li>See full diff in <a
href="https://github.com/dtolnay/quote/compare/1.0.43...1.0.44">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=quote&package-manager=cargo&previous-version=1.0.43&new-version=1.0.44)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 00:46:10 +00:00
dependabot[bot]
0b9a073181 build: bump ml-kem from 0.2.1 to 0.2.2 (#42142)
Bumps [ml-kem](https://github.com/RustCrypto/KEMs) from 0.2.1 to 0.2.2.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3f039141c5"><code>3f03914</code></a>
ml-kem v0.2.2</li>
<li><a
href="000d32cb12"><code>000d32c</code></a>
ml-kem v0.2.1</li>
<li>See full diff in <a
href="https://github.com/RustCrypto/KEMs/compare/ml-kem/v0.2.1...ml-kem/v0.2.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ml-kem&package-manager=cargo&previous-version=0.2.1&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-26 00:29:43 +00:00
WaterWhisperer
cf071d6c58 Expand set of permanent network failures to include all fetch preconditions (#42137)
Testing: `./mach test-wpt tests/wpt/tests/eventsource`
Fixes: #42092

Signed-off-by: WaterWhisperer <waterwhisperer24@qq.com>
2026-01-25 17:40:52 +00:00
hyuraku
a973178fa8 script: move stream-related files into script/dom/stream (#42010)
*Describe the changes that this pull request makes here. This will be
the commit message.*
Move stream file to script/dom/stream
part of https://github.com/servo/servo/issues/38901

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*

---------

Signed-off-by: hyuraku <32809703+hyuraku@users.noreply.github.com>
Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
Co-authored-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-01-25 16:18:52 +00:00
Jonathan Schwender
702c8e930d build.rs: try harder to find a suitable python (#42131)
Other embedders might not want to use `uv` and manage python in a
different way. This is not recommended by us, and we add warning
messages that clearly recommend using uv, but allow using regular
python. This will work if the embedder installs the necessary python
dependencies.

We provide more information in the output as to what exactly failed,
e.g. if `uv` was not installed, or if `uv run python` executed, but
failed at runtime.

The documentation of `find_python` was also updated. The link to the
book was outdated, and I don't think we currently document the set of
python dependencies needed for building servo. This can be improved by
follow-up PRs, e.g. using `uv run --script`.

Testing: No changes to the default `uv run` flow - The new python
fallback is not particularly tested, and may have issues. However, the
newly added warnings would help debugging any issues.

This might help shine a bit more light on #42122

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-25 10:34:40 +00:00
Servo WPT Sync
b9a4875690 Sync WPT with upstream (25-01-2026) (#42134)
Automated downstream sync of changes from upstream as of 25-01-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-01-25 01:17:45 +00:00
Krzysztof Biedroń
17e3061ecd script: Modify ModuleObject::handle() to return a handle with a lifetime (#42071)
Changed the return type of `ModuleObject::handle()` to the original type
of its contained handle by removing `.into()` call, as requested in the
linked issue.

Additional changes are due to temporary borrows now sharing lifetime
with returned handle reference.

Testing: No new tests needed, as the code is functionally the same after
the changes. Verified with running `./mach test-build` and `./mach
test-unit` successfully.
Fixes: https://github.com/servo/servo/issues/42051

Signed-off-by: Krzysztof Biedroń <arkendil@gmail.com>
2026-01-25 00:13:32 +00:00
Simon Wülker
e040960366 script: Take &CStr instead of &str in get_property_jsval (#42132)
This change modifies `get_property_jsval` and `get_property` to take a
`&CStr` instead of `&str`, to avoid conversion between the two in many
places.

Testing: Covered by existing tests
Part of https://github.com/servo/servo/issues/42126

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-24 22:29:11 +00:00
Narfinger
1dcb7588ba net: Move listing of directories to async code (#42108)
Listing directory and constructing the list is another prime candidate
to switch from blocking code to async code.
This PR does this.

Of note is the change in type for ProtocolHandler::load which now has a
lifetime bounded by Request and self and the Response has a similar
lifetime bound.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Looking at directories still works.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-24 21:14:16 +00:00
WaterWhisperer
4abe355010 script: Fix EventSourceContext using too-fresh last_event_id when reconnecting (#42103)
Testing: `./mach test-wpt
tests/wpt/tests/eventsource/format-data-before-final-empty-line.any.js`
Fixes: #42093

Signed-off-by: WaterWhisperer <waterwhisperer24@qq.com>
2026-01-24 16:56:24 +00:00
Ashwin Naren
c14053f728 Don't persist session storage changes (#41326)
Bug that would result in local storage changes being overwritten by
session storage ones.

Testing: Added a unit test
Fixes: #41324

---------

Signed-off-by: Ashwin Naren <arihant2math@gmail.com>
2026-01-24 13:55:51 +00:00
Sam
2503cc2ab7 script: Pass &CStr insted of &str in {set,get}_dictionary_property (#42125)
It's stupid to create rust strings in the first place to only convert
them into C-style for SM anyway. Furthermore most of those strings are
const literals (comp time strings), so now we will just store additional
null byte within them and able to avoid any runtime conversions.
We should do this in more places.

Testing: Just refactor.

---------

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-24 13:03:41 +00:00
Shubham Gupta
5504a05158 script: Expose toJSON on LargestContentfulPaint (#42004)
This PR targets on adding JSON to `IDL` to show all supported values in
JS API.

This was missed during implementation. Screenshot Attached for JS API 

Testing: `components/servo/tests/largest_contentful_paint.rs` 
Fixes: None, this is just an refinement.

<img width="772" height="360" alt="Screenshot from 2026-01-19 17-13-20"
src="https://github.com/user-attachments/assets/1730f3f6-423c-466c-b0d4-976d35d82827"
/>

---------

Signed-off-by: Shubham Gupta <shubham.gupta@chromium.org>
2026-01-24 10:40:22 +00:00
Tim van der Lippe
ed03162344 script: Fix handling of invalid fetch responses for link stylesheets (#42037)
Regardless of the `Ok` status, we should always create a
stylesheet. However, the determining of the load/error event
is based on whether it has parsed actual content or not.

It also realigns some of the spec text to now only do it for link
elements, since for styles we shouldn't be checking the result of
the content type.

Part of #22715

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-24 10:39:58 +00:00
Sam
6525cd99b6 script: Port indexddb to &mut JSContext (#42123)
Welp, this just happened while I tried to so something else. cc
@arihant2math and @janvarga just so you are aware of these changes.

Testing: Just refactor, but should be covered by WPT tests.
Part of #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-24 09:36:10 +00:00
Martin Robinson
9c9d9c863f Rename compositing and compositing_traits to paint and paint_api (#42066)
This change finishes the big rename associated with the old
`compositing` crates. Long ago, these crates managed a compositor, like
you might find in a traditional web engine. These days, compositing is
done in WebRender so the name has stopped making much sense. Various
structs inside the crates have already been renamed and this is the
final big change necessary for the rename

Testing: This is just a rename so existing tests should cover it.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-24 09:17:35 +00:00
Jonathan Schwender
948f5b17c0 Add devcontainer configuration (#40500)
The devcontainer configuration makes it easier for users to setup a
working environment, by using docker / podman and a devcontainer IDE
plugin (or the CLI).

Testing: Manually tested the configuration in VS code on linux.
Fixes: #40469

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-24 07:28:19 +00:00
Josh Matthews
7925a26a99 script: Use OnceCell instead of RefCell for some module fields. (#42119)
This better reflects the intention of the code, which is that these
fields are set at most one time.

Testing: No behaviour change expected, so existing tests suffice.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-24 06:53:33 +00:00
Narfinger
34955ec1e3 net: Devtools Channel does not need mutability. (#42114)
Devtools Channel does not need mutability. Hence, we do not need an
Arc<Mutex<_>>.

As the underlying channel is a Crossbeam Sender the clone should be
relatively cheap.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Thanks to rust compilation means correctness.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-24 03:24:19 +00:00
Martin Robinson
5d0db1fa6a layout: Add unit types to most layout queries (#42002)
This change makes it so that the euclid types returned from layout
queries use the `CSSPixel` unit type when appropriate. The minimal set
of changes are also made to avoid having to convert these types to the
`UnknownUnit` in other places. There is still some casting that has to
happen to deal with the difference between Stylo's `CSSPixel` and
WebRender's `LayoutPixel`, but a followup changes will try to switch to
using one or the other.

Testing: This should not change behavior, so is covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-23 15:38:57 +00:00
Jonathan Schwender
9a4192a5e3 tidy: Improve check_shell substitution lint (#42099)
Probably we should use a proper linter like `shellcheck`, but in the
meantime make the lint slightly smarter, so that it doesn't complaint
about e.g. `$1`. This is especially a problem when adding scripts which
use `awk`, since our lint is quite stupid and doesn't understand `''`
strings.
This fixes linting, for a simple new script introduced in
https://github.com/servo/servo/pull/41775

Testing: ./mach test-tidy still passes.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-23 15:10:15 +00:00
Gregory Terzian
cdf8dad62c Indexeddb: move opening of connection message handling to factory (#42053)
Move the message handling related to opening new connections to the
factory, and store open request on it. This is a first step towards
tracking connections and allowing two-way messaging regarding them.

Also the very beginnings of tracking connections on the backend.

Testing: WPT
Fixes: Part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
2026-01-23 13:33:21 +00:00
Narfinger
50916fcc24 net: Cleanup some visibility and unused async (#42102)
This cleans up some visibility for the http-cache and removes an async
that was not used.

Testing: Does not change functionality so compilation and test
compilations are enough.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-23 12:36:51 +00:00
WaterWhisperer
5d16bd6535 webgpu: Fix borrow hazards in GPUBuffer (#42050)
And fix a lint related to #41815 

Testing: `./mach build --use-crown`
Fixes: #42001

Signed-off-by: WaterWhisperer <waterwhisperer24@qq.com>
2026-01-23 09:32:22 +00:00
Martin Robinson
cd8df9e099 script: Allow <input type=button> to be activatable (#42095)
Although these type of inputs do not have an activation behavior (the
behavior of their clicks are up to the page), they should still get the
"active" node state when they are pressed. This allows the `:active`
pseudo-selector to work on them, making press highlights work.

Testing: This fixes two WPT subtests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-23 08:11:02 +00:00
Simon Wülker
80555eb7e7 script: Don't let LossyDecoder handle the BOM (#41732)
We already handle BOMs when detecting the encoding. The decoder itself
should not touch the BOMs in any way.

Depends on https://github.com/servo/html5ever/pull/704

Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-23 07:56:08 +00:00
Simon Wülker
c023d8edc7 script: Prevent activation of disabled select elements (#42079)
This change also adjusts the styles of disabled select elements such
that the text appears grayed out, like in firefox:
<img width="480" height="84" alt="image"
src="https://github.com/user-attachments/assets/d36325f5-c811-492b-9510-7a32efd5fd7b"
/>


Testing: No tests. I think it would be possible to write a webdriver
test for this? It didn't seem worth the effort, if someone can point me
to the relevant resources then I'm happy to write one ^^

Fixes: https://github.com/servo/servo/issues/42075

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-23 00:40:28 +00:00
Martin Robinson
b3db9cf9d3 script: Do not assume that every textual <input> is a focusable area (#42078)
An input text might not be a focusable area if it is disabled. In this
case return `None` from `find_focusable_shadow_host_if_necessary` which
causes no focus to occur.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>

Testing: This change includes a test.
Fixes: #42074.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-22 19:21:11 +00:00
Gae24
b7ccf86cb8 script: remove more unused code (#42081)
This commit remove more unused code from `script_module`,
`inline_module_map` and `dynamic_modules` fields from `GlobalScope` and
the now unused custom interface `DynamicModuleOwner`.

Testing: No functional change, a successful build is enough.

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-01-22 15:12:09 +00:00
Martin Robinson
11d368906b servoshell: Surrender focus when clicking on the WebView on desktop (#42080)
Clicking on the WebView should move focus from the egui interface to the
WebView, so that any subsequent keyboard events are sent there.

Testing: We do not have tests for this layer of servoshell and these
kind of
interactions are difficult to test without a live test runner.
Fixes: #42073
Fixes: #41681

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-22 15:00:20 +00:00
Simon Wülker
94e71e7ec0 Implement html5ever hooks for customizable <select> elements (#42036)
Do not merge yet - we need to create a new html5ever release.
The html5ever bump also includes encoding indicators, which we handle in
the most minimal way possible here. They will be handled properly by
https://github.com/servo/servo/pull/41730

Companion PR for https://github.com/servo/html5ever/pull/719

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-22 13:34:12 +00:00
Gae24
a953ba954a script: revamp module script loading to follow current spec (#41779)
Rewrite module script fetching logic to follow current spec.

Testing: Covered by existing wpt tests
Fixes: #31397

---------

Signed-off-by: Gae24 <96017547+Gae24@users.noreply.github.com>
2026-01-22 11:40:53 +00:00
Jonathan Schwender
52efe439fc Use fontsan release from crates.io (#42072)
One less git dependency.

Testing: No functional changes. The release is the same as the last
pinned git commit.

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-22 11:29:00 +00:00
dependabot[bot]
f181ad2e21 build: bump pyasn1 from 0.6.1 to 0.6.2 (#42062)
Bumps [pyasn1](https://github.com/pyasn1/pyasn1) from 0.6.1 to 0.6.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pyasn1/pyasn1/releases">pyasn1's
releases</a>.</em></p>
<blockquote>
<h2>Release 0.6.2</h2>
<p>It's a minor release.</p>
<ul>
<li>Fixed continuation octet limits in OID/RELATIVE-OID decoder
(CVE-2026-23490).</li>
<li>Added support for Python 3.14.</li>
<li>Added SECURITY.md policy.</li>
<li>Migrated to pyproject.toml packaging.</li>
</ul>
<p>All changes are noted in the <a
href="https://github.com/pyasn1/pyasn1/blob/master/CHANGES.rst">CHANGELOG</a>.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pyasn1/pyasn1/blob/main/CHANGES.rst">pyasn1's
changelog</a>.</em></p>
<blockquote>
<h2>Revision 0.6.2, released 16-01-2026</h2>
<ul>
<li>CVE-2026-23490 (GHSA-63vm-454h-vhhq): Fixed continuation octet
limits
in OID/RELATIVE-OID decoder (thanks to tsigouris007)</li>
<li>Added support for Python 3.14
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/97">#97</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/97">pyasn1/pyasn1#97</a>)</li>
<li>Added SECURITY.md policy</li>
<li>Fixed unit tests failing due to missing code
[issue <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/91">#91</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/91">pyasn1/pyasn1#91</a>)
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/92">#92</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/92">pyasn1/pyasn1#92</a>)</li>
<li>Migrated to pyproject.toml packaging
[pr <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/90">#90</a>](<a
href="https://redirect.github.com/pyasn1/pyasn1/pull/90">pyasn1/pyasn1#90</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e7356f89cf"><code>e7356f8</code></a>
Prepare release 0.6.2</li>
<li><a
href="3908f14422"><code>3908f14</code></a>
Merge commit from fork</li>
<li><a
href="0a7e067674"><code>0a7e067</code></a>
Add support for Python 3.14 (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/97">#97</a>)</li>
<li><a
href="33656e986d"><code>33656e9</code></a>
Create Security Policy</li>
<li><a
href="fa62307253"><code>fa62307</code></a>
fix for issue <a
href="https://redirect.github.com/pyasn1/pyasn1/issues/91">#91</a>: unit
tests failing due to missing code (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/92">#92</a>)</li>
<li><a
href="f1ed02e41c"><code>f1ed02e</code></a>
Package pyasn1 with pyproject.toml (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/90">#90</a>)</li>
<li><a
href="93c4d4f0b6"><code>93c4d4f</code></a>
Switch documentation user to pyasn1 (<a
href="https://redirect.github.com/pyasn1/pyasn1/issues/89">#89</a>)</li>
<li>See full diff in <a
href="https://github.com/pyasn1/pyasn1/compare/v0.6.1...v0.6.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyasn1&package-manager=uv&previous-version=0.6.1&new-version=0.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-22 10:15:06 +00:00
Martin Robinson
ceedfec729 script: Allow selecting text in input fields with the mouse (#42049)
This change adds basic support for selecting text via dragging the mouse
in text inputs. This is currently handled entirely inside of text
inputs, but will be integrated into a more global drag handler when that
is implemented in the `DocumentEventHandler`. This means that events
that happen outside of the text input currently don't update the
selection.

Testing: This adds Servo-specific WPT-style tests. There are WPT tests
that test this sort of behavior, but I believe they rely on selection
events, which we have no implemented yet (we will soon).

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-22 07:51:51 +00:00
Oliver Medhurst
168cd3efde script: Fix unneeded .to_owned() (#42057)
`.to_owned()` is unneeded with `.to_string()`, tiny cleanup
(plus ~meaningless perf/mem win).

Testing: `./mach build --use-crown`

Signed-off-by: Oliver Medhurst <honk@goose.icu>
2026-01-22 05:52:25 +00:00
Jonathan Schwender
82df609833 mach: Use uv to manage the virtual environment (#41861)
Instead of attempting to manage the virtual environment ourselves, use
`uv` to manage the installation of dependencies.
Since we still have dependencies coming from upstream wpt, we use
`[tool.setuptool]` in our pyproject.toml to ensure that `uv` dynamically
installs our dependencies according to the requirements.txt files.

Additionally, this PR also reverts `--no-project` usage. `--no-project`
was added as a temporary workaround in
https://github.com/servo/servo/pull/37741.
It's not 100% clear to me what exactly the issue was, but
[apparently](https://github.com/servo/servo/pull/37741#pullrequestreview-2985666234)
the issue caused the build to break.
Removing the arg seems to work fine, except that we get a warning about
a missing `requiress-python` value in `pyproject.toml`.
Apparently it is good practice to specify the requirement as `>=` in th
pyroject, and lock the exact version via `uv pin` (which writes to
`.python_version`, where we already pin 3.11.


Testing: Should be covered by existing tests, which compile code on all
platforms.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-22 05:51:44 +00:00
Jonathan Schwender
8c85c9d1bd Further release workflow improvements (#41932)
- Allowing overriding the target repository, to allow generating regular
servo releases directly
- Releases to servo/servo require manual publishing (policy decision)
- Generate artifact attestation for the remaining artifacts.
- Remove unused `GITHUB_HOMEBREW_TOKEN` secret
- Since getting the names of release artifacts right, and keeping them
in sync can be error-prone, we now use artifact-ids and pass them around
via `outputs`, so we can't accidentally get the artifact name wrong.
- Fix a deprecation warning in `upload_nightly.py` by explicitly
creating an `Auth.Token` object, instead of just passing the token as a
string.
- We can't use `${{ env.RELEASE_REPO }}` when calling the reusable
upload_release.yml workflow, so we need to copy the expression.
- To be able to use the github token to upload releases to servo/servo
(without adding another secret, which could be leaked), we need to add
`permissions: content: write` to the release job. The nightly job
doesn't need this permission, hence there is some unfortunate
duplication. This should be improved in future work, where we can
refactor the upload_python script, to support uploading all artifacts
from a single job, instead of one per platform as we have now.

Testing:
- [manual run for servo/servo, i.e. "regular
release"](https://github.com/servo/servo/actions/runs/21217481628)
- [manual run for
servo/servo-nightly-builds](https://github.com/servo/servo/actions/runs/21214516079)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-22 04:32:11 +00:00
Osoro Bironga
87f00aa098 script: Include font-variation-settings on parse_font_face_descriptors (#41968)
Implementation for parsing the font-variation-settings and including
them in the fontface rule-set, currently they are discarded and
annotated with a TODO
Related: https://github.com/servo/servo/issues/41591

Testing: Tests are included for the changes to be implemented, as
suggested they currently fail and thats the starting point.

Signed-off-by: Osoro Bironga <fanosoro@gmail.com>
2026-01-22 04:10:58 +00:00
Josh Matthews
cadcc605e0 script: Replace uses of RootedVec<JSVal> with Rooted<Vec<JSVal>>. (#41921)
This replaces uses of our custom RootedVec type that were storing JS GC
values with stack rooting that is better integrated with the engine.
This ensures that storing nursery-allocated objects in these vectors is
handled correctly during GC, unlike our RootedVec implementation which
trips an assertion in debug mozjs builds.

Testing: No observable difference in non-mozjs builds.
Fixes: part of #40141

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-22 03:28:19 +00:00
dependabot[bot]
77133c1555 build: bump proc-macro2 from 1.0.105 to 1.0.106 (#42056)
Bumps [proc-macro2](https://github.com/dtolnay/proc-macro2) from 1.0.105
to 1.0.106.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/proc-macro2/releases">proc-macro2's
releases</a>.</em></p>
<blockquote>
<h2>1.0.106</h2>
<ul>
<li>Optimize <code>Span::byte_range</code> (<a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/530">#530</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="58ab776b95"><code>58ab776</code></a>
Release 1.0.106</li>
<li><a
href="1e18a0bb10"><code>1e18a0b</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/proc-macro2/issues/530">#530</a>
from dtolnay/byterange</li>
<li><a
href="7f5973b73a"><code>7f5973b</code></a>
Make char count bidirectional</li>
<li><a
href="08d1dd0bc3"><code>08d1dd0</code></a>
Cache span end positions</li>
<li>See full diff in <a
href="https://github.com/dtolnay/proc-macro2/compare/1.0.105...1.0.106">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=proc-macro2&package-manager=cargo&previous-version=1.0.105&new-version=1.0.106)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-22 03:27:00 +00:00
Oliver Medhurst
24fe746d3f script: Fix unfulfilled lint expectation in htmlstyleelement.rs (#42059)
Unfulfilled after #41986, causes lint warning in main.

Testing: `./mach build --use-crown`

Signed-off-by: Oliver Medhurst <honk@goose.icu>
2026-01-22 03:26:36 +00:00
batu_hoang
bd97204816 layout: Support style inheritance for display: contents and <slot> elements (#41855)
In DOM traversal, `display:contents `elements don't generate boxes, but
their styles still need to apply to children.
`ModernContainerBuilder` now keeps track of `display:contents` ancestors
during traversal then apply their style to text runs.

In `InlineFormattingContextBuilder::push_text` only use same style
parent if both selected and current inline style are identical.

Testing: 

> PASS [expected FAIL]
/css/css-display/display-contents-dynamic-before-after-001.html
> PASS [expected FAIL]
/css/css-display/display-contents-dynamic-inline-flex-001-inline.html
> PASS [expected FAIL]
/css/css-display/display-contents-dynamic-inline-flex-001-none.html
> FAIL [expected PASS] /css/css-display/display-contents-fieldset.html
> PASS [expected FAIL]
/css/css-display/display-contents-first-line-002.html
> PASS [expected FAIL] /css/css-display/display-contents-inline-001.html
> PASS [expected FAIL]
/css/css-display/display-contents-inline-flex-001.html
> PASS [expected FAIL]
/css/css-display/display-contents-line-height.html

Fixes: https://github.com/servo/servo/issues/41797

cc: @xiaochengh

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-22 03:04:28 +00:00
shuppy
9e15e318f5 ci: Run mach bootstrap with --yes (#42058)
Testing: <https://github.com/servo/servo/actions/runs/21233325728>
Fixes: #42052

Signed-off-by: delan azabani <dazabani@igalia.com>
2026-01-22 03:04:09 +00:00
Josh Matthews
872b7ba485 net: Convert blocking embedder communication to async (#41965)
#41857 exposed some more code in the net crate that performed blocking
communication with the embedder and could prevent other networking tasks
from running. To address that, we need the net code to perform async
receive operations, which requires passing tokio channels to the
embedder.

However, the current embedding message design puts all messages in the
same enum and requires that they are serializable. Embedder messages
from the network do not require this property, since they run in the
same process as the embedder. Therefore, this PR creates a new
EmbedderProxy structure that is generic over the message, allowing each
component of Servo to use a embedder message type that is specific to
that component.

The final benefit of this set of changes is that the embedder messages
for a particular crate can now live in the crate itself (since the only
crate that depends on it is the servo crate), not in the shared
`embedding_traits` crate. This hugely reduces the amount of code that
needs to be rebuilt when changing these messages, enabling much faster
incremental builds for those changes.

Testing: Strictly refactoring; existing test coverage is sufficient.
Fixes: #41958

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-21 19:49:01 +00:00
Simon Wülker
c1830173e9 script: Move RGBA8 constant from WebGL2RenderingContext to WebGLRenderingContext (#42048)
Testing: New tests start to pass

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
2026-01-21 14:08:47 +00:00
Steven Novaryo
93a22ffd71 layout: Fix WebRender hit test item's offset (#42005)
PR #41707 changed so that the hit test item is being offset by the
containing block of the fragment, but this is not exactly correct since
WebRender process the the coordinates of the items based on the nearest
reference frame parent. Therefore, the previous fix would fail whenever
a reference frame is defined for a descendant scroll container.

Testing: Testdriver WPT

Signed-off-by: Jo Steven Novaryo <steven.novaryo@gmail.com>
2026-01-21 10:09:44 +00:00
Martin Robinson
c5d3c6ef60 layout: Add support for caret-color (#41976)
layout: Add support for `caret-color`

This upgrades our version of `stylo` to one that supports
`caret-color` and implements support for it during display list
construction.

Depends on:
 - #41963
 - servo/stylo#287

Testing: This causes about 10 WPT tests to start passing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-21 09:50:00 +00:00
Martin Robinson
4a9c95ac8e layout: Handle selection during display list construction (#41963)
Instead of handling selection in text input during box tree / fragment
tree construction, fully handle it during display list construction.
This means that when the selection changes in script, it updates
automatically in the `FragmentTree` and only a new display list is
necessary. This avoids a layout while changing the selection in text
fields.

Testing: This fixes a few rendering issues, but these are very hard
to isolate and test for. It causes one test to start failing, but this
is
because a cursor that wasn't rendered properly now starts showing
up.
Fixes: #41920.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-01-21 08:04:15 +00:00
Josh Matthews
4a2a73ad56 webdriver: Reset prefs to the values present at server start. (#42044)
The test harness attempts to reset preferences to default values when
running a test in which previously-set preferences are no longer set.
This leads to confusing interactions with any preference customizations
that are present, such as `--pref whatever` or `--prefs-file
something.json`, which are not considered when calculating the default.
This PR changes that: whatever preference values are present when the
webdriver server starts is treated as the default value.

Testing: This is a servo-specific webdriver extension, and we're fixing
an interaction with the test harness. I don't see another way to test
this besides observing the impact on our test results.
Fixes: #42043

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-21 07:52:17 +00:00
Narfinger
71cc3b2382 WebGPU: Use GenericChannel (#42032)
Switching WebGPU component to use GenericChannel.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compilation is the test.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-21 05:59:18 +00:00
Sam
6a7be2868f CI: force GitHub hosted runners if wpt-args is not empty (#42035)
This will prevent running webgpu runs on self-hosted, as they are too
slow and would slow the queue down. I also noticed that existing
conditions for forcing github hosted runners were actually invalid (I
think something might got lost in rebase), so I removed them.

Fixes: https://github.com/servo/servo/pull/41062#issuecomment-3773159746

Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-01-21 03:52:45 +00:00
dependabot[bot]
ff994a0e82 build: bump openssl-probe from 0.2.0 to 0.2.1 (#42042)
Bumps [openssl-probe](https://github.com/rustls/openssl-probe) from
0.2.0 to 0.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rustls/openssl-probe/releases">openssl-probe's
releases</a>.</em></p>
<blockquote>
<h2>0.2.1</h2>
<ul>
<li>Support for OpenHarmony.</li>
<li>Corrections to crate metadata.</li>
</ul>
<h2>What's Changed</h2>
<ul>
<li>feat: add openharmony platform preset certs folder by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/rustls/openssl-probe/pull/42">rustls/openssl-probe#42</a></li>
<li>docs: clarify lib description, update README by <a
href="https://github.com/cpu"><code>@​cpu</code></a> in <a
href="https://redirect.github.com/rustls/openssl-probe/pull/47">rustls/openssl-probe#47</a></li>
<li>Prepare 0.2.1 by <a
href="https://github.com/ctz"><code>@​ctz</code></a> in <a
href="https://redirect.github.com/rustls/openssl-probe/pull/46">rustls/openssl-probe#46</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9181752ff5"><code>9181752</code></a>
Prepare 0.2.1</li>
<li><a
href="2a23322fcd"><code>2a23322</code></a>
docs: clarify lib description, update README</li>
<li><a
href="5e18d538b7"><code>5e18d53</code></a>
feat: add openharmony platform preset certs folder</li>
<li><a
href="df769f449b"><code>df769f4</code></a>
Update repo URL in Cargo metadata</li>
<li><a
href="cc52ac707b"><code>cc52ac7</code></a>
ci: check cargo-deny (and fix up SPDX metadata)</li>
<li><a
href="4cfa0952d6"><code>4cfa095</code></a>
ci: check semver compatibility</li>
<li><a
href="04e7058a36"><code>04e7058</code></a>
ci: check clippy</li>
<li><a
href="fbce3247f8"><code>fbce324</code></a>
ci: check code formatting</li>
<li><a
href="11fba1bdf7"><code>11fba1b</code></a>
ci: setup duplicate workflow cancellation</li>
<li><a
href="a44b6f114a"><code>a44b6f1</code></a>
ci: restrict workflow permissions</li>
<li>Additional commits viewable in <a
href="https://github.com/rustls/openssl-probe/compare/0.2.0...0.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=openssl-probe&package-manager=cargo&previous-version=0.2.0&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 00:45:38 +00:00
dependabot[bot]
3233923fe1 build: bump zmij from 1.0.15 to 1.0.16 (#42040)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.15 to 1.0.16.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e21c67ba43"><code>e21c67b</code></a>
Release 1.0.16</li>
<li><a
href="6b331d7c5e"><code>6b331d7</code></a>
Sync to vitaut/zmij@964a4ad</li>
<li><a
href="0d0c7b6a36"><code>0d0c7b6</code></a>
Sync to vitaut/zmij@ec78237</li>
<li><a
href="41031149ce"><code>4103114</code></a>
Sync to vitaut/zmij@aa2b909</li>
<li><a
href="cbe91f4699"><code>cbe91f4</code></a>
Sync to vitaut/zmij@3b81fed</li>
<li><a
href="f3f81af74a"><code>f3f81af</code></a>
Sync to vitaut/zmij@ce01335</li>
<li><a
href="827c4e29c9"><code>827c4e2</code></a>
Sync to vitaut/zmij@4f718c5</li>
<li><a
href="50507cfe41"><code>50507cf</code></a>
Sync to vitaut/zmij@242429c</li>
<li><a
href="9c2b481057"><code>9c2b481</code></a>
Sync to vitaut/zmij@6523396</li>
<li><a
href="1de9932c4d"><code>1de9932</code></a>
Ignore many_single_char_names pedantic clippy lint</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/zmij/compare/1.0.15...1.0.16">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.15&new-version=1.0.16)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-21 00:30:31 +00:00
Tim van der Lippe
6f9a0831bd script: Implement full logic for script-blocking stylesheets (#41988)
We only implemented the first part (parser_inserted), but
weren't checking any of the other cases.

Testing: WPT
Part of #22715

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-20 19:15:00 +00:00
Martin Robinson
983482b5f3 script: Ignore platform mouse move events that do not change the cursor location (#42034)
winit on macOS seems to send a mousemove event right before mouse button
up events. This interferes with interactive use of text boxes -- for
instance double-clicking to select the hovered word. This change makes
it so
that mouse move events that do not change the cursor location are
ignored.

Testing: This change adds a Servo-specific WPT-style test.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-20 18:30:59 +00:00
Tim van der Lippe
3fedd1df53 script: Fix timing of update-a-style-block (#41986)
Updates it according to the spec and adds a big explanation why it
differs from the spec. It took me a while to figure out what's going on
here and why the code was actually correct.

Testing: WPT
Part of #22715
Fixes #42009

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-20 17:58:36 +00:00
Taym Haddadi
8cd7d9d640 fetch: Preserve AbortError on repeated body consumption for errored stream (#42016)
Testing: more tests/wpt/meta/fetch/api/abort/general.any.js.ini pass.

Signed-off-by: Taym Haddadi <haddadi.taym@gmail.com>
2026-01-20 16:43:56 +00:00
Narfinger
8834e6aef9 net: Fix unit test unused warnings (#42031)
Fixed unused warnings in unit test for filemanager.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Compiles and still produces tests.
Fixes: https://github.com/servo/servo/issues/42014

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-20 15:59:17 +00:00
Gregory Terzian
19b26b7e6e indexeddb: track open requests by id (#41933)
Track open requests by their ID, so that specific requests can be
aborted instead of aborting all request for a given db name. This is
important because worker and windows at the same origin could be opening
databases and aborting their opening, but this should not affect other
scopes at the origin.

Testing: Existing WPT test suites. 
Fixes: None, but part of https://github.com/servo/servo/issues/40983

---------

Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
2026-01-20 14:04:16 +00:00
Martin Robinson
a0949f19f3 layout: Create box slots for anonymous modern layout boxes serially (#42026)
Modern layout (flex / grid) children box trees are constructed in
parallel, so the box slot must be procured serially before this parallel
pass. This change fixes a regression #41951 where this box slot was
created during the parallel part of the layout.

Testing: This fixes a flaky crash in
`css/css-display/display-contents-dynamic-flex-002-inline.html` and
probably
other flexbox tests. I verified this locally by running the test with
`--repeat-until-unexpected`.
Fixes: #42022

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-20 14:02:53 +00:00
Narfinger
d33997c11b base: Set github revisions in Cargo.toml (#42029)
This takes the github revisions from the current Cargo.lock file and
puts them as required in the Cargo.toml.

Testing: It compiles.
Fixes: https://github.com/servo/servo/issues/42027

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-20 13:54:03 +00:00
Narfinger
cb29d251e6 CI: update OHOS hitrace-bench version (#42028)
The logs hitrace-bench reads will change soon with new phone versions.
This updates this to read the new and old log files.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Succesful run here:
https://github.com/Narfinger/servo/actions/runs/21169416072 Note that
the step failing is only for uploading to bencher because of wrong
permissions.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-20 12:15:35 +00:00
dependabot[bot]
1e4481bcb9 build: bump euclid from 0.22.11 to 0.22.13 (#42021)
Bumps [euclid](https://github.com/servo/euclid) from 0.22.11 to 0.22.13.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/servo/euclid/commits">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=euclid&package-manager=cargo&previous-version=0.22.11&new-version=0.22.13)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 02:24:41 +00:00
dependabot[bot]
fab79bd49d build: bump rustls-pki-types from 1.13.2 to 1.14.0 (#42020)
Bumps [rustls-pki-types](https://github.com/rustls/pki-types) from
1.13.2 to 1.14.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rustls/pki-types/releases">rustls-pki-types's
releases</a>.</em></p>
<blockquote>
<h2>1.14.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add FipsStatus enum by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/pki-types/pull/102">rustls/pki-types#102</a></li>
</ul>
<h2>1.13.3</h2>
<p><strong>Fuse PEM iterators as soon as an IO error is seen.</strong>
This ensures errors are returned when decoding multiple PEM items from
an <code>std::io::Read</code> which permanently returns errors. This
includes use of <code>pem_file_iter()</code> and
<code>pem_reader_iter()</code> against directories. Fixes <a
href="https://redirect.github.com/rustls/pki-types/issues/98">#98</a>.</p>
<h2>What's Changed</h2>
<ul>
<li>pem: fuse ReadIter on I/O errors by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/rustls/pki-types/pull/100">rustls/pki-types#100</a></li>
<li>Prepare 1.13.3 by <a
href="https://github.com/ctz"><code>@​ctz</code></a> in <a
href="https://redirect.github.com/rustls/pki-types/pull/101">rustls/pki-types#101</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rustls/pki-types/compare/v/1.13.2...v/1.13.3">https://github.com/rustls/pki-types/compare/v/1.13.2...v/1.13.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b829c966d2"><code>b829c96</code></a>
Bump version to 1.14.0</li>
<li><a
href="5f181d9185"><code>5f181d9</code></a>
Add FipsStatus enum</li>
<li><a
href="e033938b78"><code>e033938</code></a>
Enable warnings for exhaustive types</li>
<li><a
href="2e7938db31"><code>2e7938d</code></a>
Enable warnings for more clippy lints</li>
<li><a
href="42d98b4c5e"><code>42d98b4</code></a>
Enable warnings for more rustc lints</li>
<li><a
href="3a90b07204"><code>3a90b07</code></a>
Prepare 1.13.3</li>
<li><a
href="1daaec8743"><code>1daaec8</code></a>
pem: fuse ReadIter on I/O errors</li>
<li>See full diff in <a
href="https://github.com/rustls/pki-types/compare/v/1.13.2...v/1.14.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls-pki-types&package-manager=cargo&previous-version=1.13.2&new-version=1.14.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 01:11:44 +00:00
dependabot[bot]
e2ce40c93d build: bump the zbus-related group with 2 updates (#42019)
Bumps the zbus-related group with 2 updates:
[zbus](https://github.com/z-galaxy/zbus) and
[zbus_macros](https://github.com/z-galaxy/zbus).

Updates `zbus` from 5.13.1 to 5.13.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zbus's
releases</a>.</em></p>
<blockquote>
<h2>zbus-5.13.2</h2>
<h3>Fixed</h3>
<ul>
<li>🐛 fix regression on windows build. <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1686">#1686</a></li>
<li>🐛 Correct Peer interface to work on any arbitrary object path.</li>
</ul>
<h2>zbus_macros-5.13.2</h2>
<h3>Fixed</h3>
<ul>
<li>🐛 Allow <code>out_args</code> with multiple names for non-tuple
types.</li>
</ul>
<h3>Other</h3>
<ul>
<li>🤖 release-plz: Fix formatting of CHANGELOG files.</li>
<li>🤖 release-plz: Use the default header in changelog.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3c2fae5077"><code>3c2fae5</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1688">#1688</a>
from zeenix/zb-release</li>
<li><a
href="00bbca0acc"><code>00bbca0</code></a>
🔖 zb,zm: Release 5.13.2</li>
<li><a
href="fead96310e"><code>fead963</code></a>
🤖 release-plz: Custom regex for minor version bump</li>
<li><a
href="fa2794d19c"><code>fa2794d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1687">#1687</a>
from fmartinsons-una/fm/fix-1686</li>
<li><a
href="3d4ed5711f"><code>3d4ed57</code></a>
🐛 zb: fix regression on windows build</li>
<li><a
href="f473c1dd77"><code>f473c1d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1685">#1685</a>
from zeenix/zv-revert-hashmap-breakage</li>
<li><a
href="d28c24d752"><code>d28c24d</code></a>
🔖 zvariant 5.9.2</li>
<li><a
href="60bba3d8a5"><code>60bba3d</code></a>
️ Revert &quot;🐛 zv: Don't impl Type for dicts with non-basic
keys&quot;</li>
<li><a
href="78ab879ed8"><code>78ab879</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1635">#1635</a>
from cachebag/peer-any-path</li>
<li><a
href="b139742846"><code>b139742</code></a>
🐛 zb: Correct Peer interface to work on any arbitrary object path</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zbus-5.13.1...zbus-5.13.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `zbus_macros` from 5.13.1 to 5.13.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zbus_macros's
releases</a>.</em></p>
<blockquote>
<h2>zbus_macros-5.13.2</h2>
<h3>Fixed</h3>
<ul>
<li>🐛 Allow <code>out_args</code> with multiple names for non-tuple
types.</li>
</ul>
<h3>Other</h3>
<ul>
<li>🤖 release-plz: Fix formatting of CHANGELOG files.</li>
<li>🤖 release-plz: Use the default header in changelog.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3c2fae5077"><code>3c2fae5</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1688">#1688</a>
from zeenix/zb-release</li>
<li><a
href="00bbca0acc"><code>00bbca0</code></a>
🔖 zb,zm: Release 5.13.2</li>
<li><a
href="fead96310e"><code>fead963</code></a>
🤖 release-plz: Custom regex for minor version bump</li>
<li><a
href="fa2794d19c"><code>fa2794d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1687">#1687</a>
from fmartinsons-una/fm/fix-1686</li>
<li><a
href="3d4ed5711f"><code>3d4ed57</code></a>
🐛 zb: fix regression on windows build</li>
<li><a
href="f473c1dd77"><code>f473c1d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1685">#1685</a>
from zeenix/zv-revert-hashmap-breakage</li>
<li><a
href="d28c24d752"><code>d28c24d</code></a>
🔖 zvariant 5.9.2</li>
<li><a
href="60bba3d8a5"><code>60bba3d</code></a>
️ Revert &quot;🐛 zv: Don't impl Type for dicts with non-basic
keys&quot;</li>
<li><a
href="78ab879ed8"><code>78ab879</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1635">#1635</a>
from cachebag/peer-any-path</li>
<li><a
href="b139742846"><code>b139742</code></a>
🐛 zb: Correct Peer interface to work on any arbitrary object path</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zbus_macros-5.13.1...zbus_macros-5.13.2">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 00:48:12 +00:00
dependabot[bot]
27d27da243 build: bump the napi-ohos-related group with 5 updates (#42018)
Bumps the napi-ohos-related group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [napi-derive-ohos](https://github.com/ohos-rs/ohos-rs) | `1.1.5` |
`1.1.6` |
| [napi-ohos](https://github.com/ohos-rs/ohos-rs) | `1.1.5` | `1.1.6` |
| [napi-build-ohos](https://github.com/ohos-rs/ohos-rs) | `1.1.5` |
`1.1.6` |
| [napi-derive-backend-ohos](https://github.com/ohos-rs/ohos-rs) |
`1.1.5` | `1.1.6` |
| [napi-sys-ohos](https://github.com/ohos-rs/ohos-rs) | `1.1.5` |
`1.1.6` |

Updates `napi-derive-ohos` from 1.1.5 to 1.1.6
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1357697530"><code>1357697</code></a>
Merge pull request <a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/181">#181</a>
from ohos-rs/feat-0119</li>
<li><a
href="25e8534b9a"><code>25e8534</code></a>
chore: bump version</li>
<li><a
href="1d85ef1318"><code>1d85ef1</code></a>
Sync 0119</li>
<li><a
href="4797037514"><code>4797037</code></a>
chore(deps): update release-plz/action action to v0.5.121 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3098">#3098</a>)</li>
<li><a
href="fc6119b0ff"><code>fc6119b</code></a>
chore(deps): update dependency vite-plugin-node-polyfills to ^0.25.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3095">#3095</a>)</li>
<li><a
href="e7c9e72c91"><code>e7c9e72</code></a>
build(deps): bump undici from 6.22.0 to 6.23.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3094">#3094</a>)</li>
<li><a
href="2b7de67ba4"><code>2b7de67</code></a>
fix(sys): remove default dyb-symbols</li>
<li><a
href="26c0bb8b73"><code>26c0bb8</code></a>
chore(deps): update dependency <code>@​types/dockerode</code> to v4 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3092">#3092</a>)</li>
<li><a
href="fab18c8c3e"><code>fab18c8</code></a>
docs: add SECURITY.md</li>
<li><a
href="c26cb38ff1"><code>c26cb38</code></a>
chore(deps): update dependency tsdown to ^0.19.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3091">#3091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `napi-ohos` from 1.1.5 to 1.1.6
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1357697530"><code>1357697</code></a>
Merge pull request <a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/181">#181</a>
from ohos-rs/feat-0119</li>
<li><a
href="25e8534b9a"><code>25e8534</code></a>
chore: bump version</li>
<li><a
href="1d85ef1318"><code>1d85ef1</code></a>
Sync 0119</li>
<li><a
href="4797037514"><code>4797037</code></a>
chore(deps): update release-plz/action action to v0.5.121 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3098">#3098</a>)</li>
<li><a
href="fc6119b0ff"><code>fc6119b</code></a>
chore(deps): update dependency vite-plugin-node-polyfills to ^0.25.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3095">#3095</a>)</li>
<li><a
href="e7c9e72c91"><code>e7c9e72</code></a>
build(deps): bump undici from 6.22.0 to 6.23.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3094">#3094</a>)</li>
<li><a
href="2b7de67ba4"><code>2b7de67</code></a>
fix(sys): remove default dyb-symbols</li>
<li><a
href="26c0bb8b73"><code>26c0bb8</code></a>
chore(deps): update dependency <code>@​types/dockerode</code> to v4 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3092">#3092</a>)</li>
<li><a
href="fab18c8c3e"><code>fab18c8</code></a>
docs: add SECURITY.md</li>
<li><a
href="c26cb38ff1"><code>c26cb38</code></a>
chore(deps): update dependency tsdown to ^0.19.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3091">#3091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `napi-build-ohos` from 1.1.5 to 1.1.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ohos-rs/ohos-rs/releases">napi-build-ohos's
releases</a>.</em></p>
<blockquote>
<h2>ohrs@1.1.6</h2>
<h2>What's Changed</h2>
<ul>
<li>feat: suppport workspace mode by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/173">ohos-rs/ohos-rs#173</a></li>
<li>fix(cli): respect bash env by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/174">ohos-rs/ohos-rs#174</a></li>
<li>fix: lint error by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/175">ohos-rs/ohos-rs#175</a></li>
<li>fix: cargo subcommand sysroot error by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/178">ohos-rs/ohos-rs#178</a></li>
<li>Sync by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/181">ohos-rs/ohos-rs#181</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1357697530"><code>1357697</code></a>
Merge pull request <a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/181">#181</a>
from ohos-rs/feat-0119</li>
<li><a
href="25e8534b9a"><code>25e8534</code></a>
chore: bump version</li>
<li><a
href="1d85ef1318"><code>1d85ef1</code></a>
Sync 0119</li>
<li><a
href="4797037514"><code>4797037</code></a>
chore(deps): update release-plz/action action to v0.5.121 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3098">#3098</a>)</li>
<li><a
href="fc6119b0ff"><code>fc6119b</code></a>
chore(deps): update dependency vite-plugin-node-polyfills to ^0.25.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3095">#3095</a>)</li>
<li><a
href="e7c9e72c91"><code>e7c9e72</code></a>
build(deps): bump undici from 6.22.0 to 6.23.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3094">#3094</a>)</li>
<li><a
href="2b7de67ba4"><code>2b7de67</code></a>
fix(sys): remove default dyb-symbols</li>
<li><a
href="26c0bb8b73"><code>26c0bb8</code></a>
chore(deps): update dependency <code>@​types/dockerode</code> to v4 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3092">#3092</a>)</li>
<li><a
href="fab18c8c3e"><code>fab18c8</code></a>
docs: add SECURITY.md</li>
<li><a
href="c26cb38ff1"><code>c26cb38</code></a>
chore(deps): update dependency tsdown to ^0.19.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3091">#3091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `napi-derive-backend-ohos` from 1.1.5 to 1.1.6
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1357697530"><code>1357697</code></a>
Merge pull request <a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/181">#181</a>
from ohos-rs/feat-0119</li>
<li><a
href="25e8534b9a"><code>25e8534</code></a>
chore: bump version</li>
<li><a
href="1d85ef1318"><code>1d85ef1</code></a>
Sync 0119</li>
<li><a
href="4797037514"><code>4797037</code></a>
chore(deps): update release-plz/action action to v0.5.121 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3098">#3098</a>)</li>
<li><a
href="fc6119b0ff"><code>fc6119b</code></a>
chore(deps): update dependency vite-plugin-node-polyfills to ^0.25.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3095">#3095</a>)</li>
<li><a
href="e7c9e72c91"><code>e7c9e72</code></a>
build(deps): bump undici from 6.22.0 to 6.23.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3094">#3094</a>)</li>
<li><a
href="2b7de67ba4"><code>2b7de67</code></a>
fix(sys): remove default dyb-symbols</li>
<li><a
href="26c0bb8b73"><code>26c0bb8</code></a>
chore(deps): update dependency <code>@​types/dockerode</code> to v4 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3092">#3092</a>)</li>
<li><a
href="fab18c8c3e"><code>fab18c8</code></a>
docs: add SECURITY.md</li>
<li><a
href="c26cb38ff1"><code>c26cb38</code></a>
chore(deps): update dependency tsdown to ^0.19.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3091">#3091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `napi-sys-ohos` from 1.1.5 to 1.1.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ohos-rs/ohos-rs/releases">napi-sys-ohos's
releases</a>.</em></p>
<blockquote>
<h2>ohrs@1.1.6</h2>
<h2>What's Changed</h2>
<ul>
<li>feat: suppport workspace mode by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/173">ohos-rs/ohos-rs#173</a></li>
<li>fix(cli): respect bash env by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/174">ohos-rs/ohos-rs#174</a></li>
<li>fix: lint error by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/175">ohos-rs/ohos-rs#175</a></li>
<li>fix: cargo subcommand sysroot error by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/178">ohos-rs/ohos-rs#178</a></li>
<li>Sync by <a
href="https://github.com/richerfu"><code>@​richerfu</code></a> in <a
href="https://redirect.github.com/ohos-rs/ohos-rs/pull/181">ohos-rs/ohos-rs#181</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1357697530"><code>1357697</code></a>
Merge pull request <a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/181">#181</a>
from ohos-rs/feat-0119</li>
<li><a
href="25e8534b9a"><code>25e8534</code></a>
chore: bump version</li>
<li><a
href="1d85ef1318"><code>1d85ef1</code></a>
Sync 0119</li>
<li><a
href="4797037514"><code>4797037</code></a>
chore(deps): update release-plz/action action to v0.5.121 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3098">#3098</a>)</li>
<li><a
href="fc6119b0ff"><code>fc6119b</code></a>
chore(deps): update dependency vite-plugin-node-polyfills to ^0.25.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3095">#3095</a>)</li>
<li><a
href="e7c9e72c91"><code>e7c9e72</code></a>
build(deps): bump undici from 6.22.0 to 6.23.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3094">#3094</a>)</li>
<li><a
href="2b7de67ba4"><code>2b7de67</code></a>
fix(sys): remove default dyb-symbols</li>
<li><a
href="26c0bb8b73"><code>26c0bb8</code></a>
chore(deps): update dependency <code>@​types/dockerode</code> to v4 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3092">#3092</a>)</li>
<li><a
href="fab18c8c3e"><code>fab18c8</code></a>
docs: add SECURITY.md</li>
<li><a
href="c26cb38ff1"><code>c26cb38</code></a>
chore(deps): update dependency tsdown to ^0.19.0 (<a
href="https://redirect.github.com/ohos-rs/ohos-rs/issues/3091">#3091</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ohos-rs/ohos-rs/compare/ohrs@1.1.5...ohrs@1.1.6">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-20 00:42:08 +00:00
Oriol Brufau
d0dcdb5a1a layout: Reduce visibility in components/layout/flow/inline/mod.rs (#42015)
Various methods, structs and fields were unnecessarily public. Make them
private.

Testing: Not needed, no behavior change.

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-20 00:09:05 +00:00
Martin Robinson
8e7249b625 script: Set MouseEvent properties according to the UI Events specification (#42013)
The UI Events specification has a table of UIEvents which describes the
properties that they must have. Importantly, this includes whether the
event should bubble, be cancelable, and be composed. The code was not
following this specification, so this changes centralizes where they are
set.

In addition, it makes the code that finds the event target consistent
with whether or not it is `ShadowIncluding`.

Finally the `MouseEvent` constructors are renamed so that it is clear
what they are used for.

Testing: This change causes one WPT test to start passing.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-19 21:17:04 +00:00
eri
151074e9a1 devtools: Handle pause in the debugger (#42007)
Add an event listener for `pause` to `debugger.js` and the necessary
glue to access it from the `devtools` crate. This returns important
information to know where we are paused, such as the source location and
frame state.

Fix frame and object actor encoding into messages. Use information from
`debugger.js` to correctly fill the fields.

Add a new `frames` list to the thread actor and handle the `frames`
message.

Fix `getEnvironment` reply in the frame actor. It is out of form (has a
`type` field but it doesn't require a followup empty message, it already
counts as a reply), so we need to handle it specially.

Note: For now we are focusing on the protocol side of the debugger, and
this patch only shows where the pause would happen. Pausing Servo itself
will happen in a followup.

![Debugger showing the line where execution would be
paused](https://github.com/user-attachments/assets/c007f205-0ccd-47f1-ad0b-81b7415e8211)

Testing: `mach test-devtools` and manual testing. No errors (apart from
#42006).
Part of: #36027

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
2026-01-19 19:27:52 +00:00
Martin Robinson
90f568f962 fonts: Store ByteIndex as a usize (#42012)
This value is supposed to represent a UTF-8 code point offset or
length. It should never be negative and we often need to convert it to a
`usize`, so we can store it as a `usize`.

Testing: This should not change behavior so existing tests should
suffice.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-19 18:30:04 +00:00
eri
cbf6bd426c devtools: Fix failures in mach test-devtools (#42006)
Make the `start` and `end` parameters in
`getBreakpointPositionsCompressed` optional.

Send a resource array even if it is empty.

Testing: Ran `mach test-devtools`.

---------

Signed-off-by: eri <eri@igalia.com>
2026-01-19 16:24:33 +00:00
Martin Robinson
e8f88468d0 script: Consider a selection collapsed when the edit point equals the selection origin (#41978)
In text inputs, the edit point can be equal to a non-`None` selection
origin for a variety of reasons such as when the selection is set by a
DOM API or when a composition event inserts a zero length string. In
both of these cases, we should treat the selection as collapsed. It is
important to do this because for the purposes of arrow key movement and
context menu entries, we should think of the text input as not having a
selection at all.

Testing: This change adds a Servo-specific WPT test, as key press
behavior is
platform specific.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-19 15:08:40 +00:00
Rod Borovyk
eacdbd9a34 layout: Accept lengths in arbitrary units for SVG width and height (#40761)
Previously it was only possible to set width and height of SVG elements
in pixels. These changes allow parsing other units like em using a CSS
parser in SVGSVGElement and resolving them to computed values in the
layout code.

Testing: Tested manually
Fixes: -

---------

Signed-off-by: Rodion Borovyk <rodion.borovyk@gmail.com>
2026-01-19 13:31:27 +00:00
Oriol Brufau
bc167b0ff1 layout: Simplify process_soft_wrap_opportunity() (#42008)
Some of its logic can just be replaced with a call to the method
`unbreakable_segment_fits_on_line()`.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-19 13:16:17 +00:00
shuppy
e49afc31b2 ci: Run WPT jobs on self-hosted runners (#41062)
this patch enables WPT runs to use self-hosted runners, using the
changes in servo/ci-runners#90, servo/ci-runners#91,
servo/ci-runners#92, and servo/ci-runners#93 (see servo/ci-runners#21
for more details).

fallback to GitHub-hosted runners is included for now, but we can use
three self-hosted runners to do what required twenty GitHub-hosted
runners in the same amount of time (20 minutes). in the future, we may
be able to run WPT faster than that by decreasing --timeout-multiplier
or further increasing --processes, if we fix the flakes.

Testing:
- <https://github.com/servo/servo/actions/runs/19951033498> (18 **22**
18min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/19952863638> (18 **19**
**19**min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/19952882829> (16 **24**
16min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/19952885991> (15 **20**
**20**min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/19953672646> (16 **20**
18min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/19953675013> (**18** 17
**18**min, 0 stable unexpected)
- <https://github.com/servo/servo/actions/runs/21129181925> (16 **19**
18min, 0 stable unexpected)

Fixes: part of #38141

---------

Signed-off-by: Delan Azabani <dazabani@igalia.com>
Signed-off-by: delan azabani <dazabani@igalia.com>
2026-01-19 09:02:49 +00:00
webbeef
f13b8e6ed5 chore: suppress warnings when building without the testbinding feature (#42003)
When building without the `testbinding` feature of `libservo`, we end up
with these compilation warnings (and one error):

```
warning: unused import: `native_from_handlevalue`
   --> components/script_bindings/import.rs:108:9
    |
108 |         native_from_handlevalue, native_from_object_static,
    |         ^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default

warning: unused imports: `DomSlice` and `Dom`
   --> components/script_bindings/import.rs:131:34
    |
131 |     pub(crate) use crate::root::{Dom, DomSlice, MaybeUnreflectedDom, Root};
    |                                  ^^^  ^^^^^^^^

warning: unused import: `crate::root::DomRoot`
 --> /home/webbeef/servo/target/debug/build/script_bindings-9c5650a8d750af8f/out/DomTypes.rs:3:5
  |
3 | use crate::root::DomRoot;
  |     ^^^^^^^^^^^^^^^^^^^^

warning: unused import: `Maplike`
   --> components/script_bindings/import.rs:124:34
    |
124 |     pub(crate) use crate::like::{Maplike, Setlike};
    |                                  ^^^^^^^

warning: `script_bindings` (lib) generated 4 warnings (run `cargo fix --lib -p script_bindings` to apply 3 suggestions)
error[E0412]: cannot find type `IdentityHub` in this scope
  --> components/script/dom/debuggerglobalscope.rs:76:63
   |
76 |         #[cfg(feature = "webgpu")] gpu_id_hub: std::sync::Arc<IdentityHub>,
   |                                                               ^^^^^^^^^^^ not found in this scope
   |
help: consider importing this struct
   |
 5 + use crate::dom::identityhub::IdentityHub;
   |

warning: method `worklet_id` is never used
   --> components/script/dom/worklet.rs:121:19
    |
 95 | impl Worklet {
    | ------------ method in this implementation
...
121 |     pub(crate) fn worklet_id(&self) -> WorkletId {
    |                   ^^^^^^^^^^
    |
    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
```

Testing: No test needed, this won't change the default builds.

Signed-off-by: webbeef <me@webbeef.org>
2026-01-19 07:44:15 +00:00
dependabot[bot]
b9f5a7920f build: bump rustls-webpki from 0.103.8 to 0.103.9 (#41998)
Bumps [rustls-webpki](https://github.com/rustls/webpki) from 0.103.8 to
0.103.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rustls/webpki/releases">rustls-webpki's
releases</a>.</em></p>
<blockquote>
<h2>0.103.9</h2>
<h2>What's Changed</h2>
<ul>
<li>[backport] ci: avoid denying warnings on nightly toolchains by <a
href="https://github.com/alex"><code>@​alex</code></a> in <a
href="https://redirect.github.com/rustls/webpki/pull/437">rustls/webpki#437</a></li>
<li>Backport lifetime change and bump version for release by <a
href="https://github.com/alex"><code>@​alex</code></a> in <a
href="https://redirect.github.com/rustls/webpki/pull/436">rustls/webpki#436</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6bc9931d3b"><code>6bc9931</code></a>
Bump version to 0.103.9</li>
<li><a
href="92dbfc6ee8"><code>92dbfc6</code></a>
Tie lifetime of valid_dns_names/valid_uri_names to struct lifetime</li>
<li><a
href="2c46166a59"><code>2c46166</code></a>
ci: sync cargo-check-external-types nightly</li>
<li><a
href="c423a9e27e"><code>c423a9e</code></a>
ci: avoid denying warnings on nightly toolchains</li>
<li>See full diff in <a
href="https://github.com/rustls/webpki/compare/v/0.103.8...v/0.103.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustls-webpki&package-manager=cargo&previous-version=0.103.8&new-version=0.103.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:53:56 +00:00
dependabot[bot]
68f6daf975 build: bump cc from 1.2.52 to 1.2.53 (#41996)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.52 to 1.2.53.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.53</h2>
<h3>Other</h3>
<ul>
<li>Add missing RISC-V targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1657">#1657</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.52...cc-v1.2.53">1.2.53</a>
- 2026-01-16</h2>
<h3>Other</h3>
<ul>
<li>Add missing RISC-V targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1657">#1657</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5be292b6bb"><code>5be292b</code></a>
chore: release (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1658">#1658</a>)</li>
<li><a
href="66ceffe188"><code>66ceffe</code></a>
Add missing RISC-V targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1657">#1657</a>)</li>
<li><a
href="8124fc5e30"><code>8124fc5</code></a>
Regenerate windows sys bindings (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1653">#1653</a>)</li>
<li><a
href="06b516a7c5"><code>06b516a</code></a>
Update windows-bindgen requirement from 0.65 to 0.66 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1652">#1652</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.52...cc-v1.2.53">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.52&new-version=1.2.53)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:46:51 +00:00
dependabot[bot]
978c53ce33 build: bump filetime from 0.2.26 to 0.2.27 (#41997)
Bumps [filetime](https://github.com/alexcrichton/filetime) from 0.2.26
to 0.2.27.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="cca080e562"><code>cca080e</code></a>
Bump to 0.2.27</li>
<li><a
href="39f812defe"><code>39f812d</code></a>
Remove windows-sys dependency (<a
href="https://redirect.github.com/alexcrichton/filetime/issues/115">#115</a>)</li>
<li>See full diff in <a
href="https://github.com/alexcrichton/filetime/compare/0.2.26...0.2.27">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=filetime&package-manager=cargo&previous-version=0.2.26&new-version=0.2.27)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:46:33 +00:00
dependabot[bot]
f98d7af402 build: bump find-msvc-tools from 0.1.7 to 0.1.8 (#41995)
Bumps [find-msvc-tools](https://github.com/rust-lang/cc-rs) from 0.1.7
to 0.1.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">find-msvc-tools's
releases</a>.</em></p>
<blockquote>
<h2>find-msvc-tools-v0.1.8</h2>
<h3>Other</h3>
<ul>
<li>Regenerate windows sys bindings (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1653">#1653</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5be292b6bb"><code>5be292b</code></a>
chore: release (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1658">#1658</a>)</li>
<li><a
href="66ceffe188"><code>66ceffe</code></a>
Add missing RISC-V targets (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1657">#1657</a>)</li>
<li><a
href="8124fc5e30"><code>8124fc5</code></a>
Regenerate windows sys bindings (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1653">#1653</a>)</li>
<li><a
href="06b516a7c5"><code>06b516a</code></a>
Update windows-bindgen requirement from 0.65 to 0.66 (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1652">#1652</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/find-msvc-tools-v0.1.7...find-msvc-tools-v0.1.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=find-msvc-tools&package-manager=cargo&previous-version=0.1.7&new-version=0.1.8)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:32:56 +00:00
dependabot[bot]
a54da6d06e build: bump zmij from 1.0.14 to 1.0.15 (#41994)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.14 to 1.0.15.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="dcee9d8a3c"><code>dcee9d8</code></a>
Release 1.0.15</li>
<li><a
href="a30e356d91"><code>a30e356</code></a>
Switch to 9975WX benchmark data</li>
<li><a
href="552cade62e"><code>552cade</code></a>
Sync to vitaut/zmij@902041f</li>
<li><a
href="b79073030d"><code>b790730</code></a>
Sync to vitaut/zmij@97c1cbd</li>
<li><a
href="eec6c7ff2c"><code>eec6c7f</code></a>
Sync to vitaut/zmij@93b4a03</li>
<li><a
href="65759fa661"><code>65759fa</code></a>
Sync to vitaut/zmij@9a28245</li>
<li><a
href="cacaaac8fd"><code>cacaaac</code></a>
Sync to vitaut/zmij@2bf93b1</li>
<li><a
href="2fb3e09033"><code>2fb3e09</code></a>
Sync to vitaut/zmij@4c788ff</li>
<li><a
href="d7b1e4aefe"><code>d7b1e4a</code></a>
Fix SSE2 field names</li>
<li><a
href="f57a303c96"><code>f57a303</code></a>
Add polyfill for core::hint::select_unpredictable</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/zmij/compare/1.0.14...1.0.15">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.14&new-version=1.0.15)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:28:04 +00:00
dependabot[bot]
4df8e670a8 build: bump the zbus-related group with 2 updates (#41993)
Bumps the zbus-related group with 2 updates:
[zvariant](https://github.com/z-galaxy/zbus) and
[zvariant_derive](https://github.com/z-galaxy/zbus).

Updates `zvariant` from 5.9.1 to 5.9.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zvariant's
releases</a>.</em></p>
<blockquote>
<h2>zvariant-5.9.2</h2>
<h3>Other</h3>
<ul>
<li>️ Revert &quot;🐛 zv: Don't impl Type for dicts with non-basic
keys&quot;.</li>
</ul>
<h2>zvariant_derive-5.9.2</h2>
<h3>Fixed</h3>
<ul>
<li>🐛 Fix hard-coded zvariant path in signature generation.</li>
</ul>
<h3>Other</h3>
<ul>
<li>🤖 release-plz: Fix formatting of CHANGELOG files.</li>
<li>🤖 release-plz: Use the default header in changelog.</li>
</ul>
<h3>Testing</h3>
<ul>
<li> Add tests for <code>signature_to_tokens_with_crate</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f473c1dd77"><code>f473c1d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1685">#1685</a>
from zeenix/zv-revert-hashmap-breakage</li>
<li><a
href="d28c24d752"><code>d28c24d</code></a>
🔖 zvariant 5.9.2</li>
<li><a
href="60bba3d8a5"><code>60bba3d</code></a>
️ Revert &quot;🐛 zv: Don't impl Type for dicts with non-basic
keys&quot;</li>
<li><a
href="78ab879ed8"><code>78ab879</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1635">#1635</a>
from cachebag/peer-any-path</li>
<li><a
href="b139742846"><code>b139742</code></a>
🐛 zb: Correct Peer interface to work on any arbitrary object path</li>
<li><a
href="617ff164fe"><code>617ff16</code></a>
⬆️ micro: Update chrono to v0.4.43 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1683">#1683</a>)</li>
<li><a
href="ba84dff079"><code>ba84dff</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1680">#1680</a>
from zeenix/fix-releaes-plz-deps</li>
<li><a
href="ee45b0264f"><code>ee45b02</code></a>
🤖 release-plz: List dropped deps under <code>Dependencies</code></li>
<li><a
href="6490834e8a"><code>6490834</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1679">#1679</a>
from zeenix/better-pr-naming</li>
<li><a
href="ebf8ca8e20"><code>ebf8ca8</code></a>
🤖 release-plz: Better PR naming</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zvariant-5.9.1...zvariant-5.9.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `zvariant_derive` from 5.9.1 to 5.9.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/z-galaxy/zbus/releases">zvariant_derive's
releases</a>.</em></p>
<blockquote>
<h2>zvariant_derive-5.9.2</h2>
<h3>Fixed</h3>
<ul>
<li>🐛 Fix hard-coded zvariant path in signature generation.</li>
</ul>
<h3>Other</h3>
<ul>
<li>🤖 release-plz: Fix formatting of CHANGELOG files.</li>
<li>🤖 release-plz: Use the default header in changelog.</li>
</ul>
<h3>Testing</h3>
<ul>
<li> Add tests for <code>signature_to_tokens_with_crate</code>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f473c1dd77"><code>f473c1d</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1685">#1685</a>
from zeenix/zv-revert-hashmap-breakage</li>
<li><a
href="d28c24d752"><code>d28c24d</code></a>
🔖 zvariant 5.9.2</li>
<li><a
href="60bba3d8a5"><code>60bba3d</code></a>
️ Revert &quot;🐛 zv: Don't impl Type for dicts with non-basic
keys&quot;</li>
<li><a
href="78ab879ed8"><code>78ab879</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1635">#1635</a>
from cachebag/peer-any-path</li>
<li><a
href="b139742846"><code>b139742</code></a>
🐛 zb: Correct Peer interface to work on any arbitrary object path</li>
<li><a
href="617ff164fe"><code>617ff16</code></a>
⬆️ micro: Update chrono to v0.4.43 (<a
href="https://redirect.github.com/z-galaxy/zbus/issues/1683">#1683</a>)</li>
<li><a
href="ba84dff079"><code>ba84dff</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1680">#1680</a>
from zeenix/fix-releaes-plz-deps</li>
<li><a
href="ee45b0264f"><code>ee45b02</code></a>
🤖 release-plz: List dropped deps under <code>Dependencies</code></li>
<li><a
href="6490834e8a"><code>6490834</code></a>
Merge pull request <a
href="https://redirect.github.com/z-galaxy/zbus/issues/1679">#1679</a>
from zeenix/better-pr-naming</li>
<li><a
href="ebf8ca8e20"><code>ebf8ca8</code></a>
🤖 release-plz: Better PR naming</li>
<li>Additional commits viewable in <a
href="https://github.com/z-galaxy/zbus/compare/zvariant_derive-5.9.1...zvariant_derive-5.9.2">compare
view</a></li>
</ul>
</details>
<br />


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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-19 00:23:23 +00:00
Tim van der Lippe
13cfaddbbc script: Implement link fetch resource steps for stylesheet (#41987)
These were missing. It also lists why some of these steps are actually
present in the `StylesheetLoader` instead.

Testing: WPT
Part of #22715

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-18 20:32:46 +00:00
Domenico Rizzo
162c697248 [26488] - Moves drop logic to inner struct for GPUBindGroupLayout (#41984)
Moves the drop logic for `GPUBindGroupLayout` to an inner struct
`DroppableGPUBindGroupLayout`.

Testing: No tests added
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-01-18 17:20:14 +00:00
Martin Robinson
aa59e2ba4c layout: Remove an unnecessary borrow in stacking context tree construction (#41982)
`fragment` is already borrowed here as `self`. `fragment` is just passed
in order to access the `Fragment` that contains the `self` inside an
`ArcRefCell`. This change removes the unecessary borrow and accesses the
`BoxFragment` directly.

Testing: This is a small optimization, so should be covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-18 14:35:25 +00:00
atbrakhi
9882024c18 devtools: Fix devtools source content being empty for small documents (#41983)
When the network decoder's `finish()` returns decoded content in
`parse_sync`, it was being added to the parsing input but not captured
for devtools. This ensures the content is also captured for the devtools
Sources panel.

Testing: We have tests for this in devtools_tests.py. They were failing
before this change. I ran locally and it passed now. With this all
DevTools tests are passing!

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-01-18 14:16:44 +00:00
Sam
4b71136fcb script: Update mozjs to include with more safe wrappers and debugmozjs artifacts (#41971)
This bump includes
some new safe wrappers: https://github.com/servo/mozjs/pull/699
https://github.com/servo/mozjs/pull/700
debugmozjs artifacts: https://github.com/servo/mozjs/pull/544
rooted macros with vectors: https://github.com/servo/mozjs/pull/697

Testing: Done in mozjs repo.

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-18 13:47:27 +00:00
César Danilo Pedraza Montoya
e153020f8f script: Add error messages for cSHAKE and HKDF (#41964)
Add all the missing error messages for `hkdf_operation.rs` and
`cshake_operation.rs` (one message only). Tried to follow the style of
existing messages and used an existing message for the HKDF-expand
operation. Related to #40756.

Testing: No tests added.

Signed-off-by: César Pedraza <cpedraza@unal.edu.co>
2026-01-18 13:30:14 +00:00
Martin Robinson
93fa5d3e0a layout: Properly account for transforms when finding glyph index (#41931)
This change makes it so that tranforms (including CSS transform and
scrolling) are properly accounted for when calculating glyph indices.
Containing block sizes are moved to `BaseFragment`. This should reduce
the size of the StackingContextTree a little.

Testing: A Servo-specific WPT-style test is added for this change.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-01-18 13:07:25 +00:00
Josh Matthews
a97a345d6e script: Check same-origin-domain when evaluating javscript: URLs. (#41969)
These changes introduce a new OriginSnapshot type, which is an immutable
version of MutableOrigin (ie. an origin that includes an optional domain
modifier). This is now propagated as part of LoadData's origin, allowing
us to perform the same-origin-domain check for javascript: URLs as
needed.

Testing: Newly-passing tests.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-18 02:32:51 +00:00
Servo WPT Sync
bc1ec4bfaf Sync WPT with upstream (18-01-2026) (#41980)
Automated downstream sync of changes from upstream as of 18-01-2026
[no-wpt-sync]

Signed-off-by: WPT Sync Bot <ghbot+wpt-sync@servo.org>
2026-01-18 01:25:57 +00:00
Martin Robinson
7f092596a9 script: Ignore empty composition events in text inputs (#41979)
Some platforms send empty composition events (winit on Linux, for
example). These should be ignored appropriately as they can cause
unecessary rendering updates even when the content of the text area does
not change.

Testing: This is mainly an optimization, so no tests are added. It does
prevent
some misbehavior, but that is a secondary effect fixed by #41978.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-17 22:35:48 +00:00
Domenico Rizzo
0417968ee9 [26488] - Refactors GPUBindGroup drop implementation (#41977)
Moves the drop implementation for `GPUBindGroup` to a separate
`DroppableGPUBindGroup` struct.

Testing: No tests added
Fixes: partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-01-17 17:53:56 +00:00
Martin Robinson
1a92d62a97 script: Simplify TextInput::new (#41975)
This constructors takes more arguments than it needs to. The three
arguments removed are almost always the default values. The exception is
in the unit tests. In this change those calls are modified to use
`set_max_length` like is done in the actual script code.

Testing: This is just a simplification of the code, so should be covered
by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-17 14:04:28 +00:00
Martin Robinson
37cef428de script: Do not adjust the edit point in text fields when non-primary buttons are pressed (#41974)
We should not move the text cursor or change the text selection when
non-primary (such as the right) mouse buttons are pressed. Doing so
interferes with the common operations:

1. Select text
2. Open context menu
3. Copy text

This change fixes that.

Testing: New WPT-style tests are added.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-17 13:30:59 +00:00
Martin Robinson
e8f9976f35 script: Reset form controls immediately after parsing them (#41962)
This change brings Servo closer to the specification by removing the
unspecified sanitization flags used during parsing of input elements.
Instead we implement the lines of the specification that say to reset
resettable elements after parsing them. This forces a re-sanitization of
the default value (from the `value` attribute), clearing up the
confusion in parser comments.

In addition, specification text is added in the element creation code.

Testing: This just brings our code closer to the specification, so it is
covered by existing tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-17 09:05:28 +00:00
Josh Matthews
c941575096 script: Check node document instead of current global when getting iframe's content document. (#41970)
Updates the implementation of HTMLIFrameElement::GetContentDocument to
match the latest specification text.

Testing: Since each script thread only contains documents that are
same-origin-domain, I don't think it's possible to construct a testcase
with an observable difference here.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-17 08:48:53 +00:00
Josh Matthews
6e948ee9a9 script: Use document origin instead of URL when manipulating blobs. (#41966)
Retrieving the origin from the document's URL means the wrong origin can
be returned for documents like about:blank or about:srcdoc.

Testing: Newly-passing test involving a srcdoc and blob.

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-17 07:31:41 +00:00
PaulTreitel
1fa5fdc2f9 script: Add error messages for the ECDH cryptographic functions (#41468)
Adding error messages across
`script/dom/subtlecrypto/ecdh_operation.rs`.

Testing: No tests as this is just adding error messages
Fixes: (part of) #40756

---------

Signed-off-by: PaulTreitel <paul.treitel@gmail.com>
2026-01-17 05:50:34 +00:00
Euclid Ye
e991d16345 webdriver: Implement pointerCancel for touch chain (#41937)
Testing: Adding a new function `pointer_cancel` in test infrastructure
and two touch chain subtests for
[pointerCancel](https://w3c.github.io/webdriver/#dfn-dispatch-a-pointercancel-action).

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-17 02:22:57 +00:00
Oriol Brufau
d0d46854f0 layout: Fix interaction of overflow-clip-margin and border-radius (#41967)
The `border-radius` values refer to the border box. For the purpose of
`overflow-clip`, we were just adjusting by the `overflow-clip-margin`
offset, without considering that this offset may not refer to the border
box (in fact, it defaults to the padding box).

To fix it, we need to subtract the border when the offset refers to the
padding box, and subtract the border and padding when it refers to the
content box.

This implies that each axis can end up with a different offset, so this
modifies `offset_radii()` accordingly. And then, `inner_radii()` is no
longer needed.

Testing: Adding new test
Fixes: #41907

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-16 23:03:36 +00:00
Martin Robinson
ee8c727944 script: Add selection behavior for double and triple click in text fields (#41926)
This change adds support for updating the selection when double and
triple clicking in text fields. Double clicking selects the most
relevant word while triple clicking selects the entire line.

Testing: This change adds unit tests for `Rope` as well as a
Servo-specific WPT style test. These behaviors are platform
dependent.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-16 23:03:05 +00:00
Martin Robinson
7372cb7076 layout: Ensure that anonymous flex items are properly stored in a BoxSlot (#41951)
When a flex container has text children, those children are wrapped in
an anonymous box and used as flex items. These anonymous boxes must be
stored into `BoxSlot`s so that their style is repairable during
incremental layout.

Testing: This change includes a new WPT test.
Fixes: #41947.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-16 16:53:12 +00:00
Gregory Terzian
df5cb75a95 indexeddb: fix crash in worker abort (#41960)
When an open request is aborted, it does not always already have a
pending upgrade, so we should not make the assertion.

Testing: /IndexedDB/worker-termination-aborts-upgrade.window.html
Fixes: https://github.com/servo/servo/issues/41918

Signed-off-by: gterzian <2792687+gterzian@users.noreply.github.com>
2026-01-16 15:57:52 +00:00
Martin Robinson
075ecd6107 script: Do not allow pasting newlines in single line text boxes (#41934)
This change moves all single versus multiline input handling to script.
It didn't really belong in `Rope`. In addition, it ensures that all
insertions into single line text boxes are sanitized by replacing
linebreaks with spaces.

Testing: As pasting is hard to test with a WPT-style test, this changes
includes new unit tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-16 15:32:09 +00:00
Narfinger
148f77ce2d net: Transform filemanager to async code (#41857)
This transform the filemanager code to simple async code. With the
removal of the thread pool in https://github.com/servo/servo/pull/41740
the we used std::thread::spawn for the two usages of the thread pool.
This changes these to use the already existing async runtime and spawns
the tasks on this.

This is a very simple change and does not use all the functionality we
have from the runtime but hopefully have enough points to yield back to
the runtime.

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>

Testing: Browsing files locally seems to work on WPT tests are here:
https://github.com/Narfinger/servo/actions/runs/20956841091

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-16 13:59:55 +00:00
shuppy
c2530a49ee Plumb accessibility tree updates from layout to embedder (#41924)
this patch adds some new methods and messages that allow layout to send
the embedder [accessibility tree
updates](https://docs.rs/accesskit/0.22.0/accesskit/struct.TreeUpdate.html):

- layout —[ ScriptThreadMessage::AccessibilityTreeUpdate ]→ script
- script —[ EmbedderMsg::AccessibilityTreeUpdate ]→ libservo
- libservo —[ WebViewDelegate::notify_accessibility_tree_update() ]→
servoshell
- servoshell —[ PlatformWindow::notify_accessibility_tree_update() ]→
servoshell
- servoshell —[ Gui::notify_accessibility_tree_update() ]→ servoshell

Testing: none yet, no functional change
Fixes: part of #4344

---------

Signed-off-by: delan azabani <dazabani@igalia.com>
Co-authored-by: Luke Warlow <lwarlow@igalia.com>
Co-authored-by: Alice Boxhall <alice@igalia.com>
2026-01-16 12:32:08 +00:00
Sam
89cfe15b3e script: use &mut CurrentRealm in cross_origin_has_own (#41955)
Testing: Just refactor, but covered by existing WPT tests.
Part of #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-16 11:05:26 +00:00
eri
9d35414386 devtools: Handle the setBreakpoint message. (#41925)
Listen for `setBreakpoint` on `debugger.js` and add the relevant WebIDLs
and Servo counterparts to trigger this event and notify SpiderMonkey.

Implement `find_source` for `SourceManager` and `find_offset` for
`SourceActor`.

Testing: Manual testing and `./mach test-devtools` (note, the latter
seems to have some failing tests, we are investigating this, but this
patch doesn't add any new failure).
Fixes: Part of #36027

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: atbrakhi <atbrakhi@igalia.com>
2026-01-16 10:17:55 +00:00
Euclid Ye
f8cca188fe webdriver: Rename source_id to input_id for Actions (#41948)
This should really be called
[`input_id`](https://w3c.github.io/webdriver/#dfn-get-an-input-source)
to avoid further confusion.

Testing: Just rename

Part of #41946

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-16 09:34:36 +00:00
Tim van der Lippe
85da46e5f8 Use published CSP crate (#41952)
All commits in our fork have landed upstream and they have published
0.6.0 containing those fixes. Therefore, this update should be a noop.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-16 07:22:16 +00:00
Tim van der Lippe
62d57d9833 script: Implement navigate to fragment algorithm (#41834)
Part of the navigate algorithm, it now performs the
fragment navigation after the history_behavior is
determined. It also updates the scrolling algorithm
to reflect what the specification expects.

With these changes, the test from the issue now
correctly scrolls to `Target`, but it doesn't update
the `scrollY` value for `window` and hence still
fails the test.

Part of #41807

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-16 07:15:35 +00:00
Kingsley Yung
5261e160c0 script: Move AES-KW to individual submodule (#41949)
We previously introduced new infrastructure for sharing code in
`aes_common.rs` among AES algorithms.

This patch makes AES-KW algorithm adapt the new infrastructure, by
moving the relevant code away from `aes_operation.rs` to its own
`aes_kw_operation.rs`, and calling AES common steps in the new
`aes_common.rs`.

Since all AES algorithms have been moved away from `aes_operation.rs`,
the file `aes_operation.rs` is also removed. The key handle variants
`Handle::Aes128`, `Handle::Aes192` and `Handle::Aes256` used by the old
AES infrastructure is also removed.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #41763

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-01-16 06:56:13 +00:00
Kingsley Yung
7f2abe4bdb script: Extend AES-GCM in WebCrypto to support more tag lengths (#41950)
We currently only support 128-bit tags for AES-GCM authenticated
decryption. This patch expands support to 96-bit, 104-bit, 112-bit, and
120-bit tags.

The specification recommends supporting 32-bit and 64-bit tags as well.
However, the `aes-gcm` crate currently does not support them. We may
need to look for a workaround or wait for updates from the upstream
project.

Testing: Pass some WPT tests that were expected to fail.

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-01-16 06:55:35 +00:00
dependabot[bot]
04139a2322 build: bump wasip2 from 1.0.1+wasi-0.2.4 to 1.0.2+wasi-0.2.9 (#41942)
Bumps [wasip2](https://github.com/bytecodealliance/wasi-rs) from
1.0.1+wasi-0.2.4 to 1.0.2+wasi-0.2.9.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="06ce201370"><code>06ce201</code></a>
Update to WASI 0.2.9 and 0.3.0-rc-2026-01-06 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/138">#138</a>)</li>
<li><a
href="c4fb486361"><code>c4fb486</code></a>
Update WIT vendoring source and wit-bindgen (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/137">#137</a>)</li>
<li><a
href="79b1ddf41a"><code>79b1ddf</code></a>
Bump wasip3 to 0.3.1 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/136">#136</a>)</li>
<li><a
href="f8693c2ce2"><code>f8693c2</code></a>
wit-bindgen async-spawn feature flag (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/1">#1</a>)
(<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/135">#135</a>)</li>
<li><a
href="a2d2afda93"><code>a2d2afd</code></a>
Bump wasip3 to 0.3.0 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/134">#134</a>)</li>
<li><a
href="92c5220595"><code>92c5220</code></a>
Update wit-bindgen to 0.48.0 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/133">#133</a>)</li>
<li><a
href="59f5c2c788"><code>59f5c2c</code></a>
Bump wasip3 to 0.2.2 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/131">#131</a>)</li>
<li><a
href="39548ce720"><code>39548ce</code></a>
drop write end of stream before writing trailers (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/130">#130</a>)</li>
<li><a
href="e022abb415"><code>e022abb</code></a>
Trim the docs a bit for http-compat (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/129">#129</a>)</li>
<li><a
href="3af11b8911"><code>3af11b8</code></a>
Bump wasip3 to 0.2.1 (<a
href="https://redirect.github.com/bytecodealliance/wasi-rs/issues/128">#128</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/bytecodealliance/wasi-rs/compare/wasip2-1.0.1...wasip2-1.0.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=wasip2&package-manager=cargo&previous-version=1.0.1+wasi-0.2.4&new-version=1.0.2+wasi-0.2.9)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-16 02:34:40 +00:00
dependabot[bot]
ebcf3d1260 build: bump urllib3 from 2.5.0 to 2.6.3 in /etc/ci/scenario (#41945)
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.5.0 to 2.6.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/releases">urllib3's
releases</a>.</em></p>
<blockquote>
<h2>2.6.3</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support. If your company or organization uses Python and
would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and
thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Fixed a security issue where decompression-bomb safeguards of the
streaming API were bypassed when HTTP redirects were followed.
(CVE-2026-21441 reported by <a
href="https://github.com/D47A"><code>@​D47A</code></a>, 8.9 High,
GHSA-38jv-5279-wg99)</li>
<li>Started treating <code>Retry-After</code> times greater than 6 hours
as 6 hours by default. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3743">urllib3/urllib3#3743</a>)</li>
<li>Fixed <code>urllib3.connection.VerifiedHTTPSConnection</code> on
Emscripten. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3752">urllib3/urllib3#3752</a>)</li>
</ul>
<h2>2.6.2</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support. If your company or organization uses Python and
would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and
thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Fixed <code>HTTPResponse.read_chunked()</code> to properly handle
leftover data in the decoder's buffer when reading compressed chunked
responses. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3734">urllib3/urllib3#3734</a>)</li>
</ul>
<h2>2.6.1</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support. If your company or organization uses Python and
would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and
thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Changes</h2>
<ul>
<li>Restore previously removed <code>HTTPResponse.getheaders()</code>
and <code>HTTPResponse.getheader()</code> methods. (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3731">#3731</a>)</li>
</ul>
<h2>2.6.0</h2>
<h2>🚀 urllib3 is fundraising for HTTP/2 support</h2>
<p><a
href="https://sethmlarson.dev/urllib3-is-fundraising-for-http2-support">urllib3
is raising ~$40,000 USD</a> to release HTTP/2 support and ensure
long-term sustainable maintenance of the project after a sharp decline
in financial support. If your company or organization uses Python and
would benefit from HTTP/2 support in Requests, pip, cloud SDKs, and
thousands of other projects <a
href="https://opencollective.com/urllib3">please consider contributing
financially</a> to ensure HTTP/2 support is developed sustainably and
maintained for the long-haul.</p>
<p>Thank you for your support.</p>
<h2>Security</h2>
<ul>
<li>Fixed a security issue where streaming API could improperly handle
highly compressed HTTP content (&quot;decompression bombs&quot;) leading
to excessive resource consumption even when a small amount of data was
requested. Reading small chunks of compressed data is safer and much
more efficient now. (CVE-2025-66471 reported by <a
href="https://github.com/Cycloctane"><code>@​Cycloctane</code></a>, 8.9
High, GHSA-2xpw-w6gg-jr37)</li>
<li>Fixed a security issue where an attacker could compose an HTTP
response with virtually unlimited links in the
<code>Content-Encoding</code> header, potentially leading to a denial of
service (DoS) attack by exhausting system resources during decoding. The
number of allowed chained encodings is now limited to 5. (CVE-2025-66418
reported by <a
href="https://github.com/illia-v"><code>@​illia-v</code></a>, 8.9 High,
GHSA-gm62-xv2j-4w53)</li>
</ul>
<blockquote>
<p>[!IMPORTANT]</p>
<ul>
<li>If urllib3 is not installed with the optional
<code>urllib3[brotli]</code> extra, but your environment contains a
Brotli/brotlicffi/brotlipy package anyway, make sure to upgrade it to at
least Brotli 1.2.0 or brotlicffi 1.2.0.0 to benefit from the security
fixes and avoid warnings. Prefer using <code>urllib3[brotli]</code> to
install a compatible Brotli package automatically.</li>
</ul>
</blockquote>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/urllib3/urllib3/blob/main/CHANGES.rst">urllib3's
changelog</a>.</em></p>
<blockquote>
<h1>2.6.3 (2026-01-07)</h1>
<ul>
<li>Fixed a high-severity security issue where decompression-bomb
safeguards of
the streaming API were bypassed when HTTP redirects were followed.
(<code>GHSA-38jv-5279-wg99
&lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-38jv-5279-wg99&gt;</code>__)</li>
<li>Started treating <code>Retry-After</code> times greater than 6 hours
as 6 hours by
default. (<code>[#3743](https://github.com/urllib3/urllib3/issues/3743)
&lt;https://github.com/urllib3/urllib3/issues/3743&gt;</code>__)</li>
<li>Fixed <code>urllib3.connection.VerifiedHTTPSConnection</code> on
Emscripten.
(<code>[#3752](https://github.com/urllib3/urllib3/issues/3752)
&lt;https://github.com/urllib3/urllib3/issues/3752&gt;</code>__)</li>
</ul>
<h1>2.6.2 (2025-12-11)</h1>
<ul>
<li>Fixed <code>HTTPResponse.read_chunked()</code> to properly handle
leftover data in
the decoder's buffer when reading compressed chunked responses.
(<code>[#3734](https://github.com/urllib3/urllib3/issues/3734)
&lt;https://github.com/urllib3/urllib3/issues/3734&gt;</code>__)</li>
</ul>
<h1>2.6.1 (2025-12-08)</h1>
<ul>
<li>Restore previously removed <code>HTTPResponse.getheaders()</code>
and
<code>HTTPResponse.getheader()</code> methods.
(<code>[#3731](https://github.com/urllib3/urllib3/issues/3731)
&lt;https://github.com/urllib3/urllib3/issues/3731&gt;</code>__)</li>
</ul>
<h1>2.6.0 (2025-12-05)</h1>
<h2>Security</h2>
<ul>
<li>Fixed a security issue where streaming API could improperly handle
highly
compressed HTTP content (&quot;decompression bombs&quot;) leading to
excessive resource
consumption even when a small amount of data was requested. Reading
small
chunks of compressed data is safer and much more efficient now.
(<code>GHSA-2xpw-w6gg-jr37
&lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-2xpw-w6gg-jr37&gt;</code>__)</li>
<li>Fixed a security issue where an attacker could compose an HTTP
response with
virtually unlimited links in the <code>Content-Encoding</code> header,
potentially
leading to a denial of service (DoS) attack by exhausting system
resources
during decoding. The number of allowed chained encodings is now limited
to 5.
(<code>GHSA-gm62-xv2j-4w53
&lt;https://github.com/urllib3/urllib3/security/advisories/GHSA-gm62-xv2j-4w53&gt;</code>__)</li>
</ul>
<p>.. caution::</p>
<ul>
<li>If urllib3 is not installed with the optional
<code>urllib3[brotli]</code> extra, but
your environment contains a Brotli/brotlicffi/brotlipy package anyway,
make
sure to upgrade it to at least Brotli 1.2.0 or brotlicffi 1.2.0.0 to
benefit from the security fixes and avoid warnings. Prefer using</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="0248277dd7"><code>0248277</code></a>
Release 2.6.3</li>
<li><a
href="8864ac407b"><code>8864ac4</code></a>
Merge commit from fork</li>
<li><a
href="70cecb27ca"><code>70cecb2</code></a>
Fix Scorecard issues related to vulnerable dev dependencies (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3755">#3755</a>)</li>
<li><a
href="41f249abe1"><code>41f249a</code></a>
Move &quot;v2.0 Migration Guide&quot; to the end of the table of
contents (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3747">#3747</a>)</li>
<li><a
href="fd4dffd2fc"><code>fd4dffd</code></a>
Patch <code>VerifiedHTTPSConnection</code> for Emscripten (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3752">#3752</a>)</li>
<li><a
href="13f0bfd55e"><code>13f0bfd</code></a>
Handle massive values in Retry-After when calculating time to sleep for
(<a
href="https://redirect.github.com/urllib3/urllib3/issues/3743">#3743</a>)</li>
<li><a
href="8c480bf87b"><code>8c480bf</code></a>
Bump actions/upload-artifact from 5.0.0 to 6.0.0 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3748">#3748</a>)</li>
<li><a
href="4b40616e95"><code>4b40616</code></a>
Bump actions/cache from 4.3.0 to 5.0.1 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3750">#3750</a>)</li>
<li><a
href="82b8479663"><code>82b8479</code></a>
Bump actions/download-artifact from 6.0.0 to 7.0.0 (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3749">#3749</a>)</li>
<li><a
href="34284cb017"><code>34284cb</code></a>
Mention experimental features in the security policy (<a
href="https://redirect.github.com/urllib3/urllib3/issues/3746">#3746</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/urllib3/urllib3/compare/2.5.0...2.6.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=urllib3&package-manager=uv&previous-version=2.5.0&new-version=2.6.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/servo/servo/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-16 01:48:51 +00:00
dependabot[bot]
81b05cad87 build: bump rustc-demangle from 0.1.26 to 0.1.27 (#41944)
Bumps [rustc-demangle](https://github.com/rust-lang/rustc-demangle) from
0.1.26 to 0.1.27.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/rustc-demangle/releases">rustc-demangle's
releases</a>.</em></p>
<blockquote>
<h2>rustc-demangle-v0.1.27</h2>
<h3>Other</h3>
<ul>
<li>Support v0 demangling of trait object types with assoc const
bindings</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/rustc-demangle/blob/main/CHANGELOG.md">rustc-demangle's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/rustc-demangle/compare/rustc-demangle-v0.1.26...rustc-demangle-v0.1.27">0.1.27</a>
- 2026-01-15</h2>
<h3>Other</h3>
<ul>
<li>Support v0 demangling of trait object types with assoc const
bindings</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f65a6d8f63"><code>f65a6d8</code></a>
chore(rustc-demangle): release v0.1.27</li>
<li><a
href="bce5e74d7c"><code>bce5e74</code></a>
Merge pull request <a
href="https://redirect.github.com/rust-lang/rustc-demangle/issues/87">#87</a>
from fmease/v0-dyn-trait-assoc-const-bindings</li>
<li><a
href="2631bdf638"><code>2631bdf</code></a>
Support v0 demangling of trait object types with assoc const
bindings</li>
<li>See full diff in <a
href="https://github.com/rust-lang/rustc-demangle/compare/rustc-demangle-v0.1.26...rustc-demangle-v0.1.27">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rustc-demangle&package-manager=cargo&previous-version=0.1.26&new-version=0.1.27)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-16 01:03:46 +00:00
dependabot[bot]
eb21a796eb build: bump cc from 1.2.51 to 1.2.52 (#41943)
Bumps [cc](https://github.com/rust-lang/cc-rs) from 1.2.51 to 1.2.52.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/releases">cc's
releases</a>.</em></p>
<blockquote>
<h2>cc-v1.2.52</h2>
<h3>Other</h3>
<ul>
<li>Fix contradictory doc for CC compiler in crate doc (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1650">#1650</a>)</li>
<li>Have CUDA compilaion check for sbsa-linux when targeting aarch64.
(<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1647">#1647</a>)</li>
<li>Update link for -Cdwarf-version; Remove -Z (stabilized in 1.88) (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1648">#1648</a>)</li>
<li>Fix Build::env_tool to check for .exe on windows (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1646">#1646</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md">cc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.51...cc-v1.2.52">1.2.52</a>
- 2026-01-09</h2>
<h3>Other</h3>
<ul>
<li>Fix contradictory doc for CC compiler in crate doc (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1650">#1650</a>)</li>
<li>Have CUDA compilaion check for sbsa-linux when targeting aarch64.
(<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1647">#1647</a>)</li>
<li>Update link for -Cdwarf-version; Remove -Z (stabilized in 1.88) (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1648">#1648</a>)</li>
<li>Fix Build::env_tool to check for .exe on windows (<a
href="https://redirect.github.com/rust-lang/cc-rs/pull/1646">#1646</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d0562c9e06"><code>d0562c9</code></a>
chore: release (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1651">#1651</a>)</li>
<li><a
href="c3ff4ea7c7"><code>c3ff4ea</code></a>
Fix contradictory doc for CC compiler in crate doc (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1650">#1650</a>)</li>
<li><a
href="c1055d8827"><code>c1055d8</code></a>
Have CUDA compilaion check for sbsa-linux when targeting aarch64. (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1647">#1647</a>)</li>
<li><a
href="7abc2e6ab9"><code>7abc2e6</code></a>
Update link for -Cdwarf-version; Remove -Z (stabilized in 1.88) (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1648">#1648</a>)</li>
<li><a
href="6b3e91bda1"><code>6b3e91b</code></a>
Fix Build::env_tool to check for .exe on windows (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1646">#1646</a>)</li>
<li><a
href="e7784c8ddf"><code>e7784c8</code></a>
Fix tool existence check in find_tool method (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1645">#1645</a>)</li>
<li><a
href="d1a3017520"><code>d1a3017</code></a>
Fix SdkInfo::find_tool to check for executable extension (<a
href="https://redirect.github.com/rust-lang/cc-rs/issues/1644">#1644</a>)</li>
<li>See full diff in <a
href="https://github.com/rust-lang/cc-rs/compare/cc-v1.2.51...cc-v1.2.52">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cc&package-manager=cargo&previous-version=1.2.51&new-version=1.2.52)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-16 00:56:47 +00:00
dependabot[bot]
993667248d build: bump bpaf from 0.9.20 to 0.9.21 (#41939)
Bumps [bpaf](https://github.com/pacak/bpaf) from 0.9.20 to 0.9.21.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pacak/bpaf/blob/master/Changelog.md">bpaf's
changelog</a>.</em></p>
<blockquote>
<h2>bpaf [0.9.21], bpaf_derive [0.5.21] - 2026-01-15</h2>
<ul>
<li>Documentation fixes</li>
<li>minor derive macro improvements</li>
<li>MSRV is now 1.60</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e47b375599"><code>e47b375</code></a>
Merge pull request <a
href="https://redirect.github.com/pacak/bpaf/issues/436">#436</a> from
pacak/rc-0.9.21</li>
<li><a
href="058e815f90"><code>058e815</code></a>
Release 0.9.21</li>
<li><a
href="53d1774de6"><code>53d1774</code></a>
Merge pull request <a
href="https://redirect.github.com/pacak/bpaf/issues/435">#435</a> from
unvalley/fix-quick-start-command</li>
<li><a
href="ab3a2431ae"><code>ab3a243</code></a>
chore: fix quick start cargo add command</li>
<li><a
href="5aef3d7def"><code>5aef3d7</code></a>
Merge pull request <a
href="https://redirect.github.com/pacak/bpaf/issues/433">#433</a> from
lu-zero/fix-warning</li>
<li><a
href="81ef625300"><code>81ef625</code></a>
Fix a remaining warning</li>
<li><a
href="26d34cfaaa"><code>26d34cf</code></a>
Merge pull request <a
href="https://redirect.github.com/pacak/bpaf/issues/432">#432</a> from
lu-zero/suppress-lint</li>
<li><a
href="b19d93183a"><code>b19d931</code></a>
Suppress enum_variant_names</li>
<li><a
href="3b0fba8ab6"><code>3b0fba8</code></a>
Merge pull request <a
href="https://redirect.github.com/pacak/bpaf/issues/431">#431</a> from
lu-zero/more-clippy-lints-addressed</li>
<li><a
href="f57a714f25"><code>f57a714</code></a>
Address more clippy lints</li>
<li>Additional commits viewable in <a
href="https://github.com/pacak/bpaf/compare/v0.9.20...v0.9.21">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=bpaf&package-manager=cargo&previous-version=0.9.20&new-version=0.9.21)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-16 00:27:15 +00:00
eri
8cf4955731 devtools: Correctly cache console messages (#41895)
Fix caching before the console is opened and stop sending messages
prematurely.

Fix line numbers not showing in console messages because of a missing
`rename_all`.

Remove `getCachedMessages` in favour of sending a list of messages as a
reply to the `watchResources` for `console-message`/`error-message` in
the watcher.

Remove `startListeners` and `stopListeners`. These are legacy methods of
watching properties before the watcher actor. It is preferred to enable
properties in `supported_resources` in the watcher than to use these
messages.

Remove `clearMessagesCache`, only `clearMessagesCacheAsync` seems to be
used now. Add a reply to `clearMessagesCacheAsync`.

Simplify a bit the structs for console messages and prefer serde's
annotations to manual serialization. Merge `handle_console_message` and
`handle_page_error`, and improve the usability of `ConsoleResource`.

Fix some fields in console messages. We are missing `source_id` for now.
This will be easier to add after better support for source actors. We
are also missing stack traces.

| Before | After |
| --- | --- |
| ![Console message list starting at 5 and counting up, showing the file
location but not the line
number](https://github.com/user-attachments/assets/b21159b4-1a95-46aa-9337-0004a922837c)
| ![Console message list starting at 1, showing both the file location
and line number. It says "Connected here" at message number
4](https://github.com/user-attachments/assets/f8ea1a7c-9262-4fa2-a882-cad35af9c2dc)
|

Testing: Manual testing
Fixes: #26666

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-15 21:41:07 +00:00
SeiRan
375c4f722b devtools: Restrict visibility of actors in devtools (#41935)
This change is to make visibility uniformly crate wide across all of the
structs and their props within devtools.

Testing: Tested using `.\mach build -d` `.\mach fmt` `.\mach test-tidy`
all passed
Part of: #41893

---------

Signed-off-by: Seiran <bo646ru@gmail.com>
2026-01-15 21:39:17 +00:00
Jonathan Schwender
bca2e2ca74 Move upload_nightly to a dedicated script (#41922)
Follow-up to https://github.com/servo/servo/pull/41882

This further reduces the amount of code that is involved in handling our
publishing.

Testing: Manual triggering of a test release [workflow
run](https://github.com/servo/servo/actions/runs/21026468888)

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-15 13:33:07 +00:00
atbrakhi
0112ffa812 devtools: Register workers in workers list, not tabs (#41929)
Devtools tests are failing on `./mach test-devtools`. Regression from
#41744

Testing: Manually tested

Signed-off-by: atbrakhi <atbrakhi@igalia.com>
2026-01-15 11:41:32 +00:00
Oriol Brufau
a5752da7d6 Upgrade Stylo to 2026-01-01 (#41916)
This continues #41696

Changelog:
- Upstream:
ab77635ba3...360787fff5
- Servo fixups:
0c47f9cb52...71737ad5c8

Stylo tracking issue: https://github.com/servo/stylo/issues/286

Testing: Various tests are now passing

---------

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-15 10:58:48 +00:00
Martin Robinson
5c76c529e1 layout: Add support for clicking past the end of multiline inputs (#41909)
Make it so that clicking past the end of the text of a multiline input,
moves the edit point to the end of that line. Now we evaluate all
potential target `TextFragment`s and find the most appropriate one,
putting the edit point there.

Testing: This updates expected test results for the `<textarea>`
clicking tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-01-15 08:11:12 +00:00
Domenico Rizzo
380884523a script: Move adapter dropping to a dedicated struct (#41911)
Moves the adapter dropping logic from the `GPUAdapter` struct to a new
`DroppableGPUAdapter` struct.

Testing: No tests added.
Fixes: Partially #26488

Signed-off-by: Domenico Rizzo <domenico.rizzo@gmail.com>
2026-01-15 07:13:52 +00:00
Jonathan Schwender
f0b2db0994 CI: Refactor nightly release process (#41882)
This change moves the upload and attestation steps to the nightly
workflow. This results in overall slightly more code, but reduces the
amount of code that has access to extra privileges.

Additionally, this refactoring will allow to easily change the target
repo for the nightly release, i.e. allowing us to reuse the nightly
workflow for our monthly releases in the servo/servo repo (in a
follow-up PR).

We change upload_nightly to get an additional `packages` parameter, that
we use instead of a hardcoded table of expected packages per platform.
`download-artifact` doesn't preserve the whole directory structure, so
it would be a bit cumbersome to preserve that.
Since we anyway only use the upload script in CI, we can just directly
specify the packages in the CI, which also makes things slightly more
flexibel if we want to add new packages or platforms.

There are still more improvements to come, specifically also to the
`upload_nightly` script, with the goal to minimize the amount of code
that needs to be trusted.

Testing: Manually triggering the [release
workflow](https://github.com/servo/servo/actions/runs/20996682863/job/60358012404)
via workflow-dispatch.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-15 07:10:18 +00:00
dependabot[bot]
c9b7ce0404 build: Force using CMake to build aws-lc-sys for Android + Bump aws-lc-rs 1.15.2 -> 1.15.3 (#41912)
There is a significant change, which replaced the CMake build with a new
cc builder. This does not work for Android, so we force CMake for
Android only. This is fine as we already set up CMake toolchain for
Android.

Bumps [aws-lc-rs](https://github.com/aws/aws-lc-rs) from 1.15.2 to
1.15.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aws/aws-lc-rs/releases">aws-lc-rs's
releases</a>.</em></p>
<blockquote>
<h2>aws-lc-rs v1.15.3</h2>
<h2>What's Changed</h2>
<ul>
<li>🎉 CMake no longer required for any targets 🎉 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/911">aws/aws-lc-rs#911</a>
<ul>
<li>For non-FIPS builds on all platforms only a C compiler is
required!</li>
</ul>
</li>
<li>impl Send for Streaming Keys by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/977">aws/aws-lc-rs#977</a></li>
<li><code>less_safe_update</code> for Streaming ciphers by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/991">aws/aws-lc-rs#991</a></li>
<li>aws-lc-fips-sys v0.13.11 aligns with <a
href="https://github.com/aws/aws-lc/releases/tag/AWS-LC-FIPS-3.1.0">AWS-LC-FIPS-3.1.0</a>
by <a href="https://github.com/justsmth"><code>@​justsmth</code></a> in
<a
href="https://redirect.github.com/aws/aws-lc-rs/pull/994">aws/aws-lc-rs#994</a></li>
</ul>
<h3>Build Improvements</h3>
<ul>
<li>Add support for i686-win7-windows target by <a
href="https://github.com/cstkingkey"><code>@​cstkingkey</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/988">aws/aws-lc-rs#988</a></li>
<li>Support mips &amp; rustc_codegen_cranelift compiler backend by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/986">aws/aws-lc-rs#986</a></li>
<li>Fix path formatting for build flags in cc_builder by <a
href="https://github.com/roobscoob"><code>@​roobscoob</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/989">aws/aws-lc-rs#989</a></li>
<li><code>disable-prebuilt-nasm</code> feature by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/997">aws/aws-lc-rs#997</a></li>
</ul>
<h3>Issues Being Closed</h3>
<ul>
<li>Disabling pre-built nasm binaries through feature flags
(aws-lc-rs/disable-prebuilt-nasm) -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/996">#996</a></li>
<li>StreamingDecryptingKey and StreamingEncryptingKey need useless extra
block in output -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/990">#990</a></li>
<li>build failure when targeting mips64el-unknown-linux-gnuabi64 or
i686-win7-windows-msvc -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/982">#982</a></li>
<li>build failure when targeting x86_64-pc-windows-msvc -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/981">#981</a></li>
<li>aws-lc-sys on ppc64le: undefined reference to
aws_lc_0_35_0_aes_hw_encrypt -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/980">#980</a></li>
<li>Can't send StreamingDecryptingKey between threads -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/975">#975</a></li>
<li>Remove cmake dependency for Windows -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/828">#828</a></li>
<li>Building aws-lc-sys under MSVC is brittle -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/780">#780</a></li>
<li>MSBUILD error MSB1009 install.vcxproj does not exist (but
INSTALL.vcxproj does) -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/772">#772</a></li>
<li>Other libraries that rely on AWS LC SYS do not compile properly in a
Windows environment -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/771">#771</a></li>
<li>Support aws-lc-sys on x86_64-unknown-freebsd without cmake -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/766">#766</a></li>
<li>Unable to build w/ rustc_codegen_cranelift compiler backend - <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/537">#537</a></li>
<li>No mips-unknown-linux-musl support -- <a
href="https://redirect.github.com/aws/aws-lc-rs/issues/522">#522</a></li>
</ul>
<h2>Other Merged PRs</h2>
<ul>
<li>Update toml_edit requirement from 0.23.0 to 0.24.0 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/976">aws/aws-lc-rs#976</a></li>
<li>Some CI jobs only run on pull-requests by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/970">aws/aws-lc-rs#970</a></li>
<li>More robust rustls integ test by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/973">aws/aws-lc-rs#973</a></li>
<li>Simplify build - no more rust_wrapper lib by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/978">aws/aws-lc-rs#978</a></li>
<li>PR feedback + cleanup -- run-rustls-integration.sh by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/979">aws/aws-lc-rs#979</a></li>
<li>Prepare aws-lc-sys v0.36.0 by <a
href="https://github.com/justsmth"><code>@​justsmth</code></a> in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/992">aws/aws-lc-rs#992</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/cstkingkey"><code>@​cstkingkey</code></a> made
their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/988">aws/aws-lc-rs#988</a></li>
<li><a href="https://github.com/roobscoob"><code>@​roobscoob</code></a>
made their first contribution in <a
href="https://redirect.github.com/aws/aws-lc-rs/pull/989">aws/aws-lc-rs#989</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3">https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="efaf569ec6"><code>efaf569</code></a>
Prepare aws-lc-rs v1.15.3 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/998">#998</a>)</li>
<li><a
href="4c475059eb"><code>4c47505</code></a>
disable-prebuilt-nasm feature (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/997">#997</a>)</li>
<li><a
href="8aef7a7ef2"><code>8aef7a7</code></a>
<code>less_safe_update</code> for Streaming ciphers (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/991">#991</a>)</li>
<li><a
href="d4c164669f"><code>d4c1646</code></a>
Prepare aws-lc-fips-sys v0.13.11 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/994">#994</a>)</li>
<li><a
href="9bd808d3bf"><code>9bd808d</code></a>
Prepare aws-lc-sys v0.36.0 (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/992">#992</a>)</li>
<li><a
href="63f2243e35"><code>63f2243</code></a>
Fix path formatting for build flags in cc_builder (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/989">#989</a>)</li>
<li><a
href="607fa7d1f8"><code>607fa7d</code></a>
Support mips &amp; rustc_codegen_cranelift compiler backend (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/986">#986</a>)</li>
<li><a
href="dbb7d2e77d"><code>dbb7d2e</code></a>
Eliminate CMake Requirement (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/911">#911</a>)</li>
<li><a
href="1cec9de4bf"><code>1cec9de</code></a>
Add support for i686-win7-windows target (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/988">#988</a>)</li>
<li><a
href="e0aa4187a8"><code>e0aa418</code></a>
PR feedback + cleanup -- run-rustls-integration.sh (<a
href="https://redirect.github.com/aws/aws-lc-rs/issues/979">#979</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/aws/aws-lc-rs/compare/v1.15.2...v1.15.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=aws-lc-rs&package-manager=cargo&previous-version=1.15.2&new-version=1.15.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-15 02:15:57 +00:00
dependabot[bot]
3476af6b52 build(deps): bump chrono from 0.4.42 to 0.4.43 (#41915)
Bumps [chrono](https://github.com/chronotope/chrono) from 0.4.42 to
0.4.43.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/chronotope/chrono/releases">chrono's
releases</a>.</em></p>
<blockquote>
<h2>0.4.43</h2>
<h2>What's Changed</h2>
<ul>
<li>Install extra components for lint workflow by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1741">chronotope/chrono#1741</a></li>
<li>Upgrade windows-bindgen to 0.64 by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1742">chronotope/chrono#1742</a></li>
<li>Improve windows-bindgen setup by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1744">chronotope/chrono#1744</a></li>
<li>Drop stabilized feature doc_auto_cfg by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1745">chronotope/chrono#1745</a></li>
<li>Faster RFC 3339 parsing by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1748">chronotope/chrono#1748</a></li>
<li>Update windows-bindgen requirement from 0.64 to 0.65 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/chronotope/chrono/pull/1751">chronotope/chrono#1751</a></li>
<li>add <code>NaiveDate::abs_diff</code> by <a
href="https://github.com/Kinrany"><code>@​Kinrany</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1752">chronotope/chrono#1752</a></li>
<li>Add feature gated defmt support. by <a
href="https://github.com/pebender"><code>@​pebender</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1747">chronotope/chrono#1747</a></li>
<li>Drop deny lints, eager Debug impls are a mixed blessing by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1753">chronotope/chrono#1753</a></li>
<li>chore: minor improvement for docs by <a
href="https://github.com/spuradage"><code>@​spuradage</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1756">chronotope/chrono#1756</a></li>
<li>Added doctest for the NaiveDate years_since function by <a
href="https://github.com/LucasBou"><code>@​LucasBou</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1755">chronotope/chrono#1755</a></li>
<li>Prepare 0.4.43 by <a
href="https://github.com/djc"><code>@​djc</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1765">chronotope/chrono#1765</a></li>
<li>Update copyright year to 2026 in LICENSE.txt by <a
href="https://github.com/taozui472"><code>@​taozui472</code></a> in <a
href="https://redirect.github.com/chronotope/chrono/pull/1767">chronotope/chrono#1767</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="45caaa970c"><code>45caaa9</code></a>
Update copyright year to 2026 in LICENSE.txt</li>
<li><a
href="1c0b8f011a"><code>1c0b8f0</code></a>
Bump version to 0.4.43</li>
<li><a
href="a03e43b1c3"><code>a03e43b</code></a>
Upgrade windows-bindgen to 0.66</li>
<li><a
href="4fedaba2a2"><code>4fedaba</code></a>
Ignore bincode advisory</li>
<li><a
href="f4b7bbda67"><code>f4b7bbd</code></a>
Bump actions/checkout from 5 to 6</li>
<li><a
href="db129730e8"><code>db12973</code></a>
Added doctest for the NaiveDate years_since function (<a
href="https://redirect.github.com/chronotope/chrono/issues/1755">#1755</a>)</li>
<li><a
href="34b5f49e9d"><code>34b5f49</code></a>
chore: minor improvement for docs</li>
<li><a
href="8c827116b9"><code>8c82711</code></a>
Bump actions/setup-node from 5 to 6</li>
<li><a
href="ea1f11b356"><code>ea1f11b</code></a>
Drop deny lints, eager Debug impls are a mixed blessing</li>
<li><a
href="35f9f2daef"><code>35f9f2d</code></a>
Add feature gated defmt support.</li>
<li>Additional commits viewable in <a
href="https://github.com/chronotope/chrono/compare/v0.4.42...v0.4.43">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=chrono&package-manager=cargo&previous-version=0.4.42&new-version=0.4.43)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-15 01:03:52 +00:00
Jonathan Schwender
66d8601c81 servoshell: ohos / android: Decouple initialization and window creation (#41532)
We can start initializing servo without needing to wait for the
creation of a window.
This allows us to perform initialization of servo itself,
concurrently to the app UI thread setting up the app UI.
Once the native window is ready, we can then let servo create
the first window and load the initial URL.
This is also interesting in the context of using servo as a
webview library, where loading the library / initialising the
webview and loading the first url are typically decoupled
steps.

Note: on the android port the Java code is not touched, which means that
we effectively still
perform the initialization at the same point in time on android. 
The change to call the base servo initialiation from the Java app, can
be done in a seperate PR, perhaps by someone more familiar with android
than me.

Follow-up PRs will add multi-window support, which means that some of
the multi-webview related code in this PR has open todos,
which will be addressed by follow-ups.



Testing: The ohos-port is tested in CI, the android port was manually
tested by me.

---------

Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
2026-01-14 16:21:18 +00:00
Oriol Brufau
e58bdc03f9 layout: Track parentage in the box tree (#41884)
This patch adds a weak reference to the parent box in `LayoutBoxBase`,
so that boxes can refer to their parent. This will help during future
changes for incremental layout.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-14 14:40:12 +00:00
Martin Robinson
d5dcdd6e06 script: Add support for setting the edit point with the mouse in <input> and <textarea> (#41906)
This change updates and implements the old `query_text_index` layout
query to properly look for the glyph index of a point within a node's
`Fragment`s. This should work properly with the shadow DOM of both
`<input>` and `<textarea>` elements. In particular, multiple lines are
supported.

Caveats:
 - `<input>` and `<textarea>` that are transformed are currently not
   supported. This will happen in a followup.
 - For multi-line inputs, we should be finding the text offset of the
   nearest line that is within the block range of the click. This will
   happen in a followup.

Testing: This change adds two Servo-specific WPT-style tests. These are
Servo-specific because the behavior of clicking in text fields isn't
fully specified.

Fixes: #35432
Fixes: #10083

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Josh Matthews <josh@joshmatthews.net>
Co-authored-by: Oriol Brufau <obrufau@igalia.com>
2026-01-14 13:23:43 +00:00
Laurent Belmonte
0dc28296e0 script: Some failed requests should record resource timing entries (#41804)
Some failed requests should record resource timing entries

Testing: ./mach test-wpt
tests/wpt/tests/resource-timing/entries-for-network-errors.sub.https.html
Fixes: https://github.com/servo/servo/issues/41667

---------

Signed-off-by: bellau <laurent.belmonte@gmail.com>
2026-01-14 13:20:12 +00:00
César Danilo Pedraza Montoya
77a1a2546c script: Add error messages in ed25519_operation.rs (#41902)
Add all the missing error messages in `ed25519_operation.rs`. Followed
the other implementations of `importKey`, `exportKey` and others to try
and follow the same style. Related to #40756.

Testing: No tests added, did some manual tests

---------

Signed-off-by: César Pedraza <cpedraza@unal.edu.co>
2026-01-14 13:15:25 +00:00
Kingsley Yung
b7d0503d60 script: Move AES-GCM to individual submodule (#41908)
We previously introduced new infrastructure for sharing code in
`aes_common.rs` among AES algorithms.

Similar to #41856 on AES-CTR and #41883 on AES-CBC, this patch makes
AES-GCM algorithm adapt the new infrastructure, by moving the relevant
code away from `aes_operation.rs` to its own `aes_gcm_operation.rs`, and
calling AES common steps in the new `aes_common.rs`.

The patch also re-wrote the encrypt and decrypt operations of AES-GCM to
properly handle different tag lengths. This helps extend our support on
more tag lengths later, in order pass more WPT tests.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #41763

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-01-14 13:08:10 +00:00
eri
9e11c6bfcf devtools: Hide extension-backgroundscript-status warning (#41886)
A warning has been showing up every time the DevTools client was
connected in Firefox Browser Console. Now not only the watcher can watch
resources, the root actor can too. Firefox was complaining about
[`extensions-backgroundscript-status`](https://searchfox.org/firefox-main/source/devtools/server/actors/resources/extensions-backgroundscript-status.js).
We don't have extensions running in the background, but even if we set
it to false, the warning persists. So instead this patch adds
boilerplate to "handle" this watch request.

Testing: Manual testing

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-14 09:56:45 +00:00
shuppy
dbc8663f34 mach: mark the doc.servo.org site as .nojekyll (#41904)
[doc.servo.org](https://doc.servo.org) deploys have been failing for
over a month (servo/doc.servo.org#6), because the runners for the
built-in “pages-build-deployment” workflow consistently run out of disk
space.

this patch tries to fix that by adding a `.nojekyll` file, which tells
the workflow [not to run
jekyll](https://docs.github.com/en/pages/getting-started-with-github-pages/creating-a-github-pages-site#static-site-generators).

Testing: it works if [this
workflow](https://github.com/servo/doc.servo.org/actions/workflows/pages/pages-build-deployment)
succeeds
Fixes: hopefully servo/doc.servo.org#6

Signed-off-by: Delan Azabani <dazabani@igalia.com>
2026-01-14 07:35:00 +00:00
Kingsley Yung
91843d928e script: Move AES-CBC to individual submodule (#41883)
We previously introduced new infrastructure for sharing code in
`aes_common.rs` among AES algorithms.

Similar to #41856 on AES-CTR, this patch makes AES-CBC algorithm adapt
the new infrastructure, by moving the relevant code away from
`aes_operation.rs` to its own `aes_cbc_operation.rs`, and calling AES
common steps in the new `aes_common.rs`. The patch also does some
refactoring on the encrypt and decrypt operations to get closer to
specification.

Testing: Refactoring. Existing tests suffice.
Fixes: Part of #41763

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-01-14 07:03:25 +00:00
Sam
9dc94f3bb9 CI: use git log to obtain latest commit SHA (#41903)
`git rev-parse HEAD` returns wrong value for some reason, so let's use
`git log -1 --format=%H` that is also used by checkout action.

Testing: Try label run reports proper commit:
https://github.com/servo/servo/actions/runs/20983860831/job/60315834713#step:9:1567
Fixes: #41489

Signed-off-by: Sam <16504129+sagudev@users.noreply.github.com>
2026-01-14 06:29:05 +00:00
webbeef
6ee1b43e45 bhm: improve shutdown sequence (#41862)
Instead of exiting immediately when control_port disconnects, the BHM
now:
1. Signals all registered components to exit
2. Enter shut down state by turning off the control_port
3. Runs untils self.port disconnects

Testing: Manual testing with `./mach run -M` and checking the lack of
shutdown crash.
Fixes: https://github.com/servo/servo/issues/41437

cc @gterzian

Signed-off-by: webbeef <me@webbeef.org>
2026-01-14 01:01:36 +00:00
dependabot[bot]
089771c299 build(deps): bump time from 0.3.44 to 0.3.45 (#41901)
Bumps [time](https://github.com/time-rs/time) from 0.3.44 to 0.3.45.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/time-rs/time/releases">time's
releases</a>.</em></p>
<blockquote>
<h2>v0.3.45</h2>
<p>See the <a
href="https://github.com/time-rs/time/blob/main/CHANGELOG.md">changelog</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/time-rs/time/blob/main/CHANGELOG.md">time's
changelog</a>.</em></p>
<blockquote>
<h2>0.3.45 [2026-01-13]</h2>
<h3>Added</h3>
<ul>
<li><code>time::format_description::StaticFormatDescription</code> type
alias for <code>&amp;'static [BorrowedFormatItem&lt;'static&gt;]</code>.
This is the type returned by the
<code>time::macros::format_description!</code> macro.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>The minimum supported Rust version is now 1.83.0.</li>
<li>All floating point methods on <code>Duration</code> are now
<code>const fn</code>.</li>
<li>All setters on <code>Parsed</code> are now <code>const
fn</code>.</li>
<li>The <code>serde</code> dependency has been replaced with
<code>serde_core</code>, This reduces compile times by not
including unused parts of <code>serde</code>.</li>
<li><code>Date::from_julian_day</code> uses a new algorithm, resulting
in an approximately 16% performance
improvement. This method is used internally by numerous other
methods.</li>
<li><code>util::is_leap_year</code> uses a new algorithm, resulting in
an approximately 8% performance
improvement.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d41b5e129b"><code>d41b5e1</code></a>
v0.3.45 release</li>
<li><a
href="69db9fb7a3"><code>69db9fb</code></a>
Add noop to utils benchmark</li>
<li><a
href="30ba933a21"><code>30ba933</code></a>
Change <code>from_julian_day</code> algorithm</li>
<li><a
href="267d847a5e"><code>267d847</code></a>
Change leap year algorithm</li>
<li><a
href="41e21efa6e"><code>41e21ef</code></a>
Make util tests more opaque</li>
<li><a
href="8f5981a4da"><code>8f5981a</code></a>
Test whether every year 0-399 is leap year</li>
<li><a
href="6365c4cd6a"><code>6365c4c</code></a>
Improve accuracy of <code>Date</code> benchmarks</li>
<li><a
href="a4fc845886"><code>a4fc845</code></a>
Dependency upgrade</li>
<li><a
href="c468474643"><code>c468474</code></a>
Rename lints for latest rustc</li>
<li><a
href="037af660d7"><code>037af66</code></a>
Add type alias for <code>format_description!</code> output</li>
<li>Additional commits viewable in <a
href="https://github.com/time-rs/time/compare/v0.3.44...v0.3.45">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=time&package-manager=cargo&previous-version=0.3.44&new-version=0.3.45)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 01:00:17 +00:00
dependabot[bot]
3fc8ca66c9 build(deps): bump gilrs from 0.11.0 to 0.11.1 (#41900)
Bumps [gilrs](https://gitlab.com/gilrs-project/gilrs) from 0.11.0 to
0.11.1.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://gitlab.com/gilrs-project/gilrs/commits/master">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=gilrs&package-manager=cargo&previous-version=0.11.0&new-version=0.11.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 00:53:25 +00:00
dependabot[bot]
141fc9f69f build(deps): bump web_atoms from 0.2.0 to 0.2.1 (#41899)
Bumps [web_atoms](https://github.com/servo/html5ever) from 0.2.0 to
0.2.1.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="13bcf7cb6a"><code>13bcf7c</code></a>
v0.2.1</li>
<li><a
href="d8c698a9b7"><code>d8c698a</code></a>
Have Travis-CI also test on stable Rust</li>
<li><a
href="eeaca13859"><code>eeaca13</code></a>
Make tests runable on stable Rust...</li>
<li><a
href="6ea0dfd257"><code>6ea0dfd</code></a>
Merge the test_util crate into the main crate.</li>
<li><a
href="9d53fe795b"><code>9d53fe7</code></a>
Move dom_sink::rcdom into the main crate, remove
dom_sink::owned_dom.</li>
<li><a
href="8c7cc6f11b"><code>8c7cc6f</code></a>
Build on Rust stable</li>
<li><a
href="beeec3ded0"><code>beeec3d</code></a>
Ship a copy of rules.rs with match_token! pre-expanded.</li>
<li><a
href="dfc9d214d7"><code>dfc9d21</code></a>
Use phf_codegen instead of a plugin.</li>
<li><a
href="02312cba4a"><code>02312cb</code></a>
Remove usage of some unstable features.</li>
<li><a
href="744e41191d"><code>744e411</code></a>
Auto merge of <a
href="https://redirect.github.com/servo/html5ever/issues/150">#150</a> -
servo:dom_sink_doc, r=SimonSapin</li>
<li>Additional commits viewable in <a
href="https://github.com/servo/html5ever/compare/v0.2.0...v0.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=web_atoms&package-manager=cargo&previous-version=0.2.0&new-version=0.2.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 00:45:46 +00:00
dependabot[bot]
8dd546b6a5 build(deps): bump libc from 0.2.179 to 0.2.180 (#41898)
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.179 to 0.2.180.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/releases">libc's
releases</a>.</em></p>
<blockquote>
<h2>0.2.180</h2>
<h3>Added</h3>
<ul>
<li>QNX: Add missing BPF and ifreq structures (<a
href="https://redirect.github.com/rust-lang/libc/pull/4769">#4769</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Linux, L4Re: address soundness issues of <code>CMSG_NXTHDR</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4903">#4903</a>)</li>
<li>Linux-like: Handle zero-sized payload differences in
<code>CMSG_NXTHDR</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4903">#4903</a>)</li>
<li>Musl: Fix incorrect definitions of struct stat on some 32-bit
architectures (<a
href="https://redirect.github.com/rust-lang/libc/pull/4914">#4914</a>)</li>
<li>NetBSD: RISC-V 64: Correct <code>mcontext</code> type definitions
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4886">#4886</a>)</li>
<li>uClibc: Re-enable <code>__SIZEOF_PTHREAD_COND_T</code> on non-L4Re
uclibc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4915">#4915</a>)</li>
<li>uClibc: Restructure Linux <code>netlink</code> module to resolve
build errors (<a
href="https://redirect.github.com/rust-lang/libc/pull/4915">#4915</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/libc/blob/0.2.180/CHANGELOG.md">libc's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/rust-lang/libc/compare/0.2.179...0.2.180">0.2.180</a>
- 2026-01-08</h2>
<h3>Added</h3>
<ul>
<li>QNX: Add missing BPF and ifreq structures (<a
href="https://redirect.github.com/rust-lang/libc/pull/4769">#4769</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Linux, L4Re: address soundness issues of <code>CMSG_NXTHDR</code>
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4903">#4903</a>)</li>
<li>Linux-like: Handle zero-sized payload differences in
<code>CMSG_NXTHDR</code> (<a
href="https://redirect.github.com/rust-lang/libc/pull/4903">#4903</a>)</li>
<li>Musl: Fix incorrect definitions of struct stat on some 32-bit
architectures (<a
href="https://redirect.github.com/rust-lang/libc/pull/4914">#4914</a>)</li>
<li>NetBSD: RISC-V 64: Correct <code>mcontext</code> type definitions
(<a
href="https://redirect.github.com/rust-lang/libc/pull/4886">#4886</a>)</li>
<li>uClibc: Re-enable <code>__SIZEOF_PTHREAD_COND_T</code> on non-L4Re
uclibc (<a
href="https://redirect.github.com/rust-lang/libc/pull/4915">#4915</a>)</li>
<li>uClibc: Restructure Linux <code>netlink</code> module to resolve
build errors (<a
href="https://redirect.github.com/rust-lang/libc/pull/4915">#4915</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="4b38c69e31"><code>4b38c69</code></a>
chore: release libc 0.2.180</li>
<li><a
href="300e643884"><code>300e643</code></a>
qnx: add missing BPF and ifreq structures</li>
<li><a
href="12fd831dff"><code>12fd831</code></a>
ci: Add rtems to basic tier 3 checks</li>
<li><a
href="b062844024"><code>b062844</code></a>
Only test addresses of cmsghdrs that are multiples of the size of
cmsghdr.</li>
<li><a
href="676a4f8fd4"><code>676a4f8</code></a>
linux: Move <code>membarrier.h</code> constants to
<code>src/new</code></li>
<li><a
href="0803faeb89"><code>0803fae</code></a>
linux: Restructure <code>netlink</code> to <code>src/new</code></li>
<li><a
href="72f4c1a5db"><code>72f4c1a</code></a>
uclibc: Re-enable <code>__SIZEOF_PTHREAD_COND_T</code> on non-L4Re
uclibc</li>
<li><a
href="757e55a3f0"><code>757e55a</code></a>
netbsd/riscv64.rs: make changes so that this builds again.</li>
<li><a
href="042f118911"><code>042f118</code></a>
musl: Fix incorrect definitions of struct stat on some
architectures</li>
<li><a
href="03755c4f70"><code>03755c4</code></a>
linux, emscripten, android, l4re: handle zero-sized payload differences
in CM...</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/libc/compare/0.2.179...0.2.180">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=libc&package-manager=cargo&previous-version=0.2.179&new-version=0.2.180)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-14 00:35:36 +00:00
Narfinger
d40c5fc9e1 net: Set a timeout for connecting (#41710)
This PR sets a timeout for the connecting part of hyper that is
configurable via the prefs.
The timeout is currently set to 15 seconds which should be enough.


This fixes an interesting potential hang for the following specific
situation:
- Load a Document that has some subresource (such as images) from a
String.
- The subresource is on a domain that a restricted internet might not
resolve.
- The connection hangs and does not change the LoadStatus of the
document as it is blocked by the subresource.

Testing: This fixes issues with the 'test_contextual_context_menu_items'
when running with a misbehaving proxy.

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 23:59:53 +00:00
Euclid Ye
c21039257f webdriver: Dispatch embedder TouchEventType::Move (#41801)
Fixes: #41725 
Fixes: #41620 
Fixes: #39264
Fixes: #41250

Testing: Multiple new passing. Several tests that NOT RUN starts
running.
Several new CRASH are actually
```
 0:25.43 INFO Browser not responding, setting status to CRASH
 0:25.43 TEST_END: CRASH, expected OK
```
, which is no regression because these tests were FAIL, ERROR or
TIMEOUT.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-13 22:25:40 +00:00
Oriol Brufau
0aae90ffe8 layout: Let floats know that margins can collapse thru phantom lines (#41812)
Phantom line boxes allow margins to collapse through them. But in the
sequential layout state we were assuming that was not the case, so we
were placing floats incorrectly.

Testing: Adding 2 tests
Fixes: #41794
Fixes: #41734

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
2026-01-13 19:25:53 +00:00
dependabot[bot]
12bc683938 build(deps): bump getrandom from 0.2.16 to 0.2.17 (#41889)
Bumps [getrandom](https://github.com/rust-random/getrandom) from 0.2.16
to 0.2.17.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-random/getrandom/blob/master/CHANGELOG.md">getrandom's
changelog</a>.</em></p>
<blockquote>
<h2>[0.2.17] - 2026-01-12</h2>
<h3>Fixed</h3>
<ul>
<li>Use <code>doc_cfg</code> instead of <code>doc_auto_cfg</code>
(partial backport of <a
href="https://redirect.github.com/rust-random/getrandom/issues/732">#732</a>)
<a
href="https://redirect.github.com/rust-random/getrandom/issues/768">#768</a></li>
<li><code>BCryptGenRandom</code> signature <a
href="https://redirect.github.com/rust-random/getrandom/issues/778">#778</a></li>
</ul>
<p><a
href="https://redirect.github.com/rust-random/getrandom/issues/732">#732</a>:
<a
href="https://redirect.github.com/rust-random/getrandom/pull/732">rust-random/getrandom#732</a>
<a
href="https://redirect.github.com/rust-random/getrandom/issues/768">#768</a>:
<a
href="https://redirect.github.com/rust-random/getrandom/pull/768">rust-random/getrandom#768</a>
<a
href="https://redirect.github.com/rust-random/getrandom/issues/778">#778</a>:
<a
href="https://redirect.github.com/rust-random/getrandom/pull/778">rust-random/getrandom#778</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b625985d85"><code>b625985</code></a>
Release 0.2.17 (<a
href="https://redirect.github.com/rust-random/getrandom/issues/774">#774</a>)</li>
<li><a
href="e7200ad523"><code>e7200ad</code></a>
windows: fix <code>BCryptGenRandom</code> signature (<a
href="https://redirect.github.com/rust-random/getrandom/issues/778">#778</a>)</li>
<li><a
href="3ae6e75289"><code>3ae6e75</code></a>
Backport <a
href="https://redirect.github.com/rust-random/getrandom/issues/768">#768</a>
(doc_cfg)</li>
<li>See full diff in <a
href="https://github.com/rust-random/getrandom/compare/v0.2.16...v0.2.17">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=getrandom&package-manager=cargo&previous-version=0.2.16&new-version=0.2.17)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 19:24:36 +00:00
eri
41db8d9111 devtools: Consolidate register/register_later (#41796)
Replace `RefCell` with `AtomicRefCell` for structs implementing Actor,
making them `Sync`.

Consolidate `register` and `register_later` into a single function,
removing the need to wait for a loop before accessing newly created
actors.

Now `ActorRegsitry` has improved locking. Instead of locking the entire
struct, each member can be locked separately. Additionally, since `find`
now returns `Arc`, we can `find` and `register` multiple actors
depending on each other, since the lock is only needed for the operation
and we can keep the reference after that.

Depends on: #41741, #41744
Testing: Manual testing

---------

Signed-off-by: eri <eri@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 19:24:30 +00:00
dependabot[bot]
7977b47e27 build(deps): bump zmij from 1.0.13 to 1.0.14 (#41887)
Bumps [zmij](https://github.com/dtolnay/zmij) from 1.0.13 to 1.0.14.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="087056977f"><code>0870569</code></a>
Release 1.0.14</li>
<li><a
href="fa58fe13a7"><code>fa58fe1</code></a>
Sync to vitaut/zmij@7058822</li>
<li><a
href="676660762f"><code>6766607</code></a>
Add macos-latest CI job</li>
<li><a
href="575b7fc1f3"><code>575b7fc</code></a>
Sync to vitaut/zmij@398b264</li>
<li><a
href="38e40d5671"><code>38e40d5</code></a>
Sync to vitaut/zmij@192698d</li>
<li><a
href="5048bd10de"><code>5048bd1</code></a>
Sync to vitaut/zmij@84b3714</li>
<li>See full diff in <a
href="https://github.com/dtolnay/zmij/compare/1.0.13...1.0.14">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=zmij&package-manager=cargo&previous-version=1.0.13&new-version=1.0.14)](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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 18:01:41 +00:00
dependabot[bot]
ae793a436e build(deps): bump base64ct from 1.8.2 to 1.8.3 (#41892)
Bumps [base64ct](https://github.com/RustCrypto/formats) from 1.8.2 to
1.8.3.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9adf88fe3e"><code>9adf88f</code></a>
base64ct v1.8.3 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2169">#2169</a>)</li>
<li><a
href="51726c29e9"><code>51726c2</code></a>
base64ct: add <code>Base64Pbkdf2</code> (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2168">#2168</a>)</li>
<li><a
href="ce44931298"><code>ce44931</code></a>
pkcs12 v0.2.0-pre.0 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2167">#2167</a>)</li>
<li><a
href="8d41f6add1"><code>8d41f6a</code></a>
cms v0.3.0-pre.1 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2166">#2166</a>)</li>
<li><a
href="47d1a07597"><code>47d1a07</code></a>
pkcs5: bump <code>pbkdf2</code> and <code>scrypt</code> (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2165">#2165</a>)</li>
<li><a
href="ea1efe1a4b"><code>ea1efe1</code></a>
chore(deps): bump elliptic-curve from <code>0.14.0-rc.19</code> to
<code>0.14.0-rc.21</code> (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2164">#2164</a>)</li>
<li><a
href="e5c7e4c110"><code>e5c7e4c</code></a>
const-oid v0.10.2 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2163">#2163</a>)</li>
<li><a
href="8b9ae298c6"><code>8b9ae29</code></a>
chore(deps): bump the all-deps group with 8 updates (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2161">#2161</a>)</li>
<li><a
href="16aca51552"><code>16aca51</code></a>
chore(deps): bump crate-ci/typos from 1.40.0 to 1.41.0 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2160">#2160</a>)</li>
<li><a
href="7d46f25f9b"><code>7d46f25</code></a>
Bump <code>rand</code> to v0.10.0-rc.6 (<a
href="https://redirect.github.com/RustCrypto/formats/issues/2159">#2159</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/RustCrypto/formats/compare/base64ct/v1.8.2...base64ct/v1.8.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=base64ct&package-manager=cargo&previous-version=1.8.2&new-version=1.8.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 17:57:37 +00:00
dependabot[bot]
f35445b5da build(deps): bump clap_lex from 0.7.6 to 0.7.7 (#41888)
Bumps [clap_lex](https://github.com/clap-rs/clap) from 0.7.6 to 0.7.7.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap_lex's
changelog</a>.</em></p>
<blockquote>
<h1>Change Log</h1>
<p>All notable changes to this project will be documented in this
file.</p>
<p>The format is based on <a href="https://keepachangelog.com/">Keep a
Changelog</a>
and this project adheres to <a href="https://semver.org/">Semantic
Versioning</a>.</p>
<h2>5.0.0 - TBD</h2>
<p><em>available through <code>unstable-v5</code> feature flag</em></p>
<h3>Breaking Changes</h3>
<ul>
<li>Made <code>ArgPredicate</code> <code>non_exhaustive</code></li>
<li><em>(help)</em> Change default <code>Command::term_width</code> to
&quot;source format&quot;</li>
<li><em>(help)</em> Change default <code>Command::max_term_width</code>
to 100</li>
<li><em>(derive)</em> <code>Vec&lt;Vec&lt;T&gt;&gt;</code> types are now
assuming to capture occurrences</li>
<li><em>(derive)</em> <code>ValueEnum</code> variants now use the full
doc comment, not summary, for <code>PossibleValue::help</code></li>
</ul>
<h3>Features</h3>
<ul>
<li><em>(derive)</em> Group values by their occurrence with
<code>Vec&lt;Vec&lt;T&gt;&gt;</code></li>
</ul>
<!-- raw HTML omitted -->
<h2>[Unreleased] - ReleaseDate</h2>
<h2>[4.5.54] - 2026-01-02</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Move <code>[default]</code> to its own paragraph
when <code>PossibleValue::help</code> is present in
<code>--help</code></li>
</ul>
<h2>[4.5.53] - 2025-11-19</h2>
<h3>Features</h3>
<ul>
<li>Add <code>default_values_if</code>,
<code>default_values_ifs</code></li>
</ul>
<h2>[4.5.52] - 2025-11-17</h2>
<h3>Fixes</h3>
<ul>
<li>Don't panic when <code>args_conflicts_with_subcommands</code>
conflicts with an <code>ArgGroup</code></li>
</ul>
<h2>[4.5.51] - 2025-10-29</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Correctly calculate padding for short flags that
take a value</li>
<li><em>(help)</em> Don't panic on short flags using
<code>ArgAction::Count</code></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="087edda9a4"><code>087edda</code></a>
chore: Release</li>
<li><a
href="f652f4d76b"><code>f652f4d</code></a>
docs: Update changelog</li>
<li><a
href="8e75826e91"><code>8e75826</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6221">#6221</a>
from sffc/lex-lifetime</li>
<li><a
href="81dea3b679"><code>81dea3b</code></a>
fix: Use longer lifetime in clap_lex ParsedArg</li>
<li><a
href="eabbc6b9db"><code>eabbc6b</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6217">#6217</a>
from epage/man</li>
<li><a
href="76a016a083"><code>76a016a</code></a>
refactor(man): Allow possible values to output Roff</li>
<li><a
href="9db8234233"><code>9db8234</code></a>
refactor(man): Avoid to_string</li>
<li><a
href="475cac90d8"><code>475cac9</code></a>
fix(man): Always show possible values as a list</li>
<li><a
href="a99bd421a5"><code>a99bd42</code></a>
chore: Release</li>
<li><a
href="485d781eea"><code>485d781</code></a>
docs: Update changelog</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_lex-v0.7.6...clap_lex-v0.7.7">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=clap_lex&package-manager=cargo&previous-version=0.7.6&new-version=0.7.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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-13 17:23:52 +00:00
Oriol Brufau
bb74a756a7 layout: Don't wrap InlineItem with ArcRefCell in LayoutBox (#41877)
Changes `LayoutBox::InlineLevel()` to have a raw `InlineItem` instead of
an `ArcRefCell<InlineItem>`. `InlineItem` is an enum where all the
options already use `ArcRefCell`, so the outer `ArcRefCell` wasn't
really necessary.

Testing: Not needed, no behavior change

Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 16:29:31 +00:00
Sam
2def1fbdce script: &mut JSContext in cross_origin_own_property_keys and append_cross_origin_allowlisted_prop_keys (#41879)
Testing: Just refactor, but should be covered by WPT tests.
Fixes: #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-13 15:49:09 +00:00
Martin Robinson
30fa32714e Remove Servo's custom Range implementation (#41880)
Servo `Range` type probably predates the `Range` type in the standard
library. The fact that there are two `Range` types in Servo is often
very confusing. The internal type is only used for byte indices in glyph
runs. This change removes the internal generic `Range` in favor of a
small wrapper around a native Rust `Range`.

It's likely that there are more improvements that could be done here,
such as reusing `Utf8CodePointIndex`, but this code is going to change a
lot soon and these ranges might soon be replaced with actual glyph
ranges. We are going to be looking to remove `TextByteRange` entirely.
This is just an intermediate step.

Testing: This should not change behavior and is thus covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 15:31:47 +00:00
Sam
5b11f7619e script: add &mut JSContext to codegened toJSON (#41878)
Testing: Just refactor, but should be covered by WPT tests
Part of #40600

Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
2026-01-13 14:48:57 +00:00
Narfinger
9cef653e78 webxr: Switch most of the uses of ipc-channel to GenericChannel (#41774)
Switch most of the uses of IpcChannel to GenericChannel.

Currently there is still one major usage of IpcChannel in the
frame_sender. This will be a more complicated change,
hence, should have extra scrutinee.


Requires https://github.com/servo/servo/pull/41771

Testing: Like all GenericChannels, this is mostly type changes

---------

Signed-off-by: Narfinger <Narfinger@users.noreply.github.com>
2026-01-13 13:24:27 +00:00
Jan Varga
db22af5faf libservo: Extend SiteDataManager::clear_site_data to clear localStorage (#41852)
localStorage entries are identified via their associated origins found
for the
given sites. This brings localStorage in line with cookies and
sessionStorage,
which were already handled by the API.
    
Both public and private browsing contexts are included in the clearing
operation.
    
The necessary support and testing has been added to the storage crate to
clear
localStorage data.

Testing: New unit tests and a new integration test have been added.

---------

Signed-off-by: Jan Varga <jvarga@igalia.com>
2026-01-13 13:08:54 +00:00
Martin Robinson
e44cfc9ea5 layout: Store FontMetrics in an Arc (#41876)
This decreases the size of `TextFragment` by 66 bits and also allows
sharing empty metrics for text runs without fonts. Many `TextFragments`
should share the same font so these 66 bits should reflect reality even
though the `FontMetrics` is now stored on the heap.

Testing: This should not change behavior so is covered by existing
tests.

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
2026-01-13 12:48:55 +00:00
eri
e95afbf7cf devtools: Remove find_mut and make all actors immutable (#41744)
Remove `find_mut` from `ActorRegistry`. Force that all actors must be
immutable after being inserted in the registry, only allowing changes
through internal mutability.

First step in refactoring `ActorRegistry` to make it more reliable,
easier to use and less error prone.

Depends on #41741. `NetworkEventActor` was more complicated to refactor
and it needed special care so it is split into its own change.

Testing: This patch doesn't change behaviour.

Signed-off-by: eri <eri@igalia.com>
2026-01-13 08:58:34 +00:00
Tim van der Lippe
9d2715fb3d script: Implement "Location-navigate a location" (#41805)
The existing implementation in `Location::navigate` differs
a lot from the existing spec. Therefore, let's incrementally
make it closer match the spec by implementing the first
step for `SetHref`.

Testing: WPT
Part of #41807

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-01-13 08:15:21 +00:00
Euclid Ye
444d60eee2 cargo/bot: Update zbus and zbus-lockstep together (#41875)
- Update those from zbus together in future
- Update those from zbus-lockstep in future
- Manually update those altogether this time

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-01-13 06:27:24 +00:00
12771 changed files with 427240 additions and 199643 deletions

2
.clippy.toml Normal file
View File

@@ -0,0 +1,2 @@
# Lint for https://github.com/advisories/GHSA-r6v5-fh4h-64xc until we upgrade to time >=0.3.47
disallowed-types = ["time::format_description::well_known::Rfc2822"]

View File

@@ -1,6 +1,7 @@
[profile.default] [profile.default]
# Print a slow warning after period, terminate unit-test after 4x period. # Print a slow warning after period, terminate unit-test after 4x period.
slow-timeout = { period = "5s", terminate-after = 4 } slow-timeout = { period = "5s", terminate-after = 4 }
status-level = "leak"
[profile.ci] [profile.ci]
fail-fast = false fail-fast = false

View File

@@ -0,0 +1,48 @@
# Dockerfile for the servo devcontainer environment.
# Note that the build-context is the repository root.
# We use a multi-stage build to keep the final image size down.
# We use a prebuilt image for `uv` to speed up builds and later copy the artifacts
# into the final stage.
FROM ghcr.io/astral-sh/uv:latest AS uv
FROM ubuntu:24.04 AS base
# Install apt dependencies.
COPY python/servo/platform/linux_packages /tmp/linux_packages
RUN apt-get update \
&& /tmp/linux_packages/generate_pkg_list.sh /tmp/linux_packages/apt/* | xargs apt-get install -y --no-install-recommends \
&& curl --version
# Please keep `RUST_VERSION` in sync with the `rust-toolchain.toml` file.
ENV RUSTUP_HOME=/usr/local/rustup \
CARGO_HOME=/usr/local/cargo \
PATH=/usr/local/cargo/bin:$PATH \
UV_TOOL_BIN_DIR=/usr/local/bin \
RUST_VERSION=1.92.0
# Keep the list of components in sync with `rust-toolchain.toml` file.
RUN curl https://sh.rustup.rs -sSf \
| sh -s -- --default-toolchain ${RUST_VERSION} -y --component clippy,llvm-tools,llvm-tools-preview,rustc-dev,rustfmt,rust-src \
&& \
rustup --version; \
cargo --version; \
rustc --version;
# prebuilt rust tools we use
FROM base AS rust_builder
# TODO: We would need to use `ARG` and install specific versions, to ensure
# that the tools are updated and not always cached.
RUN cargo install cargo-deny cargo-nextest taplo-cli cargo-about --locked
FROM base AS final
COPY --from=rust_builder \
/usr/local/cargo/bin/cargo-deny \
/usr/local/cargo/bin/cargo-nextest \
/usr/local/cargo/bin/taplo \
/usr/local/cargo/bin/cargo-about \
/usr/local/cargo/bin/
COPY --from=uv /uv /uvx /bin/

View File

@@ -0,0 +1,3 @@
*
!/.devcontainer
!/python/servo/platform/linux_packages

View File

@@ -0,0 +1,24 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
{
"name": "Ubuntu",
"image": "ghcr.io/servo/servo/devcontainer-ubuntu:latest",
// Alternatively, uncomment the "build" property below to build the image from the Dockerfile in this folder.
// "build": {
// "dockerfile": "Ubuntu.Dockerfile",
// "context": ".."
// },
// Most dependencies are installed in the image, but we run mach bootstrap to ensure
// the environment matches what's expected in the current servo version, which might
// have changed since the image was built.
"postCreateCommand":
"./mach bootstrap --yes",
"containerEnv": {
"CC": "clang",
"CXX": "clang++",
"UV_PROJECT_ENVIRONMENT": ".devcontainer-venv"
}
}

4
.github/CODEOWNERS vendored
View File

@@ -39,6 +39,10 @@
# Reviewers for XPath related code # Reviewers for XPath related code
/components/xpath @simonwuelker /components/xpath @simonwuelker
# Reviewers for DevTools
/components/devtools @atbrakhi @eerii
/components/shared/devtools @atbrakhi @eerii
# Reviewers for CI related code # Reviewers for CI related code
/.github/workflows @sagudev /.github/workflows @sagudev
/.github/actions @sagudev /.github/actions @sagudev

View File

@@ -12,10 +12,10 @@ runs:
id: parse_version id: parse_version
shell: bash shell: bash
run: | run: |
msrv=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "libservo") | .rust_version') msrv=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "servo") | .rust_version')
if [[ "${msrv}" == "null" ]]; then if [[ "${msrv}" == "null" ]]; then
echo "Failed to determine MSRV of libservo" echo "Failed to determine MSRV of servo"
exit 1 exit 1
fi fi
echo "libservo has a minimum supported Rust version of ${msrv}." echo "servo has a minimum supported Rust version of ${msrv}."
echo "LIBSERVO_RUST_VERSION=${msrv}" >> "$GITHUB_OUTPUT" echo "LIBSERVO_RUST_VERSION=${msrv}" >> "$GITHUB_OUTPUT"

View File

@@ -15,10 +15,10 @@ runs:
# symlink to this version. # symlink to this version.
- name: Setup system python - name: Setup system python
if: ${{ inputs.skip-python-setup != 'true' }} if: ${{ inputs.skip-python-setup != 'true' }}
uses: actions/setup-python@v5 uses: actions/setup-python@v6
with: with:
python-version-file: ${{ inputs.python-version-file-path }} python-version-file: ${{ inputs.python-version-file-path }}
- name: Install uv - name: Install uv
uses: astral-sh/setup-uv@v4 uses: astral-sh/setup-uv@v7
with: with:
version: "0.8.5" version: "0.9.21"

View File

@@ -28,6 +28,17 @@ updates:
- "emath" - "emath"
- "epaint" - "epaint"
- "epaint_default_fonts" - "epaint_default_fonts"
futures-rs-related:
patterns:
- "futures"
- "futures-channel"
- "futures-core"
- "futures-executor"
- "futures-io"
- "futures-macro"
- "futures-sink"
- "futures-task"
- "futures-util"
gstreamer-related: gstreamer-related:
patterns: patterns:
- "gio*" - "gio*"
@@ -69,13 +80,28 @@ updates:
wayland-related: wayland-related:
patterns: patterns:
- "wayland-*" - "wayland-*"
zbus-related:
# From zbus repository
patterns:
- "zbus"
- "zbus_macros"
- "zbus_names"
- "zbus_xml"
- "zbus_xmlgen"
- "zvariant"
- "zvariant_derive"
- "zvariant_utils"
zbus-lockstep-related:
# From zbus-lockstep repository
patterns:
- "zbus-lockstep"
- "zbus-lockstep-macros"
ignore: ignore:
# Ignore all stylo crates as their upgrades are coordinated via companion PRs. # Ignore all stylo crates as their upgrades are coordinated via companion PRs.
- dependency-name: selectors - dependency-name: selectors
- dependency-name: servo_arc - dependency-name: servo_arc
- dependency-name: stylo - dependency-name: stylo
- dependency-name: stylo_atoms - dependency-name: stylo_atoms
- dependency-name: stylo_config
- dependency-name: stylo_derive - dependency-name: stylo_derive
- dependency-name: stylo_dom - dependency-name: stylo_dom
- dependency-name: stylo_malloc_size_of - dependency-name: stylo_malloc_size_of

View File

@@ -1,18 +1,15 @@
name: Android name: Android
on: on:
workflow_call: workflow_call:
outputs:
artifact_ids:
value: ${{ jobs.build.outputs.artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
inputs: inputs:
profile: profile:
required: false required: false
default: "release" default: "release"
type: string type: string
upload:
required: false
default: false
type: boolean
github-release-id:
required: false
type: string
bencher: bencher:
required: false required: false
default: false default: false
@@ -40,6 +37,8 @@ jobs:
build: build:
name: Android Build name: Android Build
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
outputs:
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
strategy: strategy:
matrix: matrix:
target: ['aarch64-linux-android', 'armv7-linux-androideabi', 'x86_64-linux-android'] target: ['aarch64-linux-android', 'armv7-linux-androideabi', 'x86_64-linux-android']
@@ -47,9 +46,8 @@ jobs:
- name: Free Disk Space (Ubuntu) - name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main uses: jlumbroso/free-disk-space@main
with: with:
tool-cache: false tool-cache: true
android: false android: false
large-packages: false
swap-storage: false swap-storage: false
- uses: actions/checkout@v5 - uses: actions/checkout@v5
if: github.event_name != 'pull_request_target' if: github.event_name != 'pull_request_target'
@@ -64,12 +62,15 @@ jobs:
fetch-depth: 2 fetch-depth: 2
- name: Install crown - name: Install crown
run: cargo install --path support/crown run: cargo install --path support/crown
- name: Change Mirror Priorities
uses: ./.github/actions/apt-mirrors
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Bootstrap dependencies - name: Bootstrap dependencies
run: sudo apt update && ./mach bootstrap --skip-lints --skip-nextest timeout-minutes: 30
run: sudo apt update && ./mach bootstrap --yes --skip-lints --skip-nextest
- name: Set up JDK 17 - name: Set up JDK 17
uses: actions/setup-java@v4 uses: actions/setup-java@v5
with: with:
java-version: '17' java-version: '17'
distribution: 'temurin' distribution: 'temurin'
@@ -106,47 +107,38 @@ jobs:
APK_SIGNING_KEY_PASS: ${{ secrets.APK_SIGNING_KEY_PASS }} APK_SIGNING_KEY_PASS: ${{ secrets.APK_SIGNING_KEY_PASS }}
run: | run: |
./mach build --use-crown --locked --target ${{ matrix.target }} --profile ${{ inputs.profile }} ./mach build --use-crown --locked --target ${{ matrix.target }} --profile ${{ inputs.profile }}
cp -r target/cargo-timings target/cargo-timings-android-${{ matrix.target }} mv target/cargo-timings target/cargo-timings-android-${{ matrix.target }}
# TODO: This is disabled since APK crashes during startup. # TODO: This is disabled since APK crashes during startup.
# See https://github.com/servo/servo/issues/31134 # See https://github.com/servo/servo/issues/31134
# - name: Script tests # - name: Script tests
# run: ./mach test-android-startup # run: ./mach test-android-startup
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-android-${{ matrix.target }}-${{ inputs.profile }} name: cargo-timings-android-${{ matrix.target }}-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-* path: target/cargo-timings-*
- name: Upload nightly if-no-files-found: error
if: ${{ inputs.upload && contains(matrix.target, 'aarch64') }}
run: |
./mach upload-nightly android \
--secret-from-environment \
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
- name: Generate artifact attestation for APK
if: ${{ inputs.upload }}
uses: actions/attest-build-provenance@v1
with:
subject-path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoapp.apk
- name: Upload APK artifact - name: Upload APK artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-apk
with: with:
name: ${{ inputs.profile }}-binary-android-${{ matrix.target }} name: ${{ inputs.profile }}-binary-android-${{ matrix.target }}
path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoapp.apk path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoapp.apk
- name: Generate artifact attestation for AAR if-no-files-found: error
if: ${{ inputs.upload }}
uses: actions/attest-build-provenance@v1
with:
subject-path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoview.aar
- name: Upload AAR artifact - name: Upload AAR artifact
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-aar
with: with:
name: ${{ inputs.profile }}-library-android-${{ matrix.target }} name: ${{ inputs.profile }}-library-android-${{ matrix.target }}
path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoview.aar path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoview.aar
if-no-files-found: error
- name: Collect artifact IDs needed by the release workflow
if: matrix.target == 'aarch64-linux-android'
id: artifact_ids
shell: bash
run: |
echo "artifact_ids=${{steps.upload-apk.outputs.artifact-id}},${{steps.upload-aar.outputs.artifact-id}}" >> $GITHUB_OUTPUT
bencher: bencher:
needs: ["build"] needs: ["build"]

View File

@@ -58,7 +58,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
github-hosted-runner-label: ubuntu-22.04 github-hosted-runner-label: ubuntu-22.04
@@ -77,8 +77,8 @@ jobs:
name: Bencher (${{ inputs.target }}) [${{ needs.runner-select.outputs.unique-id }}] name: Bencher (${{ inputs.target }}) [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
steps: steps:
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
name: ${{ inputs.profile }}-binary-${{ inputs.target }} name: ${{ inputs.profile }}-binary-${{ inputs.target }}
path: ${{ inputs.profile }}-binary-${{ inputs.target }} path: ${{ inputs.profile }}-binary-${{ inputs.target }}
@@ -92,12 +92,16 @@ jobs:
- name: Setup Python - name: Setup Python
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Change Mirror Priorities
if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/apt-mirrors
- name: Bootstrap dependencies - name: Bootstrap dependencies
if: ${{ runner.environment != 'self-hosted' && (inputs.speedometer || inputs.dromaeo) }} if: ${{ runner.environment != 'self-hosted' && (inputs.speedometer || inputs.dromaeo) }}
timeout-minutes: 30
run: | run: |
sudo apt update sudo apt update
sudo apt install -qy --no-install-recommends mesa-vulkan-drivers sudo apt install -qy --no-install-recommends mesa-vulkan-drivers
./mach bootstrap --skip-lints --skip-nextest ./mach bootstrap --yes --skip-lints --skip-nextest
- uses: bencherdev/bencher@main - uses: bencherdev/bencher@main
- name: File size - name: File size
if: ${{ inputs.file-size == true }} if: ${{ inputs.file-size == true }}

70
.github/workflows/book-export.yml vendored Normal file
View File

@@ -0,0 +1,70 @@
name: Book Export
on:
push:
branches:
- main
jobs:
upstream:
# Run job only on servo/servo
if: github.repository == 'servo/servo'
runs-on: ubuntu-latest
environment:
name: book-sync
deployment: false
steps:
- name: Check out Servo
uses: actions/checkout@v6
with:
sparse-checkout: |
python/servo/platform/linux_packages
fetch-depth: '2'
- name: Check out Servo book
uses: actions/checkout@v6
with:
path: book
repository: 'servo/book'
token: ${{ secrets.BOOK_SYNC_TOKEN }}
- name: Check for changes
working-directory: python/servo/platform/linux_packages
id: changes
run: |
# Note: This check assumes the action only runs on `main`.
if git diff --quiet HEAD HEAD^ -- . ; then
echo "No changes detected, exiting."
echo "CHANGES=false" >> $GITHUB_OUTPUT
else
echo "Changes detected, exporting book."
./generate_pkg_list.sh apt/apt_common.txt > ${{github.workspace}}/book/src/building/linux_packages/apt_common.txt
./generate_pkg_list.sh apt/apt_ubuntu_only.txt > ${{github.workspace}}/book/src/building/linux_packages/apt_ubuntu_only.txt
./generate_pkg_list.sh dnf/dnf_base.txt > ${{github.workspace}}/book/src/building/linux_packages/dnf_base.txt
./generate_pkg_list.sh xbps/xbps_base.txt > ${{github.workspace}}/book/src/building/linux_packages/xbps_base.txt
echo "CHANGES=true" >> $GITHUB_OUTPUT
fi
- name: Commit changes
working-directory: book
if: ${{ steps.changes.outputs.CHANGES == 'true'}}
run: |
git config --local user.email "ghbot+book-sync@servo.org"
git config --local user.name "Book Sync Bot"
git add src/building/linux_packages/
git commit -m "linux: Update dependency list based on servo/servo@${GITHUB_SHA::13}"
- name: Push changes
if: ${{ steps.changes.outputs.CHANGES == 'true'}}
working-directory: book
run: git push 'https://${{ secrets.BOOK_SYNC_TOKEN }}@github.com/servo-bot/book.git' 'HEAD:linux_pkgs_sync_${{ github.sha }}'
- name: Open PR
if: ${{ steps.changes.outputs.CHANGES == 'true'}}
env:
GH_TOKEN: ${{ secrets.BOOK_SYNC_CREATE_PR_TOKEN }}
UPDATE_BRANCH: linux_pkgs_sync_${{ github.sha }}
working-directory: book
run: |
BODY=$(cat <<EOF
Update dependency list based on servo/servo@${GITHUB_SHA}
EOF
)
gh pr create \
--title "Sync Linux packages with servo (${GITHUB_SHA::7})" \
--repo servo/book \
--body "$BODY" --head servo-bot:${{ env.UPDATE_BRANCH }}

52
.github/workflows/docker.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
#
name: Build Docker image and push to GitHub Packages
# This workflow file is adapted from the example at https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions#upgrading-a-workflow-that-accesses-a-registry-using-a-personal-access-token
on:
push:
branches:
- main
# Only rebuild if the Dockerfile or dependencies change.
paths:
- '.devcontainer/**'
- 'python/servo/platform/linux_packages/**'
workflow_dispatch:
jobs:
devcontainer_ubuntu:
runs-on: ubuntu-latest
# We probably don't want to spam the package registry of every developer
# thats working on servo and has actions enabled on their fork.
# You can comment this if to test changes to the workflow locally in your fork,
# use manual workflow dispatch in your fork.
if: github.repository_owner == 'servo' || github.event_name == 'workflow_dispatch'
permissions:
packages: write
contents: read
env:
IMAGE_NAME: devcontainer-ubuntu
steps:
- uses: actions/checkout@v6
- name: Build image
run: docker build . --file .devcontainer/Ubuntu.Dockerfile --tag ${{ env.IMAGE_NAME }} --label "runnumber=${GITHUB_RUN_ID}"
- name: Log in to registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Push image
run: |
IMAGE_ID=ghcr.io/${{ github.repository_owner }}/servo/$IMAGE_NAME
# This changes all uppercase characters to lowercase.
IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]')
# This strips the git ref prefix from the version.
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,')
# This uses the Docker `latest` tag convention.
[ "$VERSION" == "main" ] && VERSION=latest
echo IMAGE_ID=$IMAGE_ID
echo VERSION=$VERSION
# Todo: It would be nice to add another tag here, that has a version number, or a date-tag.
docker tag $IMAGE_NAME $IMAGE_ID:$VERSION
docker push $IMAGE_ID:$VERSION

View File

@@ -21,10 +21,12 @@ jobs:
swap-storage: false swap-storage: false
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Change Mirror Priorities
uses: ./.github/actions/apt-mirrors
- name: Bootstrap - name: Bootstrap
run: | run: |
sudo apt update sudo apt update
./mach bootstrap --skip-lints --skip-nextest ./mach bootstrap --yes --skip-lints --skip-nextest
- name: Set LIBCLANG_PATH # This is needed for bindgen in mozangle. - name: Set LIBCLANG_PATH # This is needed for bindgen in mozangle.
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Compile docs - name: Compile docs

View File

@@ -21,7 +21,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
# Before updating the GH action runner image for the nightly job, ensure # Before updating the GH action runner image for the nightly job, ensure
@@ -34,7 +34,7 @@ jobs:
# <https://github.com/servo/servo/settings/variables/actions> # <https://github.com/servo/servo/settings/variables/actions>
NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }} NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }}
# Any other boolean conditions that disable self-hosted runners go here. # Any other boolean conditions that disable self-hosted runners go here.
force-github-hosted-runner: ${{ inputs.upload || inputs.force-github-hosted-runner }} force-github-hosted-runner: ${{ inputs.force-github-hosted-runner }}
lint: lint:
needs: needs:
@@ -42,7 +42,7 @@ jobs:
name: Lint [${{ needs.runner-select.outputs.unique-id }}] name: Lint [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
steps: steps:
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
fetch-depth: 2 fetch-depth: 2
@@ -65,11 +65,15 @@ jobs:
crate: cargo-deny crate: cargo-deny
version: 0.19.0 version: 0.19.0
locked: true locked: true
- name: Change Mirror Priorities
if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/apt-mirrors
- name: Bootstrap dependencies - name: Bootstrap dependencies
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
timeout-minutes: 30
run: | run: |
sudo apt update sudo apt update
./mach bootstrap --skip-nextest ./mach bootstrap --yes --skip-nextest
- name: Clippy - name: Clippy
run: | run: |
./mach clippy --locked --github-annotations -- -- --deny warnings ./mach clippy --locked --github-annotations -- -- --deny warnings

View File

@@ -32,25 +32,45 @@ env:
WPT_ALWAYS_SUCCEED_ARG: "${{ inputs.wpt-sync-from-upstream && '--always-succeed' || '' }}" WPT_ALWAYS_SUCCEED_ARG: "${{ inputs.wpt-sync-from-upstream && '--always-succeed' || '' }}"
jobs: jobs:
chunks: # Runs the underlying job (“workload”) on a self-hosted runner if available,
name: Generate chunks array # with the help of a `runner-select` job and a `runner-timeout` job.
runs-on: ubuntu-22.04 runner-select:
runs-on: ubuntu-24.04
outputs: outputs:
chunks-array: ${{ steps.generate-chunks-array.outputs.result }} unique-id: ${{ steps.select.outputs.unique-id }}
selected-runner-label: ${{ steps.select.outputs.selected-runner-label }}
selected-runner-count: ${{ steps.select.outputs.selected-runner-count }}
selected-runner-indices: ${{ steps.select.outputs.selected-runner-indices }}
runner-type-label: ${{ steps.select.outputs.runner-type-label }}
is-self-hosted: ${{ steps.select.outputs.is-self-hosted }}
steps: steps:
- uses: actions/github-script@v7 - name: Runner select
id: generate-chunks-array id: select
uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
script: | GITHUB_TOKEN: ${{ github.token }}
return Array.from({length: ${{ inputs.number-of-wpt-chunks }}}, (_, i) => i + 1) # Before updating the GH action runner image for the nightly job, ensure
# that the system has a glibc version that is compatible with the one
# used by the wpt.fyi runners.
github-hosted-runner-label: ubuntu-22.04
github-hosted-runner-count: ${{ inputs.number-of-wpt-chunks }}
self-hosted-image-name: servo-ubuntu2204-wpt
self-hosted-runner-count: 3
# You can disable self-hosted runners globally by creating a repository variable named
# NO_SELF_HOSTED_RUNNERS with any non-empty value.
# <https://github.com/servo/servo/settings/variables/actions>
NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }}
# Any other boolean conditions that disable self-hosted runners go here.
force-github-hosted-runner: true
linux-wpt: linux-wpt:
name: WPT needs:
runs-on: ubuntu-22.04 - runner-select
needs: chunks name: WPT [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
chunk_id: ${{ fromJson(needs.chunks.outputs.chunks-array) }} chunk_id: ${{ fromJSON(needs.runner-select.outputs.selected-runner-indices) }}
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v5
if: github.event_name != 'pull_request_target' if: github.event_name != 'pull_request_target'
@@ -60,21 +80,27 @@ jobs:
if: github.event_name == 'pull_request_target' if: github.event_name == 'pull_request_target'
with: with:
ref: refs/pull/${{ github.event.number }}/head ref: refs/pull/${{ github.event.number }}/head
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
name: ${{ inputs.profile }}-binary-linux name: ${{ inputs.profile }}-binary-linux
path: ${{ inputs.profile }}-binary-linux path: ${{ inputs.profile }}-binary-linux
- name: unPackage binary - name: unPackage binary
run: tar -xzf ${{ inputs.profile }}-binary-linux/servo-tech-demo.tar.gz run: tar -xzf ${{ inputs.profile }}-binary-linux/servo-tech-demo.tar.gz
- name: Setup Python - name: Setup Python
if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Change Mirror Priorities - name: Change Mirror Priorities
if: ${{ runner.environment != 'self-hosted' }}
uses: ./.github/actions/apt-mirrors uses: ./.github/actions/apt-mirrors
- name: Bootstrap dependencies - name: Bootstrap dependencies
timeout-minutes: 30
run: | run: |
sudo apt update sudo apt update
sudo apt install -qy --no-install-recommends mesa-vulkan-drivers fonts-noto-cjk ./mach bootstrap --yes --skip-lints --skip-nextest
./mach bootstrap --skip-lints --skip-nextest # FIXME #41043, #41044
sudo apt install -qy --no-install-recommends mesa-vulkan-drivers fonts-noto-cjk fonts-dejavu-extra
# FIXME #35029
sudo apt purge -y fonts-droid-fallback
- name: Sync from upstream WPT - name: Sync from upstream WPT
if: ${{ inputs.wpt-sync-from-upstream }} if: ${{ inputs.wpt-sync-from-upstream }}
run: | run: |
@@ -83,11 +109,12 @@ jobs:
run: | run: |
mkdir -p wpt-filtered-logs/linux mkdir -p wpt-filtered-logs/linux
mkdir -p wpt-full-logs/linux mkdir -p wpt-full-logs/linux
nproc=$(nproc)
./mach test-wpt \ ./mach test-wpt \
--bin ${{ inputs.binary-path }} \ --bin ${{ inputs.binary-path }} \
$WPT_ALWAYS_SUCCEED_ARG \ $WPT_ALWAYS_SUCCEED_ARG \
--profile ${{ inputs.profile }} --processes $(nproc) --timeout-multiplier 2 \ --profile ${{ inputs.profile }} --processes $((nproc * ${{ runner.environment == 'self-hosted' && 2 || 1 }})) --timeout-multiplier 2 \
--total-chunks ${{ inputs.number-of-wpt-chunks }} --this-chunk ${{ matrix.chunk_id }} \ --total-chunks ${{ needs.runner-select.outputs.selected-runner-count }} --this-chunk ${{ matrix.chunk_id }} \
--log-raw wpt-full-logs/linux/raw/${{ matrix.chunk_id }}.log \ --log-raw wpt-full-logs/linux/raw/${{ matrix.chunk_id }}.log \
--log-wptreport wpt-full-logs/linux/wptreport/${{ matrix.chunk_id }}.json \ --log-wptreport wpt-full-logs/linux/wptreport/${{ matrix.chunk_id }}.json \
--log-raw-stable-unexpected wpt-filtered-logs/linux/${{ matrix.chunk_id }}.log \ --log-raw-stable-unexpected wpt-filtered-logs/linux/${{ matrix.chunk_id }}.log \
@@ -96,17 +123,19 @@ jobs:
env: env:
GITHUB_CONTEXT: ${{ toJson(github) }} GITHUB_CONTEXT: ${{ toJson(github) }}
- name: Archive results (filtered) - name: Archive results (filtered)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
if: ${{ always() }} if: ${{ always() }}
with: with:
name: wpt-filtered-logs-linux-${{ matrix.chunk_id }} name: wpt-filtered-logs-linux-${{ matrix.chunk_id }}
path: wpt-filtered-logs/*/ path: wpt-filtered-logs/*/
if-no-files-found: error
- name: Archive results (full) - name: Archive results (full)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
if: ${{ always() }} if: ${{ always() }}
with: with:
name: wpt-full-logs-linux-${{ matrix.chunk_id }} name: wpt-full-logs-linux-${{ matrix.chunk_id }}
path: wpt-full-logs/*/ path: wpt-full-logs/*/
if-no-files-found: error
report-test-results: report-test-results:
name: Process WPT Results name: Process WPT Results
@@ -115,14 +144,14 @@ jobs:
needs: linux-wpt needs: linux-wpt
steps: steps:
- name: Merge logs (full) - name: Merge logs (full)
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: wpt-full-logs-linux name: wpt-full-logs-linux
pattern: wpt-full-logs-linux-* pattern: wpt-full-logs-linux-*
delete-merged: true delete-merged: true
# This job needs to be last. If no filtered results were uploaded, it will fail, but we want to merge other archives in that case. # This job needs to be last. If no filtered results were uploaded, it will fail, but we want to merge other archives in that case.
- name: Merge logs (filtered) - name: Merge logs (filtered)
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: wpt-filtered-logs-linux name: wpt-filtered-logs-linux
pattern: wpt-filtered-logs-linux-* pattern: wpt-filtered-logs-linux-*
@@ -135,7 +164,7 @@ jobs:
if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream && github.event_name == 'pull_request_target' }} if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream && github.event_name == 'pull_request_target' }}
with: with:
ref: refs/pull/${{ github.event.number }}/head ref: refs/pull/${{ github.event.number }}/head
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }}
with: with:
name: wpt-filtered-logs-linux name: wpt-filtered-logs-linux
@@ -147,10 +176,11 @@ jobs:
cat results/linux/*.log > stable-unexpected-results.log || true cat results/linux/*.log > stable-unexpected-results.log || true
- name: Upload aggregated results - name: Upload aggregated results
if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: stable-unexpected-results-linux name: stable-unexpected-results-linux
path: stable-unexpected-results.log path: stable-unexpected-results.log
if-no-files-found: error
- name: Report results - name: Report results
if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }}
run: | run: |

View File

@@ -1,6 +1,10 @@
name: Linux name: Linux
on: on:
workflow_call: workflow_call:
outputs:
artifact_ids:
value: ${{ jobs.build.outputs.artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
inputs: inputs:
profile: profile:
required: false required: false
@@ -33,13 +37,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
github-release-id:
required: false
type: string
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -82,10 +79,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -112,7 +105,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
# Before updating the GH action runner image for the nightly job, ensure # Before updating the GH action runner image for the nightly job, ensure
@@ -125,15 +118,17 @@ jobs:
# <https://github.com/servo/servo/settings/variables/actions> # <https://github.com/servo/servo/settings/variables/actions>
NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }} NO_SELF_HOSTED_RUNNERS: ${{ vars.NO_SELF_HOSTED_RUNNERS }}
# Any other boolean conditions that disable self-hosted runners go here. # Any other boolean conditions that disable self-hosted runners go here.
force-github-hosted-runner: ${{ inputs.upload || inputs.force-github-hosted-runner }} force-github-hosted-runner: ${{ inputs.force-github-hosted-runner }}
build: build:
needs: needs:
- runner-select - runner-select
name: Linux Build [${{ needs.runner-select.outputs.unique-id }}] name: Linux Build [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
outputs:
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
steps: steps:
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
- name: Free Disk Space (Ubuntu) - name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main uses: jlumbroso/free-disk-space@main
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
@@ -155,12 +150,12 @@ jobs:
tool: nextest tool: nextest
- name: Bootstrap dependencies - name: Bootstrap dependencies
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
timeout-minutes: 10 timeout-minutes: 30
run: | run: |
sudo apt update sudo apt update
echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
sudo apt install -qy tshark sudo apt install -qy tshark
./mach bootstrap --skip-lints ./mach bootstrap --yes --skip-lints
# Always install crown, even on self-hosted runners, because it is tightly # Always install crown, even on self-hosted runners, because it is tightly
# coupled to the rustc version, and we may have the wrong version if the # coupled to the rustc version, and we may have the wrong version if the
@@ -171,7 +166,7 @@ jobs:
- name: Build (${{ inputs.profile }}) - name: Build (${{ inputs.profile }})
run: | run: |
./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }} ./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }}
cp -r target/cargo-timings target/cargo-timings-linux mv target/cargo-timings target/cargo-timings-linux
- name: Smoketest - name: Smoketest
run: xvfb-run ./mach smoketest --profile ${{ inputs.profile }} run: xvfb-run ./mach smoketest --profile ${{ inputs.profile }}
- name: Script tests - name: Script tests
@@ -181,6 +176,7 @@ jobs:
if: ${{ inputs.unit-tests }} if: ${{ inputs.unit-tests }}
env: env:
NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683 NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683
LANG: en-US
run: ./mach test-unit --profile ${{ inputs.profile }} --nextest-profile ci run: ./mach test-unit --profile ${{ inputs.profile }} --nextest-profile ci
# We upload the test-results to Codecov to help us identify flaky unit-tests. # We upload the test-results to Codecov to help us identify flaky unit-tests.
- name: Upload test results to Codecov - name: Upload test results to Codecov
@@ -196,31 +192,29 @@ jobs:
flags: unittests,unittests-linux,unittests-linux-${{ inputs.profile }} flags: unittests,unittests-linux,unittests-linux-${{ inputs.profile }}
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
- name: Devtools tests - name: Devtools tests
if: ${{ false && inputs.unit-tests }} # FIXME #39273 if: ${{ false && inputs.unit-tests }} # FIXME #39273
run: ./mach test-devtools --profile ${{ inputs.profile }} run: ./mach test-devtools --profile ${{ inputs.profile }}
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-linux-${{ inputs.profile }} name: cargo-timings-linux-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-* path: target/cargo-timings-*
if-no-files-found: error
- name: Build mach package - name: Build mach package
run: ./mach package --profile ${{ inputs.profile }} run: ./mach package --profile ${{ inputs.profile }}
- name: Upload artifact for mach package - name: Upload artifact for mach package
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-tarball
with: with:
name: ${{ inputs.profile }}-binary-linux name: ${{ inputs.profile }}-binary-linux
path: target/${{ inputs.profile }}/servo-tech-demo.tar.gz path: target/${{ inputs.profile }}/servo-tech-demo.tar.gz
- name: Upload nightly if-no-files-found: error
if: ${{ inputs.upload }} - name: Collect artifact IDs needed by the release workflow
id: artifact_ids
shell: bash
run: | run: |
./mach upload-nightly linux \ echo "artifact_ids=${{steps.upload-tarball.outputs.artifact-id}}" >> $GITHUB_OUTPUT
--secret-from-environment \
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
wpt-2020: wpt-2020:
if: ${{ inputs.wpt }} if: ${{ inputs.wpt }}
@@ -232,7 +226,7 @@ jobs:
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
wpt-sync-from-upstream: ${{ inputs.wpt-sync-from-upstream }} wpt-sync-from-upstream: ${{ inputs.wpt-sync-from-upstream }}
number-of-wpt-chunks: ${{ inputs. number-of-wpt-chunks }} number-of-wpt-chunks: ${{ inputs. number-of-wpt-chunks }}
binary-path: servo/servo binary-path: servo/servoshell
secrets: inherit secrets: inherit
bencher: bencher:
@@ -240,10 +234,10 @@ jobs:
if: ${{ inputs.bencher && inputs.profile != 'debug' && github.event_name != 'workflow_dispatch' && github.event_name != 'merge_group' }} if: ${{ inputs.bencher && inputs.profile != 'debug' && github.event_name != 'workflow_dispatch' && github.event_name != 'merge_group' }}
uses: ./.github/workflows/bencher.yml uses: ./.github/workflows/bencher.yml
with: with:
target: 'linux' target: "linux"
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
compressed-file-path: ${{ inputs.profile }}-binary-linux/servo-tech-demo.tar.gz compressed-file-path: ${{ inputs.profile }}-binary-linux/servo-tech-demo.tar.gz
binary-path: servo/servo binary-path: servo/servoshell
file-size: true file-size: true
# We only evaluate speedometer and dromaeo score in release # We only evaluate speedometer and dromaeo score in release
speedometer: ${{ inputs.profile == 'release' }} speedometer: ${{ inputs.profile == 'release' }}
@@ -284,9 +278,17 @@ jobs:
uses: dtolnay/rust-toolchain@master uses: dtolnay/rust-toolchain@master
with: with:
toolchain: ${{ steps.msrv.outputs.rust_version }} toolchain: ${{ steps.msrv.outputs.rust_version }}
# We can remove this after upgrading to Rust 1.90, but for now
# installing lld is the easiest way to get it in path.
- name: install lld
run: sudo apt-get install -y lld
- name: Compile libservo with MSRV - name: Compile libservo with MSRV
env:
# lld seems to use less memory and prevents OOM errors during linking.
# We can remove this after upgrading to Rust 1.90, where lld will be the default.
RUSTFLAGS: "-C link-arg=-fuse-ld=lld"
run: | run: |
cargo +${{ steps.msrv.outputs.rust_version }} build -p libservo --locked --all-targets cargo +${{ steps.msrv.outputs.rust_version }} build -p servo --locked
# Runs the underlying job (“workload”) on a self-hosted runner if available. # Runs the underlying job (“workload”) on a self-hosted runner if available.
runner-select-coverage: runner-select-coverage:
@@ -299,7 +301,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
# Before updating the GH action runner image for the nightly job, ensure # Before updating the GH action runner image for the nightly job, ensure
@@ -321,7 +323,7 @@ jobs:
runs-on: ${{ needs.runner-select-coverage.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select-coverage.outputs.selected-runner-label }}
continue-on-error: true continue-on-error: true
steps: steps:
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
- name: Free Disk Space (Ubuntu) - name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main uses: jlumbroso/free-disk-space@main
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
@@ -345,10 +347,11 @@ jobs:
tool: cargo-llvm-cov,cargo-nextest tool: cargo-llvm-cov,cargo-nextest
- name: Bootstrap dependencies - name: Bootstrap dependencies
if: ${{ runner.environment != 'self-hosted' }} if: ${{ runner.environment != 'self-hosted' }}
timeout-minutes: 30
shell: bash shell: bash
run: | run: |
sudo apt update sudo apt update
./mach bootstrap --skip-lints ./mach bootstrap --yes --skip-lints
- name: Determine options - name: Determine options
id: options id: options
run: | run: |
@@ -364,6 +367,7 @@ jobs:
shell: bash shell: bash
env: env:
NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683 NEXTEST_RETRIES: 2 # https://github.com/servo/servo/issues/30683
LANG: en-US
run: | run: |
./mach test-unit --code-coverage \ ./mach test-unit --code-coverage \
--profile=${{ steps.options.outputs.cargo_profile }} \ --profile=${{ steps.options.outputs.cargo_profile }} \
@@ -376,3 +380,75 @@ jobs:
files: codecov.json,support/crown/codecov.json files: codecov.json,support/crown/codecov.json
fail_ci_if_error: true fail_ci_if_error: true
flags: unittests flags: unittests
media-examples:
name: Media Examples
if: ${{ inputs.unit-tests }}
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v5
if: github.event_name != 'pull_request_target'
with:
fetch-depth: 1
# This is necessary to checkout the pull request if this run was triggered via a
# `pull_request_target` event.
- uses: actions/checkout@v5
if: github.event_name == 'pull_request_target'
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 1
- name: Change Mirror Priorities
uses: ./.github/actions/apt-mirrors
- name: Install Dependencies
run: |
sudo bash -c 'apt-add-repository -y https://mirrors.kernel.org/ubuntu'
sudo apt update
sudo apt install -y \
gstreamer1.0-libav \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-ugly \
gstreamer1.0-tools \
jackd2 \
libasound2-plugins \
libfaad2 \
libffi7 \
libfftw3-single3 \
libges-1.0-dev \
libgstreamer-plugins-bad1.0-dev\
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev \
libgstrtspserver-1.0-dev \
libjack-jackd2-0 \
libmms0 \
libmpg123-0 \
libopus0 \
liborc-0.4-0 \
liborc-0.4-dev \
libpulsedsp \
libsamplerate0 \
libspeexdsp1 \
libtdb1 \
libtheora0 \
libtwolame0 \
libwayland-egl1-mesa \
libwebrtc-audio-processing1 \
pulseaudio \
pulseaudio-utils \
webp
- name: Determine MSRV
id: msrv
uses: ./.github/actions/parse_msrv
- name: Install MSRV
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ steps.msrv.outputs.rust_version }}
- name: Virtual Audio Devices
run: |
jackd -d dummy &
pulseaudio --start
gst-inspect-1.0 | grep Total
- name: Run Examples
run: |
ls components/media/examples/examples/*.rs | xargs -I{} basename {} .rs | grep -v params_connect | RUST_BACKTRACE=1 GST_DEBUG=3 xargs -I{} cargo run -p servo-media-examples --example {}

View File

@@ -2,6 +2,10 @@ name: MacOS Arm64
on: on:
workflow_call: workflow_call:
outputs:
artifact_ids:
value: ${{ jobs.build.outputs.artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
inputs: inputs:
profile: profile:
required: false required: false
@@ -26,13 +30,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
github-release-id:
required: false
type: string
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -63,10 +60,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -79,12 +72,19 @@ on:
env: env:
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
SHELL: /bin/bash SHELL: /bin/bash
# Increment this to purge the cache (https://github.com/mozilla/sccache/blob/main/docs/GHA.md)
SCCACHE_GHA_VERSION: 1
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
CCACHE: "sccache"
CARGO_INCREMENTAL: 0 CARGO_INCREMENTAL: 0
jobs: jobs:
build: build:
name: MacOS 15 Build name: MacOS 15 Build
runs-on: macos-15 runs-on: macos-15
outputs:
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
steps: steps:
# XProtect can cause random failures if it decides that the DMG we create # XProtect can cause random failures if it decides that the DMG we create
# during the packaging phase is malware. # during the packaging phase is malware.
@@ -116,6 +116,8 @@ jobs:
- if: runner.environment != 'self-hosted' - if: runner.environment != 'self-hosted'
name: Setup Python name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.9
# Always install crown, even on self-hosted runners, because it is tightly # Always install crown, even on self-hosted runners, because it is tightly
# coupled to the rustc version, and we may have the wrong version if the # coupled to the rustc version, and we may have the wrong version if the
@@ -130,12 +132,12 @@ jobs:
- if: runner.environment != 'self-hosted' - if: runner.environment != 'self-hosted'
name: Bootstrap name: Bootstrap
run: | run: |
./mach bootstrap --skip-lints ./mach bootstrap --yes --skip-lints
brew install gnu-tar brew install gnu-tar
- name: Build (${{ inputs.profile }}) - name: Build (${{ inputs.profile }})
run: | run: |
./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }} ./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }}
cp -r target/cargo-timings target/cargo-timings-macos-arm64 mv target/cargo-timings target/cargo-timings-macos-arm64
- name: Smoketest - name: Smoketest
uses: nick-fields/retry@v3 uses: nick-fields/retry@v3
with: # See https://github.com/servo/servo/issues/30757 with: # See https://github.com/servo/servo/issues/30757
@@ -175,33 +177,32 @@ jobs:
max_attempts: 2 max_attempts: 2
command: ./etc/ci/macos_package_smoketest.sh target/${{ inputs.profile }}/servo-tech-demo.dmg command: ./etc/ci/macos_package_smoketest.sh target/${{ inputs.profile }}/servo-tech-demo.dmg
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-macos-arm64-${{ inputs.profile }} name: cargo-timings-macos-arm64-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-* path: target/cargo-timings-*
if-no-files-found: error
- name: Upload artifact for mach package - name: Upload artifact for mach package
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-dmg
with: with:
name: ${{ inputs.profile }}-binary-mac-arm64 name: ${{ inputs.profile }}-binary-mac-arm64
path: target/${{ inputs.profile }}/servo-tech-demo.dmg path: target/${{ inputs.profile }}/servo-tech-demo.dmg
- name: Upload nightly if-no-files-found: error
if: ${{ inputs.upload }} - name: Collect artifact IDs needed by the release workflow
id: artifact_ids
shell: bash
run: | run: |
./mach upload-nightly mac-arm64 --secret-from-environment \ echo "artifact_ids=${{ steps.upload-dmg.outputs.artifact-id }}" >> $GITHUB_OUTPUT
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
GITHUB_HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
- name: Build package for target - name: Build package for target
run: gtar -czf target.tar.gz target/${{ inputs.profile }}/servo target/${{ inputs.profile }}/lib/*.dylib resources run: gtar -czf target.tar.gz target/${{ inputs.profile }}/servoshell target/${{ inputs.profile }}/lib/*.dylib resources
- name: Upload package for target - name: Upload package for target
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: ${{ inputs.profile }}-binary-macos-arm64 name: ${{ inputs.profile }}-binary-macos-arm64
path: target.tar.gz path: target.tar.gz
if-no-files-found: error
wpt-2020: wpt-2020:
if: ${{ inputs.wpt }} if: ${{ inputs.wpt }}
@@ -222,7 +223,7 @@ jobs:
target: 'macos-arm64' target: 'macos-arm64'
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
compressed-file-path: ${{ inputs.profile }}-binary-macos-arm64/target.tar.gz compressed-file-path: ${{ inputs.profile }}-binary-macos-arm64/target.tar.gz
binary-path: target/${{ inputs.profile }}/servo binary-path: target/${{ inputs.profile }}/servoshell
file-size: true file-size: true
speedometer: false speedometer: false
dromaeo: false dromaeo: false
@@ -255,4 +256,4 @@ jobs:
toolchain: ${{ steps.msrv.outputs.rust_version }} toolchain: ${{ steps.msrv.outputs.rust_version }}
- name: Compile libservo with MSRV - name: Compile libservo with MSRV
run: | run: |
cargo +${{ steps.msrv.outputs.rust_version }} build -p libservo --locked --all-targets cargo +${{ steps.msrv.outputs.rust_version }} build -p servo --locked

View File

@@ -38,7 +38,7 @@ jobs:
if: github.event_name == 'pull_request_target' if: github.event_name == 'pull_request_target'
with: with:
ref: refs/pull/${{ github.event.number }}/head ref: refs/pull/${{ github.event.number }}/head
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
name: ${{ inputs.profile }}-binary-${{ env.NAME }} name: ${{ inputs.profile }}-binary-${{ env.NAME }}
- name: Setup Python - name: Setup Python
@@ -47,7 +47,7 @@ jobs:
timeout-minutes: 60 timeout-minutes: 60
run: | run: |
gtar -xzf target.tar.gz gtar -xzf target.tar.gz
./mach bootstrap --skip-lints --skip-nextest ./mach bootstrap --yes --skip-lints --skip-nextest
- name: Smoketest - name: Smoketest
run: ./mach smoketest --profile ${{ inputs.profile }} run: ./mach smoketest --profile ${{ inputs.profile }}
- name: Run tests - name: Run tests
@@ -62,17 +62,19 @@ jobs:
--filter-intermittents wpt-filtered-logs/${{ env.NAME }}/${{ matrix.chunk_id }}.json --filter-intermittents wpt-filtered-logs/${{ env.NAME }}/${{ matrix.chunk_id }}.json
${{ inputs.wpt-args }} ${{ inputs.wpt-args }}
- name: Archive results (filtered) - name: Archive results (filtered)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
if: ${{ always() }} if: ${{ always() }}
with: with:
name: wpt-filtered-logs-${{ env.NAME }}-${{ matrix.chunk_id }} name: wpt-filtered-logs-${{ env.NAME }}-${{ matrix.chunk_id }}
path: wpt-filtered-logs/*/ path: wpt-filtered-logs/*/
if-no-files-found: error
- name: Archive results (full) - name: Archive results (full)
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
if: ${{ always() }} if: ${{ always() }}
with: with:
name: wpt-full-logs-${{ env.NAME }}-${{ matrix.chunk_id }} name: wpt-full-logs-${{ env.NAME }}-${{ matrix.chunk_id }}
path: wpt-full-logs/*/ path: wpt-full-logs/*/
if-no-files-found: error
report-test-results: report-test-results:
name: Process WPT Results name: Process WPT Results
@@ -81,13 +83,13 @@ jobs:
needs: mac-wpt needs: mac-wpt
steps: steps:
- name: Merge logs (filtered) - name: Merge logs (filtered)
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: wpt-filtered-logs-${{ env.NAME }} name: wpt-filtered-logs-${{ env.NAME }}
pattern: wpt-filtered-logs-${{ env.NAME }}-* pattern: wpt-filtered-logs-${{ env.NAME }}-*
delete-merged: true delete-merged: true
- name: Merge logs (full) - name: Merge logs (full)
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: wpt-full-logs-${{ env.NAME }} name: wpt-full-logs-${{ env.NAME }}
pattern: wpt-full-logs-${{ env.NAME }}-* pattern: wpt-full-logs-${{ env.NAME }}-*
@@ -103,11 +105,12 @@ jobs:
cat results/${{ env.NAME }}/*.log > stable-unexpected-results.log || true cat results/${{ env.NAME }}/*.log > stable-unexpected-results.log || true
- name: Upload aggregated results - name: Upload aggregated results
if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }} if: ${{ !cancelled() && !inputs.wpt-sync-from-upstream }}
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: stable-unexpected-results-${{ env.NAME }} name: stable-unexpected-results-${{ env.NAME }}
path: stable-unexpected-results.log path: stable-unexpected-results.log
- uses: actions/download-artifact@v4 if-no-files-found: error
- uses: actions/download-artifact@v8
if: ${{ !cancelled() }} if: ${{ !cancelled() }}
with: with:
name: wpt-filtered-logs-${{ env.NAME }} name: wpt-filtered-logs-${{ env.NAME }}

View File

@@ -2,6 +2,10 @@ name: MacOS
on: on:
workflow_call: workflow_call:
outputs:
artifact_ids:
value: ${{ jobs.build.outputs.artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
inputs: inputs:
profile: profile:
required: false required: false
@@ -26,13 +30,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
github-release-id:
required: false
type: string
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -63,10 +60,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -94,7 +87,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
github-hosted-runner-label: macos-15-intel github-hosted-runner-label: macos-15-intel
@@ -111,6 +104,8 @@ jobs:
- runner-select - runner-select
name: MacOS Build [${{ needs.runner-select.outputs.unique-id }}] name: MacOS Build [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
outputs:
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
steps: steps:
# XProtect can cause random failures if it decides that the DMG we create # XProtect can cause random failures if it decides that the DMG we create
# during the packaging phase is malware. # during the packaging phase is malware.
@@ -119,7 +114,7 @@ jobs:
- name: Kill XProtectBehaviorService - name: Kill XProtectBehaviorService
run: | run: |
echo Killing XProtect.; sudo pkill -9 XProtect >/dev/null || true; echo Killing XProtect.; sudo pkill -9 XProtect >/dev/null || true;
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
- if: runner.environment != 'self-hosted' - if: runner.environment != 'self-hosted'
name: Setup Python name: Setup Python
@@ -138,12 +133,12 @@ jobs:
- if: runner.environment != 'self-hosted' - if: runner.environment != 'self-hosted'
name: Bootstrap name: Bootstrap
run: | run: |
./mach bootstrap --skip-lints ./mach bootstrap --yes --skip-lints
brew install gnu-tar brew install gnu-tar
- name: Build (${{ inputs.profile }}) - name: Build (${{ inputs.profile }})
run: | run: |
./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }} ./mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }}
cp -r target/cargo-timings target/cargo-timings-macos mv target/cargo-timings target/cargo-timings-macos
- name: Smoketest - name: Smoketest
uses: nick-fields/retry@v3 uses: nick-fields/retry@v3
with: # See https://github.com/servo/servo/issues/30757 with: # See https://github.com/servo/servo/issues/30757
@@ -183,33 +178,32 @@ jobs:
max_attempts: 2 max_attempts: 2
command: ./etc/ci/macos_package_smoketest.sh target/${{ inputs.profile }}/servo-tech-demo.dmg command: ./etc/ci/macos_package_smoketest.sh target/${{ inputs.profile }}/servo-tech-demo.dmg
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-macos-${{ inputs.profile }} name: cargo-timings-macos-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-* path: target/cargo-timings-*
if-no-files-found: error
- name: Upload artifact for mach package - name: Upload artifact for mach package
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-dmg
with: with:
name: ${{ inputs.profile }}-binary-mac name: ${{ inputs.profile }}-binary-mac
path: target/${{ inputs.profile }}/servo-tech-demo.dmg path: target/${{ inputs.profile }}/servo-tech-demo.dmg
- name: Upload nightly if-no-files-found: error
if: ${{ inputs.upload }} - name: Collect artifact IDs needed by the release workflow
id: artifact_ids
shell: bash
run: | run: |
./mach upload-nightly mac --secret-from-environment \ echo "artifact_ids=${{ steps.upload-dmg.outputs.artifact-id }}" >> $GITHUB_OUTPUT
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
GITHUB_HOMEBREW_TOKEN: ${{ secrets.HOMEBREW_TOKEN }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
- name: Build package for target - name: Build package for target
run: gtar -czf target.tar.gz target/${{ inputs.profile }}/servo target/${{ inputs.profile }}/lib/*.dylib resources run: gtar -czf target.tar.gz target/${{ inputs.profile }}/servoshell target/${{ inputs.profile }}/lib/*.dylib resources
- name: Upload package for target - name: Upload package for target
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: ${{ inputs.profile }}-binary-macos name: ${{ inputs.profile }}-binary-macos
path: target.tar.gz path: target.tar.gz
if-no-files-found: error
wpt-2020: wpt-2020:
if: ${{ inputs.wpt }} if: ${{ inputs.wpt }}
@@ -230,7 +224,7 @@ jobs:
target: 'macos' target: 'macos'
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
compressed-file-path: ${{ inputs.profile }}-binary-macos/target.tar.gz compressed-file-path: ${{ inputs.profile }}-binary-macos/target.tar.gz
binary-path: target/${{ inputs.profile }}/servo binary-path: target/${{ inputs.profile }}/servoshell
file-size: true file-size: true
speedometer: false speedometer: false
dromaeo: false dromaeo: false
@@ -263,4 +257,4 @@ jobs:
toolchain: ${{ steps.msrv.outputs.rust_version }} toolchain: ${{ steps.msrv.outputs.rust_version }}
- name: Compile libservo with MSRV - name: Compile libservo with MSRV
run: | run: |
cargo +${{ steps.msrv.outputs.rust_version }} build -p libservo --locked --all-targets cargo +${{ steps.msrv.outputs.rust_version }} build -p servo --locked

View File

@@ -27,6 +27,7 @@ jobs:
python/servo/try_parser.py python/servo/try_parser.py
.github/actions/setup-python .github/actions/setup-python
.python-version .python-version
uv.lock
sparse-checkout-cone-mode: false sparse-checkout-cone-mode: false
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
@@ -35,7 +36,7 @@ jobs:
run: | run: |
{ {
echo 'result<<EOF' echo 'result<<EOF'
python ./python/servo/try_parser.py ${{ github.event_name == 'pull_request' && 'linux-unit-tests lint' || github.event_name == 'push' && 'full macos bencher production-bencher coverage' || 'fail-fast full macos-arm-unit-tests' }} python ./python/servo/try_parser.py ${{ github.event_name == 'pull_request' && 'linux-unit-tests lint' || github.event_name == 'push' && 'full macos bencher production-bencher coverage' || 'fail-fast full' }}
echo EOF echo EOF
} >> $GITHUB_OUTPUT } >> $GITHUB_OUTPUT
@@ -70,7 +71,7 @@ jobs:
- build - build
steps: steps:
- name: Merge build timings - name: Merge build timings
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: cargo-timings name: cargo-timings
pattern: cargo-timings-* pattern: cargo-timings-*

View File

@@ -1,165 +0,0 @@
name: Release nightly
on:
schedule:
# Run at 5:30 am, daily.
- cron: '15 5 * * *'
workflow_dispatch:
env:
RUST_BACKTRACE: 1
SHELL: /bin/bash
jobs:
create-draft-release:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Create Draft GH Release
runs-on: ubuntu-latest
steps:
- id: create-release
run: |
NIGHTLY_TAG=$(date "+%F")
RELEASE_URL=$(gh release create "${NIGHTLY_TAG}" \
--draft \
--title "${NIGHTLY_TAG}" \
--notes 'Nightly builds based on servo/servo@${{ github.sha }}' \
--repo ${NIGHTLY_REPO})
TEMP_TAG=$(basename "$RELEASE_URL")
RELEASE_ID=$( \
gh api -H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/${NIGHTLY_REPO}/releases/tags/${TEMP_TAG}" \
| jq '.id' \
)
echo "RELEASE_ID=${RELEASE_ID}" >> ${GITHUB_OUTPUT}
env:
GITHUB_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
outputs:
release-id: ${{ steps.create-release.outputs.RELEASE_ID }}
publish-nightly-release:
# This job is only useful when run on upstream servo.
if: always() && (github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
name: Publish GH Release for nightly
runs-on: ubuntu-latest
steps:
- name: Publish as latest (success)
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
run: |
gh api \
--method PATCH \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${NIGHTLY_REPO}/releases/${RELEASE_ID} \
-F draft=false
- name: Publish as latest (failure)
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
run: |
gh api \
--method PATCH \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${NIGHTLY_REPO}/releases/${RELEASE_ID} \
-F prerelease=true -F draft=false
env:
GITHUB_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
needs:
- create-draft-release
- upload-linux
- upload-win
- upload-mac
- upload-mac-arm64
- upload-android
- upload-ohos
upload-win:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (Windows)
needs:
- create-draft-release
uses: ./.github/workflows/windows.yml
with:
profile: "production"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
secrets: inherit
upload-mac:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (macOS)
needs:
- create-draft-release
uses: ./.github/workflows/mac.yml
with:
profile: "production"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
secrets: inherit
upload-mac-arm64:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (macOS Arm64)
needs:
- create-draft-release
uses: ./.github/workflows/mac-arm64.yml
with:
profile: "production"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
secrets: inherit
upload-linux:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (Linux)
needs:
- create-draft-release
uses: ./.github/workflows/linux.yml
with:
profile: "production"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
secrets: inherit
upload-android:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (Android)
needs:
- create-draft-release
permissions:
id-token: write
attestations: write
uses: ./.github/workflows/android.yml
with:
profile: "release"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
secrets: inherit
upload-ohos:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload nightly (OpenHarmony)
needs:
- create-draft-release
permissions:
id-token: write
attestations: write
uses: ./.github/workflows/ohos.yml
with:
profile: "production"
upload: true
github-release-id: ${{ needs.create-draft-release.outputs.release-id }}
secrets: inherit

View File

@@ -6,18 +6,18 @@ on:
required: false required: false
default: "release" default: "release"
type: string type: string
upload: upload_library:
required: false required: false
default: false default: false
type: boolean type: boolean
github-release-id:
required: false
type: string
bencher: bencher:
required: false required: false
default: false default: false
type: boolean type: boolean
outputs: outputs:
artifact_ids:
value: ${{ jobs.build-openharmony.outputs.artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
optional_job_status: optional_job_status:
description: "Status of optional jobs (as an object)" description: "Status of optional jobs (as an object)"
value: ${{ jobs.collect-job-results.outputs.collected_job_status }} value: ${{ jobs.collect-job-results.outputs.collected_job_status }}
@@ -39,25 +39,28 @@ env:
SHELL: /bin/bash SHELL: /bin/bash
CARGO_INCREMENTAL: 0 CARGO_INCREMENTAL: 0
BENCHER_PROJECT: ${{ vars.BENCHER_PROJECT || 'servo' }} BENCHER_PROJECT: ${{ vars.BENCHER_PROJECT || 'servo' }}
HITRACE_BENCH_VERSION: 0.9.0 HITRACE_BENCH_VERSION: 0.11.1
MITMDUMP_CACHE_KEY: mitmdump-ohos-cache-0.1
jobs: jobs:
build: build-openharmony:
name: OpenHarmony Build name: OpenHarmony Build
runs-on: ubuntu-22.04 timeout-minutes: 60
runs-on: ubuntu-24.04
strategy: strategy:
matrix: matrix:
target: ["aarch64-unknown-linux-ohos", "x86_64-unknown-linux-ohos"] target: ["aarch64-unknown-linux-ohos", "x86_64-unknown-linux-ohos"]
outputs: outputs:
artifact_ids: ${{ steps.artifact_ids.outputs.artifact_ids }}
signed: ${{ steps.signing_config.outputs.signed }} signed: ${{ steps.signing_config.outputs.signed }}
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
if: github.event_name != 'pull_request_target' if: github.event_name != 'pull_request_target'
with: with:
fetch-depth: 2 fetch-depth: 2
# This is necessary to checkout the pull request if this run was triggered via a # This is necessary to checkout the pull request if this run was triggered via a
# `pull_request_target` event. # `pull_request_target` event.
- uses: actions/checkout@v5 - uses: actions/checkout@v6
if: github.event_name == 'pull_request_target' if: github.event_name == 'pull_request_target'
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
@@ -66,18 +69,21 @@ jobs:
run: cargo install --path support/crown run: cargo install --path support/crown
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Change Mirror Priorities
uses: ./.github/actions/apt-mirrors
- name: Bootstrap dependencies - name: Bootstrap dependencies
run: sudo apt update && ./mach bootstrap --skip-lints --skip-nextest timeout-minutes: 30
run: sudo apt update && ./mach bootstrap --yes --skip-lints --skip-nextest
- name: Setup OpenHarmony SDK - name: Setup OpenHarmony SDK
id: setup_sdk id: setup_sdk
uses: openharmony-rs/setup-ohos-sdk@v0.2.3 uses: openharmony-rs/setup-ohos-sdk@v0.2.4
with: with:
version: "5.0.2" version: "6.0.0.1" # api 20 in openharmony
fixup-path: true fixup-path: true
- name: Install node for hvigor - name: Install node for hvigor
uses: actions/setup-node@v4 uses: actions/setup-node@v6
with: with:
node-version: 18 node-version: 24
- name: Install hvigor modules - name: Install hvigor modules
run: | run: |
mkdir ~/hvigor-installation mkdir ~/hvigor-installation
@@ -89,7 +95,7 @@ jobs:
id: signing_config id: signing_config
env: env:
SIGNING_MATERIAL: ${{ secrets.SERVO_OHOS_SIGNING_MATERIAL }} SIGNING_MATERIAL: ${{ secrets.SERVO_OHOS_SIGNING_MATERIAL }}
if: ${{ inputs.upload || env.SIGNING_MATERIAL != '' }} # Allows the build to pass on forks. if: ${{ env.SIGNING_MATERIAL != '' }} # Allows the build to pass on forks.
run: | run: |
cd ~ cd ~
echo "${SIGNING_MATERIAL}" | base64 -d > servo-ohos-material.zip echo "${SIGNING_MATERIAL}" | base64 -d > servo-ohos-material.zip
@@ -102,43 +108,49 @@ jobs:
OHOS_BASE_SDK_HOME: ${{ steps.setup_sdk.outputs.ohos-base-sdk-home }} OHOS_BASE_SDK_HOME: ${{ steps.setup_sdk.outputs.ohos-base-sdk-home }}
run: | run: |
./mach build --locked --target ${{ matrix.target }} --profile ${{ inputs.profile }} ./mach build --locked --target ${{ matrix.target }} --profile ${{ inputs.profile }}
cp -r target/cargo-timings target/cargo-timings-ohos-${{ matrix.target }} mv target/cargo-timings target/cargo-timings-ohos-${{ matrix.target }}
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-ohos-${{ matrix.target }}-${{ inputs.profile }} name: cargo-timings-ohos-${{ matrix.target }}-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-* path: target/cargo-timings-*
- name: Upload nightly if-no-files-found: error
if: ${{ inputs.upload && contains(matrix.target, 'aarch64') }} - name: Upload shared library
run: | if: ${{ inputs.upload_library }}
./mach upload-nightly ohos \ uses: actions/upload-artifact@v7
--secret-from-environment \ id: upload-library
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
- name: Generate artifact attestation for HAP
if: ${{ inputs.upload }}
uses: actions/attest-build-provenance@v1
with: with:
subject-path: target/openharmony/${{ matrix.target }}/${{ inputs.profile }}/entry/build/default/outputs/default/servoshell-default-signed.hap name: ${{ inputs.profile }}-library-ohos-${{ matrix.target }}
path: target/${{ matrix.target }}/${{ inputs.profile }}/libservoshell.so
if-no-files-found: error
- name: Upload signed HAP artifact - name: Upload signed HAP artifact
if: ${{ env.SERVO_OHOS_SIGNING_CONFIG != '' }} # Build output has different name if not signed. if: ${{ env.SERVO_OHOS_SIGNING_CONFIG != '' }} # Build output has different name if not signed.
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-hap-signed
with: with:
name: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }} name: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }}
path: target/openharmony/${{ matrix.target }}/${{ inputs.profile }}/entry/build/default/outputs/default/servoshell-default-signed.hap path: target/openharmony/${{ matrix.target }}/${{ inputs.profile }}/entry/build/default/outputs/default/servoshell-default-signed.hap
if-no-files-found: error
- name: Upload unsigned HAP artifact - name: Upload unsigned HAP artifact
if: ${{ env.SERVO_OHOS_SIGNING_CONFIG == '' }} # Build output has different name if not signed. if: ${{ env.SERVO_OHOS_SIGNING_CONFIG == '' }} # Build output has different name if not signed.
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-hap-unsigned
with: with:
name: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }} name: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }}
path: target/openharmony/${{ matrix.target }}/${{ inputs.profile }}/entry/build/default/outputs/default/servoshell-default-unsigned.hap path: target/openharmony/${{ matrix.target }}/${{ inputs.profile }}/entry/build/default/outputs/default/servoshell-default-unsigned.hap
if-no-files-found: error
- name: Collect artifact IDs needed by the release workflow
# The implicit assumption here is that `upload_library` is true and the signed hap is uploaded,
# since this output will only be consumed by the release workflow.
if: matrix.target == 'aarch64-unknown-linux-ohos'
id: artifact_ids
shell: bash
run: |
echo "artifact_ids=${{steps.upload-library.outputs.artifact-id}},${{steps.upload-hap-signed.outputs.artifact-id}}" >> $GITHUB_OUTPUT
bencher: bencher:
needs: ["build"] needs: ["build-openharmony"]
strategy: strategy:
matrix: matrix:
target: ["aarch64-unknown-linux-ohos", "x86_64-unknown-linux-ohos"] target: ["aarch64-unknown-linux-ohos", "x86_64-unknown-linux-ohos"]
@@ -147,7 +159,7 @@ jobs:
with: with:
target: ohos-${{ matrix.target }} target: ohos-${{ matrix.target }}
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
compressed-file-path: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }}/servoshell-default-${{ needs.build.outputs.signed && 'signed' || 'unsigned' }}.hap compressed-file-path: ${{ inputs.profile }}-binary-ohos-${{ matrix.target }}/servoshell-default-${{ needs.build-openharmony.outputs.signed && 'signed' || 'unsigned' }}.hap
binary-path: libs/${{ matrix.target == 'aarch64-unknown-linux-ohos' && 'arm64-v8a' || matrix.target == 'x86_64-unknown-linux-ohos' && 'x86_64' }}/libservoshell.so binary-path: libs/${{ matrix.target == 'aarch64-unknown-linux-ohos' && 'arm64-v8a' || matrix.target == 'x86_64-unknown-linux-ohos' && 'x86_64' }}/libservoshell.so
file-size: true file-size: true
speedometer: false speedometer: false
@@ -158,6 +170,7 @@ jobs:
# if we figure out how to make hvigor build for harmonyos without the HOS commandline-tools installed. # if we figure out how to make hvigor build for harmonyos without the HOS commandline-tools installed.
build-harmonyos-aarch64: build-harmonyos-aarch64:
name: HarmonyOS Build (aarch64) name: HarmonyOS Build (aarch64)
timeout-minutes: 60
runs-on: hos-builder runs-on: hos-builder
if: github.repository == 'servo/servo' if: github.repository == 'servo/servo'
outputs: outputs:
@@ -177,81 +190,12 @@ jobs:
- name: Build for aarch64 HarmonyOS - name: Build for aarch64 HarmonyOS
run: | run: |
./mach build --locked --target aarch64-unknown-linux-ohos --profile=${{ inputs.profile }} --flavor=harmonyos --no-default-features --features tracing,tracing-hitrace ./mach build --locked --target aarch64-unknown-linux-ohos --profile=${{ inputs.profile }} --flavor=harmonyos --no-default-features --features tracing,tracing-hitrace
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v7
with: with:
# Upload the **unsigned** artifact - We don't have the signing materials in pull request workflows # Upload the **unsigned** artifact - We don't have the signing materials in pull request workflows
name: servoshell-hos-${{ inputs.profile }}.hap name: servoshell-hos-${{ inputs.profile }}.hap
path: target/openharmony/aarch64-unknown-linux-ohos/${{ inputs.profile }}/entry/build/harmonyos/outputs/default/servoshell-default-unsigned.hap path: target/openharmony/aarch64-unknown-linux-ohos/${{ inputs.profile }}/entry/build/harmonyos/outputs/default/servoshell-default-unsigned.hap
- name: Save result as job output if-no-files-found: error
id: result
if: always()
run: echo "JOB_STATUS=${{ job.status }}" | tee $GITHUB_OUTPUT
test-harmonyos-aarch64:
name: Test HarmonyOS aarch64
# Don't block servos Merge queue on this job failing.
# Since we just added this, there might be some hidden issues,
# so in the beginning we will just do a best effort approach but ignore errors.
continue-on-error: true
runs-on: hos-runner
if: github.repository == 'servo/servo' && needs.build-harmonyos-aarch64.outputs.job_status == 'success'
needs: build-harmonyos-aarch64
outputs:
job_status: ${{ steps.result.outputs.JOB_STATUS }}
steps:
- uses: actions/download-artifact@v4
with:
# Name of the artifact to download.
# If unspecified, all artifacts for the run are downloaded.
name: servoshell-hos-${{ inputs.profile }}.hap
- name: Test hdc device
# First we ensure a device is actually connected and working.
run: hdc list targets && hdc shell echo hello world
- name: Sign the hap
run: |
ls -la
/usr/bin/sign-hos.sh servoshell-default-unsigned.hap servoshell-hos-signed.hap
- name: Install
run: |
# Uninstall first. hdc is not very reliable in terms of exiting with an error, so we uninstall first
# to make sure we don't use a previous version if installation failed for some reason.
hdc uninstall org.servo.servo
hdc install -r servoshell-hos-signed.hap
- name: Test loading servo.org
env:
TRACE_BUFFER_SZ_KB: "524288" # 512 MB
run: |
mkdir test_output
hdc shell aa force-stop org.servo.servo
# Hitrace allows us to save application and system traces, which is useful to analyze performance.
# The main reason however, is that we can use the application traces to determine if servo
# successfully reaches certain locations in the code, in particular if a page is successfully loaded.
hdc shell hitrace -b "${TRACE_BUFFER_SZ_KB}" app graphic ohos freq idle memory --trace_begin
# We start servo, tell it to load a website (servo.org).
hdc shell aa start -a EntryAbility -b org.servo.servo -U https://servo.org
servo_pid=$(hdc shell pidof org.servo.servo)
# We don't really know how long servo needs to load a webpage, so we just wait 10s.
sleep 10
# We dump the trace in ftrace format to disk
hdc shell hitrace -b "${TRACE_BUFFER_SZ_KB}" --trace_finish -o /data/local/tmp/ohtrace.txt
hdc shell snapshot_display -f /data/local/tmp/servo.jpeg
hdc file recv /data/local/tmp/servo.jpeg test_output/servo_hos_screenshot.jpeg
hdc file recv /data/local/tmp/ohtrace.txt test_output/servo.ftrace
# To limit the logsize we only save logs from servo.
hdc shell hilog --exit -D 0xE0C3 > test_output/servo.log
# todo: Also benchmark some other websites....
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: test_output
name: hos-${{ inputs.profile }}-test-output
- name: Check success
run: |
# would be empty if servo crashed.
servo_pid=$(hdc shell pidof org.servo.servo)
[[ $servo_pid =~ ^[0-9]+$ ]] || { echo "It looks like servo crashed!" ; exit 1; }
# If the grep fails, then the trace output for the "page loaded" prompt is missing
grep 'tracing_mark_write.*PageLoadEndedPrompt' test_output/servo.ftrace
- name: Save result as job output - name: Save result as job output
id: result id: result
if: always() if: always()
@@ -259,17 +203,18 @@ jobs:
bench-harmonyos-aarch64: bench-harmonyos-aarch64:
name: Benching HarmonyOS aarch64 name: Benching HarmonyOS aarch64
timeout-minutes: 40
env: env:
# This will ensure the scenario pyproject.toml is picked up and the correct venv used. # This will ensure the scenario pyproject.toml is picked up and the correct venv used.
UV_PROJECT: "etc/ci/scenario" UV_PROJECT: "etc/ci/scenario"
continue-on-error: true continue-on-error: true
runs-on: hos-runner runs-on: hos-runner
needs: test-harmonyos-aarch64 needs: build-harmonyos-aarch64
outputs: outputs:
job_status: ${{ steps.result.outputs.JOB_STATUS }} job_status: ${{ steps.result.outputs.JOB_STATUS }}
if: github.repository == 'servo/servo' && needs.build-harmonyos-aarch64.outputs.job_status == 'success' if: github.repository == 'servo/servo' && needs.build-harmonyos-aarch64.outputs.job_status == 'success'
steps: steps:
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
# Name of the artifact to download. # Name of the artifact to download.
# If unspecified, all artifacts for the run are downloaded. # If unspecified, all artifacts for the run are downloaded.
@@ -288,13 +233,13 @@ jobs:
# to make sure we don't use a previous version if installation failed for some reason. # to make sure we don't use a previous version if installation failed for some reason.
hdc uninstall org.servo.servo hdc uninstall org.servo.servo
hdc install -r servoshell-hos-signed.hap hdc install -r servoshell-hos-signed.hap
- uses: actions/checkout@v5 - uses: actions/checkout@v6
if: github.event_name != 'pull_request_target' if: github.event_name != 'pull_request_target'
with: with:
fetch-depth: 0 fetch-depth: 0
# This is necessary to checkout the pull request if this run was triggered via a # This is necessary to checkout the pull request if this run was triggered via a
# `pull_request_target` event. # `pull_request_target` event.
- uses: actions/checkout@v5 - uses: actions/checkout@v6
if: github.event_name == 'pull_request_target' if: github.event_name == 'pull_request_target'
with: with:
ref: ${{ github.event.pull_request.head.sha }} ref: ${{ github.event.pull_request.head.sha }}
@@ -344,9 +289,32 @@ jobs:
- name: Setup complete - name: Setup complete
id: setup_complete id: setup_complete
run: echo "Setup complete" run: echo "Setup complete"
- name: Get mitmproxy cache
id: mitmproxy-cache
uses: actions/cache@v5
with:
path: /tmp/mitmproxy-dump
key: ${{ env.MITMDUMP_CACHE_KEY }}
- name: Generate mitmproxy dump
if: steps.mitmproxy-cache.outputs.cache-hit != 'true'
run: uv run etc/ci/scenario/update_mitmproxy_dump.py /tmp/mitmproxy-dump
- name: Save Cache
if: steps.mitmproxy-cache.outputs.cache-hit != 'true'
id: cache-mitmproxy-save
uses: actions/cache/save@v5
with:
path: /tmp/mitmproxy-dump
key: ${{ env.MITMDUMP_CACHE_KEY }}
- name: "Run benchmark" - name: "Run benchmark"
id: hitrace_bench id: hitrace_bench
run: hitrace-bench -r support/hitrace-bencher/runs.json --bencher -p ${{ inputs.profile }} run: hitrace-bench -r support/hitrace-bencher/runs.json --bencher -p ${{ inputs.profile }}
- name: Upload failure screenshots
if: ${{ steps.hitrace_bench.success == 'failure' }}
uses: actions/upload-artifact@v7
with:
name: bencher-${{ inputs.profile }}-failure-screenshot
path: "/tmp/servo.jpeg"
if-no-files-found: error
- name: Run speedometer - name: Run speedometer
id: speedometer id: speedometer
run: uv run ./etc/ci/scenario/servo_speedometer.py ${{ inputs.profile }} run: uv run ./etc/ci/scenario/servo_speedometer.py ${{ inputs.profile }}
@@ -361,19 +329,20 @@ jobs:
hdc file recv /data/local/tmp/servo.jpeg speedometer_error_logs/servo_hos_screenshot.jpeg hdc file recv /data/local/tmp/servo.jpeg speedometer_error_logs/servo_hos_screenshot.jpeg
# Todo: Upload logs. This is currently not possible since the test-speedometer-ohos command # Todo: Upload logs. This is currently not possible since the test-speedometer-ohos command
# sets a log filter, which filters everything except JS console output. # sets a log filter, which filters everything except JS console output.
- uses: actions/upload-artifact@v4 - uses: actions/upload-artifact@v7
if: ${{ !cancelled() && steps.speedometer.outcome == 'failure' }} if: ${{ !cancelled() && steps.speedometer.outcome == 'failure' }}
with: with:
name: ohos-speedometer-failure-${{ matrix.target }}-${{ inputs.profile }} name: ohos-speedometer-failure-${{ matrix.target }}-${{ inputs.profile }}
path: speedometer_error_logs path: speedometer_error_logs
if-no-files-found: error
- name: Combining bencher files - name: Combining bencher files
if: ${{ !cancelled() && steps.setup_complete.outcome == 'success' }} if: ${{ !cancelled() && steps.setup_complete.outcome == 'success' }}
run: jq --compact-output --slurp add speedometer.json bench.json > combined-bencher.json run: jq --compact-output --slurp add speedometer.json bench.json > combined-bencher.json
- name: Uploading to bencher.dev - name: Uploading to bencher.dev
# Post to bencher if at least one of the benchmarks succeeded. # Post to bencher if at least one of the benchmarks succeeded.
if: | if: |
${{ !cancelled() && steps.setup_complete.outcome == 'success' ${{ !cancelled() && steps.setup_complete.outcome == 'success'
&& (steps.hitrace_bench.outcome == 'success' && (steps.hitrace_bench.outcome == 'success'
|| steps.speedometer.outcome == 'success') || steps.speedometer.outcome == 'success')
}} }}
# Note: That e.g. `--start-point` is ignored if it is an empty string, # Note: That e.g. `--start-point` is ignored if it is an empty string,
@@ -395,6 +364,7 @@ jobs:
scenario-test-harmonyos: scenario-test-harmonyos:
name: Mossel Scenario test name: Mossel Scenario test
continue-on-error: true continue-on-error: true
timeout-minutes: 20
runs-on: hos-runner runs-on: hos-runner
if: github.repository == 'servo/servo' && needs.build-harmonyos-aarch64.outputs.job_status == 'success' if: github.repository == 'servo/servo' && needs.build-harmonyos-aarch64.outputs.job_status == 'success'
needs: build-harmonyos-aarch64 needs: build-harmonyos-aarch64
@@ -404,7 +374,7 @@ jobs:
# This will ensure the scenario pyproject.toml is picked up and the correct venv used. # This will ensure the scenario pyproject.toml is picked up and the correct venv used.
UV_PROJECT: "etc/ci/scenario" UV_PROJECT: "etc/ci/scenario"
steps: steps:
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
# Name of the artifact to download. # Name of the artifact to download.
# If unspecified, all artifacts for the run are downloaded. # If unspecified, all artifacts for the run are downloaded.
@@ -424,10 +394,26 @@ jobs:
hdc uninstall org.servo.servo hdc uninstall org.servo.servo
hdc install -r servoshell-hos-signed.hap hdc install -r servoshell-hos-signed.hap
- name: Checkout scenario scripts - name: Checkout scenario scripts
uses: actions/checkout@v5 uses: actions/checkout@v6
with: with:
sparse-checkout: | sparse-checkout: |
etc/ci/scenario etc/ci/scenario
- name: Get mitmproxy cache
id: mitmproxy-cache
uses: actions/cache@v5
with:
path: /tmp/mitmproxy-dump
key: ${{ env.MITMDUMP_CACHE_KEY }}
- name: Generate mitmproxy dump
if: steps.mitmproxy-cache.outputs.cache-hit != 'true'
run: uv run etc/ci/scenario/update_mitmproxy_dump.py /tmp/mitmproxy-dump
- name: Save Cache
if: steps.mitmproxy-cache.outputs.cache-hit != 'true'
id: cache-mitmproxy-save
uses: actions/cache/save@v5
with:
path: /tmp/mitmproxy-dump
key: ${{ env.MITMDUMP_CACHE_KEY }}
- name: Test loading servo.org - name: Test loading servo.org
run: uv run ./etc/ci/scenario/servo_test_open_page_servo.py run: uv run ./etc/ci/scenario/servo_test_open_page_servo.py
- name: Test loading Mossel homepage - name: Test loading Mossel homepage
@@ -441,10 +427,11 @@ jobs:
run: uv run ./etc/ci/scenario/servo_test_slide.py run: uv run ./etc/ci/scenario/servo_test_slide.py
- name: Upload failure screenshots - name: Upload failure screenshots
if: ${{ steps.install_hap.outcome == 'success' && failure() }} if: ${{ steps.install_hap.outcome == 'success' && failure() }}
uses: actions/upload-artifact@v5 uses: actions/upload-artifact@v7
with: with:
name: hos-${{ inputs.profile }}-scenario-failures-screenshots name: hos-${{ inputs.profile }}-scenario-failures-screenshots
path: "servo_scenario_*_error.jpg" path: "servo_scenario_*_error.jpg"
if-no-files-found: error
- name: Save result as job output - name: Save result as job output
id: result id: result
if: always() if: always()
@@ -456,17 +443,16 @@ jobs:
collect-job-results: collect-job-results:
name: Collect Job Results name: Collect Job Results
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [build-harmonyos-aarch64, bench-harmonyos-aarch64, test-harmonyos-aarch64, scenario-test-harmonyos] needs: [build-harmonyos-aarch64, bench-harmonyos-aarch64, scenario-test-harmonyos]
outputs: outputs:
collected_job_status: ${{ steps.result.outputs.JOB_RESULTS_JSON }} collected_job_status: ${{ steps.result.outputs.JOB_RESULTS_JSON }}
steps: steps:
- name: Save result as job output - name: Save result as job output
id: result id: result
run: | run: |
JSON_FMT='{"build-harmonyos-aarch64":{"result":"%s"},"bench-harmonyos-aarch64":{"result":"%s"},"test-harmonyos-aarch64":{"result":"%s"},"scenario-test-harmonyos":{"result":"%s"}}' JSON_FMT='{"build-harmonyos-aarch64":{"result":"%s"},"bench-harmonyos-aarch64":{"result":"%s"},"scenario-test-harmonyos":{"result":"%s"}}'
printf "JOB_RESULTS_JSON=$JSON_FMT" \ printf "JOB_RESULTS_JSON=$JSON_FMT" \
"${{ needs.build-harmonyos-aarch64.outputs.job_status }}" \ "${{ needs.build-harmonyos-aarch64.outputs.job_status }}" \
"${{ needs.bench-harmonyos-aarch64.outputs.job_status }}" \ "${{ needs.bench-harmonyos-aarch64.outputs.job_status }}" \
"${{ needs.test-harmonyos-aarch64.outputs.job_status }}" \
"${{ needs.scenario-test-harmonyos.outputs.job_status }}" \ "${{ needs.scenario-test-harmonyos.outputs.job_status }}" \
>> $GITHUB_OUTPUT >> $GITHUB_OUTPUT

457
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,457 @@
name: Release
on:
schedule:
# Run at 22:15 pm, daily.
# To make sure it finishes in time before next WPT daily epoch run
- cron: '15 22 * * *'
workflow_dispatch:
inputs:
# Note: On scheduled runs `inputs.regular_release` will be `null`, which allows us to create
# defaults by using `${{ inputs.regular_release || 'my_default_value' }}` expressions.
regular_release:
description: '`true` to create a release on this repo, false to release to the nightly-releases repo'
type: boolean
default: false
release_tag:
required: true
type: string
description: 'The tag to create for the release'
env:
RUST_BACKTRACE: 1
SHELL: /bin/bash
RELEASE_REPO: ${{ github.repository_owner }}/${{ inputs.regular_release && 'servo' || 'servo-nightly-builds' }}
jobs:
create-draft-release:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Create Draft GH Release
runs-on: ubuntu-latest
environment: &publish-environment
name: publish
deployment: false
steps:
- id: create-release
run: |
if [[ "${{ inputs.release_tag }}" != "" ]]; then
RELEASE_TAG="${{ inputs.release_tag }}"
RELEASE_NOTES="Servo release ${{ inputs.release_tag }}"
else
RELEASE_TAG=$(date "+%F")
RELEASE_NOTES="Nightly build based on servo/servo@${{ github.sha }}"
fi
RELEASE_URL=$(gh release create "${RELEASE_TAG}" \
--draft \
--title "${RELEASE_TAG}" \
--notes "${RELEASE_NOTES}" \
--repo ${RELEASE_REPO})
TEMP_TAG=$(basename "$RELEASE_URL")
RELEASE_ID=$( \
gh api -H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"/repos/${RELEASE_REPO}/releases/tags/${TEMP_TAG}" \
| jq '.id' \
)
echo "RELEASE_ID=${RELEASE_ID}" >> ${GITHUB_OUTPUT}
echo "RELEASE_TAG=${RELEASE_TAG}" >> ${GITHUB_OUTPUT}
env:
GITHUB_TOKEN: ${{ inputs.regular_release && github.token || secrets.NIGHTLY_REPO_TOKEN }}
outputs:
release-id: ${{ steps.create-release.outputs.RELEASE_ID }}
release-tag: ${{ steps.create-release.outputs.RELEASE_TAG }}
publish-nightly-release:
# We only auto-publish nightly releases, so we do not use this job for regular releases.
if: |
always()
&& (github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
name: Publish GH Release
runs-on: ubuntu-latest
environment: *publish-environment
steps:
- name: Publish as latest (success)
if: ${{ !contains(needs.*.result, 'failure') && (!contains(needs.*.result, 'cancelled') && !cancelled()) }}
run: |
gh api \
--method PATCH \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${RELEASE_REPO}/releases/${RELEASE_ID} \
-F draft=false
- name: Publish as latest (failure)
if: ${{ contains(needs.*.result, 'failure') || (contains(needs.*.result, 'cancelled') || cancelled()) }}
run: |
gh api \
--method PATCH \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${RELEASE_REPO}/releases/${RELEASE_ID} \
-F prerelease=true -F draft=false
env:
GITHUB_TOKEN: ${{ inputs.regular_release && github.token || secrets.NIGHTLY_REPO_TOKEN }}
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
needs:
- create-draft-release
- upload-vendored-source
- upload-linux-nightly
- upload-win-nightly
- upload-mac-nightly
- upload-mac-arm64-nightly
- upload-android-nightly
- upload-ohos-nightly
build-win:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build production release (Windows)
uses: ./.github/workflows/windows.yml
with:
profile: "production"
upload_zip: true
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
upload-vendored-source:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Upload vendored source archive
runs-on: ubuntu-latest
permissions:
contents: write
id-token: write
attestations: write
environment:
name: publish
deployment: false
env:
ARTIFACT_BASENAME: "servo-${{ needs.create-draft-release.outputs.release-tag }}-src-vendored"
ARTIFACT_FILENAME: "servo-${{ needs.create-draft-release.outputs.release-tag }}-src-vendored.tar.gz"
needs:
- create-draft-release
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 1
- name: Generate vendored archive
run: |
python3 etc/vendor_servo.py --filename "${ARTIFACT_BASENAME}"
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v3
with:
subject-path: ${{ env.ARTIFACT_FILENAME }}
- name: Upload vendored archive to release
run: |
gh release upload "${{ needs.create-draft-release.outputs.release-tag }}" \
"${ARTIFACT_FILENAME}" \
--repo "${RELEASE_REPO}"
env:
GITHUB_TOKEN: ${{ inputs.regular_release && github.token || secrets.NIGHTLY_REPO_TOKEN }}
upload-win-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: &nightly-upload-permissions
id-token: write
attestations: write
environment: *publish-environment
needs:
- create-draft-release
- build-win
env:
ARTIFACT_IDS: ${{ needs.build-win.outputs.artifact_ids }}
ARTIFACT_PLATFORM: windows-msvc
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: &upload-release-steps
- uses: actions/checkout@v6
with:
sparse-checkout: |
.github
etc/ci
fetch-depth: 1
- name: Setup Python
uses: ./.github/actions/setup-python
- name: Validate artifact IDs
run: |
if [[ -z "${ARTIFACT_IDS}" ]]; then
echo "Error: No artifact IDs provided."
echo "Help: Check the build job's outputs.artifact_ids value."
echo "If you recently renamed the build job without updating the corresponding output reference,"
echo "that is likely the cause of this error."
exit 1
fi
- uses: actions/download-artifact@v8
with:
artifact-ids: ${{ env.ARTIFACT_IDS }}
merge-multiple: true
path: release-artifacts
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v3
with:
subject-path: release-artifacts/*
- name: Upload release artifacts
run: |
./etc/ci/upload_nightly.py "${ARTIFACT_PLATFORM}" \
--secret-from-environment \
--github-release-id "${GITHUB_RELEASE_ID}" \
release-artifacts/*
upload-win-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: &release-upload-permissions
id-token: write
attestations: write
# Necessary for the github token to upload artifacts to the release.
contents: write
environment: *publish-environment
needs:
- create-draft-release
- build-win
env:
ARTIFACT_IDS: ${{ needs.build-win.outputs.artifact_ids }}
ARTIFACT_PLATFORM: windows-msvc
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
build-mac:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build production release (macOS)
uses: ./.github/workflows/mac.yml
with:
profile: "production"
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
upload-mac-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: *nightly-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-mac
env:
ARTIFACT_IDS: ${{ needs.build-mac.outputs.artifact_ids }}
ARTIFACT_PLATFORM: mac
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
upload-mac-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: *release-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-mac
env:
ARTIFACT_IDS: ${{ needs.build-mac.outputs.artifact_ids }}
ARTIFACT_PLATFORM: mac
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
build-mac-arm64:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build production release (macOS Arm64)
uses: ./.github/workflows/mac-arm64.yml
with:
profile: "production"
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
upload-mac-arm64-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: *nightly-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-mac-arm64
env:
ARTIFACT_IDS: ${{ needs.build-mac-arm64.outputs.artifact_ids }}
ARTIFACT_PLATFORM: mac-arm64
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
upload-mac-arm64-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: *release-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-mac-arm64
env:
ARTIFACT_IDS: ${{ needs.build-mac-arm64.outputs.artifact_ids }}
ARTIFACT_PLATFORM: mac-arm64
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
build-linux:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build production release (Linux)
uses: ./.github/workflows/linux.yml
with:
profile: "production"
force-github-hosted-runner: true # <https://github.com/servo/servo/issues/33296>
upload-linux-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: *nightly-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-linux
env:
ARTIFACT_IDS: ${{ needs.build-linux.outputs.artifact_ids }}
ARTIFACT_PLATFORM: linux
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
upload-linux-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: *release-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-linux
env:
ARTIFACT_IDS: ${{ needs.build-linux.outputs.artifact_ids }}
ARTIFACT_PLATFORM: linux
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
build-android:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build release (Android)
uses: ./.github/workflows/android.yml
with:
profile: "release"
secrets: inherit
upload-android-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: *nightly-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-android
env:
ARTIFACT_IDS: ${{ needs.build-android.outputs.artifact_ids }}
ARTIFACT_PLATFORM: android
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
upload-android-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: *release-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-android
env:
ARTIFACT_IDS: ${{ needs.build-android.outputs.artifact_ids }}
ARTIFACT_PLATFORM: android
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
build-ohos:
# This job is only useful when run on upstream servo.
if: github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch'
name: Build production release (OpenHarmony)
uses: ./.github/workflows/ohos.yml
with:
profile: "production"
upload_library: true
secrets: inherit
upload-ohos-nightly:
# Only run scheduled nightly builds on upstream servo.
if: |
(github.repository == 'servo/servo' || github.event_name == 'workflow_dispatch')
&& (inputs.regular_release || false) == false
runs-on: ubuntu-latest
permissions: *nightly-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-ohos
env:
ARTIFACT_IDS: ${{ needs.build-ohos.outputs.artifact_ids }}
ARTIFACT_PLATFORM: ohos
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo-nightly-builds
RELEASE_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps
upload-ohos-release:
if: github.event_name == 'workflow_dispatch' && inputs.regular_release
runs-on: ubuntu-latest
permissions: *release-upload-permissions
environment: *publish-environment
needs:
- create-draft-release
- build-ohos
env:
ARTIFACT_IDS: ${{ needs.build-ohos.outputs.artifact_ids }}
ARTIFACT_PLATFORM: ohos
GITHUB_RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }}
RELEASE_REPO: ${{ github.repository_owner }}/servo
RELEASE_REPO_TOKEN: ${{ github.token }}
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
steps: *upload-release-steps

View File

@@ -29,15 +29,17 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v5 uses: actions/checkout@v5
- uses: actions/download-artifact@v4 - uses: actions/download-artifact@v8
with: with:
name: wpt-full-logs-linux name: wpt-full-logs-linux
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
- name: Change Mirror Priorities
uses: ./.github/actions/apt-mirrors
- name: Prep environment - name: Prep environment
run: | run: |
sudo apt update sudo apt update
./mach bootstrap --skip-lints --skip-nextest ./mach bootstrap --yes --skip-lints --skip-nextest
- name: Add upstream remote - name: Add upstream remote
run: | run: |
git config --local user.email "ghbot+wpt-sync@servo.org" git config --local user.email "ghbot+wpt-sync@servo.org"
@@ -54,6 +56,7 @@ jobs:
echo "CURRENT_DATE=$CURRENT_DATE" >> $GITHUB_ENV echo "CURRENT_DATE=$CURRENT_DATE" >> $GITHUB_ENV
./mach update-wpt linux/raw/*.log ./mach update-wpt linux/raw/*.log
git add tests/wpt/meta git add tests/wpt/meta
uv lock
git commit -a --amend -s --no-edit git commit -a --amend -s --no-edit
- name: Push changes - name: Push changes
uses: ad-m/github-push-action@master uses: ad-m/github-push-action@master

View File

@@ -15,7 +15,7 @@ jobs:
try_string: ${{ steps.try_string.outputs.result }} try_string: ${{ steps.try_string.outputs.result }}
steps: steps:
- name: Collect Labels - name: Collect Labels
uses: actions/github-script@v7 uses: actions/github-script@v8
id: try_string id: try_string
with: with:
result-encoding: string result-encoding: string
@@ -72,6 +72,7 @@ jobs:
python/servo/try_parser.py python/servo/try_parser.py
.github/actions/setup-python .github/actions/setup-python
.python-version .python-version
uv.lock
sparse-checkout-cone-mode: false sparse-checkout-cone-mode: false
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
@@ -86,7 +87,7 @@ jobs:
} >> $GITHUB_OUTPUT } >> $GITHUB_OUTPUT
- name: Comment Run Start - name: Comment Run Start
if: ${{ steps.try_string.outputs.result }} if: ${{ steps.try_string.outputs.result }}
uses: actions/github-script@v7 uses: actions/github-script@v8
with: with:
result-encoding: string result-encoding: string
script: | script: |

View File

@@ -42,6 +42,7 @@ jobs:
python/servo/try_parser.py python/servo/try_parser.py
.github/actions/setup-python .github/actions/setup-python
.python-version .python-version
uv.lock
sparse-checkout-cone-mode: false sparse-checkout-cone-mode: false
- name: Setup Python - name: Setup Python
uses: ./.github/actions/setup-python uses: ./.github/actions/setup-python
@@ -55,7 +56,7 @@ jobs:
} >> $GITHUB_OUTPUT } >> $GITHUB_OUTPUT
- name: Configuration - name: Configuration
id: configuration id: configuration
uses: actions/github-script@v7 uses: actions/github-script@v8
with: with:
script: | script: |
// When triggered via a push try the `try` branch, search the last commit for a configuration object. // When triggered via a push try the `try` branch, search the last commit for a configuration object.
@@ -127,7 +128,7 @@ jobs:
steps: steps:
- name: Merge build timings - name: Merge build timings
continue-on-error: true continue-on-error: true
uses: actions/upload-artifact/merge@v4 uses: actions/upload-artifact/merge@v7
with: with:
name: cargo-timings name: cargo-timings
pattern: cargo-timings-* pattern: cargo-timings-*

View File

@@ -19,13 +19,10 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload: upload_zip:
required: false required: false
default: false default: false
type: boolean type: boolean
github-release-id:
required: false
type: string
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -34,6 +31,11 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
outputs:
artifact_ids:
value: ${{ jobs.build.outputs.release_artifact_ids }}
description: Comma-separated list of artifact IDs for the release artifacts
workflow_dispatch: workflow_dispatch:
inputs: inputs:
profile: profile:
@@ -49,10 +51,6 @@ on:
required: false required: false
default: false default: false
type: boolean type: boolean
upload:
required: false
default: false
type: boolean
force-github-hosted-runner: force-github-hosted-runner:
required: false required: false
type: boolean type: boolean
@@ -85,7 +83,7 @@ jobs:
steps: steps:
- name: Runner select - name: Runner select
id: select id: select
uses: servo/ci-runners/actions/runner-select@44317e3cd86c5ff2ef0b08878b90da246bc237da uses: servo/ci-runners/actions/runner-select@f0b81b95522256c64ee207b4236ec71fc23b99a1
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
github-hosted-runner-label: windows-2022 github-hosted-runner-label: windows-2022
@@ -102,8 +100,10 @@ jobs:
- runner-select - runner-select
name: Windows Build [${{ needs.runner-select.outputs.unique-id }}] name: Windows Build [${{ needs.runner-select.outputs.unique-id }}]
runs-on: ${{ needs.runner-select.outputs.selected-runner-label }} runs-on: ${{ needs.runner-select.outputs.selected-runner-label }}
outputs:
release_artifact_ids: ${{ steps.artifact_ids.outputs.release_artifact_ids }}
steps: steps:
- uses: servo/ci-runners/actions/checkout@44317e3cd86c5ff2ef0b08878b90da246bc237da - uses: servo/ci-runners/actions/checkout@f0b81b95522256c64ee207b4236ec71fc23b99a1
- name: ccache - name: ccache
# FIXME: “Error: Restoring cache failed: Error: Unable to locate executable file: sh.” # FIXME: “Error: Restoring cache failed: Error: Unable to locate executable file: sh.”
@@ -149,7 +149,7 @@ jobs:
- name: Build (${{ inputs.profile }}) - name: Build (${{ inputs.profile }})
run: | run: |
.\mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }} .\mach build --use-crown --locked --profile ${{ inputs.profile }} ${{ inputs.build-args }}
cp C:\a\servo\servo\target\cargo-timings C:\a\servo\servo\target\cargo-timings-windows -Recurse mv C:\a\servo\servo\target\cargo-timings C:\a\servo\servo\target\cargo-timings-windows
- name: Copy resources - name: Copy resources
# GitHub-hosted runners sometimes check out the repo on D: drive. # GitHub-hosted runners sometimes check out the repo on D: drive.
if: ${{ runner.environment != 'self-hosted' && startsWith(github.workspace, 'D:\') }} if: ${{ runner.environment != 'self-hosted' && startsWith(github.workspace, 'D:\') }}
@@ -188,31 +188,43 @@ jobs:
if: ${{ false && inputs.unit-tests }} # FIXME #39273 if: ${{ false && inputs.unit-tests }} # FIXME #39273
run: .\mach test-devtools --profile ${{ inputs.profile }} run: .\mach test-devtools --profile ${{ inputs.profile }}
- name: Archive build timing - name: Archive build timing
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
with: with:
name: cargo-timings-windows-${{ inputs.profile }} name: cargo-timings-windows-${{ inputs.profile }}
# Using a wildcard here ensures that the archive includes the path. # Using a wildcard here ensures that the archive includes the path.
path: C:\\a\\servo\\servo\\target\\cargo-timings-* path: C:\\a\\servo\\servo\\target\\cargo-timings-*
if-no-files-found: error
- name: Build mach package - name: Build mach package
run: .\mach package --profile ${{ inputs.profile }} run: .\mach package --profile ${{ inputs.profile }}
# These files are available
# MSI Installer: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Installer.msi
# Bundle: C:\a\servo\servo\target\${{ inputs.profile }}\msi\ServoShell.exe
# Zip: C:\a\servo\servo\target\${{ inputs.profile }}\msi\ServoShell.zip
- name: Upload artifact for mach package - name: Upload artifact for mach package
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v7
id: upload-exe
with: with:
name: ${{ inputs.profile }}-binary-windows name: ${{ inputs.profile }}-binary-windows
# These files are available path: C:\\a\\servo\\servo\\target\\${{ inputs.profile }}\\msi\\ServoShell.exe
# MSI Installer: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Installer.msi if-no-files-found: error
# Bundle: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.exe - name: Upload artifact for mach package (zip)
# Zip: C:\a\servo\servo\target\${{ inputs.profile }}\msi\Servo.zip uses: actions/upload-artifact@v7
path: C:\\a\\servo\\servo\\target\\${{ inputs.profile }}\\msi\\Servo.exe id: upload-zip
- name: Upload nightly if: ${{ inputs.upload_zip }}
if: ${{ inputs.upload }} with:
name: ${{ inputs.profile }}-binary-windows-zip
path: C:\\a\\servo\\servo\\target\\${{ inputs.profile }}\\msi\\ServoShell.zip
if-no-files-found: error
- name: Collect artifact IDs needed by the release workflow
id: artifact_ids
shell: bash
run: | run: |
.\mach upload-nightly windows-msvc --secret-from-environment ` ARTIFACT_IDS="${{steps.upload-exe.outputs.artifact-id}}"
--github-release-id ${{ inputs.github-release-id }} if [[ -n "${{steps.upload-zip.outputs.artifact-id}}" ]]; then
env: ARTIFACT_IDS="${ARTIFACT_IDS},${{steps.upload-zip.outputs.artifact-id}}"
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }} fi
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }} echo "release_artifact_ids=${ARTIFACT_IDS}" >> $GITHUB_OUTPUT
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
bencher: bencher:
needs: ["build"] needs: ["build"]
if: ${{ inputs.bencher && inputs.profile != 'debug' && github.event_name != 'workflow_dispatch' && github.event_name != 'merge_group' }} if: ${{ inputs.bencher && inputs.profile != 'debug' && github.event_name != 'workflow_dispatch' && github.event_name != 'merge_group' }}
@@ -221,7 +233,7 @@ jobs:
target: 'windows' target: 'windows'
profile: ${{ inputs.profile }} profile: ${{ inputs.profile }}
compressed-file-path: '' compressed-file-path: ''
binary-path: ${{ inputs.profile }}-binary-windows/Servo.exe binary-path: ${{ inputs.profile }}-binary-windows/ServoShell.exe
file-size: true file-size: true
speedometer: false speedometer: false
dromaeo: false dromaeo: false
@@ -254,4 +266,4 @@ jobs:
toolchain: ${{ steps.msrv.outputs.rust_version }} toolchain: ${{ steps.msrv.outputs.rust_version }}
- name: Compile libservo with MSRV - name: Compile libservo with MSRV
run: | run: |
cargo +${{ steps.msrv.outputs.rust_version }} build -p libservo --locked --all-targets cargo +${{ steps.msrv.outputs.rust_version }} build -p servo --locked

6
.gitignore vendored
View File

@@ -29,6 +29,10 @@ servo.pftrace
/glfw /glfw
webrender-captures/ webrender-captures/
/screenshots /screenshots
/etc/notarization/
# Python setuptools
/servo.egg-info
# Allow CSV files to be used as resources in tests # Allow CSV files to be used as resources in tests
!/tests/**/*.csv !/tests/**/*.csv
@@ -73,4 +77,4 @@ support/macos/Brewfile.lock.json
.envrc .envrc
# Justfiles # Justfiles
justfile justfile

4870
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
[workspace] [workspace]
resolver = "2" resolver = "2"
members = [ members = [
"components/media/examples",
"components/xpath", "components/xpath",
"ports/servoshell", "ports/servoshell",
"tests/unit/*", "tests/unit/*",
@@ -9,8 +10,11 @@ default-members = ["ports/servoshell"]
exclude = [".cargo", "support/crown"] exclude = [".cargo", "support/crown"]
[workspace.package] [workspace.package]
version = "0.0.1" version = "0.1.0"
authors = ["The Servo Project Developers"] authors = ["The Servo Project Developers"]
repository = "https://github.com/servo/servo"
# A generic description for packages that don't have a meaningful description yet.
description = "A component of the servo web-engine."
license = "MPL-2.0" license = "MPL-2.0"
edition = "2024" edition = "2024"
publish = false publish = false
@@ -23,6 +27,7 @@ publish = false
rust-version = "1.86.0" rust-version = "1.86.0"
[workspace.dependencies] [workspace.dependencies]
accesskit = { version = "0.24.0", features = ["serde"] }
accountable-refcell = "0.2.2" accountable-refcell = "0.2.2"
aes = "0.8.4" aes = "0.8.4"
aes-gcm = "0.10.3" aes-gcm = "0.10.3"
@@ -31,103 +36,105 @@ app_units = "0.7"
arboard = "3" arboard = "3"
argon2 = { version = "0.5", features = ["alloc"] } argon2 = { version = "0.5", features = ["alloc"] }
arrayvec = "0.7" arrayvec = "0.7"
async-tungstenite = { version = "0.32", features = ["tokio-rustls-webpki-roots"] } async-tungstenite = { version = "0.34", features = ["tokio-rustls-webpki-roots"] }
atomic_refcell = "0.1.13" atomic_refcell = "0.1.13"
aws-lc-rs = { version = "1.15", default-features = false, features = ["aws-lc-sys"] } aws-lc-rs = { version = "1.16", default-features = false, features = ["aws-lc-sys"] }
background_hang_monitor_api = { path = "components/shared/background_hang_monitor" }
backtrace = "0.3" backtrace = "0.3"
base = { path = "components/shared/base" }
base64 = "0.22.1" base64 = "0.22.1"
base64ct = { version = "1.8", features = ["alloc"] } base64ct = { version = "1.8", features = ["alloc"] }
# bincode 1.3.3 is the last known good version of bincode 1. bitflags = "2.11"
# The crate was declared finished and won't receive further updates by the author.
# Since the git history was rewritten by the author, any bump of this crate should
# be reviewed carefully by doing a manual diff based on the crates.io version,
# before doing **any** bump to this dependency to rule out a supply chain attack.
bincode = "=1.3.3"
bitflags = "2.10"
bluetooth_traits = { path = "components/shared/bluetooth" }
brotli = "8.0.2" brotli = "8.0.2"
bytemuck = "1" bytemuck = "1"
byteorder = "1.5" byteorder = "1.5"
canvas_traits = { path = "components/shared/canvas" }
cbc = "0.1.2" cbc = "0.1.2"
cfg-if = "1.0.4" cfg-if = "1.0.4"
chacha20poly1305 = "0.10" chacha20poly1305 = "0.10"
chardetng = "0.1" chardetng = "0.1"
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
cipher = { version = "0.4.4", features = ["alloc"] } cipher = { version = "0.4.4", features = ["alloc"] }
compositing_traits = { path = "components/shared/compositing" } content-security-policy = { version = "0.8.0", features = ["serde"] }
constellation_traits = { path = "components/shared/constellation" }
content-security-policy = { git = "https://github.com/servo/rust-content-security-policy", branch = "servo-csp", features = ["serde"] }
cookie = { package = "cookie", version = "0.18" } cookie = { package = "cookie", version = "0.18" }
crossbeam-channel = "0.5" crossbeam-channel = "0.5"
cssparser = { version = "0.36", features = ["serde"] } cssparser = { version = "0.36", features = ["serde"] }
ctr = "0.9.2" ctr = "0.9.2"
data-url = "0.3" data-url = "0.3"
der = { version = "0.7", features = ["alloc", "derive"] } der = { version = "0.7", features = ["alloc", "derive"] }
devtools_traits = { path = "components/shared/devtools" }
digest = "0.10" digest = "0.10"
dpi = "0.1" dpi = "0.1"
dwrote = "0.11.5" dwrote = "0.11.5"
ecdsa = "0.16" ecdsa = "0.16"
elliptic-curve = "0.13" elliptic-curve = "0.13"
embedder_traits = { path = "components/shared/embedder" }
encoding_rs = { version = "0.8", features = ["serde"] } encoding_rs = { version = "0.8", features = ["serde"] }
env_logger = "0.11" env_logger = "0.11"
euclid = "0.22" euclid = "0.22"
flate2 = "1.1" flate2 = "1.1"
fonts_traits = { path = "components/shared/fonts" }
freetype-sys = "0.20" freetype-sys = "0.20"
futures = { version = "0.3", default-features = false }
futures-core = { version = "0.3", default-features = false }
futures-util = { version = "0.3", default-features = false }
gleam = "0.15" gleam = "0.15"
glib = "0.22"
glib-sys = "0.22"
glow = "0.16.0" glow = "0.16.0"
gstreamer = { version = "0.24", features = ["v1_18"] } gstreamer = { version = "0.25", features = ["v1_18"] }
gstreamer-base = "0.24" gstreamer-app = "0.25"
gstreamer-gl = "0.24" gstreamer-audio = "0.25"
gstreamer-gl-sys = "0.24" gstreamer-base = "0.25"
gstreamer-sys = "0.24" gstreamer-gl = "0.25"
gstreamer-video = "0.24" gstreamer-gl-egl = "0.25"
gstreamer-gl-sys = "0.25"
gstreamer-gl-wayland = "0.25"
gstreamer-gl-x11 = "0.25"
gstreamer-play = "0.25"
gstreamer-sdp = "0.25"
gstreamer-sys = "0.25"
gstreamer-video = "0.25"
gstreamer-webrtc = { version = "0.25", features = ["v1_18"] }
harfbuzz-sys = "0.6.1" harfbuzz-sys = "0.6.1"
headers = "0.4" headers = "0.4"
hitrace = "0.1.6" hitrace = { version = "0.1.6", features = ["api-19", "tracing-rs"] }
hkdf = "0.12" hkdf = "0.12"
html5ever = "0.36.1" html5ever = "0.39"
http = "1.4" http = "1.4"
http-body-util = "0.1" http-body-util = "0.1"
hyper = "1.8" hyper = "1.9"
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "tls12", "webpki-tokio"] } hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "logging", "tls12", "webpki-tokio"] }
hyper-util = { version = "0.1", features = ["client-legacy", "http2", "tokio", "client-proxy"] } hyper-util = { version = "0.1", features = ["client-legacy", "http2", "tokio", "client-proxy"] }
hyper_serde = { path = "components/hyper_serde" }
icu_locid = "1.5.0" icu_locid = "1.5.0"
icu_properties = "1.5.0"
icu_segmenter = "1.5.0" icu_segmenter = "1.5.0"
image = { version = "0.25", default-features = false, features = ["avif", "rayon", "bmp", "gif", "ico", "jpeg", "png", "webp"] } image = { version = "0.25", default-features = false, features = ["avif", "rayon", "bmp", "gif", "ico", "jpeg", "png", "webp"] }
imsz = "0.4" imsz = "0.4"
indexmap = { version = "2.11.4", features = ["std"] } indexmap = { version = "2.11.4", features = ["std"] }
ipc-channel = "0.20.2" inventory = { version = "0.3.24" }
ipc-channel = "0.21"
itertools = "0.14" itertools = "0.14"
js = { package = "mozjs", version = "=0.14.5", default-features = false, features = ["libz-sys", "intl"] } js = { package = "mozjs", version = "=0.15.8", default-features = false, features = ["libz-sys", "intl"] }
keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] } keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] }
kurbo = { version = "0.12", features = ["euclid"] } kurbo = { version = "0.12", features = ["euclid"] }
layout_api = { path = "components/shared/layout" }
libc = "0.2" libc = "0.2"
log = "0.4.29" log = "0.4.29"
mach2 = "0.6" mach2 = "0.6"
malloc_size_of = { package = "servo_malloc_size_of", path = "components/malloc_size_of" }
malloc_size_of_derive = "0.1" malloc_size_of_derive = "0.1"
markup5ever = "0.36.1" markup5ever = "0.39"
memmap2 = "0.9.9" memmap2 = "0.9.10"
mime = "0.3.13" mime = "0.3.13"
mime-multipart-hyper1 = "0.10.0"
mime_guess = "2.0.5" mime_guess = "2.0.5"
ml-dsa = "0.0.4" ml-dsa = "0.0.4"
ml-kem = { version = "0.2", features = ["deterministic"] } ml-kem = { version = "0.2", features = ["deterministic"] }
mozangle = "0.5.3" mozangle = "0.5.5"
net_traits = { path = "components/shared/net" }
nix = "0.30" nix = "0.30"
nom = "8.0.0" nom = "8.0.0"
nom-rfc8288 = "0.4.0" nom-rfc8288 = "0.4.0"
num-bigint-dig = "0.8" num-bigint-dig = "0.8"
num-derive = "0.4.2"
num-traits = "0.2" num-traits = "0.2"
num_cpus = "1.17.0" num_cpus = "1.17.0"
objc2 = "0.6.4"
objc2-core-foundation = "0.3.2"
objc2-core-graphics = "0.3.2"
objc2-core-text = "0.3.2"
ocb3 = "0.1.0" ocb3 = "0.1.0"
openxr = "0.20" openxr = "0.20"
p256 = { version = "0.13", features = ["ecdh"] } p256 = { version = "0.13", features = ["ecdh"] }
@@ -137,8 +144,8 @@ parking_lot = { version = "0.12", features = ["serde"] }
peniko = "0.5" peniko = "0.5"
percent-encoding = "2.3" percent-encoding = "2.3"
pkcs8 = { version = "0.10", features = ["rand_core"] } pkcs8 = { version = "0.10", features = ["rand_core"] }
postcard = { version = "1.1.3", default-features = false, features = ["use-std"] }
proc-macro2 = "1" proc-macro2 = "1"
profile_traits = { path = "components/shared/profile" }
quote = "1" quote = "1"
rand = "0.9" rand = "0.9"
raw-window-handle = "0.6" raw-window-handle = "0.6"
@@ -147,43 +154,37 @@ read-fonts = "0.35.0"
regex = "1.12" regex = "1.12"
resvg = "0.45.0" resvg = "0.45.0"
rsa = { version = "0.9.10", features = ["sha1", "sha2"] } rsa = { version = "0.9.10", features = ["sha1", "sha2"] }
rustc-hash = "2.1.1" rustc-hash = "2.1.2"
rustls = { version = "0.23", default-features = false, features = ["logging", "std", "tls12"] } rustls = { version = "0.23", default-features = false, features = ["logging", "std", "tls12"] }
rustls-pki-types = "1.13" rustls-pki-types = "1.14"
rustls-platform-verifier = "0.6.2" rustls-platform-verifier = "0.6.2"
script_traits = { path = "components/shared/script" } sea-query = { version = "1.0.0-rc.31", default-features = false, features = ["backend-sqlite", "derive"] }
sea-query = { version = "1.0.0-rc.29", default-features = false, features = ["backend-sqlite", "derive"] }
sea-query-rusqlite = { version = "0.8.0-rc.15" } sea-query-rusqlite = { version = "0.8.0-rc.15" }
sec1 = "0.7" sec1 = "0.7"
selectors = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } selectors = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
serde = "1.0.228" serde = "1.0.228"
serde_bytes = "0.11" serde_bytes = "0.11"
serde_core = "1.0.226" serde_core = "1.0.226"
serde_json = "1.0" serde_json = "1.0"
servo-media = { git = "https://github.com/servo/media" } servo_arc = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
servo-media-dummy = { git = "https://github.com/servo/media" }
servo-media-gstreamer = { git = "https://github.com/servo/media" }
servo-tracing = { path = "components/servo_tracing" }
servo_arc = { git = "https://github.com/servo/stylo", branch = "2025-12-01" }
sha1 = "0.10" sha1 = "0.10"
sha2 = "0.10" sha2 = "0.10"
sha3 = "0.10" sha3 = "0.10"
skrifa = "0.37.0" skrifa = "0.37.0"
smallvec = { version = "1.15", features = ["serde", "union"] } smallvec = { version = "1.15", features = ["serde", "union"] }
storage_traits = { path = "components/shared/storage" }
string_cache = "0.9" string_cache = "0.9"
strum = { version = "0.27", features = ["derive"] } strum = { version = "0.28", features = ["derive"] }
stylo = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
stylo_atoms = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo_atoms = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
stylo_config = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo_dom = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
stylo_dom = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
stylo_malloc_size_of = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
stylo_traits = { git = "https://github.com/servo/stylo", branch = "2025-12-01" } stylo_traits = { git = "https://github.com/servo/stylo", rev = "ddf2109bdfff62c83a14e3a3c7dc1c6130653283" }
surfman = { version = "0.11.0", features = ["chains"] } surfman = { version = "0.11.0", features = ["chains"] }
syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] }
synstructure = "0.13" synstructure = "0.13"
taffy = { version = "0.9.2", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] } taffy = { version = "0.10", default-features = false, features = ["calc", "detailed_layout_info", "grid", "std"] }
tendril = { version = "0.4.1", features = ["encoding_rs"] } tendril = { version = "0.5", features = ["encoding_rs"] }
tikv-jemalloc-sys = "0.6.1" tikv-jemalloc-sys = "0.6.1"
tikv-jemallocator = "0.6.1" tikv-jemallocator = "0.6.1"
time = { package = "time", version = "0.3", features = ["large-dates", "local-offset", "serde"] } time = { package = "time", version = "0.3", features = ["large-dates", "local-offset", "serde"] }
@@ -194,35 +195,107 @@ tokio-util = { version = "0.7.18", default-features = false }
tower = { version = "0.5", default-features = false, features = ["util"] } tower = { version = "0.5", default-features = false, features = ["util"] }
tracing = "0.1.44" tracing = "0.1.44"
tracing-perfetto = "0.1.5" tracing-perfetto = "0.1.5"
tracing-subscriber = "0.3.22" tracing-subscriber = "0.3.23"
tungstenite = "0.28" tungstenite = "0.29"
unicode-bidi = "0.3.18" unicode-bidi = "0.3.18"
unicode_categories = "0.1.1"
unicode-properties = { version = "0.1.4", features = ["emoji"] } unicode-properties = { version = "0.1.4", features = ["emoji"] }
unicode-script = "0.5" unicode-script = "0.5"
unicode-segmentation = "1.12.0" unicode-segmentation = "1.13.2"
url = "2.5" url = "2.5"
urlpattern = "0.3" urlpattern = "0.3"
utf-8 = "0.7" utf-8 = "0.7"
uuid = { version = "1.19.0", features = ["v4", "v5"] } uuid = { version = "1.23.0", features = ["v4", "v5"] }
vello = "0.6" vello = "0.6"
vello_cpu = "0.0.4" vello_cpu = "0.0.4"
webdriver = "0.53.0" webdriver = "0.53.0"
webgpu_traits = { path = "components/shared/webgpu" }
webpki-roots = "1.0" webpki-roots = "1.0"
webrender = { git = "https://github.com/servo/webrender", branch = "0.68", features = ["capture"] } webrender = { version = "0.68", features = ["capture"] }
webrender_api = { git = "https://github.com/servo/webrender", branch = "0.68" } webrender_api = "0.68"
webxr-api = { path = "components/shared/webxr" }
wgpu-core = "26" wgpu-core = "26"
wgpu-types = "26" wgpu-types = "26"
winapi = "0.3" winapi = "0.3"
windows-sys = "0.61" windows-sys = "0.61"
winit = "0.30.12" winit = "0.30.13"
wio = "0.2" wio = "0.2"
wr_malloc_size_of = { git = "https://github.com/servo/webrender", branch = "0.68" } wr_malloc_size_of = "0.2.2"
x25519-dalek = { version = "2.0.1", features = ["static_secrets"] } x25519-dalek = { version = "2.0.1", features = ["static_secrets"] }
xi-unicode = "0.3.0" xi-unicode = "0.3.0"
xml5ever = "0.36.1" xml5ever = "0.39"
xpath = { path = "components/xpath" }
############################################################################################
## Workspace-local dependencies
############################################################################################
# All local path dependencies in the servo workspace, that use the workspace version, should
# be listed here, between the `Begin` and `End` comments, so that we can easily find and
# update the version requirements when bumping the workspace version.
# Begin workspace-version dependencies - Don't change this comment, we grep for it in scripts!
deny_public_fields = { package = "servo-deny-public-fields", version = "0.1.0", path = "components/deny_public_fields" }
devtools = { package = "servo-devtools", version = "0.1.0", path = "components/devtools" }
devtools_traits = { package = "servo-devtools-traits", version = "0.1.0", path = "components/shared/devtools" }
dom_struct = { package = "servo-dom-struct", version = "0.1.0", path = "components/dom_struct" }
embedder_traits = { package = "servo-embedder-traits", version = "0.1.0", path = "components/shared/embedder" }
fonts = { package = "servo-fonts", version = "0.1.0", path = "components/fonts" }
fonts_traits = { package = "servo-fonts-traits", version = "0.1.0", path = "components/shared/fonts" }
hyper_serde = { package = "servo-hyper-serde", version = "0.1.0", path = "components/hyper_serde" }
jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.1.0", path = "components/jstraceable_derive" }
layout = { package = "servo-layout", version = "0.1.0", path = "components/layout" }
layout_api = { package = "servo-layout-api", version = "0.1.0", path = "components/shared/layout" }
malloc_size_of = { package = "servo-malloc-size-of", version = "0.1.0", path = "components/malloc_size_of" }
media = { package = "servo-media-thread", version = "0.1.0", path = "components/media/media-thread" }
metrics = { package = "servo-metrics", version = "0.1.0", path = "components/metrics" }
net = { package = "servo-net", version = "0.1.0", path = "components/net" }
net_traits = { package = "servo-net-traits", version = "0.1.0", path = "components/shared/net" }
paint = { package = "servo-paint", version = "0.1.0", path = "components/paint" }
paint_api = { package = "servo-paint-api", version = "0.1.0", path = "components/shared/paint" }
pixels = { package = "servo-pixels", version = "0.1.0", path = "components/pixels" }
profile = { package = "servo-profile", version = "0.1.0", path = "components/profile" }
profile_traits = { package = "servo-profile-traits", version = "0.1.0", path = "components/shared/profile" }
script = { package = "servo-script", version = "0.1.0", path = "components/script" }
script_bindings = { package = "servo-script-bindings", version = "0.1.0", path = "components/script_bindings" }
script_traits = { package = "servo-script-traits", version = "0.1.0", path = "components/shared/script" }
servo = { version = "0.1.0", path = "components/servo", default-features = false }
servo-allocator = { version = "0.1.0", path = "components/allocator" }
servo-background-hang-monitor = { version = "0.1.0", path = "components/background_hang_monitor" }
servo-background-hang-monitor-api = { version = "0.1.0", path = "components/shared/background_hang_monitor" }
servo-base = { version = "0.1.0", path = "components/shared/base" }
servo-bluetooth = { version = "0.1.0", path = "components/bluetooth" }
servo-bluetooth-traits = { version = "0.1.0", path = "components/shared/bluetooth" }
servo-canvas = { version = "0.1.0", path = "components/canvas" }
servo-canvas-traits = { version = "0.1.0", path = "components/shared/canvas" }
servo-config = { version = "0.1.0", path = "components/config" }
servo-config-macro = { version = "0.1.0", path = "components/config/macro" }
servo-constellation = { version = "0.1.0", path = "components/constellation" }
servo-constellation-traits = { version = "0.1.0", path = "components/shared/constellation" }
servo-default-resources = { version = "0.1.0", path = "components/default-resources" }
servo-geometry = { version = "0.1.0", path = "components/geometry" }
servo-media = { version = "0.1.0", path = "components/media/servo-media" }
servo-media-audio = { version = "0.1.0", path = "components/media/audio" }
servo-media-auto = { version = "0.1.0", path = "components/media/backends/auto" }
servo-media-derive = { version = "0.1.0", path = "components/media/servo-media-derive" }
servo-media-dummy = { version = "0.1.0", path = "components/media/backends/dummy" }
servo-media-gstreamer = { version = "0.1.0", path = "components/media/backends/gstreamer" }
servo-media-gstreamer-render = { version = "0.1.0", path = "components/media/backends/gstreamer/render" }
servo-media-gstreamer-render-android = { version = "0.1.0", path = "components/media/backends/gstreamer/render-android" }
servo-media-gstreamer-render-unix = { version = "0.1.0", path = "components/media/backends/gstreamer/render-unix" }
servo-media-ohos = { version = "0.1.0", path = "components/media/backends/ohos" }
servo-media-player = { version = "0.1.0", path = "components/media/player" }
servo-media-streams = { version = "0.1.0", path = "components/media/streams" }
servo-media-traits = { version = "0.1.0", path = "components/media/traits" }
servo-media-webrtc = { version = "0.1.0", path = "components/media/webrtc" }
servo-tracing = { version = "0.1.0", path = "components/servo_tracing" }
servo-url = { version = "0.1.0", path = "components/url" }
storage = { package = "servo-storage", version = "0.1.0", path = "components/storage" }
storage_traits = { package = "servo-storage-traits", version = "0.1.0", path = "components/shared/storage" }
timers = { package = "servo-timers", version = "0.1.0", path = "components/timers" }
webdriver_server = { package = "servo-webdriver-server", version = "0.1.0", path = "components/webdriver_server" }
webgl = { package = "servo-webgl", version = "0.1.0", path = "components/webgl", default-features = false }
webgpu = { package = "servo-webgpu", version = "0.1.0", path = "components/webgpu" }
webgpu_traits = { package = "servo-webgpu-traits", version = "0.1.0", path = "components/shared/webgpu" }
webxr = { package = "servo-webxr", version = "0.1.0", path = "components/webxr" }
webxr-api = { package = "servo-webxr-api", version = "0.1.0", path = "components/shared/webxr" }
xpath = { package = "servo-xpath", version = "0.1.0", path = "components/xpath" }
# End workspace-version dependencies - Don't change this comment, we grep for it in scripts!
# RSA key generation could be very slow without compilation # RSA key generation could be very slow without compilation
# optimizations, in development mode. Without optimizations, WPT might # optimizations, in development mode. Without optimizations, WPT might
@@ -289,6 +362,26 @@ codegen-units = 1
# web_atoms = { path = "../html5ever/web_atoms" } # web_atoms = { path = "../html5ever/web_atoms" }
# xml5ever = { path = "../html5ever/xml5ever" } # xml5ever = { path = "../html5ever/xml5ever" }
# tendril = { path = "../html5ever/tendril" } # tendril = { path = "../html5ever/tendril" }
# For WebRender:
#
# webrender = { path = "../webrender/webrender" }
# webrender_api = { path = "../webrender/webrender_api" }
# wr_malloc_size_of = { path = "../webrender/wr_malloc_size_of" }
#
# Or for mozjs:
#
# mozjs = { path = "../mozjs/mozjs" }
# mozjs_sys = { path = "../mozjs/mozjs-sys" }
#
# Or for CSP crate:
# content-security-policy = { path = "../rust-content-security-policy" }
#
# Pending egui bumping their accesskit version: https://github.com/emilk/egui/pull/7850
# This is only used in servoshell.
# TODO: When these are no longer needed remove the exception in deny.toml as well.
egui = { git = "https://github.com/emilk/egui.git", rev = "5d8f393335e051785b4fd3af9ef92eda5b61177f" }
egui-winit = { git = "https://github.com/emilk/egui.git", rev = "5d8f393335e051785b4fd3af9ef92eda5b61177f" }
# #
# Or for Stylo: # Or for Stylo:
# #
@@ -297,27 +390,13 @@ codegen-units = 1
# servo_arc = { path = "../stylo/servo_arc" } # servo_arc = { path = "../stylo/servo_arc" }
# stylo = { path = "../stylo/style" } # stylo = { path = "../stylo/style" }
# stylo_atoms = { path = "../stylo/stylo_atoms" } # stylo_atoms = { path = "../stylo/stylo_atoms" }
# stylo_config = { path = "../stylo/stylo_config" }
# stylo_dom = { path = "../stylo/stylo_dom" } # stylo_dom = { path = "../stylo/stylo_dom" }
# stylo_malloc_size_of = { path = "../stylo/malloc_size_of" } # stylo_malloc_size_of = { path = "../stylo/malloc_size_of" }
# stylo_static_prefs = { path = "../stylo/stylo_static_prefs" }
# stylo_traits = { path = "../stylo/style_traits" } # stylo_traits = { path = "../stylo/style_traits" }
# #
# Or for WebRender:
#
# [patch."https://github.com/servo/webrender"]
# webrender = { path = "../webrender/webrender" }
# webrender_api = { path = "../webrender/webrender_api" }
# wr_malloc_size_of = { path = "../webrender/wr_malloc_size_of" }
#
# Or for another Git dependency: # Or for another Git dependency:
# #
# [patch."https://github.com/servo/<repository>"] # [patch."https://github.com/servo/<repository>"]
# <crate> = { path = "/path/to/local/checkout" } # <crate> = { path = "/path/to/local/checkout" }
# #
# [patch."https://github.com/servo/rust-content-security-policy"]
# content-security-policy = { path = "../rust-content-security-policy" }
#
# Or for mozjs:
#
# mozjs = { path = "../mozjs/mozjs" }
# mozjs_sys = { path = "../mozjs/mozjs-sys" }

View File

@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>servo</string>
<key>CFBundleGetInfoString</key>
<string>Servo</string>
<key>CFBundleIconFile</key>
<string>servo.icns</string>
<key>CFBundleIdentifier</key>
<string>org.servo.Servo</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Servo</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.0.4</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
<key>NSQuitAlwaysKeepsWindows</key>
<false/>
<key>CFBundleSupportedPlatforms</key>
<array>
<string>MacOSX</string>
</array>
</dict>
</plist>

View File

@@ -1,4 +1,3 @@
# Security Policy # Security Policy
Given that Servo does not yet have customers or products, we are comfortable accepting the security related issues as [GitHub security reports](https://github.com/servo/servo/security/advisories/new) for now. Please submit security related issues as [GitHub security reports](https://github.com/servo/servo/security/advisories/new).

View File

@@ -1,11 +1,13 @@
[package] [package]
name = "servo_allocator" name = "servo-allocator"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
path = "lib.rs" path = "lib.rs"

View File

@@ -1,28 +1,30 @@
[package] [package]
name = "background_hang_monitor" name = "servo-background-hang-monitor"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "background_hang_monitor" name = "servo_background_hang_monitor"
path = "lib.rs" path = "lib.rs"
test = false test = false
doctest = false doctest = false
[dependencies] [dependencies]
background_hang_monitor_api = { workspace = true }
backtrace = { workspace = true } backtrace = { workspace = true }
base = { workspace = true }
crossbeam-channel = { workspace = true } crossbeam-channel = { workspace = true }
libc = { workspace = true } libc = { workspace = true }
log = { workspace = true } log = { workspace = true }
rustc-demangle = { version = "0.1", optional = true } rustc-demangle = { version = "0.1", optional = true }
rustc-hash = { workspace = true } rustc-hash = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
servo-background-hang-monitor-api = { workspace = true }
servo-base = { workspace = true }
[target.'cfg(target_os = "macos")'.dependencies] [target.'cfg(target_os = "macos")'.dependencies]
mach2 = { workspace = true, optional = true } mach2 = { workspace = true, optional = true }

View File

@@ -11,9 +11,10 @@ use background_hang_monitor_api::{
BackgroundHangMonitorExitSignal, BackgroundHangMonitorRegister, HangAlert, HangAnnotation, BackgroundHangMonitorExitSignal, BackgroundHangMonitorRegister, HangAlert, HangAnnotation,
HangMonitorAlert, MonitoredComponentId, HangMonitorAlert, MonitoredComponentId,
}; };
use base::generic_channel::{GenericReceiver, GenericSender, RoutedReceiver};
use crossbeam_channel::{Receiver, Sender, after, never, select, unbounded}; use crossbeam_channel::{Receiver, Sender, after, never, select, unbounded};
use log::{error, warn};
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use servo_base::generic_channel::{GenericReceiver, GenericSender, RoutedReceiver};
use crate::SamplerImpl; use crate::SamplerImpl;
use crate::sampler::{NativeStack, Sampler}; use crate::sampler::{NativeStack, Sampler};
@@ -177,7 +178,7 @@ struct BackgroundHangMonitorWorker {
monitored_components: FxHashMap<MonitoredComponentId, MonitoredComponent>, monitored_components: FxHashMap<MonitoredComponentId, MonitoredComponent>,
constellation_chan: GenericSender<HangMonitorAlert>, constellation_chan: GenericSender<HangMonitorAlert>,
port: Receiver<(MonitoredComponentId, MonitoredComponentMsg)>, port: Receiver<(MonitoredComponentId, MonitoredComponentMsg)>,
control_port: RoutedReceiver<BackgroundHangMonitorControlMsg>, control_port: Option<RoutedReceiver<BackgroundHangMonitorControlMsg>>,
sampling_duration: Option<Duration>, sampling_duration: Option<Duration>,
sampling_max_duration: Option<Duration>, sampling_max_duration: Option<Duration>,
last_sample: Instant, last_sample: Instant,
@@ -204,7 +205,7 @@ impl BackgroundHangMonitorWorker {
monitored_components: Default::default(), monitored_components: Default::default(),
constellation_chan, constellation_chan,
port, port,
control_port, control_port: Some(control_port),
sampling_duration: None, sampling_duration: None,
sampling_max_duration: None, sampling_max_duration: None,
last_sample: Instant::now(), last_sample: Instant::now(),
@@ -267,65 +268,108 @@ impl BackgroundHangMonitorWorker {
never() never()
}; };
let received = select! { // Helper enum to collect messages from different ports depending
recv(self.port) -> event => { // on the BHM state.
if let Ok(event) = event { enum BhmMessage {
Some(event) ComponentMessage((MonitoredComponentId, MonitoredComponentMsg)),
} else { ToggleSampler(Duration, Duration),
// All senders have dropped, Exit,
// which means all monitored components have shut down, ControlError(String),
// and so we can as well. ControlDisconnected,
return false; Tick,
} PortDisconnected,
}, }
recv(self.control_port) -> event => {
match event {
Ok(Ok(BackgroundHangMonitorControlMsg::ToggleSampler(rate, max_duration))) => {
if self.sampling_duration.is_some() {
println!("Enabling profiler.");
self.finish_sampled_profile();
self.sampling_duration = None;
} else {
println!("Disabling profiler.");
self.sampling_duration = Some(rate);
self.sampling_max_duration = Some(max_duration);
self.sampling_baseline = Instant::now();
}
None
},
Ok(Ok(BackgroundHangMonitorControlMsg::Exit)) => {
for component in self.monitored_components.values_mut() {
component.exit_signal.signal_to_exit();
}
// Note the start of shutdown, let result = if let Some(ref control_port) = self.control_port {
// to ensure exit propagates, select! {
// even to components that have yet to register themselves, recv(self.port) -> event => {
// from this point on. match event {
self.shutting_down = true; Ok(msg) => BhmMessage::ComponentMessage(msg),
Err(_) => BhmMessage::PortDisconnected,
// Keep running; this worker thread will shutdown }
// when the monitored components have shutdown, },
// which we know has happened when `self.port` disconnects. recv(control_port) -> event => {
None match event {
}, Ok(Ok(BackgroundHangMonitorControlMsg::ToggleSampler(rate, max_duration))) => {
Ok(Err(e)) => { BhmMessage::ToggleSampler(rate, max_duration)
log::warn!("BackgroundHangMonitorWorker control message deserialization error: {e:?}"); },
None Ok(Ok(BackgroundHangMonitorControlMsg::Exit)) => BhmMessage::Exit,
}, Ok(Err(e)) => BhmMessage::ControlError(format!("{e:?}")),
Err(_) => return false, Err(_) => BhmMessage::ControlDisconnected,
}
} }
recv(tick) -> _ => BhmMessage::Tick,
}
} else {
// control_port is already disconnected, just wait on port and tick
select! {
recv(self.port) -> event => {
match event {
Ok(msg) => BhmMessage::ComponentMessage(msg),
Err(_) => BhmMessage::PortDisconnected,
}
},
recv(tick) -> _ => BhmMessage::Tick,
} }
recv(tick) -> _ => None,
}; };
if let Some(msg) = received { match result {
self.handle_msg(msg); BhmMessage::PortDisconnected => {
while let Ok(another_msg) = self.port.try_recv() { // All senders have dropped,
// Handle any other incoming messages, // which means all monitored components have shut down,
// before performing a hang checkpoint. // and so we can as well.
self.handle_msg(another_msg); return false;
} },
BhmMessage::ToggleSampler(rate, max_duration) => {
if self.sampling_duration.is_some() {
println!("Enabling profiler.");
self.finish_sampled_profile();
self.sampling_duration = None;
} else {
println!("Disabling profiler.");
self.sampling_duration = Some(rate);
self.sampling_max_duration = Some(max_duration);
self.sampling_baseline = Instant::now();
}
},
BhmMessage::Exit => {
for component in self.monitored_components.values_mut() {
component.exit_signal.signal_to_exit();
}
// Note the start of shutdown to ensure exit propagates,
// even to components that have yet to register themselves,
// from this point on.
self.shutting_down = true;
},
BhmMessage::ControlError(e) => {
warn!("BackgroundHangMonitorWorker control message deserialization error: {e}");
},
BhmMessage::ControlDisconnected => {
// The control port has disconnected. This can happen during
// shutdown when the EventLoop drops before all script threads
// have finished. Instead of exiting immediately, we signal
// all components to exit and continue running until they all
// unregister (indicated by `self.port` disconnecting).
if !self.shutting_down {
error!("BHM control disconnected before shutting down!");
for component in self.monitored_components.values_mut() {
component.exit_signal.signal_to_exit();
}
self.shutting_down = true;
}
self.control_port = None;
},
BhmMessage::ComponentMessage(msg) => {
self.handle_msg(msg);
while let Ok(another_msg) = self.port.try_recv() {
// Handle any other incoming messages before performing a hang checkpoint.
self.handle_msg(another_msg);
}
},
BhmMessage::Tick => {
// Just proceed to checkpoint
},
} }
if let Some(duration) = self.sampling_duration { if let Some(duration) = self.sampling_duration {

View File

@@ -36,6 +36,8 @@ pub use self::background_hang_monitor::*;
target_env = "musl" target_env = "musl"
) )
), ),
all(target_os = "windows", target_arch = "aarch64"),
target_os = "freebsd"
))] ))]
pub(crate) use crate::sampler::DummySampler as SamplerImpl; pub(crate) use crate::sampler::DummySampler as SamplerImpl;
#[cfg(all( #[cfg(all(

View File

@@ -9,13 +9,13 @@ use std::sync::{Arc, Mutex};
use std::thread; use std::thread;
use std::time::Duration; use std::time::Duration;
use background_hang_monitor::HangMonitorRegister;
use background_hang_monitor_api::{ use background_hang_monitor_api::{
BackgroundHangMonitorControlMsg, BackgroundHangMonitorExitSignal, HangAlert, HangAnnotation, BackgroundHangMonitorControlMsg, BackgroundHangMonitorExitSignal, HangAlert, HangAnnotation,
HangMonitorAlert, MonitoredComponentId, MonitoredComponentType, ScriptHangAnnotation, HangMonitorAlert, MonitoredComponentId, MonitoredComponentType, ScriptHangAnnotation,
}; };
use base::generic_channel; use servo_background_hang_monitor::HangMonitorRegister;
use base::id::TEST_SCRIPT_EVENT_LOOP_ID; use servo_base::generic_channel;
use servo_base::id::TEST_SCRIPT_EVENT_LOOP_ID;
static SERIAL: Mutex<()> = Mutex::new(()); static SERIAL: Mutex<()> = Mutex::new(());

View File

@@ -1,37 +1,33 @@
[package] [package]
name = "bluetooth" name = "servo-bluetooth"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "bluetooth" name = "servo_bluetooth"
path = "lib.rs" path = "lib.rs"
[dependencies] [dependencies]
base = { workspace = true }
bitflags = { workspace = true } bitflags = { workspace = true }
bluetooth_traits = { workspace = true }
blurmock = { version = "0.1.2", optional = true } blurmock = { version = "0.1.2", optional = true }
btleplug = { version = "0.12", optional = true }
embedder_traits = { workspace = true } embedder_traits = { workspace = true }
futures = { workspace = true, features = ["executor"] }
log = { workspace = true } log = { workspace = true }
rand = { workspace = true } rand = { workspace = true }
servo_config = { path = "../config" } servo-base = { workspace = true }
servo-bluetooth-traits = { workspace = true }
servo-config = { workspace = true }
tokio = { workspace = true, features = ["rt", "time", "sync"], optional = true }
uuid = { workspace = true } uuid = { workspace = true }
[target.'cfg(target_os = "linux")'.dependencies]
blurz = { version = "0.3", optional = true }
[target.'cfg(target_os = "android")'.dependencies]
blurdroid = { version = "0.1.2", optional = true }
[target.'cfg(target_os = "macos")'.dependencies]
blurmac = { path = "../../third_party/blurmac", optional = true }
[features] [features]
default = ["bluetooth-test"] default = ["bluetooth-test"]
bluetooth-test = ["blurmock"] bluetooth-test = ["blurmock"]
native-bluetooth = ["bluetooth-test", "blurdroid", "blurmac", "blurz"] native-bluetooth = ["bluetooth-test", "btleplug", "tokio"]

View File

@@ -5,99 +5,81 @@
use std::error::Error; use std::error::Error;
use std::sync::Arc; use std::sync::Arc;
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
use blurdroid::bluetooth_adapter::Adapter as BluetoothAdapterAndroid;
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
use blurdroid::bluetooth_device::Device as BluetoothDeviceAndroid;
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
use blurdroid::bluetooth_discovery_session::DiscoverySession as BluetoothDiscoverySessionAndroid;
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
use blurmac::BluetoothAdapter as BluetoothAdapterMac;
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
use blurmac::BluetoothDevice as BluetoothDeviceMac;
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
use blurmac::BluetoothDiscoverySession as BluetoothDiscoverySessionMac;
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
use blurmock::fake_adapter::FakeBluetoothAdapter; use blurmock::fake_adapter::FakeBluetoothAdapter;
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
use blurmock::fake_device::FakeBluetoothDevice; use blurmock::fake_device::FakeBluetoothDevice;
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
use blurmock::fake_discovery_session::FakeBluetoothDiscoverySession; use blurmock::fake_discovery_session::FakeBluetoothDiscoverySession;
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))] #[cfg(feature = "native-bluetooth")]
use blurz::bluetooth_adapter::BluetoothAdapter as BluetoothAdapterBluez; use btleplug::api::{Central, CentralState, Manager};
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))] #[cfg(feature = "native-bluetooth")]
use blurz::bluetooth_device::BluetoothDevice as BluetoothDeviceBluez; use btleplug::platform::{Adapter, Manager as PlatformManager};
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
use blurz::bluetooth_discovery_session::BluetoothDiscoverySession as BluetoothDiscoverySessionBluez;
use super::bluetooth::{BluetoothDevice, BluetoothDiscoverySession}; use super::bluetooth::{BluetoothDevice, BluetoothDiscoverySession};
#[cfg(not(any( use crate::macros::get_inner_and_call_test_func;
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"), #[cfg(feature = "native-bluetooth")]
all(target_os = "macos", feature = "native-bluetooth") #[derive(Clone, Debug)]
)))] pub struct BtleplugAdapter {
use super::empty::BluetoothDevice as BluetoothDeviceEmpty; adapter: Adapter,
#[cfg(not(any( }
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"), #[cfg(feature = "native-bluetooth")]
all(target_os = "macos", feature = "native-bluetooth") impl BtleplugAdapter {
)))] pub async fn new() -> Result<Self, Box<dyn Error>> {
use super::empty::BluetoothDiscoverySession as BluetoothDiscoverySessionEmpty; let manager = PlatformManager::new().await?;
#[cfg(not(any( let adapters = manager.adapters().await?;
all(target_os = "linux", feature = "native-bluetooth"), let adapter = adapters
all(target_os = "android", feature = "native-bluetooth"), .into_iter()
all(target_os = "macos", feature = "native-bluetooth") .next()
)))] .ok_or_else(|| btleplug::Error::NoAdapterAvailable)?;
use super::empty::EmptyAdapter as BluetoothAdapterEmpty; Ok(BtleplugAdapter { adapter })
use super::macros::get_inner_and_call; }
#[cfg(feature = "bluetooth-test")]
use super::macros::get_inner_and_call_test_func; pub async fn get_address(&self) -> Result<String, Box<dyn Error>> {
Ok(self.adapter.adapter_info().await?)
}
pub async fn is_powered(&self) -> Result<bool, Box<dyn Error>> {
let state = self.adapter.adapter_state().await?;
Ok(state == CentralState::PoweredOn)
}
pub async fn get_devices(&self) -> Result<Vec<BluetoothDevice>, Box<dyn Error>> {
let peripherals = self.adapter.peripherals().await?;
Ok(peripherals
.into_iter()
.map(|p| BluetoothDevice::Btleplug(super::bluetooth::BtleplugDevice { peripheral: p }))
.collect())
}
pub fn create_discovery_session(&self) -> Result<BluetoothDiscoverySession, Box<dyn Error>> {
Ok(BluetoothDiscoverySession::Btleplug(
super::bluetooth::BtleplugDiscoverySession {
adapter: self.adapter.clone(),
},
))
}
}
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub enum BluetoothAdapter { pub enum BluetoothAdapter {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))] #[cfg(feature = "native-bluetooth")]
Bluez(Arc<BluetoothAdapterBluez>), Btleplug(BtleplugAdapter),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
Android(Arc<BluetoothAdapterAndroid>),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
Mac(Arc<BluetoothAdapterMac>),
#[cfg(not(any(
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth")
)))]
Empty(Arc<BluetoothAdapterEmpty>),
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
Mock(Arc<FakeBluetoothAdapter>), Mock(Arc<FakeBluetoothAdapter>),
} }
impl BluetoothAdapter { impl BluetoothAdapter {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))] #[cfg(feature = "native-bluetooth")]
pub fn new() -> Result<BluetoothAdapter, Box<dyn Error>> { pub async fn new() -> Result<BluetoothAdapter, Box<dyn Error>> {
let bluez_adapter = BluetoothAdapterBluez::init()?; Ok(Self::Btleplug(BtleplugAdapter::new().await?))
Ok(Self::Bluez(Arc::new(bluez_adapter)))
} }
#[cfg(all(target_os = "android", feature = "native-bluetooth"))] #[cfg(not(feature = "native-bluetooth"))]
pub fn new() -> Result<BluetoothAdapter, Box<dyn Error>> { pub fn new() -> Result<BluetoothAdapter, Box<dyn Error>> {
let blurdroid_adapter = BluetoothAdapterAndroid::get_adapter()?; Err(Box::from("Bluetooth not supported on this platform"))
Ok(Self::Android(Arc::new(blurdroid_adapter)))
}
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
pub fn new() -> Result<BluetoothAdapter, Box<dyn Error>> {
let mac_adapter = BluetoothAdapterMac::init()?;
Ok(Self::Mac(Arc::new(mac_adapter)))
}
#[cfg(not(any(
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth")
)))]
pub fn new() -> Result<BluetoothAdapter, Box<dyn Error>> {
let adapter = BluetoothAdapterEmpty::init()?;
Ok(Self::Empty(Arc::new(adapter)))
} }
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
@@ -105,62 +87,30 @@ impl BluetoothAdapter {
Ok(Self::Mock(FakeBluetoothAdapter::new_empty())) Ok(Self::Mock(FakeBluetoothAdapter::new_empty()))
} }
pub fn get_id(&self) -> String { pub async fn get_address(&self) -> Result<String, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_id) match self {
#[cfg(feature = "native-bluetooth")]
Self::Btleplug(inner) => inner.get_address().await,
#[cfg(feature = "bluetooth-test")]
Self::Mock(inner) => inner.get_address(),
}
} }
pub fn get_devices(&self) -> Result<Vec<BluetoothDevice>, Box<dyn Error>> { pub async fn is_powered(&self) -> Result<bool, Box<dyn Error>> {
match self { match self {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))] #[cfg(feature = "native-bluetooth")]
BluetoothAdapter::Bluez(inner) => { Self::Btleplug(inner) => inner.is_powered().await,
let device_list = inner.get_device_list()?;
Ok(device_list
.into_iter()
.map(|device| BluetoothDevice::Bluez(BluetoothDeviceBluez::new(device).into()))
.collect())
},
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
BluetoothAdapter::Android(inner) => {
let device_list = inner.get_device_list()?;
Ok(device_list
.into_iter()
.map(|device| {
BluetoothDevice::Android(BluetoothDeviceAndroid::new_empty(
self.0.clone(),
device,
))
})
.collect())
},
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
BluetoothAdapter::Mac(inner) => {
let device_list = inner.get_device_list()?;
Ok(device_list
.into_iter()
.map(|device| {
BluetoothDevice::Mac(Arc::new(BluetoothDeviceMac::new(
inner.clone(),
device,
)))
})
.collect())
},
#[cfg(not(any(
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth")
)))]
BluetoothAdapter::Empty(inner) => {
let device_list = inner.get_device_list()?;
Ok(device_list
.into_iter()
.map(|device| {
BluetoothDevice::Empty(Arc::new(BluetoothDeviceEmpty::new(device)))
})
.collect())
},
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
BluetoothAdapter::Mock(inner) => { Self::Mock(inner) => inner.is_powered(),
}
}
pub async fn get_devices(&self) -> Result<Vec<BluetoothDevice>, Box<dyn Error>> {
match self {
#[cfg(feature = "native-bluetooth")]
Self::Btleplug(inner) => inner.get_devices().await,
#[cfg(feature = "bluetooth-test")]
Self::Mock(inner) => {
let device_list = inner.get_device_list()?; let device_list = inner.get_device_list()?;
Ok(device_list Ok(device_list
.into_iter() .into_iter()
@@ -172,157 +122,34 @@ impl BluetoothAdapter {
} }
} }
pub fn get_device(&self, address: String) -> Result<Option<BluetoothDevice>, Box<dyn Error>> { pub fn create_discovery_session(&self) -> Result<BluetoothDiscoverySession, Box<dyn Error>> {
let devices = self.get_devices()?; match self {
for device in devices { #[cfg(feature = "native-bluetooth")]
if device.get_address()? == address { Self::Btleplug(inner) => inner.create_discovery_session(),
return Ok(Some(device)); #[cfg(feature = "bluetooth-test")]
} Self::Mock(inner) => Ok(BluetoothDiscoverySession::Mock(Arc::new(
FakeBluetoothDiscoverySession::create_session(inner.clone())?,
))),
} }
Ok(None)
} }
pub fn create_mock_device(&self, _device: String) -> Result<BluetoothDevice, Box<dyn Error>> { pub fn create_mock_device(&self, _device: String) -> Result<BluetoothDevice, Box<dyn Error>> {
match self { match self {
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
BluetoothAdapter::Mock(inner) => Ok(BluetoothDevice::Mock( Self::Mock(inner) => Ok(BluetoothDevice::Mock(FakeBluetoothDevice::new_empty(
FakeBluetoothDevice::new_empty(inner.clone(), _device), inner.clone(),
)), _device,
_ => Err(Box::from( ))),
"Error! Test functions are not supported on real devices!", #[cfg(feature = "native-bluetooth")]
)), _ => Err(Box::from("Test functions not supported on real devices")),
} }
} }
pub fn create_discovery_session(&self) -> Result<BluetoothDiscoverySession, Box<dyn Error>> {
let discovery_session = match self {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
#[allow(clippy::arc_with_non_send_sync)] // Problem with underlying library
BluetoothAdapter::Bluez(inner) => BluetoothDiscoverySession::Bluez(Arc::new(
BluetoothDiscoverySessionBluez::create_session(inner.get_id())?,
)),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
BluetoothAdapter::Android(inner) => BluetoothDiscoverySession::Android(Arc::new(
BluetoothDiscoverySessionAndroid::create_session(inner.clone())?,
)),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
BluetoothAdapter::Mac(_) => {
BluetoothDiscoverySession::Mac(Arc::new(BluetoothDiscoverySessionMac {}))
},
#[cfg(not(any(
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth")
)))]
BluetoothAdapter::Empty(_) => {
BluetoothDiscoverySession::Empty(Arc::new(BluetoothDiscoverySessionEmpty {}))
},
#[cfg(feature = "bluetooth-test")]
BluetoothAdapter::Mock(inner) => BluetoothDiscoverySession::Mock(Arc::new(
FakeBluetoothDiscoverySession::create_session(inner.clone())?,
)),
};
Ok(discovery_session)
}
pub fn get_address(&self) -> Result<String, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_address)
}
pub fn get_name(&self) -> Result<String, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_name)
}
pub fn get_alias(&self) -> Result<String, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_alias)
}
pub fn get_class(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_class)
}
pub fn is_powered(&self) -> Result<bool, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, is_powered)
}
pub fn is_discoverable(&self) -> Result<bool, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, is_discoverable)
}
pub fn is_pairable(&self) -> Result<bool, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, is_pairable)
}
pub fn get_pairable_timeout(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_pairable_timeout)
}
pub fn get_discoverable_timeout(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_discoverable_timeout)
}
pub fn is_discovering(&self) -> Result<bool, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, is_discovering)
}
pub fn get_uuids(&self) -> Result<Vec<String>, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_uuids)
}
pub fn get_vendor_id_source(&self) -> Result<String, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_vendor_id_source)
}
pub fn get_vendor_id(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_vendor_id)
}
pub fn get_product_id(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_product_id)
}
pub fn get_device_id(&self) -> Result<u32, Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_device_id)
}
pub fn get_modalias(&self) -> Result<(String, u32, u32, u32), Box<dyn Error>> {
get_inner_and_call!(self, BluetoothAdapter, get_modalias)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_id(&self, id: String) -> Result<(), Box<dyn Error>> {
match self {
#[cfg(feature = "bluetooth-test")]
BluetoothAdapter::Mock(inner) => {
inner.set_id(id);
Ok(())
},
_ => Err(Box::from(
"Error! Test functions are not supported on real devices!",
)),
}
}
#[cfg(feature = "bluetooth-test")]
pub fn set_address(&self, address: String) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_address, address)
}
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
pub fn set_name(&self, name: String) -> Result<(), Box<dyn Error>> { pub fn set_name(&self, name: String) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_name, name) get_inner_and_call_test_func!(self, BluetoothAdapter, set_name, name)
} }
#[cfg(feature = "bluetooth-test")]
pub fn set_alias(&self, alias: String) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_alias, alias)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_class(&self, class: u32) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_class, class)
}
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
pub fn set_powered(&self, powered: bool) -> Result<(), Box<dyn Error>> { pub fn set_powered(&self, powered: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_powered, powered) get_inner_and_call_test_func!(self, BluetoothAdapter, set_powered, powered)
@@ -342,64 +169,4 @@ impl BluetoothAdapter {
pub fn set_discoverable(&self, discoverable: bool) -> Result<(), Box<dyn Error>> { pub fn set_discoverable(&self, discoverable: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_discoverable, discoverable) get_inner_and_call_test_func!(self, BluetoothAdapter, set_discoverable, discoverable)
} }
#[cfg(feature = "bluetooth-test")]
pub fn set_pairable(&self, pairable: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_pairable, pairable)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_pairable_timeout(&self, timeout: u32) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_pairable_timeout, timeout)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_can_start_discovery(&self, can_start_discovery: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(
self,
BluetoothAdapter,
set_can_start_discovery,
can_start_discovery
)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_discoverable_timeout(&self, timeout: u32) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_discoverable_timeout, timeout)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_discovering(&self, discovering: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_discovering, discovering)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_can_stop_discovery(&self, can_stop_discovery: bool) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(
self,
BluetoothAdapter,
set_can_stop_discovery,
can_stop_discovery
)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_uuids(&self, uuids: Vec<String>) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_uuids, uuids)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_modalias(&self, modalias: String) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_modalias, modalias)
}
#[cfg(feature = "bluetooth-test")]
pub fn get_ad_datas(&self) -> Result<Vec<String>, Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, get_ad_datas)
}
#[cfg(feature = "bluetooth-test")]
pub fn set_ad_datas(&self, ad_datas: Vec<String>) -> Result<(), Box<dyn Error>> {
get_inner_and_call_test_func!(self, BluetoothAdapter, set_ad_datas, ad_datas)
}
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,377 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use std::collections::HashMap;
use std::error::Error;
use std::sync::Arc;
const NOT_SUPPORTED_ERROR: &str = "Error! Not supported platform!";
#[derive(Clone, Debug)]
pub struct EmptyAdapter {}
impl EmptyAdapter {
pub fn init() -> Result<EmptyAdapter, Box<dyn Error>> {
Ok(EmptyAdapter::new())
}
fn new() -> EmptyAdapter {
EmptyAdapter {}
}
pub fn get_id(&self) -> String {
String::new()
}
pub fn get_device_list(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_address(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_name(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_alias(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_alias(&self, _value: String) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_class(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_powered(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_powered(&self, _value: bool) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_discoverable(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_discoverable(&self, _value: bool) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_pairable(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_pairable(&self, _value: bool) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_pairable_timeout(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_pairable_timeout(&self, _value: u32) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_discoverable_timeout(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_discoverable_timeout(&self, _value: u32) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_discovering(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_uuids(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_vendor_id_source(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_vendor_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_product_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_device_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_modalias(&self) -> Result<(String, u32, u32, u32), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}
#[derive(Clone, Debug)]
pub struct BluetoothDiscoverySession {}
impl BluetoothDiscoverySession {
pub fn create_session(
_adapter: Arc<EmptyAdapter>,
) -> Result<BluetoothDiscoverySession, Box<dyn Error>> {
Ok(BluetoothDiscoverySession {})
}
pub fn start_discovery(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn stop_discovery(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}
#[derive(Clone, Debug)]
pub struct BluetoothDevice {}
impl BluetoothDevice {
pub fn new(_device: String) -> BluetoothDevice {
BluetoothDevice {}
}
pub fn get_id(&self) -> String {
String::new()
}
pub fn get_address(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_name(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_icon(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_class(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_appearance(&self) -> Result<u16, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_uuids(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_paired(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_connected(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_trusted(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_blocked(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_alias(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn set_alias(&self, _value: String) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_legacy_pairing(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_vendor_id_source(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_vendor_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_product_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_device_id(&self) -> Result<u32, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_modalias(&self) -> Result<(String, u32, u32, u32), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_rssi(&self) -> Result<i16, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_tx_power(&self) -> Result<i16, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_manufacturer_data(&self) -> Result<HashMap<u16, Vec<u8>>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_service_data(&self) -> Result<HashMap<String, Vec<u8>>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_gatt_services(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn connect(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn disconnect(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn connect_profile(&self, _uuid: String) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn disconnect_profile(&self, _uuid: String) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn pair(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn cancel_pairing(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}
#[derive(Clone, Debug)]
pub struct BluetoothGATTService {}
impl BluetoothGATTService {
pub fn new(_service: String) -> BluetoothGATTService {
BluetoothGATTService {}
}
pub fn get_id(&self) -> String {
String::new()
}
pub fn get_uuid(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_primary(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_includes(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_gatt_characteristics(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}
#[derive(Clone, Debug)]
pub struct BluetoothGATTCharacteristic {}
impl BluetoothGATTCharacteristic {
pub fn new(_characteristic: String) -> BluetoothGATTCharacteristic {
BluetoothGATTCharacteristic {}
}
pub fn get_id(&self) -> String {
String::new()
}
pub fn get_uuid(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_value(&self) -> Result<Vec<u8>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn is_notifying(&self) -> Result<bool, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_flags(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_gatt_descriptors(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn read_value(&self) -> Result<Vec<u8>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn write_value(&self, _values: Vec<u8>) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn start_notify(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn stop_notify(&self) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}
#[derive(Clone, Debug)]
pub struct BluetoothGATTDescriptor {}
impl BluetoothGATTDescriptor {
pub fn new(_descriptor: String) -> BluetoothGATTDescriptor {
BluetoothGATTDescriptor {}
}
pub fn get_id(&self) -> String {
String::new()
}
pub fn get_uuid(&self) -> Result<String, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_value(&self) -> Result<Vec<u8>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn get_flags(&self) -> Result<Vec<String>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn read_value(&self) -> Result<Vec<u8>, Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
pub fn write_value(&self, _values: Vec<u8>) -> Result<(), Box<dyn Error>> {
Err(Box::from(NOT_SUPPORTED_ERROR))
}
}

View File

@@ -4,12 +4,6 @@
pub mod adapter; pub mod adapter;
pub mod bluetooth; pub mod bluetooth;
#[cfg(not(any(
all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth")
)))]
mod empty;
mod macros; mod macros;
pub mod test; pub mod test;
@@ -19,21 +13,23 @@ use std::string::String;
use std::thread; use std::thread;
use std::time::Duration; use std::time::Duration;
use base::generic_channel::{self, GenericReceiver, GenericSender};
use base::id::WebViewId;
use bitflags::bitflags; use bitflags::bitflags;
use bluetooth_traits::blocklist::{Blocklist, uuid_is_blocklisted}; use embedder_traits::{BluetoothDeviceDescription, EmbedderMsg, EmbedderProxy};
use bluetooth_traits::scanfilter::{ use log::warn;
use rand::{self, Rng};
#[cfg(not(feature = "native-bluetooth"))]
use servo_base::generic_channel::GenericReceiver;
use servo_base::generic_channel::{self, GenericSender};
use servo_base::id::WebViewId;
use servo_bluetooth_traits::blocklist::{Blocklist, uuid_is_blocklisted};
use servo_bluetooth_traits::scanfilter::{
BluetoothScanfilter, BluetoothScanfilterSequence, RequestDeviceoptions, BluetoothScanfilter, BluetoothScanfilterSequence, RequestDeviceoptions,
}; };
use bluetooth_traits::{ use servo_bluetooth_traits::{
BluetoothCharacteristicMsg, BluetoothDescriptorMsg, BluetoothDeviceMsg, BluetoothError, BluetoothCharacteristicMsg, BluetoothDescriptorMsg, BluetoothDeviceMsg, BluetoothError,
BluetoothRequest, BluetoothResponse, BluetoothResponseResult, BluetoothResult, BluetoothRequest, BluetoothResponse, BluetoothResponseResult, BluetoothResult,
BluetoothServiceMsg, GATTType, BluetoothServiceMsg, GATTType,
}; };
use embedder_traits::{EmbedderMsg, EmbedderProxy};
use log::warn;
use rand::{self, Rng};
use servo_config::pref; use servo_config::pref;
use crate::bluetooth::{ use crate::bluetooth::{
@@ -75,6 +71,47 @@ pub trait BluetoothThreadFactory {
} }
impl BluetoothThreadFactory for GenericSender<BluetoothRequest> { impl BluetoothThreadFactory for GenericSender<BluetoothRequest> {
#[cfg(feature = "native-bluetooth")]
fn new(embedder_proxy: EmbedderProxy) -> GenericSender<BluetoothRequest> {
let (sender, receiver) = generic_channel::channel().unwrap();
thread::Builder::new()
.name("Bluetooth".to_owned())
.spawn(move || {
let runtime = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.expect("Failed to create bluetooth tokio runtime");
let adapter = runtime.block_on(async {
if pref!(dom_bluetooth_enabled) {
BluetoothAdapter::new().await.ok()
} else {
BluetoothAdapter::new_mock().ok()
}
});
// Bridge: GenericReceiver -> tokio mpsc channel
let (async_sender, async_receiver) = tokio::sync::mpsc::unbounded_channel();
thread::Builder::new()
.name("BluetoothTokioBridge".to_owned())
.spawn(move || {
while let Ok(message) = receiver.recv() {
if async_sender.send(message).is_err() {
break;
}
}
})
.expect("BT Tokio Bridge thread spawning failed");
let mut manager = BluetoothManager::new(adapter, embedder_proxy);
runtime.block_on(manager.start(async_receiver));
})
.expect("Thread spawning failed");
sender
}
#[cfg(not(feature = "native-bluetooth"))]
fn new(embedder_proxy: EmbedderProxy) -> GenericSender<BluetoothRequest> { fn new(embedder_proxy: EmbedderProxy) -> GenericSender<BluetoothRequest> {
let (sender, receiver) = generic_channel::channel().unwrap(); let (sender, receiver) = generic_channel::channel().unwrap();
let adapter = if pref!(dom_bluetooth_enabled) { let adapter = if pref!(dom_bluetooth_enabled) {
@@ -86,7 +123,7 @@ impl BluetoothThreadFactory for GenericSender<BluetoothRequest> {
thread::Builder::new() thread::Builder::new()
.name("Bluetooth".to_owned()) .name("Bluetooth".to_owned())
.spawn(move || { .spawn(move || {
BluetoothManager::new(receiver, adapter, embedder_proxy).start(); BluetoothManager::new(adapter, embedder_proxy).start_sync(receiver);
}) })
.expect("Thread spawning failed"); .expect("Thread spawning failed");
sender sender
@@ -94,21 +131,21 @@ impl BluetoothThreadFactory for GenericSender<BluetoothRequest> {
} }
/// <https://webbluetoothcg.github.io/web-bluetooth/#matches-a-filter> /// <https://webbluetoothcg.github.io/web-bluetooth/#matches-a-filter>
fn matches_filter(device: &BluetoothDevice, filter: &BluetoothScanfilter) -> bool { async fn matches_filter(device: &BluetoothDevice, filter: &BluetoothScanfilter) -> bool {
if filter.is_empty_or_invalid() { if filter.is_empty_or_invalid() {
return false; return false;
} }
// Step 1. // Step 1.
if let Some(name) = filter.get_name() { if let Some(name) = filter.get_name() {
if device.get_name().ok() != Some(name.to_string()) { if device.get_name().await.ok() != Some(name.to_string()) {
return false; return false;
} }
} }
// Step 2. // Step 2.
if !filter.get_name_prefix().is_empty() { if !filter.get_name_prefix().is_empty() {
if let Ok(device_name) = device.get_name() { if let Ok(device_name) = device.get_name().await {
if !device_name.starts_with(filter.get_name_prefix()) { if !device_name.starts_with(filter.get_name_prefix()) {
return false; return false;
} }
@@ -119,7 +156,7 @@ fn matches_filter(device: &BluetoothDevice, filter: &BluetoothScanfilter) -> boo
// Step 3. // Step 3.
if !filter.get_services().is_empty() { if !filter.get_services().is_empty() {
if let Ok(device_uuids) = device.get_uuids() { if let Ok(device_uuids) = device.get_uuids().await {
for service in filter.get_services() { for service in filter.get_services() {
if !device_uuids.iter().any(|x| x == service) { if !device_uuids.iter().any(|x| x == service) {
return false; return false;
@@ -130,7 +167,7 @@ fn matches_filter(device: &BluetoothDevice, filter: &BluetoothScanfilter) -> boo
// Step 4. // Step 4.
if let Some(manufacturer_data) = filter.get_manufacturer_data() { if let Some(manufacturer_data) = filter.get_manufacturer_data() {
let advertised_manufacturer_data = match device.get_manufacturer_data() { let advertised_manufacturer_data = match device.get_manufacturer_data().await {
Ok(data) => data, Ok(data) => data,
Err(_) => return false, Err(_) => return false,
}; };
@@ -147,7 +184,7 @@ fn matches_filter(device: &BluetoothDevice, filter: &BluetoothScanfilter) -> boo
// Step 5. // Step 5.
if let Some(service_data) = filter.get_service_data() { if let Some(service_data) = filter.get_service_data() {
let advertised_service_data = match device.get_service_data() { let advertised_service_data = match device.get_service_data().await {
Ok(data) => data, Ok(data) => data,
Err(_) => return false, Err(_) => return false,
}; };
@@ -185,12 +222,28 @@ fn data_filter_matches(data: &[u8], prefix: &[u8], mask: &[u8]) -> bool {
true true
} }
fn matches_filters(device: &BluetoothDevice, filters: &BluetoothScanfilterSequence) -> bool { async fn matches_filters(device: &BluetoothDevice, filters: &BluetoothScanfilterSequence) -> bool {
if filters.has_empty_or_invalid_filter() { if filters.has_empty_or_invalid_filter() {
return false; return false;
} }
for f in filters.iter() {
if matches_filter(device, f).await {
return true;
}
}
false
}
filters.iter().any(|f| matches_filter(device, f)) /// Async sleep that works in both tokio and non-tokio (mock) contexts.
async fn async_sleep(duration: Duration) {
#[cfg(feature = "native-bluetooth")]
{
tokio::time::sleep(duration).await;
}
#[cfg(not(feature = "native-bluetooth"))]
{
thread::sleep(duration);
}
} }
fn is_mock_adapter(adapter: &BluetoothAdapter) -> bool { fn is_mock_adapter(adapter: &BluetoothAdapter) -> bool {
@@ -198,7 +251,6 @@ fn is_mock_adapter(adapter: &BluetoothAdapter) -> bool {
} }
pub struct BluetoothManager { pub struct BluetoothManager {
receiver: GenericReceiver<BluetoothRequest>,
adapter: Option<BluetoothAdapter>, adapter: Option<BluetoothAdapter>,
address_to_id: HashMap<String, String>, address_to_id: HashMap<String, String>,
service_to_device: HashMap<String, String>, service_to_device: HashMap<String, String>,
@@ -214,12 +266,10 @@ pub struct BluetoothManager {
impl BluetoothManager { impl BluetoothManager {
pub fn new( pub fn new(
receiver: GenericReceiver<BluetoothRequest>,
adapter: Option<BluetoothAdapter>, adapter: Option<BluetoothAdapter>,
embedder_proxy: EmbedderProxy, embedder_proxy: EmbedderProxy,
) -> BluetoothManager { ) -> BluetoothManager {
BluetoothManager { BluetoothManager {
receiver,
adapter, adapter,
address_to_id: HashMap::new(), address_to_id: HashMap::new(),
service_to_device: HashMap::new(), service_to_device: HashMap::new(),
@@ -234,58 +284,82 @@ impl BluetoothManager {
} }
} }
fn start(&mut self) { /// Async message loop.
while let Ok(msg) = self.receiver.recv() { /// The tokio runtime is always active, so btleplug's background tasks run continuously.
match msg { #[cfg(feature = "native-bluetooth")]
BluetoothRequest::RequestDevice(options, sender) => { async fn start(&mut self, mut rx: tokio::sync::mpsc::UnboundedReceiver<BluetoothRequest>) {
let _ = sender.send(self.request_device(options)); while let Some(msg) = rx.recv().await {
}, if self.handle_message(msg).await {
BluetoothRequest::GATTServerConnect(device_id, sender) => { break;
let _ = sender.send(self.gatt_server_connect(device_id));
},
BluetoothRequest::GATTServerDisconnect(device_id, sender) => {
let _ = sender.send(self.gatt_server_disconnect(device_id));
},
BluetoothRequest::GetGATTChildren(id, uuid, single, child_type, sender) => {
let _ = sender.send(self.get_gatt_children(id, uuid, single, child_type));
},
BluetoothRequest::ReadValue(id, sender) => {
let _ = sender.send(self.read_value(id));
},
BluetoothRequest::WriteValue(id, value, sender) => {
let _ = sender.send(self.write_value(id, value));
},
BluetoothRequest::EnableNotification(id, enable, sender) => {
let _ = sender.send(self.enable_notification(id, enable));
},
BluetoothRequest::WatchAdvertisements(id, sender) => {
let _ = sender.send(self.watch_advertisements(id));
},
BluetoothRequest::Test(data_set_name, sender) => {
let _ = sender.send(self.test(data_set_name));
},
BluetoothRequest::SetRepresentedToNull(
service_ids,
characteristic_ids,
descriptor_ids,
) => self.remove_ids_from_caches(service_ids, characteristic_ids, descriptor_ids),
BluetoothRequest::IsRepresentedDeviceNull(id, sender) => {
let _ = sender.send(!self.device_is_cached(&id));
},
BluetoothRequest::GetAvailability(sender) => {
let _ = sender.send(self.get_availability());
},
BluetoothRequest::MatchesFilter(id, filters, sender) => {
let _ = sender.send(self.device_matches_filter(&id, &filters));
},
BluetoothRequest::Exit => break,
} }
} }
} }
/// Synchronous message loop.
#[cfg(not(feature = "native-bluetooth"))]
fn start_sync(&mut self, receiver: GenericReceiver<BluetoothRequest>) {
// For mock-only builds, we don't have a tokio runtime.
// Create a minimal one just to call async methods (which are fast for mock).
while let Ok(msg) = receiver.recv() {
let should_exit = futures::executor::block_on(self.handle_message(msg));
if should_exit {
break;
}
}
}
/// Handle a single message. Returns true if the event loop should exit.
async fn handle_message(&mut self, msg: BluetoothRequest) -> bool {
match msg {
BluetoothRequest::RequestDevice(options, sender) => {
let _ = sender.send(self.request_device(options).await);
},
BluetoothRequest::GATTServerConnect(device_id, sender) => {
let _ = sender.send(self.gatt_server_connect(device_id).await);
},
BluetoothRequest::GATTServerDisconnect(device_id, sender) => {
let _ = sender.send(self.gatt_server_disconnect(device_id).await);
},
BluetoothRequest::GetGATTChildren(id, uuid, single, child_type, sender) => {
let _ = sender.send(self.get_gatt_children(id, uuid, single, child_type).await);
},
BluetoothRequest::ReadValue(id, sender) => {
let _ = sender.send(self.read_value(id).await);
},
BluetoothRequest::WriteValue(id, value, sender) => {
let _ = sender.send(self.write_value(id, value).await);
},
BluetoothRequest::EnableNotification(id, enable, sender) => {
let _ = sender.send(self.enable_notification(id, enable).await);
},
BluetoothRequest::WatchAdvertisements(id, sender) => {
let _ = sender.send(self.watch_advertisements(id));
},
BluetoothRequest::Test(data_set_name, sender) => {
let _ = sender.send(self.test(data_set_name).await);
},
BluetoothRequest::SetRepresentedToNull(
service_ids,
characteristic_ids,
descriptor_ids,
) => self.remove_ids_from_caches(service_ids, characteristic_ids, descriptor_ids),
BluetoothRequest::IsRepresentedDeviceNull(id, sender) => {
let _ = sender.send(!self.device_is_cached(&id));
},
BluetoothRequest::GetAvailability(sender) => {
let _ = sender.send(self.get_availability().await);
},
BluetoothRequest::MatchesFilter(id, filters, sender) => {
let _ = sender.send(self.device_matches_filter(&id, &filters).await);
},
BluetoothRequest::Exit => return true,
}
false
}
// Test // Test
fn test(&mut self, data_set_name: String) -> BluetoothResult<()> { async fn test(&mut self, data_set_name: String) -> BluetoothResult<()> {
self.address_to_id.clear(); self.address_to_id.clear();
self.service_to_device.clear(); self.service_to_device.clear();
self.characteristic_to_service.clear(); self.characteristic_to_service.clear();
@@ -296,7 +370,7 @@ impl BluetoothManager {
self.cached_descriptors.clear(); self.cached_descriptors.clear();
self.allowed_services.clear(); self.allowed_services.clear();
self.adapter = BluetoothAdapter::new_mock().ok(); self.adapter = BluetoothAdapter::new_mock().ok();
match test::test(self, data_set_name) { match test::test(self, data_set_name).await {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(error) => Err(BluetoothError::Type(error.to_string())), Err(error) => Err(BluetoothError::Type(error.to_string())),
} }
@@ -326,13 +400,20 @@ impl BluetoothManager {
// Adapter // Adapter
pub fn get_or_create_adapter(&mut self) -> Option<BluetoothAdapter> { pub async fn get_or_create_adapter(&mut self) -> Option<BluetoothAdapter> {
let adapter_valid = self let adapter_valid = match self.adapter.as_ref() {
.adapter Some(a) => a.get_address().await.is_ok(),
.as_ref() None => false,
.is_some_and(|a| a.get_address().is_ok()); };
if !adapter_valid { if !adapter_valid {
self.adapter = BluetoothAdapter::new().ok(); #[cfg(feature = "native-bluetooth")]
{
self.adapter = BluetoothAdapter::new().await.ok();
}
#[cfg(not(feature = "native-bluetooth"))]
{
self.adapter = BluetoothAdapter::new().ok();
}
} }
let adapter = self.adapter.as_ref()?; let adapter = self.adapter.as_ref()?;
@@ -344,10 +425,10 @@ impl BluetoothManager {
self.adapter.clone() self.adapter.clone()
} }
fn get_adapter(&mut self) -> BluetoothResult<BluetoothAdapter> { async fn get_adapter(&mut self) -> BluetoothResult<BluetoothAdapter> {
match self.get_or_create_adapter() { match self.get_or_create_adapter().await {
Some(adapter) => { Some(adapter) => {
if !adapter.is_powered().unwrap_or(false) { if !adapter.is_powered().await.unwrap_or(false) {
return Err(BluetoothError::NotFound); return Err(BluetoothError::NotFound);
} }
Ok(adapter) Ok(adapter)
@@ -358,8 +439,11 @@ impl BluetoothManager {
// Device // Device
fn get_and_cache_devices(&mut self, adapter: &mut BluetoothAdapter) -> Vec<BluetoothDevice> { async fn get_and_cache_devices(
let devices = adapter.get_devices().unwrap_or_default(); &mut self,
adapter: &mut BluetoothAdapter,
) -> Vec<BluetoothDevice> {
let devices = adapter.get_devices().await.unwrap_or_default();
for device in &devices { for device in &devices {
if let Ok(address) = device.get_address() { if let Ok(address) = device.get_address() {
#[allow(clippy::map_entry)] // False positive, the fix creates a borrowing error #[allow(clippy::map_entry)] // False positive, the fix creates a borrowing error
@@ -375,18 +459,18 @@ impl BluetoothManager {
self.cached_devices.values().cloned().collect() self.cached_devices.values().cloned().collect()
} }
fn get_device( async fn get_device(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
device_id: &str, device_id: &str,
) -> Option<&BluetoothDevice> { ) -> Option<&BluetoothDevice> {
return_if_cached!(self.cached_devices, device_id); return_if_cached!(self.cached_devices, device_id);
self.get_and_cache_devices(adapter); self.get_and_cache_devices(adapter).await;
return_if_cached!(self.cached_devices, device_id); return_if_cached!(self.cached_devices, device_id);
None None
} }
fn select_device( async fn select_device(
&mut self, &mut self,
webview_id: WebViewId, webview_id: WebViewId,
devices: Vec<BluetoothDevice>, devices: Vec<BluetoothDevice>,
@@ -401,12 +485,18 @@ impl BluetoothManager {
return None; return None;
} }
let mut dialog_rows: Vec<String> = vec![]; let mut device_descriptions = Vec::with_capacity(devices.len());
for device in devices { for device in devices {
dialog_rows.extend_from_slice(&[ let address = device.get_address().unwrap_or_default();
device.get_address().unwrap_or("".to_string()), let name = device.get_name().await.unwrap_or_else(|_| {
device.get_name().unwrap_or("".to_string()), let short = if address.len() > 8 {
]); &address[..8]
} else {
&address
};
format!("Unknown ({}...)", short)
});
device_descriptions.push(BluetoothDeviceDescription { address, name });
} }
let (ipc_sender, ipc_receiver) = let (ipc_sender, ipc_receiver) =
@@ -414,7 +504,7 @@ impl BluetoothManager {
self.embedder_proxy self.embedder_proxy
.send(EmbedderMsg::GetSelectedBluetoothDevice( .send(EmbedderMsg::GetSelectedBluetoothDevice(
webview_id, webview_id,
dialog_rows, device_descriptions,
ipc_sender, ipc_sender,
)); ));
@@ -449,27 +539,27 @@ impl BluetoothManager {
self.address_to_id.values().any(|v| v == device_id) self.address_to_id.values().any(|v| v == device_id)
} }
fn device_matches_filter( async fn device_matches_filter(
&mut self, &mut self,
device_id: &str, device_id: &str,
filters: &BluetoothScanfilterSequence, filters: &BluetoothScanfilterSequence,
) -> BluetoothResult<bool> { ) -> BluetoothResult<bool> {
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
match self.get_device(&mut adapter, device_id) { match self.get_device(&mut adapter, device_id).await {
Some(device) => Ok(matches_filters(device, filters)), Some(device) => Ok(matches_filters(device, filters).await),
None => Ok(false), None => Ok(false),
} }
} }
// Service // Service
fn get_and_cache_gatt_services( async fn get_and_cache_gatt_services(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
device_id: &str, device_id: &str,
) -> Vec<BluetoothGATTService> { ) -> Vec<BluetoothGATTService> {
let mut services = match self.get_device(adapter, device_id) { let mut services = match self.get_device(adapter, device_id).await {
Some(d) => d.get_gatt_services().unwrap_or_default(), Some(d) => d.get_gatt_services().await.unwrap_or_default(),
None => vec![], None => vec![],
}; };
@@ -488,14 +578,14 @@ impl BluetoothManager {
services services
} }
fn get_gatt_service( async fn get_gatt_service(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
service_id: &str, service_id: &str,
) -> Option<&BluetoothGATTService> { ) -> Option<&BluetoothGATTService> {
return_if_cached!(self.cached_services, service_id); return_if_cached!(self.cached_services, service_id);
let device_id = self.service_to_device.get(service_id)?.clone(); let device_id = self.service_to_device.get(service_id)?.clone();
self.get_and_cache_gatt_services(adapter, &device_id); self.get_and_cache_gatt_services(adapter, &device_id).await;
return_if_cached!(self.cached_services, service_id); return_if_cached!(self.cached_services, service_id);
None None
} }
@@ -507,12 +597,12 @@ impl BluetoothManager {
// Characteristic // Characteristic
fn get_and_cache_gatt_characteristics( async fn get_and_cache_gatt_characteristics(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
service_id: &str, service_id: &str,
) -> Vec<BluetoothGATTCharacteristic> { ) -> Vec<BluetoothGATTCharacteristic> {
let mut characteristics = match self.get_gatt_service(adapter, service_id) { let mut characteristics = match self.get_gatt_service(adapter, service_id).await {
Some(s) => s.get_gatt_characteristics().unwrap_or_default(), Some(s) => s.get_gatt_characteristics().unwrap_or_default(),
None => vec![], None => vec![],
}; };
@@ -528,7 +618,7 @@ impl BluetoothManager {
characteristics characteristics
} }
fn get_gatt_characteristic( async fn get_gatt_characteristic(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
characteristic_id: &str, characteristic_id: &str,
@@ -538,7 +628,8 @@ impl BluetoothManager {
.characteristic_to_service .characteristic_to_service
.get(characteristic_id)? .get(characteristic_id)?
.clone(); .clone();
self.get_and_cache_gatt_characteristics(adapter, &service_id); self.get_and_cache_gatt_characteristics(adapter, &service_id)
.await;
return_if_cached!(self.cached_characteristics, characteristic_id); return_if_cached!(self.cached_characteristics, characteristic_id);
None None
} }
@@ -571,12 +662,15 @@ impl BluetoothManager {
// Descriptor // Descriptor
fn get_and_cache_gatt_descriptors( async fn get_and_cache_gatt_descriptors(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
characteristic_id: &str, characteristic_id: &str,
) -> Vec<BluetoothGATTDescriptor> { ) -> Vec<BluetoothGATTDescriptor> {
let mut descriptors = match self.get_gatt_characteristic(adapter, characteristic_id) { let mut descriptors = match self
.get_gatt_characteristic(adapter, characteristic_id)
.await
{
Some(c) => c.get_gatt_descriptors().unwrap_or_default(), Some(c) => c.get_gatt_descriptors().unwrap_or_default(),
None => vec![], None => vec![],
}; };
@@ -592,7 +686,7 @@ impl BluetoothManager {
descriptors descriptors
} }
fn get_gatt_descriptor( async fn get_gatt_descriptor(
&mut self, &mut self,
adapter: &mut BluetoothAdapter, adapter: &mut BluetoothAdapter,
descriptor_id: &str, descriptor_id: &str,
@@ -602,7 +696,8 @@ impl BluetoothManager {
.descriptor_to_characteristic .descriptor_to_characteristic
.get(descriptor_id)? .get(descriptor_id)?
.clone(); .clone();
self.get_and_cache_gatt_descriptors(adapter, &characteristic_id); self.get_and_cache_gatt_descriptors(adapter, &characteristic_id)
.await;
return_if_cached!(self.cached_descriptors, descriptor_id); return_if_cached!(self.cached_descriptors, descriptor_id);
None None
} }
@@ -610,29 +705,37 @@ impl BluetoothManager {
// Methods // Methods
/// <https://webbluetoothcg.github.io/web-bluetooth/#request-bluetooth-devices> /// <https://webbluetoothcg.github.io/web-bluetooth/#request-bluetooth-devices>
fn request_device(&mut self, options: RequestDeviceoptions) -> BluetoothResponseResult { async fn request_device(&mut self, options: RequestDeviceoptions) -> BluetoothResponseResult {
// Step 6. // Step 6.
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
// Step 7. // Step 7.
// Note: There are no requiredServiceUUIDS, we scan for all devices. // Note: There are no requiredServiceUUIDS, we scan for all devices.
if let Ok(ref session) = adapter.create_discovery_session() { if let Ok(ref session) = adapter.create_discovery_session() {
if session.start_discovery().is_ok() && !is_mock_adapter(&adapter) { if session.start_discovery().await.is_ok() && !is_mock_adapter(&adapter) {
thread::sleep(Duration::from_millis(DISCOVERY_TIMEOUT_MS)); async_sleep(Duration::from_millis(DISCOVERY_TIMEOUT_MS)).await;
} }
let _ = session.stop_discovery().await;
let _ = session.stop_discovery();
} }
let mut matched_devices = self.get_and_cache_devices(&mut adapter); let mut matched_devices = self.get_and_cache_devices(&mut adapter).await;
// Step 8. // Step 8.
if !options.is_accepting_all_devices() { if !options.is_accepting_all_devices() {
matched_devices.retain(|d| matches_filters(d, options.get_filters())); let mut filtered = Vec::new();
for d in matched_devices {
if matches_filters(&d, options.get_filters()).await {
filtered.push(d);
}
}
matched_devices = filtered;
} }
// Step 9. // Step 9.
if let Some(address) = self.select_device(options.webview_id(), matched_devices, &adapter) { if let Some(address) = self
.select_device(options.webview_id(), matched_devices, &adapter)
.await
{
let device_id = match self.address_to_id.get(&address) { let device_id = match self.address_to_id.get(&address) {
Some(id) => id.clone(), Some(id) => id.clone(),
None => return Err(BluetoothError::NotFound), None => return Err(BluetoothError::NotFound),
@@ -642,10 +745,10 @@ impl BluetoothManager {
services = services_set | &services; services = services_set | &services;
} }
self.allowed_services.insert(device_id.clone(), services); self.allowed_services.insert(device_id.clone(), services);
if let Some(device) = self.get_device(&mut adapter, &device_id) { if let Some(device) = self.get_device(&mut adapter, &device_id).await {
let message = BluetoothDeviceMsg { let message = BluetoothDeviceMsg {
id: device_id, id: device_id,
name: device.get_name().ok(), name: device.get_name().await.ok(),
}; };
return Ok(BluetoothResponse::RequestDevice(message)); return Ok(BluetoothResponse::RequestDevice(message));
} }
@@ -656,28 +759,28 @@ impl BluetoothManager {
} }
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-connect> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-connect>
fn gatt_server_connect(&mut self, device_id: String) -> BluetoothResponseResult { async fn gatt_server_connect(&mut self, device_id: String) -> BluetoothResponseResult {
// Step 2. // Step 2.
if !self.device_is_cached(&device_id) { if !self.device_is_cached(&device_id) {
return Err(BluetoothError::Network); return Err(BluetoothError::Network);
} }
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
// Step 5.1.1. // Step 5.1.1.
match self.get_device(&mut adapter, &device_id) { match self.get_device(&mut adapter, &device_id).await {
Some(d) => { Some(d) => {
if d.is_connected().unwrap_or(false) { if d.is_connected().await.unwrap_or(false) {
return Ok(BluetoothResponse::GATTServerConnect(true)); return Ok(BluetoothResponse::GATTServerConnect(true));
} }
let _ = d.connect(); let _ = d.connect().await;
for _ in 0..MAXIMUM_TRANSACTION_TIME { for _ in 0..MAXIMUM_TRANSACTION_TIME {
if d.is_connected().unwrap_or(false) { if d.is_connected().await.unwrap_or(false) {
return Ok(BluetoothResponse::GATTServerConnect(true)); return Ok(BluetoothResponse::GATTServerConnect(true));
} else { } else {
if is_mock_adapter(&adapter) { if is_mock_adapter(&adapter) {
break; break;
} }
thread::sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)); async_sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)).await;
} }
// TODO: Step 5.1.4: Use the exchange MTU procedure. // TODO: Step 5.1.4: Use the exchange MTU procedure.
} }
@@ -689,18 +792,18 @@ impl BluetoothManager {
} }
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-disconnect> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-disconnect>
fn gatt_server_disconnect(&mut self, device_id: String) -> BluetoothResult<()> { async fn gatt_server_disconnect(&mut self, device_id: String) -> BluetoothResult<()> {
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
match self.get_device(&mut adapter, &device_id) { match self.get_device(&mut adapter, &device_id).await {
Some(d) => { Some(d) => {
// Step 2. // Step 2.
if !d.is_connected().unwrap_or(true) { if !d.is_connected().await.unwrap_or(true) {
return Ok(()); return Ok(());
} }
let _ = d.disconnect(); let _ = d.disconnect().await;
for _ in 0..MAXIMUM_TRANSACTION_TIME { for _ in 0..MAXIMUM_TRANSACTION_TIME {
if d.is_connected().unwrap_or(true) { if d.is_connected().await.unwrap_or(true) {
thread::sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)) async_sleep(Duration::from_millis(CONNECTION_TIMEOUT_MS)).await;
} else { } else {
return Ok(()); return Ok(());
} }
@@ -712,14 +815,14 @@ impl BluetoothManager {
} }
/// <https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren> /// <https://webbluetoothcg.github.io/web-bluetooth/#getgattchildren>
fn get_gatt_children( async fn get_gatt_children(
&mut self, &mut self,
id: String, id: String,
uuid: Option<String>, uuid: Option<String>,
single: bool, single: bool,
child_type: GATTType, child_type: GATTType,
) -> BluetoothResponseResult { ) -> BluetoothResponseResult {
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
match child_type { match child_type {
GATTType::PrimaryService => { GATTType::PrimaryService => {
// Step 5. // Step 5.
@@ -736,7 +839,7 @@ impl BluetoothManager {
return Err(BluetoothError::Security); return Err(BluetoothError::Security);
} }
} }
let mut services = self.get_and_cache_gatt_services(&mut adapter, &id); let mut services = self.get_and_cache_gatt_services(&mut adapter, &id).await;
if let Some(uuid) = uuid { if let Some(uuid) = uuid {
services.retain(|e| e.get_uuid().unwrap_or_default() == uuid); services.retain(|e| e.get_uuid().unwrap_or_default() == uuid);
} }
@@ -752,6 +855,7 @@ impl BluetoothManager {
} }
} }
} }
// Step 7. // Step 7.
if services_vec.is_empty() { if services_vec.is_empty() {
return Err(BluetoothError::NotFound); return Err(BluetoothError::NotFound);
@@ -765,8 +869,9 @@ impl BluetoothManager {
return Err(BluetoothError::InvalidState); return Err(BluetoothError::InvalidState);
} }
// Step 6. // Step 6.
let mut characteristics = let mut characteristics = self
self.get_and_cache_gatt_characteristics(&mut adapter, &id); .get_and_cache_gatt_characteristics(&mut adapter, &id)
.await;
if let Some(uuid) = uuid { if let Some(uuid) = uuid {
characteristics.retain(|e| e.get_uuid().unwrap_or_default() == uuid); characteristics.retain(|e| e.get_uuid().unwrap_or_default() == uuid);
} }
@@ -812,7 +917,7 @@ impl BluetoothManager {
Some(device) => device, Some(device) => device,
None => return Err(BluetoothError::NotFound), None => return Err(BluetoothError::NotFound),
}; };
let primary_service = match self.get_gatt_service(&mut adapter, &id) { let primary_service = match self.get_gatt_service(&mut adapter, &id).await {
Some(s) => s, Some(s) => s,
None => return Err(BluetoothError::NotFound), None => return Err(BluetoothError::NotFound),
}; };
@@ -845,7 +950,7 @@ impl BluetoothManager {
return Err(BluetoothError::InvalidState); return Err(BluetoothError::InvalidState);
} }
// Step 6. // Step 6.
let mut descriptors = self.get_and_cache_gatt_descriptors(&mut adapter, &id); let mut descriptors = self.get_and_cache_gatt_descriptors(&mut adapter, &id).await;
if let Some(uuid) = uuid { if let Some(uuid) = uuid {
descriptors.retain(|e| e.get_uuid().unwrap_or_default() == uuid); descriptors.retain(|e| e.get_uuid().unwrap_or_default() == uuid);
} }
@@ -870,23 +975,25 @@ impl BluetoothManager {
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-readvalue> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-readvalue>
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-readvalue> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-readvalue>
fn read_value(&mut self, id: String) -> BluetoothResponseResult { async fn read_value(&mut self, id: String) -> BluetoothResponseResult {
// (Characteristic) Step 5.2: Missing because it is optional. // (Characteristic) Step 5.2: Missing because it is optional.
// (Descriptor) Step 5.1: Missing because it is optional. // (Descriptor) Step 5.1: Missing because it is optional.
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
// (Characteristic) Step 5.3. // (Characteristic) Step 5.3.
let mut value = self let mut value = match self.get_gatt_characteristic(&mut adapter, &id).await {
.get_gatt_characteristic(&mut adapter, &id) Some(c) => Some(c.read_value().await.unwrap_or_default()),
.map(|c| c.read_value().unwrap_or_default()); None => None,
};
// (Characteristic) TODO: Step 5.4: Handle all the errors returned from the read_value call. // (Characteristic) TODO: Step 5.4: Handle all the errors returned from the read_value call.
// (Descriptor) Step 5.2. // (Descriptor) Step 5.2.
if value.is_none() { if value.is_none() {
value = self value = match self.get_gatt_descriptor(&mut adapter, &id).await {
.get_gatt_descriptor(&mut adapter, &id) Some(d) => Some(d.read_value().await.unwrap_or_default()),
.map(|d| d.read_value().unwrap_or_default()); None => None,
};
} }
// (Descriptor) TODO: Step 5.3: Handle all the errors returned from the read_value call. // (Descriptor) TODO: Step 5.3: Handle all the errors returned from the read_value call.
@@ -904,36 +1011,36 @@ impl BluetoothManager {
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-writevalue> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-writevalue>
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue>
fn write_value(&mut self, id: String, value: Vec<u8>) -> BluetoothResponseResult { async fn write_value(&mut self, id: String, value: Vec<u8>) -> BluetoothResponseResult {
// (Characteristic) Step 7.2: Missing because it is optional. // (Characteristic) Step 7.2: Missing because it is optional.
// (Descriptor) Step 7.1: Missing because it is optional. // (Descriptor) Step 7.1: Missing because it is optional.
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
// (Characteristic) Step 7.3. // (Characteristic) Step 7.3.
let mut result = self let mut result = match self.get_gatt_characteristic(&mut adapter, &id).await {
.get_gatt_characteristic(&mut adapter, &id) Some(c) => Some(c.write_value(value.clone()).await),
.map(|c| c.write_value(value.clone())); None => None,
};
// (Characteristic) TODO: Step 7.4: Handle all the errors returned from the write_value call. // (Characteristic) TODO: Step 7.4: Handle all the errors returned from the write_value call.
// (Descriptor) Step 7.2. // (Descriptor) Step 7.2.
if result.is_none() { if result.is_none() {
result = self result = match self.get_gatt_descriptor(&mut adapter, &id).await {
.get_gatt_descriptor(&mut adapter, &id) Some(d) => Some(d.write_value(value.clone()).await),
.map(|d| d.write_value(value.clone())); None => None,
};
} }
// (Descriptor) TODO: Step 7.3: Handle all the errors returned from the write_value call. // (Descriptor) TODO: Step 7.3: Handle all the errors returned from the write_value call.
match result { match result {
Some(v) => match v { // (Characteristic) Step 7.5.3.
// (Characteristic) Step 7.5.3. // (Descriptor) Step 7.4.3.
// (Descriptor) Step 7.4.3. Some(Ok(_)) => Ok(BluetoothResponse::WriteValue(value)),
Ok(_) => Ok(BluetoothResponse::WriteValue(value)),
// (Characteristic) Step 7.1. // (Characteristic) Step 7.1.
Err(_) => Err(BluetoothError::NotSupported), Some(Err(_)) => Err(BluetoothError::NotSupported),
},
// (Characteristic) Step 6. // (Characteristic) Step 6.
// (Descriptor) Step 6. // (Descriptor) Step 6.
@@ -943,7 +1050,7 @@ impl BluetoothManager {
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-startnotifications> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-startnotifications>
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-stopnotifications> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-stopnotifications>
fn enable_notification(&mut self, id: String, enable: bool) -> BluetoothResponseResult { async fn enable_notification(&mut self, id: String, enable: bool) -> BluetoothResponseResult {
// (StartNotifications) Step 3 - 4. // (StartNotifications) Step 3 - 4.
// (StopNotifications) Step 1 - 2. // (StopNotifications) Step 1 - 2.
if !self.characteristic_is_cached(&id) { if !self.characteristic_is_cached(&id) {
@@ -951,16 +1058,16 @@ impl BluetoothManager {
} }
// (StartNotification) TODO: Step 7: Missing because it is optional. // (StartNotification) TODO: Step 7: Missing because it is optional.
let mut adapter = self.get_adapter()?; let mut adapter = self.get_adapter().await?;
match self.get_gatt_characteristic(&mut adapter, &id) { match self.get_gatt_characteristic(&mut adapter, &id).await {
Some(c) => { Some(c) => {
let result = if enable { let result = if enable {
// (StartNotification) Step 8. // (StartNotification) Step 8.
// TODO: Handle all the errors returned from the start_notify call. // TODO: Handle all the errors returned from the start_notify call.
c.start_notify() c.start_notify().await
} else { } else {
// (StopNotification) Step 4. // (StopNotification) Step 4.
c.stop_notify() c.stop_notify().await
}; };
match result { match result {
// (StartNotification) Step 11. // (StartNotification) Step 11.
@@ -984,9 +1091,9 @@ impl BluetoothManager {
} }
/// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability> /// <https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability>
fn get_availability(&mut self) -> BluetoothResponseResult { async fn get_availability(&mut self) -> BluetoothResponseResult {
Ok(BluetoothResponse::GetAvailability( Ok(BluetoothResponse::GetAvailability(
self.get_adapter().is_ok(), self.get_adapter().await.is_ok(),
)) ))
} }
} }

View File

@@ -2,81 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
macro_rules! get_inner_and_call(
($enum_value: expr, $enum_type: ident, $function_name: ident) => {
match $enum_value {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
&$enum_type::Bluez(ref bluez) => bluez.$function_name(),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
&$enum_type::Android(ref android) => android.$function_name(),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
&$enum_type::Mac(ref mac) => mac.$function_name(),
#[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth"))))]
&$enum_type::Empty(ref empty) => empty.$function_name(),
#[cfg(feature = "bluetooth-test")]
&$enum_type::Mock(ref fake) => fake.$function_name(),
}
};
(@with_bluez_offset, $enum_value: expr, $enum_type: ident, $function_name: ident) => {
match $enum_value {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
&$enum_type::Bluez(ref bluez) => bluez.$function_name(None),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
&$enum_type::Android(ref android) => android.$function_name(),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
&$enum_type::Mac(ref mac) => mac.$function_name(),
#[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth"))))]
&$enum_type::Empty(ref empty) => empty.$function_name(),
#[cfg(feature = "bluetooth-test")]
&$enum_type::Mock(ref fake) => fake.$function_name(),
}
};
($enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => {
match $enum_value {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
&$enum_type::Bluez(ref bluez) => bluez.$function_name($value),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
&$enum_type::Android(ref android) => android.$function_name($value),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
&$enum_type::Mac(ref mac) => mac.$function_name($value),
#[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth"))))]
&$enum_type::Empty(ref empty) => empty.$function_name($value),
#[cfg(feature = "bluetooth-test")]
&$enum_type::Mock(ref fake) => fake.$function_name($value),
}
};
(@with_bluez_offset, $enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => {
match $enum_value {
#[cfg(all(target_os = "linux", feature = "native-bluetooth"))]
&$enum_type::Bluez(ref bluez) => bluez.$function_name($value, None),
#[cfg(all(target_os = "android", feature = "native-bluetooth"))]
&$enum_type::Android(ref android) => android.$function_name($value),
#[cfg(all(target_os = "macos", feature = "native-bluetooth"))]
&$enum_type::Mac(ref mac) => mac.$function_name($value),
#[cfg(not(any(all(target_os = "linux", feature = "native-bluetooth"),
all(target_os = "android", feature = "native-bluetooth"),
all(target_os = "macos", feature = "native-bluetooth"))))]
&$enum_type::Empty(ref empty) => empty.$function_name($value),
#[cfg(feature = "bluetooth-test")]
&$enum_type::Mock(ref fake) => fake.$function_name($value),
}
};
);
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
macro_rules! get_inner_and_call_test_func { macro_rules! get_inner_and_call_test_func {
($enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => { ($enum_value: expr, $enum_type: ident, $function_name: ident, $value: expr) => {
match $enum_value { match $enum_value {
&$enum_type::Mock(ref fake) => fake.$function_name($value), &$enum_type::Mock(ref fake) => fake.$function_name($value),
#[cfg(feature = "native-bluetooth")]
_ => Err(Box::from( _ => Err(Box::from(
"Error! Test functions are not supported on real devices!", "Error! Test functions are not supported on real devices!",
)), )),
@@ -86,6 +17,7 @@ macro_rules! get_inner_and_call_test_func {
($enum_value: expr, $enum_type: ident, $function_name: ident) => { ($enum_value: expr, $enum_type: ident, $function_name: ident) => {
match $enum_value { match $enum_value {
&$enum_type::Mock(ref fake) => fake.$function_name(), &$enum_type::Mock(ref fake) => fake.$function_name(),
#[cfg(feature = "native-bluetooth")]
_ => Err(Box::from( _ => Err(Box::from(
"Error! Test functions are not supported on real devices!", "Error! Test functions are not supported on real devices!",
)), )),
@@ -93,6 +25,5 @@ macro_rules! get_inner_and_call_test_func {
}; };
} }
pub(crate) use get_inner_and_call;
#[cfg(feature = "bluetooth-test")] #[cfg(feature = "bluetooth-test")]
pub(crate) use get_inner_and_call_test_func; pub(crate) use get_inner_and_call_test_func;

View File

@@ -512,8 +512,11 @@ fn create_glucose_heart_rate_devices(adapter: &BluetoothAdapter) -> Result<(), B
Ok(()) Ok(())
} }
pub fn test(manager: &mut BluetoothManager, data_set_name: String) -> Result<(), Box<dyn Error>> { pub async fn test(
let may_existing_adapter = manager.get_or_create_adapter(); manager: &mut BluetoothManager,
data_set_name: String,
) -> Result<(), Box<dyn Error>> {
let may_existing_adapter = manager.get_or_create_adapter().await;
let adapter = match may_existing_adapter.as_ref() { let adapter = match may_existing_adapter.as_ref() {
Some(adapter) => adapter, Some(adapter) => adapter,
None => return Err(Box::from(ADAPTER_ERROR.to_string())), None => return Err(Box::from(ADAPTER_ERROR.to_string())),

View File

@@ -1,14 +1,16 @@
[package] [package]
name = "canvas" name = "servo-canvas"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "canvas" name = "servo_canvas"
path = "lib.rs" path = "lib.rs"
[features] [features]
@@ -16,23 +18,23 @@ tracing = ["dep:tracing"]
vello = ["dep:vello", "dep:pollster", "dep:futures-intrusive"] vello = ["dep:vello", "dep:pollster", "dep:futures-intrusive"]
[dependencies] [dependencies]
base = { workspace = true }
bytemuck = { workspace = true, features = ["extern_crate_alloc"] } bytemuck = { workspace = true, features = ["extern_crate_alloc"] }
canvas_traits = { workspace = true }
compositing_traits = { workspace = true }
crossbeam-channel = { workspace = true } crossbeam-channel = { workspace = true }
euclid = { workspace = true } euclid = { workspace = true }
fonts = { path = "../fonts" } fonts = { workspace = true }
futures-intrusive = { version = "0.5", optional = true } futures-intrusive = { version = "0.5", optional = true }
kurbo = { workspace = true } kurbo = { workspace = true }
log = { workspace = true } log = { workspace = true }
paint_api = { workspace = true }
peniko = { workspace = true } peniko = { workspace = true }
pixels = { path = "../pixels" } pixels = { workspace = true }
profile_traits = { workspace = true }
pollster = { version = "0.4", optional = true } pollster = { version = "0.4", optional = true }
profile_traits = { workspace = true }
rustc-hash = { workspace = true } rustc-hash = { workspace = true }
servo-base = { workspace = true }
servo-canvas-traits = { workspace = true }
servo-config = { workspace = true }
servo-tracing = { workspace = true } servo-tracing = { workspace = true }
servo_config = { path = "../config" }
stylo = { workspace = true } stylo = { workspace = true }
tracing = { workspace = true, optional = true } tracing = { workspace = true, optional = true }
vello = { workspace = true, optional = true } vello = { workspace = true, optional = true }

View File

@@ -2,12 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use canvas_traits::canvas::{ use euclid::default::{Point2D, Rect, Size2D, Transform2D};
use paint_api::SerializableImageData;
use pixels::Snapshot;
use servo_canvas_traits::canvas::{
CompositionOptions, FillOrStrokeStyle, FillRule, LineOptions, Path, ShadowOptions, TextRun, CompositionOptions, FillOrStrokeStyle, FillRule, LineOptions, Path, ShadowOptions, TextRun,
}; };
use compositing_traits::SerializableImageData;
use euclid::default::{Point2D, Rect, Size2D, Transform2D};
use pixels::Snapshot;
use webrender_api::ImageDescriptor; use webrender_api::ImageDescriptor;
use crate::canvas_data::Filter; use crate::canvas_data::Filter;

View File

@@ -2,11 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use base::Epoch;
use canvas_traits::canvas::*;
use compositing_traits::CrossProcessPaintApi;
use euclid::default::{Point2D, Rect, Size2D, Transform2D}; use euclid::default::{Point2D, Rect, Size2D, Transform2D};
use paint_api::CrossProcessPaintApi;
use pixels::Snapshot; use pixels::Snapshot;
use servo_base::Epoch;
use servo_canvas_traits::canvas::*;
use webrender_api::ImageKey; use webrender_api::ImageKey;
use crate::backend::GenericDrawTarget; use crate::backend::GenericDrawTarget;
@@ -41,7 +41,7 @@ impl<DrawTarget: GenericDrawTarget> CanvasData<DrawTarget> {
pub(crate) fn set_image_key(&mut self, image_key: ImageKey) { pub(crate) fn set_image_key(&mut self, image_key: ImageKey) {
let (descriptor, data) = self.draw_target.image_descriptor_and_serializable_data(); let (descriptor, data) = self.draw_target.image_descriptor_and_serializable_data();
self.paint_api.add_image(image_key, descriptor, data); self.paint_api.add_image(image_key, descriptor, data, false);
if let Some(old_image_key) = self.image_key.replace(image_key) { if let Some(old_image_key) = self.image_key.replace(image_key) {
self.paint_api.delete_image(old_image_key); self.paint_api.delete_image(old_image_key);
@@ -318,7 +318,7 @@ impl<DrawTarget: GenericDrawTarget> CanvasData<DrawTarget> {
let (descriptor, data) = { let (descriptor, data) = {
let _span = let _span =
profile_traits::trace_span!("image_descriptor_and_serializable_data",).entered(); profile_traits::trace_span!("image_descriptor_and_serializable_data").entered();
self.draw_target.image_descriptor_and_serializable_data() self.draw_target.image_descriptor_and_serializable_data()
}; };

View File

@@ -5,16 +5,16 @@
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::{f32, thread}; use std::{f32, thread};
use base::generic_channel::GenericSender;
use base::{Epoch, generic_channel};
use canvas_traits::ConstellationCanvasMsg;
use canvas_traits::canvas::*;
use compositing_traits::CrossProcessPaintApi;
use crossbeam_channel::{Sender, select, unbounded}; use crossbeam_channel::{Sender, select, unbounded};
use euclid::default::{Rect, Size2D, Transform2D}; use euclid::default::{Rect, Size2D, Transform2D};
use log::warn; use log::warn;
use paint_api::CrossProcessPaintApi;
use pixels::Snapshot; use pixels::Snapshot;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use servo_base::generic_channel::GenericSender;
use servo_base::{Epoch, generic_channel};
use servo_canvas_traits::ConstellationCanvasMsg;
use servo_canvas_traits::canvas::*;
use webrender_api::ImageKey; use webrender_api::ImageKey;
use crate::canvas_data::*; use crate::canvas_data::*;
@@ -30,7 +30,7 @@ impl CanvasPaintThread {
CanvasPaintThread { CanvasPaintThread {
canvases: FxHashMap::default(), canvases: FxHashMap::default(),
next_canvas_id: CanvasId(0), next_canvas_id: CanvasId(0),
paint_api: paint_api.clone(), paint_api,
} }
} }

View File

@@ -2,9 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use canvas_traits::canvas::*;
use peniko::ImageAlphaType; use peniko::ImageAlphaType;
use pixels::{Alpha, SnapshotPixelFormat}; use pixels::{Alpha, SnapshotPixelFormat};
use servo_canvas_traits::canvas::*;
use style::color::AbsoluteColor; use style::color::AbsoluteColor;
use crate::backend::Convert; use crate::backend::Convert;
@@ -144,7 +144,7 @@ impl Convert<ImageAlphaType> for Alpha {
impl Convert<peniko::Brush> for FillOrStrokeStyle { impl Convert<peniko::Brush> for FillOrStrokeStyle {
fn convert(self) -> peniko::Brush { fn convert(self) -> peniko::Brush {
use canvas_traits::canvas::FillOrStrokeStyle::*; use servo_canvas_traits::canvas::FillOrStrokeStyle::*;
match self { match self {
Color(absolute_color) => peniko::Brush::Solid(absolute_color.convert()), Color(absolute_color) => peniko::Brush::Solid(absolute_color.convert()),
LinearGradient(style) => { LinearGradient(style) => {

View File

@@ -16,16 +16,16 @@ use std::collections::HashMap;
use std::num::NonZeroUsize; use std::num::NonZeroUsize;
use std::rc::Rc; use std::rc::Rc;
use base::generic_channel::GenericSharedMemory;
use canvas_traits::canvas::{
CompositionOptions, CompositionOrBlending, CompositionStyle, FillOrStrokeStyle, FillRule,
LineOptions, Path, ShadowOptions, TextRun,
};
use compositing_traits::SerializableImageData;
use euclid::default::{Point2D, Rect, Size2D, Transform2D}; use euclid::default::{Point2D, Rect, Size2D, Transform2D};
use fonts::FontIdentifier; use fonts::FontIdentifier;
use kurbo::Shape as _; use kurbo::Shape as _;
use paint_api::SerializableImageData;
use pixels::{Snapshot, SnapshotAlphaMode, SnapshotPixelFormat}; use pixels::{Snapshot, SnapshotAlphaMode, SnapshotPixelFormat};
use servo_base::generic_channel::GenericSharedMemory;
use servo_canvas_traits::canvas::{
CompositionOptions, CompositionOrBlending, CompositionStyle, FillOrStrokeStyle, FillRule,
LineOptions, Path, ShadowOptions, TextRun,
};
use vello::wgpu::{ use vello::wgpu::{
BackendOptions, Backends, Buffer, BufferDescriptor, BufferUsages, COPY_BYTES_PER_ROW_ALIGNMENT, BackendOptions, Backends, Buffer, BufferDescriptor, BufferUsages, COPY_BYTES_PER_ROW_ALIGNMENT,
CommandEncoderDescriptor, Device, Extent3d, Instance, InstanceDescriptor, InstanceFlags, CommandEncoderDescriptor, Device, Extent3d, Instance, InstanceDescriptor, InstanceFlags,

View File

@@ -6,16 +6,16 @@ use std::cell::RefCell;
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
use base::generic_channel::GenericSharedMemory;
use canvas_traits::canvas::{
CompositionOptions, CompositionOrBlending, CompositionStyle, FillOrStrokeStyle, FillRule,
LineOptions, Path, ShadowOptions, TextRun,
};
use compositing_traits::SerializableImageData;
use euclid::default::{Point2D, Rect, Size2D, Transform2D}; use euclid::default::{Point2D, Rect, Size2D, Transform2D};
use fonts::FontIdentifier; use fonts::FontIdentifier;
use kurbo::Shape; use kurbo::Shape;
use paint_api::SerializableImageData;
use pixels::{Snapshot, SnapshotAlphaMode, SnapshotPixelFormat}; use pixels::{Snapshot, SnapshotAlphaMode, SnapshotPixelFormat};
use servo_base::generic_channel::GenericSharedMemory;
use servo_canvas_traits::canvas::{
CompositionOptions, CompositionOrBlending, CompositionStyle, FillOrStrokeStyle, FillRule,
LineOptions, Path, ShadowOptions, TextRun,
};
use vello_cpu::{kurbo, peniko}; use vello_cpu::{kurbo, peniko};
use webrender_api::{ImageDescriptor, ImageDescriptorFlags}; use webrender_api::{ImageDescriptor, ImageDescriptorFlags};
@@ -511,7 +511,7 @@ fn snapshot_as_pixmap(mut snapshot: Snapshot) -> Arc<vello_cpu::Pixmap> {
impl Convert<vello_cpu::PaintType> for FillOrStrokeStyle { impl Convert<vello_cpu::PaintType> for FillOrStrokeStyle {
fn convert(self) -> vello_cpu::PaintType { fn convert(self) -> vello_cpu::PaintType {
use canvas_traits::canvas::FillOrStrokeStyle::*; use servo_canvas_traits::canvas::FillOrStrokeStyle::*;
match self { match self {
Color(absolute_color) => vello_cpu::PaintType::Solid(absolute_color.convert()), Color(absolute_color) => vello_cpu::PaintType::Solid(absolute_color.convert()),
LinearGradient(style) => { LinearGradient(style) => {

View File

@@ -1,62 +0,0 @@
[package]
name = "compositing"
version.workspace = true
authors.workspace = true
license.workspace = true
edition.workspace = true
publish.workspace = true
rust-version.workspace = true
[lib]
name = "compositing"
path = "lib.rs"
[features]
default = []
tracing = ["dep:tracing"]
webgpu = ["dep:webgpu"]
webxr = ["dep:webxr", "dep:webxr-api"]
[lints.clippy]
unwrap_used = "deny"
panic = "deny"
[dependencies]
base = { workspace = true }
bincode = { workspace = true }
bitflags = { workspace = true }
canvas_traits = { workspace = true }
compositing_traits = { workspace = true }
constellation_traits = { workspace = true }
crossbeam-channel = { workspace = true }
dpi = { workspace = true }
embedder_traits = { workspace = true }
euclid = { workspace = true }
gleam = { workspace = true }
image = { workspace = true }
ipc-channel = { workspace = true }
log = { workspace = true }
media = { path = "../media" }
malloc_size_of = { workspace = true }
profile_traits = { workspace = true }
rayon = { workspace = true }
rustc-hash = { workspace = true }
servo-tracing = { workspace = true }
servo_allocator = { path = "../allocator" }
servo_config = { path = "../config" }
servo_geometry = { path = "../geometry" }
smallvec = { workspace = true }
stylo_traits = { workspace = true }
surfman = { workspace = true }
timers = { path = "../timers" }
tracing = { workspace = true, optional = true }
webgl = { path = "../webgl" }
webgpu = { path = "../webgpu", optional = true }
webrender = { workspace = true }
webrender_api = { workspace = true }
webxr = { path = "../webxr", optional = true }
webxr-api = { workspace = true, optional = true }
wr_malloc_size_of = { workspace = true }
[dev-dependencies]
surfman = { workspace = true }

View File

@@ -1,103 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use base::cross_process_instant::CrossProcessInstant;
use base::id::WebViewId;
use compositing_traits::largest_contentful_paint_candidate::{
LCPCandidate, LargestContentfulPaint,
};
use rustc_hash::{FxHashMap, FxHashSet};
use webrender_api::PipelineId;
/// Holds the [`LargestContentfulPaintsContainer`] for each pipeline.
#[derive(Default)]
pub(crate) struct LargestContentfulPaintCalculator {
lcp_containers: FxHashMap<PipelineId, LargestContentfulPaintsContainer>,
disabled_lcp_for_webviews: FxHashSet<WebViewId>,
}
impl LargestContentfulPaintCalculator {
pub(crate) fn new() -> Self {
Self {
lcp_containers: Default::default(),
disabled_lcp_for_webviews: Default::default(),
}
}
pub(crate) fn append_lcp_candidate(
&mut self,
webview_id: WebViewId,
pipeline_id: PipelineId,
candidate: LCPCandidate,
) -> bool {
if self.disabled_lcp_for_webviews.contains(&webview_id) {
return false;
}
self.lcp_containers
.entry(pipeline_id)
.or_default()
.lcp_candidates
.push(candidate);
true
}
pub(crate) fn remove_lcp_candidates_for_pipeline(&mut self, pipeline_id: PipelineId) {
self.lcp_containers.remove(&pipeline_id);
}
pub(crate) fn calculate_largest_contentful_paint(
&mut self,
paint_time: CrossProcessInstant,
pipeline_id: PipelineId,
) -> Option<LargestContentfulPaint> {
self.lcp_containers
.get_mut(&pipeline_id)
.and_then(|container| container.calculate_largest_contentful_paint(paint_time))
}
pub(crate) fn disable_for_webview(&mut self, webview_id: WebViewId) {
self.disabled_lcp_for_webviews.insert(webview_id);
}
pub(crate) fn note_webview_removed(&mut self, webview_id: WebViewId) {
self.disabled_lcp_for_webviews.remove(&webview_id);
}
}
/// Holds the LCP candidates and the latest LCP for a specific pipeline.
#[derive(Default)]
struct LargestContentfulPaintsContainer {
/// List of candidates for Largest Contentful Paint in this pipeline.
lcp_candidates: Vec<LCPCandidate>,
/// The most recent Largest Contentful Paint, if any.
latest_lcp: Option<LargestContentfulPaint>,
}
impl LargestContentfulPaintsContainer {
fn calculate_largest_contentful_paint(
&mut self,
paint_time: CrossProcessInstant,
) -> Option<LargestContentfulPaint> {
if self.lcp_candidates.is_empty() {
return self.latest_lcp;
}
let candidates = std::mem::take(&mut self.lcp_candidates);
if let Some(max_candidate) = candidates.into_iter().max_by_key(|c| c.area) {
match self.latest_lcp {
None => {
self.latest_lcp = Some(LargestContentfulPaint::from(max_candidate, paint_time));
},
Some(ref latest_lcp) => {
if max_candidate.area > latest_lcp.area {
self.latest_lcp =
Some(LargestContentfulPaint::from(max_candidate, paint_time));
}
},
}
}
self.latest_lcp
}
}

View File

@@ -1,57 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#![deny(unsafe_code)]
use std::cell::Cell;
use std::rc::Rc;
use base::generic_channel::RoutedReceiver;
use compositing_traits::{PaintMessage, PaintProxy};
use constellation_traits::EmbedderToConstellationMessage;
use crossbeam_channel::Sender;
use embedder_traits::{EventLoopWaker, ShutdownState};
use profile_traits::{mem, time};
#[cfg(feature = "webxr")]
use webxr::WebXrRegistry;
pub use crate::paint::{Paint, WebRenderDebugOption};
#[macro_use]
mod tracing;
mod largest_contentful_paint_calculator;
mod paint;
mod painter;
mod pinch_zoom;
mod pipeline_details;
mod refresh_driver;
mod render_notifier;
mod screenshot;
mod touch;
mod webrender_external_images;
mod webview_renderer;
/// Data used to initialize the `Paint` subsystem.
pub struct InitialPaintState {
/// A channel to `Paint`.
pub paint_proxy: PaintProxy,
/// A port on which messages inbound to `Paint` can be received.
pub receiver: RoutedReceiver<PaintMessage>,
/// A channel to the constellation.
pub embedder_to_constellation_sender: Sender<EmbedderToConstellationMessage>,
/// A channel to the time profiler thread.
pub time_profiler_chan: time::ProfilerChan,
/// A channel to the memory profiler thread.
pub mem_profiler_chan: mem::ProfilerChan,
/// A shared state which tracks whether Servo has started or has finished
/// shutting down.
pub shutdown_state: Rc<Cell<ShutdownState>>,
/// An [`EventLoopWaker`] used in order to wake up the embedder when it is
/// time to paint.
pub event_loop_waker: Box<dyn EventLoopWaker>,
/// If WebXR is enabled, a [`WebXrRegistry`] to register WebXR threads.
#[cfg(feature = "webxr")]
pub webxr_registry: Box<dyn WebXrRegistry>,
}

View File

@@ -1,11 +1,13 @@
[package] [package]
name = "servo_config" name = "servo-config"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "servo_config" name = "servo_config"
@@ -14,6 +16,5 @@ path = "lib.rs"
[dependencies] [dependencies]
serde = { workspace = true, features = ["derive"] } serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true } serde_json = { workspace = true }
servo_config_macro = { path = "macro" } servo-config-macro = { workspace = true }
servo_url = { path = "../url" } stylo_static_prefs = { workspace = true }
stylo_config = { workspace = true }

View File

@@ -2,6 +2,12 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
//! This crate provides two mechanisms for configuring the behaviour of the Servo engine.
//! - The [`opts`] module exposes a set of global flags that are initialized once
//! and cannot be changed at runtime.
//! - The [`prefs`] module provides a mechanism to get and set global preference
//! values that can be changed at runtime.
#![deny(unsafe_code)] #![deny(unsafe_code)]
pub mod opts; pub mod opts;

View File

@@ -1,11 +1,13 @@
[package] [package]
name = "servo_config_macro" name = "servo-config-macro"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "servo_config_macro" name = "servo_config_macro"

View File

@@ -22,6 +22,12 @@ fn servo_preferences_derive(input: synstructure::Structure) -> TokenStream {
unimplemented!() unimplemented!()
}; };
let mut exists_match_cases = quote!();
for field in named_fields.named.iter() {
let name = field.ident.as_ref().unwrap();
exists_match_cases.extend(quote!(stringify!(#name) => true,))
}
let mut get_match_cases = quote!(); let mut get_match_cases = quote!();
for field in named_fields.named.iter() { for field in named_fields.named.iter() {
let name = field.ident.as_ref().unwrap(); let name = field.ident.as_ref().unwrap();
@@ -34,15 +40,35 @@ fn servo_preferences_derive(input: synstructure::Structure) -> TokenStream {
set_match_cases.extend(quote!(stringify!(#name) => self.#name = value.try_into().unwrap(),)) set_match_cases.extend(quote!(stringify!(#name) => self.#name = value.try_into().unwrap(),))
} }
let mut type_of_match_cases = quote!();
for field in named_fields.named.iter() {
let name = field.ident.as_ref().unwrap();
let ty = &field.ty;
type_of_match_cases.extend(quote!(stringify!(#name) => std::any::type_name::<#ty>(),))
}
let mut comparisons = quote!(); let mut comparisons = quote!();
for field in named_fields.named.iter() { for field in named_fields.named.iter() {
let name = field.ident.as_ref().unwrap(); let name = field.ident.as_ref().unwrap();
comparisons.extend(quote!(if self.#name != other.#name { changes.push((stringify!(#name), self.#name.clone().into(),)) })) comparisons.extend(quote!(if self.#name != other.#name { changes.push((stringify!(#name), self.#name.clone().into(),)) }))
} }
let mut all_fields = quote!();
for field in named_fields.named.iter() {
let name = field.ident.as_ref().unwrap();
all_fields.extend(quote!(stringify!(#name),));
}
let structure_name = &ast.ident; let structure_name = &ast.ident;
quote! { quote! {
impl #structure_name { impl #structure_name {
pub fn exists(name: &str) -> bool {
match name {
#exists_match_cases
_ => { false }
}
}
pub fn get_value(&self, name: &str) -> PrefValue { pub fn get_value(&self, name: &str) -> PrefValue {
match name { match name {
#get_match_cases #get_match_cases
@@ -57,11 +83,24 @@ fn servo_preferences_derive(input: synstructure::Structure) -> TokenStream {
} }
} }
pub fn type_of(name: &str) -> &'static str {
match name {
#type_of_match_cases
_ => { panic!("Unknown preference: {:?}", name); }
}
}
pub fn diff(&self, other: &Self) -> Vec<(&'static str, PrefValue)> { pub fn diff(&self, other: &Self) -> Vec<(&'static str, PrefValue)> {
let mut changes = vec![]; let mut changes = vec![];
#comparisons #comparisons
changes changes
} }
pub fn all_fields() -> Vec<&'static str> {
vec![
#all_fields
]
}
} }
} }
} }

View File

@@ -2,8 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
//! Configuration options for a single run of the servo application. Created //! Options are global configuration options that are initialized once and cannot be changed at
//! from command line arguments. //! runtime.
use std::default::Default; use std::default::Default;
use std::path::PathBuf; use std::path::PathBuf;
@@ -11,28 +11,21 @@ use std::process;
use std::sync::OnceLock; use std::sync::OnceLock;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use servo_url::ServoUrl;
/// Global flags for Servo, currently set on the command line. /// The set of global options supported by Servo. The values for these can be configured during
/// initialization of Servo and cannot be changed later at runtime.
#[derive(Clone, Debug, Deserialize, Serialize)] #[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Opts { pub struct Opts {
/// `None` to disable the time profiler or `Some` to enable it with: /// `None` to disable the time profiler or `Some` to enable it with either:
/// ///
/// - an interval in seconds to cause it to produce output on that interval. /// - an interval in seconds to cause it to produce output on that interval.
/// (`i.e. -p 5`).
/// - a file path to write profiling info to a TSV file upon Servo's termination. /// - a file path to write profiling info to a TSV file upon Servo's termination.
/// (`i.e. -p out.tsv`).
pub time_profiling: Option<OutputOptions>, pub time_profiling: Option<OutputOptions>,
/// When the profiler is enabled, this is an optional path to dump a self-contained HTML file /// When the profiler is enabled, this is an optional path to dump a self-contained HTML file
/// visualizing the traces as a timeline. /// visualizing the traces as a timeline.
pub time_profiler_trace_path: Option<String>, pub time_profiler_trace_path: Option<String>,
/// True to turn off incremental layout.
pub nonincremental_layout: bool,
pub user_stylesheets: Vec<(Vec<u8>, ServoUrl)>,
/// True to exit on thread failure instead of displaying about:failure. /// True to exit on thread failure instead of displaying about:failure.
pub hard_fail: bool, pub hard_fail: bool,
@@ -83,15 +76,12 @@ pub struct Opts {
/// Unminify Css. /// Unminify Css.
pub unminify_css: bool, pub unminify_css: bool,
/// Print Progressive Web Metrics to console.
pub print_pwm: bool,
} }
/// Debug options for Servo, currently set on the command line with -Z /// Debug options for Servo.
#[derive(Clone, Debug, Default, Deserialize, Serialize)] #[derive(Clone, Debug, Default, Deserialize, Serialize)]
pub struct DiagnosticsLogging { pub struct DiagnosticsLogging {
/// List all the debug options. /// Print all the debug options supported by Servo to the standard output.
pub help: bool, pub help: bool,
/// Print the DOM after each restyle. /// Print the DOM after each restyle.
@@ -127,6 +117,9 @@ pub struct DiagnosticsLogging {
/// Log garbage collection passes and their durations. /// Log garbage collection passes and their durations.
pub gc_profile: bool, pub gc_profile: bool,
/// Log Progressive Web Metrics.
pub progressive_web_metrics: bool,
} }
impl DiagnosticsLogging { impl DiagnosticsLogging {
@@ -174,6 +167,7 @@ impl DiagnosticsLogging {
print_option("relayout-event", "Log when relayout occurs"); print_option("relayout-event", "Log when relayout occurs");
print_option("profile-script-events", "Log script event processing time"); print_option("profile-script-events", "Log script event processing time");
print_option("gc-profile", "Log garbage collection statistics"); print_option("gc-profile", "Log garbage collection statistics");
print_option("progressive-web-metrics", "Log Progressive Web Metrics");
println!(); println!();
process::exit(0); process::exit(0);
@@ -197,6 +191,7 @@ impl DiagnosticsLogging {
"gc-profile" => self.gc_profile = true, "gc-profile" => self.gc_profile = true,
"profile-script-events" => self.profile_script_events = true, "profile-script-events" => self.profile_script_events = true,
"relayout-event" => self.relayout_event = true, "relayout-event" => self.relayout_event = true,
"progressive-web-metrics" => self.progressive_web_metrics = true,
"" => {}, "" => {},
_ => return Err(format!("Unknown diagnostic option: {option}")), _ => return Err(format!("Unknown diagnostic option: {option}")),
}; };
@@ -206,9 +201,9 @@ impl DiagnosticsLogging {
} }
} }
/// The destination for the time profiler reports.
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum OutputOptions { pub enum OutputOptions {
/// Database connection config (hostname, name, user, pass)
FileName(String), FileName(String),
Stdout(f64), Stdout(f64),
} }
@@ -218,8 +213,6 @@ impl Default for Opts {
Self { Self {
time_profiling: None, time_profiling: None,
time_profiler_trace_path: None, time_profiler_trace_path: None,
nonincremental_layout: false,
user_stylesheets: Vec::new(),
hard_fail: true, hard_fail: true,
multiprocess: false, multiprocess: false,
force_ipc: false, force_ipc: false,
@@ -235,7 +228,6 @@ impl Default for Opts {
unminify_js: false, unminify_js: false,
local_script_source: None, local_script_source: None,
unminify_css: false, unminify_css: false,
print_pwm: false,
} }
} }
} }
@@ -248,16 +240,16 @@ static OPTIONS: OnceLock<Opts> = OnceLock::new();
/// Initialize options. /// Initialize options.
/// ///
/// Should only be called once at process startup. /// Should only be called once at process startup.
/// Must be called before the first call to [get]. /// Must be called before the first call to [`get`].
pub fn initialize_options(opts: Opts) { pub fn initialize_options(opts: Opts) {
OPTIONS.set(opts).expect("Already initialized"); OPTIONS.set(opts).expect("Already initialized");
} }
/// Get the servo options /// Get the servo options
/// ///
/// If the servo options have not been initialized by calling [initialize_options], then the /// If the servo options have not been initialized by calling [`initialize_options`], then the
/// options will be initialized to default values. Outside of tests the options should /// options will be initialized to default values. Outside of tests the options should be
/// be explicitly initialized. /// explicitly initialized.
#[inline] #[inline]
pub fn get() -> &'static Opts { pub fn get() -> &'static Opts {
// In unit-tests using default options reduces boilerplate. // In unit-tests using default options reduces boilerplate.

View File

@@ -5,6 +5,7 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
/// The types of preference values in Servo.
#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] #[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
pub enum PrefValue { pub enum PrefValue {
Float(f64), Float(f64),
@@ -16,6 +17,8 @@ pub enum PrefValue {
} }
impl PrefValue { impl PrefValue {
/// Parse the `input` string as a preference value. Defaults to a `PrefValue::Str` if the input
/// cannot be parsed as valid value of one of the other types.
pub fn from_booleanish_str(input: &str) -> Self { pub fn from_booleanish_str(input: &str) -> Self {
match input { match input {
"false" => PrefValue::Bool(false), "false" => PrefValue::Bool(false),

View File

@@ -2,8 +2,11 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
//! Preferences are the global configuration options that can be changed at runtime.
use std::env::consts::ARCH; use std::env::consts::ARCH;
use std::sync::{RwLock, RwLockReadGuard}; use std::sync::{RwLock, RwLockReadGuard};
use std::time::Duration;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use servo_config_macro::ServoPreferences; use servo_config_macro::ServoPreferences;
@@ -12,7 +15,12 @@ pub use crate::pref_util::PrefValue;
static PREFERENCES: RwLock<Preferences> = RwLock::new(Preferences::const_default()); static PREFERENCES: RwLock<Preferences> = RwLock::new(Preferences::const_default());
/// A trait to be implemented by components that wish to be notified about runtime changes to the
/// global preferences for the current process.
pub trait PreferencesObserver: Send + Sync { pub trait PreferencesObserver: Send + Sync {
/// This method is called when the global preferences have been updated. The argument to the
/// method is an array of tuples where the first component is the name of the preference and
/// the second component is the new value of the preference.
fn prefs_changed(&self, _changes: &[(&'static str, PrefValue)]) {} fn prefs_changed(&self, _changes: &[(&'static str, PrefValue)]) {}
} }
@@ -24,34 +32,36 @@ pub fn get() -> RwLockReadGuard<'static, Preferences> {
PREFERENCES.read().unwrap() PREFERENCES.read().unwrap()
} }
/// Subscribe to notifications about changes to the global preferences for the current process.
pub fn add_observer(observer: Box<dyn PreferencesObserver>) { pub fn add_observer(observer: Box<dyn PreferencesObserver>) {
OBSERVERS.write().unwrap().push(observer); OBSERVERS.write().unwrap().push(observer);
} }
/// Update the values of the global preferences for the current process. This also notifies the
/// observers previously added using [`add_observer`].
pub fn set(preferences: Preferences) { pub fn set(preferences: Preferences) {
// Map between Stylo preference names and Servo preference names as the This should be // Map between Stylo preference names and Servo preference names as the This should be
// kept in sync with components/script/dom/bindings/codegen/run.py which generates the // kept in sync with components/script/dom/bindings/codegen/run.py which generates the
// DOM CSS style accessors. // DOM CSS style accessors.
stylo_config::set_bool("layout.unimplemented", preferences.layout_unimplemented); stylo_static_prefs::set_pref!("layout.unimplemented", preferences.layout_unimplemented);
stylo_config::set_i32("layout.threads", preferences.layout_threads as i32); stylo_static_prefs::set_pref!("layout.threads", preferences.layout_threads as i32);
stylo_config::set_bool("layout.flexbox.enabled", preferences.layout_flexbox_enabled); stylo_static_prefs::set_pref!("layout.columns.enabled", preferences.layout_columns_enabled);
stylo_config::set_bool("layout.columns.enabled", preferences.layout_columns_enabled); stylo_static_prefs::set_pref!("layout.grid.enabled", preferences.layout_grid_enabled);
stylo_config::set_bool("layout.grid.enabled", preferences.layout_grid_enabled); stylo_static_prefs::set_pref!(
stylo_config::set_bool( "layout.css.attr.enabled",
"layout.css.transition-behavior.enabled", preferences.layout_css_attr_enabled
preferences.layout_css_transition_behavior_enabled,
); );
stylo_config::set_bool( stylo_static_prefs::set_pref!(
"layout.writing-mode.enabled", "layout.writing-mode.enabled",
preferences.layout_writing_mode_enabled, preferences.layout_writing_mode_enabled
); );
stylo_config::set_bool( stylo_static_prefs::set_pref!(
"layout.container-queries.enabled", "layout.container-queries.enabled",
preferences.layout_container_queries_enabled, preferences.layout_container_queries_enabled
); );
stylo_config::set_bool( stylo_static_prefs::set_pref!(
"layout.variable_fonts.enabled", "layout.variable_fonts.enabled",
preferences.layout_variable_fonts_enabled, preferences.layout_variable_fonts_enabled
); );
let changed = preferences.diff(&PREFERENCES.read().unwrap()); let changed = preferences.diff(&PREFERENCES.read().unwrap());
@@ -72,6 +82,7 @@ macro_rules! pref {
}; };
} }
/// The set of global preferences supported by Servo.
#[derive(Clone, Deserialize, Serialize, ServoPreferences)] #[derive(Clone, Deserialize, Serialize, ServoPreferences)]
pub struct Preferences { pub struct Preferences {
pub fonts_default: String, pub fonts_default: String,
@@ -80,12 +91,14 @@ pub struct Preferences {
pub fonts_monospace: String, pub fonts_monospace: String,
pub fonts_default_size: i64, pub fonts_default_size: i64,
pub fonts_default_monospace_size: i64, pub fonts_default_monospace_size: i64,
/// The amount of time that a half cycle of a text caret blink takes in milliseconds.
/// If this value is less than or equal to zero, then caret blink is disabled.
pub editing_caret_blink_time: i64,
pub css_animations_testing_enabled: bool, pub css_animations_testing_enabled: bool,
/// Start the devtools server at startup /// Start the devtools server at startup
pub devtools_server_enabled: bool, pub devtools_server_enabled: bool,
/// Port number to start a server to listen to remote Firefox devtools connections. /// The address:port the devtools server listens to, default to 127.0.0.1:7000.
/// 0 for random port. pub devtools_server_listen_address: String,
pub devtools_server_port: i64,
// feature: WebGPU | #24706 | Web/API/WebGPU_API // feature: WebGPU | #24706 | Web/API/WebGPU_API
pub dom_webgpu_enabled: bool, pub dom_webgpu_enabled: bool,
/// List of comma-separated backends to be used by wgpu. /// List of comma-separated backends to be used by wgpu.
@@ -94,6 +107,7 @@ pub struct Preferences {
pub dom_abort_controller_enabled: bool, pub dom_abort_controller_enabled: bool,
// feature: Adopted Stylesheet | #38132 | Web/API/Document/adoptedStyleSheets // feature: Adopted Stylesheet | #38132 | Web/API/Document/adoptedStyleSheets
pub dom_adoptedstylesheet_enabled: bool, pub dom_adoptedstylesheet_enabled: bool,
pub dom_allow_preloading_module_descendants: bool,
// feature: Clipboard API | #36084 | Web/API/Clipboard_API // feature: Clipboard API | #36084 | Web/API/Clipboard_API
pub dom_async_clipboard_enabled: bool, pub dom_async_clipboard_enabled: bool,
pub dom_bluetooth_enabled: bool, pub dom_bluetooth_enabled: bool,
@@ -110,7 +124,6 @@ pub struct Preferences {
/// - vello_cpu /// - vello_cpu
pub dom_canvas_backend: String, pub dom_canvas_backend: String,
pub dom_clipboardevent_enabled: bool, pub dom_clipboardevent_enabled: bool,
pub dom_command_invokers_enabled: bool,
pub dom_composition_event_enabled: bool, pub dom_composition_event_enabled: bool,
// feature: CookieStore | #37674 | Web/API/CookieStore // feature: CookieStore | #37674 | Web/API/CookieStore
pub dom_cookiestore_enabled: bool, pub dom_cookiestore_enabled: bool,
@@ -120,6 +133,8 @@ pub struct Preferences {
pub dom_crypto_subtle_enabled: bool, pub dom_crypto_subtle_enabled: bool,
pub dom_document_dblclick_timeout: i64, pub dom_document_dblclick_timeout: i64,
pub dom_document_dblclick_dist: i64, pub dom_document_dblclick_dist: i64,
// feature: Document.execCommand | #25005 | Web/API/Document/execCommand
pub dom_exec_command_enabled: bool,
// feature: CSS Font Loading API | #29376 | Web/API/CSS_Font_Loading_API // feature: CSS Font Loading API | #29376 | Web/API/CSS_Font_Loading_API
pub dom_fontface_enabled: bool, pub dom_fontface_enabled: bool,
pub dom_fullscreen_test: bool, pub dom_fullscreen_test: bool,
@@ -153,7 +168,6 @@ pub struct Preferences {
pub dom_serviceworker_timeout_seconds: i64, pub dom_serviceworker_timeout_seconds: i64,
pub dom_servo_helpers_enabled: bool, pub dom_servo_helpers_enabled: bool,
pub dom_servoparser_async_html_tokenizer_enabled: bool, pub dom_servoparser_async_html_tokenizer_enabled: bool,
pub dom_testable_crash_enabled: bool,
pub dom_testbinding_enabled: bool, pub dom_testbinding_enabled: bool,
pub dom_testbinding_prefcontrolled_enabled: bool, pub dom_testbinding_prefcontrolled_enabled: bool,
pub dom_testbinding_prefcontrolled2_enabled: bool, pub dom_testbinding_prefcontrolled2_enabled: bool,
@@ -168,6 +182,8 @@ pub struct Preferences {
pub dom_testperf_enabled: bool, pub dom_testperf_enabled: bool,
// https://testutils.spec.whatwg.org#availability // https://testutils.spec.whatwg.org#availability
pub dom_testutils_enabled: bool, pub dom_testutils_enabled: bool,
/// <https://html.spec.whatwg.org/multipage/#transient-activation-duration>
pub dom_transient_activation_duration_ms: i64,
/// Enable WebGL2 APIs. /// Enable WebGL2 APIs.
// feature: WebGL2 | #41394 | Web/API/WebGL2RenderingContext // feature: WebGL2 | #41394 | Web/API/WebGL2RenderingContext
pub dom_webgl2_enabled: bool, pub dom_webgl2_enabled: bool,
@@ -192,7 +208,7 @@ pub struct Preferences {
pub dom_webxr_sessionavailable: bool, pub dom_webxr_sessionavailable: bool,
pub dom_webxr_unsafe_assume_user_intent: bool, pub dom_webxr_unsafe_assume_user_intent: bool,
pub dom_worklet_enabled: bool, pub dom_worklet_enabled: bool,
pub dom_worklet_blockingsleep: bool, pub dom_worklet_blockingsleep_enabled: bool,
pub dom_worklet_testing_enabled: bool, pub dom_worklet_testing_enabled: bool,
pub dom_worklet_timeout_ms: i64, pub dom_worklet_timeout_ms: i64,
/// <https://drafts.csswg.org/cssom-view/#the-visualviewport-interface> /// <https://drafts.csswg.org/cssom-view/#the-visualviewport-interface>
@@ -211,25 +227,19 @@ pub struct Preferences {
pub image_key_batch_size: i64, pub image_key_batch_size: i64,
/// Whether or not the DOM inspector should show shadow roots of user-agent shadow trees /// Whether or not the DOM inspector should show shadow roots of user-agent shadow trees
pub inspector_show_servo_internal_shadow_roots: bool, pub inspector_show_servo_internal_shadow_roots: bool,
/// A locale tag (eg. es-ES) to use for language negotiation instead of the system locale.
/// An empty string represents no override.
/// TODO: Option<> support in PrefValue
pub intl_locale_override: String,
pub js_asmjs_enabled: bool, pub js_asmjs_enabled: bool,
pub js_asyncstack: bool,
pub js_baseline_interpreter_enabled: bool, pub js_baseline_interpreter_enabled: bool,
/// Whether to disable the jit within SpiderMonkey /// Whether to disable the jit within SpiderMonkey
pub js_disable_jit: bool, pub js_disable_jit: bool,
pub js_baseline_jit_enabled: bool, pub js_baseline_jit_enabled: bool,
pub js_baseline_jit_unsafe_eager_compilation_enabled: bool, pub js_baseline_jit_unsafe_eager_compilation_enabled: bool,
pub js_discard_system_source: bool,
pub js_dump_stack_on_debuggee_would_run: bool,
pub js_ion_enabled: bool, pub js_ion_enabled: bool,
pub js_ion_offthread_compilation_enabled: bool,
pub js_ion_unsafe_eager_compilation_enabled: bool, pub js_ion_unsafe_eager_compilation_enabled: bool,
pub js_mem_gc_allocation_threshold_mb: i64,
pub js_mem_gc_allocation_threshold_factor: i64,
pub js_mem_gc_allocation_threshold_avoid_interrupt_factor: i64,
pub js_mem_gc_compacting_enabled: bool, pub js_mem_gc_compacting_enabled: bool,
pub js_mem_gc_decommit_threshold_mb: i64,
pub js_mem_gc_dynamic_heap_growth_enabled: bool,
pub js_mem_gc_dynamic_mark_slice_enabled: bool,
pub js_mem_gc_empty_chunk_count_min: i64, pub js_mem_gc_empty_chunk_count_min: i64,
pub js_mem_gc_high_frequency_heap_growth_max: i64, pub js_mem_gc_high_frequency_heap_growth_max: i64,
pub js_mem_gc_high_frequency_heap_growth_min: i64, pub js_mem_gc_high_frequency_heap_growth_min: i64,
@@ -245,14 +255,11 @@ pub struct Preferences {
pub js_mem_max: i64, pub js_mem_max: i64,
pub js_native_regex_enabled: bool, pub js_native_regex_enabled: bool,
pub js_offthread_compilation_enabled: bool, pub js_offthread_compilation_enabled: bool,
pub js_shared_memory: bool,
pub js_throw_on_asmjs_validation_failure: bool,
pub js_throw_on_debuggee_would_run: bool,
pub js_timers_minimum_duration: i64, pub js_timers_minimum_duration: i64,
pub js_wasm_baseline_enabled: bool, pub js_wasm_baseline_enabled: bool,
pub js_wasm_enabled: bool, pub js_wasm_enabled: bool,
pub js_wasm_ion_enabled: bool, pub js_wasm_ion_enabled: bool,
pub js_werror_enabled: bool, // feature: Largest Contentful Paint | #42000 | Web/API/LargestContentfulPaint
pub largest_contentful_paint_enabled: bool, pub largest_contentful_paint_enabled: bool,
pub layout_animations_test_enabled: bool, pub layout_animations_test_enabled: bool,
// feature: CSS Multicol | #22397 | Web/CSS/Guides/Multicol_layout // feature: CSS Multicol | #22397 | Web/CSS/Guides/Multicol_layout
@@ -260,9 +267,7 @@ pub struct Preferences {
// feature: CSS Grid | #34479 | Web/CSS/Guides/Grid_layout // feature: CSS Grid | #34479 | Web/CSS/Guides/Grid_layout
pub layout_grid_enabled: bool, pub layout_grid_enabled: bool,
pub layout_container_queries_enabled: bool, pub layout_container_queries_enabled: bool,
pub layout_css_transition_behavior_enabled: bool, pub layout_css_attr_enabled: bool,
// feature: CSS Flexbox | #12453 | Web/CSS/Guides/Flexible_box_layout
pub layout_flexbox_enabled: bool,
pub layout_style_sharing_cache_enabled: bool, pub layout_style_sharing_cache_enabled: bool,
pub layout_threads: i64, pub layout_threads: i64,
pub layout_unimplemented: bool, pub layout_unimplemented: bool,
@@ -274,6 +279,11 @@ pub struct Preferences {
pub media_glvideo_enabled: bool, pub media_glvideo_enabled: bool,
/// Enable a non-standard event handler for verifying behavior of media elements during tests. /// Enable a non-standard event handler for verifying behavior of media elements during tests.
pub media_testing_enabled: bool, pub media_testing_enabled: bool,
/// The default timeout set for establishing a network connection in seconds. This amount
/// if for the entire process of connecting to an address. For instance, if a particular host is
/// associated with multiple IP addresses, this timeout will be divided equally among
/// each IP address.
pub network_connection_timeout: u64,
pub network_enforce_tls_enabled: bool, pub network_enforce_tls_enabled: bool,
pub network_enforce_tls_localhost: bool, pub network_enforce_tls_localhost: bool,
pub network_enforce_tls_onion: bool, pub network_enforce_tls_onion: bool,
@@ -290,11 +300,14 @@ pub struct Preferences {
/// Notice that this is not equal to the number of different urls in the cache. /// Notice that this is not equal to the number of different urls in the cache.
pub network_http_cache_size: u64, pub network_http_cache_size: u64,
pub network_local_directory_listing_enabled: bool, pub network_local_directory_listing_enabled: bool,
pub network_mime_sniff: bool,
/// Force the use of `rust-webpki` verification for CA roots. If this is false (the /// Force the use of `rust-webpki` verification for CA roots. If this is false (the
/// default), then `rustls-platform-verifier` will be used, except on Android where /// default), then `rustls-platform-verifier` will be used, except on Android where
/// `rust-webpki` is always used. /// `rust-webpki` is always used.
pub network_use_webpki_roots: bool, pub network_use_webpki_roots: bool,
/// The length of the session history, in navigations, for each `WebView. Back-forward
/// cache entries that are more than `session_history_max_length` steps in the future or
/// `session_history_max_length` steps in the past will be discarded. Navigating forward
/// or backward to that entry will cause the entire page to be reloaded.
pub session_history_max_length: i64, pub session_history_max_length: i64,
/// The background color of shell's viewport. This will be used by OpenGL's `glClearColor`. /// The background color of shell's viewport. This will be used by OpenGL's `glClearColor`.
pub shell_background_color_rgba: [f64; 4], pub shell_background_color_rgba: [f64; 4],
@@ -318,16 +331,20 @@ pub struct Preferences {
/// Whether or not the viewport meta tag is enabled. /// Whether or not the viewport meta tag is enabled.
pub viewport_meta_enabled: bool, pub viewport_meta_enabled: bool,
pub log_filter: String, pub log_filter: String,
/// Whether the accessibility code is enabled.
pub accessibility_enabled: bool,
} }
impl Preferences { impl Preferences {
const fn const_default() -> Self { const fn const_default() -> Self {
Self { Self {
css_animations_testing_enabled: false, css_animations_testing_enabled: false,
editing_caret_blink_time: 600,
devtools_server_enabled: false, devtools_server_enabled: false,
devtools_server_port: 0, devtools_server_listen_address: String::new(),
dom_abort_controller_enabled: true, dom_abort_controller_enabled: true,
dom_adoptedstylesheet_enabled: false, dom_adoptedstylesheet_enabled: false,
dom_allow_preloading_module_descendants: false,
dom_allow_scripts_to_close_windows: false, dom_allow_scripts_to_close_windows: false,
dom_async_clipboard_enabled: false, dom_async_clipboard_enabled: false,
dom_bluetooth_enabled: false, dom_bluetooth_enabled: false,
@@ -336,13 +353,13 @@ impl Preferences {
dom_canvas_text_enabled: true, dom_canvas_text_enabled: true,
dom_canvas_backend: String::new(), dom_canvas_backend: String::new(),
dom_clipboardevent_enabled: true, dom_clipboardevent_enabled: true,
dom_command_invokers_enabled: false,
dom_composition_event_enabled: false, dom_composition_event_enabled: false,
dom_cookiestore_enabled: false, dom_cookiestore_enabled: false,
dom_credential_management_enabled: false, dom_credential_management_enabled: false,
dom_crypto_subtle_enabled: true, dom_crypto_subtle_enabled: true,
dom_document_dblclick_dist: 1, dom_document_dblclick_dist: 1,
dom_document_dblclick_timeout: 300, dom_document_dblclick_timeout: 300,
dom_exec_command_enabled: false,
dom_fontface_enabled: false, dom_fontface_enabled: false,
dom_fullscreen_test: false, dom_fullscreen_test: false,
dom_gamepad_enabled: true, dom_gamepad_enabled: true,
@@ -364,7 +381,6 @@ impl Preferences {
dom_serviceworker_timeout_seconds: 60, dom_serviceworker_timeout_seconds: 60,
dom_servo_helpers_enabled: false, dom_servo_helpers_enabled: false,
dom_servoparser_async_html_tokenizer_enabled: false, dom_servoparser_async_html_tokenizer_enabled: false,
dom_testable_crash_enabled: false,
dom_testbinding_enabled: false, dom_testbinding_enabled: false,
dom_testbinding_prefcontrolled2_enabled: false, dom_testbinding_prefcontrolled2_enabled: false,
dom_testbinding_prefcontrolled_enabled: false, dom_testbinding_prefcontrolled_enabled: false,
@@ -378,6 +394,7 @@ impl Preferences {
dom_testing_html_input_element_select_files_enabled: false, dom_testing_html_input_element_select_files_enabled: false,
dom_testperf_enabled: false, dom_testperf_enabled: false,
dom_testutils_enabled: false, dom_testutils_enabled: false,
dom_transient_activation_duration_ms: 5000,
dom_webgl2_enabled: false, dom_webgl2_enabled: false,
dom_webgpu_enabled: false, dom_webgpu_enabled: false,
dom_webgpu_wgpu_backend: String::new(), dom_webgpu_wgpu_backend: String::new(),
@@ -397,11 +414,12 @@ impl Preferences {
dom_webxr_sessionavailable: false, dom_webxr_sessionavailable: false,
dom_webxr_test: false, dom_webxr_test: false,
dom_webxr_unsafe_assume_user_intent: false, dom_webxr_unsafe_assume_user_intent: false,
dom_worklet_blockingsleep: false, dom_worklet_blockingsleep_enabled: false,
dom_worklet_enabled: false, dom_worklet_enabled: false,
dom_worklet_testing_enabled: false, dom_worklet_testing_enabled: false,
dom_worklet_timeout_ms: 10, dom_worklet_timeout_ms: 10,
dom_visual_viewport_enabled: false, dom_visual_viewport_enabled: false,
accessibility_enabled: false,
fonts_default: String::new(), fonts_default: String::new(),
fonts_default_monospace_size: 13, fonts_default_monospace_size: 13,
fonts_default_size: 16, fonts_default_size: 16,
@@ -414,24 +432,15 @@ impl Preferences {
gfx_texture_swizzling_enabled: true, gfx_texture_swizzling_enabled: true,
image_key_batch_size: 10, image_key_batch_size: 10,
inspector_show_servo_internal_shadow_roots: false, inspector_show_servo_internal_shadow_roots: false,
intl_locale_override: String::new(),
js_asmjs_enabled: true, js_asmjs_enabled: true,
js_asyncstack: false,
js_baseline_interpreter_enabled: true, js_baseline_interpreter_enabled: true,
js_baseline_jit_enabled: true, js_baseline_jit_enabled: true,
js_baseline_jit_unsafe_eager_compilation_enabled: false, js_baseline_jit_unsafe_eager_compilation_enabled: false,
js_disable_jit: false, js_disable_jit: false,
js_discard_system_source: false,
js_dump_stack_on_debuggee_would_run: false,
js_ion_enabled: true, js_ion_enabled: true,
js_ion_offthread_compilation_enabled: true,
js_ion_unsafe_eager_compilation_enabled: false, js_ion_unsafe_eager_compilation_enabled: false,
js_mem_gc_allocation_threshold_avoid_interrupt_factor: 100,
js_mem_gc_allocation_threshold_factor: 100,
js_mem_gc_allocation_threshold_mb: 30,
js_mem_gc_compacting_enabled: true, js_mem_gc_compacting_enabled: true,
js_mem_gc_decommit_threshold_mb: 32,
js_mem_gc_dynamic_heap_growth_enabled: true,
js_mem_gc_dynamic_mark_slice_enabled: true,
js_mem_gc_empty_chunk_count_min: 1, js_mem_gc_empty_chunk_count_min: 1,
js_mem_gc_high_frequency_heap_growth_max: 300, js_mem_gc_high_frequency_heap_growth_max: 300,
js_mem_gc_high_frequency_heap_growth_min: 150, js_mem_gc_high_frequency_heap_growth_min: 150,
@@ -447,20 +456,15 @@ impl Preferences {
js_mem_max: -1, js_mem_max: -1,
js_native_regex_enabled: true, js_native_regex_enabled: true,
js_offthread_compilation_enabled: true, js_offthread_compilation_enabled: true,
js_shared_memory: true,
js_throw_on_asmjs_validation_failure: false,
js_throw_on_debuggee_would_run: false,
js_timers_minimum_duration: 1000, js_timers_minimum_duration: 1000,
js_wasm_baseline_enabled: true, js_wasm_baseline_enabled: true,
js_wasm_enabled: true, js_wasm_enabled: true,
js_wasm_ion_enabled: true, js_wasm_ion_enabled: true,
js_werror_enabled: false,
largest_contentful_paint_enabled: false, largest_contentful_paint_enabled: false,
layout_animations_test_enabled: false, layout_animations_test_enabled: false,
layout_columns_enabled: false, layout_columns_enabled: false,
layout_container_queries_enabled: false, layout_container_queries_enabled: false,
layout_css_transition_behavior_enabled: true, layout_css_attr_enabled: false,
layout_flexbox_enabled: true,
layout_grid_enabled: false, layout_grid_enabled: false,
layout_style_sharing_cache_enabled: true, layout_style_sharing_cache_enabled: true,
// TODO(mrobinson): This should likely be based on the number of processors. // TODO(mrobinson): This should likely be based on the number of processors.
@@ -470,6 +474,7 @@ impl Preferences {
layout_writing_mode_enabled: false, layout_writing_mode_enabled: false,
media_glvideo_enabled: false, media_glvideo_enabled: false,
media_testing_enabled: false, media_testing_enabled: false,
network_connection_timeout: 15,
network_enforce_tls_enabled: false, network_enforce_tls_enabled: false,
network_enforce_tls_localhost: false, network_enforce_tls_localhost: false,
network_enforce_tls_onion: false, network_enforce_tls_onion: false,
@@ -479,7 +484,6 @@ impl Preferences {
network_http_no_proxy: String::new(), network_http_no_proxy: String::new(),
network_http_cache_size: 5000, network_http_cache_size: 5000,
network_local_directory_listing_enabled: true, network_local_directory_listing_enabled: true,
network_mime_sniff: false,
network_use_webpki_roots: false, network_use_webpki_roots: false,
session_history_max_length: 20, session_history_max_length: 20,
shell_background_color_rgba: [1.0, 1.0, 1.0, 1.0], shell_background_color_rgba: [1.0, 1.0, 1.0, 1.0],
@@ -495,6 +499,16 @@ impl Preferences {
log_filter: String::new(), log_filter: String::new(),
} }
} }
/// The amount of time that a half cycle of a text caret blink takes. If blinking is disabled
/// this returns `None`.
pub fn editing_caret_blink_time(&self) -> Option<Duration> {
if self.editing_caret_blink_time > 0 {
Some(Duration::from_millis(self.editing_caret_blink_time as u64))
} else {
None
}
}
} }
impl Default for Preferences { impl Default for Preferences {

View File

@@ -1,69 +1,70 @@
[package] [package]
name = "constellation" name = "servo-constellation"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "constellation" name = "servo_constellation"
path = "lib.rs" path = "lib.rs"
[features] [features]
default = [] default = []
bluetooth = ["bluetooth_traits"] bluetooth = ["servo-bluetooth-traits"]
gamepad = ["embedder_traits/gamepad"] gamepad = ["embedder_traits/gamepad"]
tracing = ["dep:tracing", "canvas/tracing"] tracing = ["dep:tracing", "servo-canvas/tracing"]
vello = ["canvas/vello"] vello = ["servo-canvas/vello"]
webgpu = ["script_traits/webgpu"] webgpu = ["dep:webgpu", "dep:webgpu_traits", "script_traits/webgpu"]
[lints.clippy] [lints.clippy]
unwrap_used = "deny" unwrap_used = "deny"
panic = "deny" panic = "deny"
[dependencies] [dependencies]
background_hang_monitor = { path = "../background_hang_monitor" } accesskit = { workspace = true }
background_hang_monitor_api = { workspace = true }
backtrace = { workspace = true } backtrace = { workspace = true }
base = { workspace = true } base64 = { workspace = true }
bluetooth_traits = { workspace = true, optional = true }
canvas = { path = "../canvas" }
canvas_traits = { workspace = true }
compositing_traits = { workspace = true }
constellation_traits = { workspace = true }
content-security-policy = { workspace = true } content-security-policy = { workspace = true }
crossbeam-channel = { workspace = true } crossbeam-channel = { workspace = true }
devtools_traits = { workspace = true } devtools_traits = { workspace = true }
embedder_traits = { workspace = true } embedder_traits = { workspace = true }
euclid = { workspace = true } euclid = { workspace = true }
fonts = { path = "../fonts" } fonts = { workspace = true }
ipc-channel = { workspace = true } ipc-channel = { workspace = true }
keyboard-types = { workspace = true } keyboard-types = { workspace = true }
layout_api = { workspace = true } layout_api = { workspace = true }
log = { workspace = true } log = { workspace = true }
media = { path = "../media" } media = { workspace = true }
net = { path = "../net" } net = { workspace = true }
net_traits = { workspace = true } net_traits = { workspace = true }
paint_api = { workspace = true }
parking_lot = { workspace = true } parking_lot = { workspace = true }
profile = { path = "../profile" }
profile_traits = { workspace = true } profile_traits = { workspace = true }
rand = { workspace = true } rand = { workspace = true }
rustc-hash = { workspace = true } rustc-hash = { workspace = true }
script_traits = { workspace = true } script_traits = { workspace = true }
serde = { workspace = true } serde = { workspace = true }
servo-background-hang-monitor = { workspace = true }
servo-background-hang-monitor-api = { workspace = true }
servo-base = { workspace = true }
servo-bluetooth-traits = { workspace = true, optional = true }
servo-canvas = { workspace = true }
servo-canvas-traits = { workspace = true }
servo-config = { workspace = true }
servo-constellation-traits = { workspace = true }
servo-tracing = { workspace = true } servo-tracing = { workspace = true }
servo_config = { path = "../config" } servo-url = { workspace = true }
servo_url = { path = "../url" }
storage_traits = { workspace = true } storage_traits = { workspace = true }
stylo = { workspace = true } stylo = { workspace = true }
stylo_traits = { workspace = true } stylo_traits = { workspace = true }
tracing = { workspace = true, optional = true } tracing = { workspace = true, optional = true }
webgpu = { path = "../webgpu" } webgpu = { workspace = true, optional = true }
webgpu_traits = { workspace = true } webgpu_traits = { workspace = true, optional = true }
webrender = { workspace = true }
webrender_api = { workspace = true }
webxr-api = { workspace = true } webxr-api = { workspace = true }
[target.'cfg(any(target_os="macos", all(not(target_os = "windows"), not(target_os = "ios"), not(target_os="android"), not(target_env="ohos"), not(target_arch="arm"), not(target_arch="aarch64"))))'.dependencies] [target.'cfg(any(target_os="macos", all(not(target_os = "windows"), not(target_os = "ios"), not(target_os="android"), not(target_env="ohos"), not(target_arch="arm"), not(target_arch="aarch64"))))'.dependencies]

View File

@@ -4,11 +4,11 @@
use std::collections::HashMap; use std::collections::HashMap;
use base::id::BroadcastChannelRouterId;
use constellation_traits::BroadcastChannelMsg;
use ipc_channel::ipc::IpcSender; use ipc_channel::ipc::IpcSender;
use log::warn; use log::warn;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use servo_base::id::BroadcastChannelRouterId;
use servo_constellation_traits::BroadcastChannelMsg;
use servo_url::ImmutableOrigin; use servo_url::ImmutableOrigin;
#[derive(Default)] #[derive(Default)]

View File

@@ -2,10 +2,10 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use base::id::{BrowsingContextGroupId, BrowsingContextId, PipelineId, WebViewId};
use embedder_traits::ViewportDetails; use embedder_traits::ViewportDetails;
use log::warn; use log::warn;
use rustc_hash::{FxHashMap, FxHashSet}; use rustc_hash::{FxHashMap, FxHashSet};
use servo_base::id::{BrowsingContextGroupId, BrowsingContextId, PipelineId, WebViewId};
use crate::pipeline::Pipeline; use crate::pipeline::Pipeline;

File diff suppressed because it is too large Load Diff

View File

@@ -2,15 +2,16 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use base::id::{BrowsingContextId, PipelineId, WebViewId};
use embedder_traits::user_contents::UserContentManagerId; use embedder_traits::user_contents::UserContentManagerId;
use embedder_traits::{InputEvent, MouseLeftViewportEvent, Theme}; use embedder_traits::{GenericEmbedderProxy, InputEvent, MouseLeftViewportEvent, Theme};
use euclid::Point2D; use euclid::Point2D;
use log::warn; use log::warn;
use rustc_hash::FxHashMap; use rustc_hash::FxHashMap;
use script_traits::{ConstellationInputEvent, ScriptThreadMessage}; use script_traits::{ConstellationInputEvent, ScriptThreadMessage};
use servo_base::id::{BrowsingContextId, PipelineId, WebViewId};
use style_traits::CSSPixel; use style_traits::CSSPixel;
use super::embedder::ConstellationToEmbedderMsg;
use crate::browsingcontext::BrowsingContext; use crate::browsingcontext::BrowsingContext;
use crate::pipeline::Pipeline; use crate::pipeline::Pipeline;
use crate::session_history::JointSessionHistory; use crate::session_history::JointSessionHistory;
@@ -21,6 +22,9 @@ pub(crate) struct ConstellationWebView {
/// The [`WebViewId`] of this [`ConstellationWebView`]. /// The [`WebViewId`] of this [`ConstellationWebView`].
webview_id: WebViewId, webview_id: WebViewId,
/// The [`PipelineId`] of the currently active pipeline at the top level of this WebView.
pub active_top_level_pipeline_id: PipelineId,
/// The currently focused browsing context in this webview for key events. /// The currently focused browsing context in this webview for key events.
/// The focused pipeline is the current entry of the focused browsing /// The focused pipeline is the current entry of the focused browsing
/// context. /// context.
@@ -45,22 +49,41 @@ pub(crate) struct ConstellationWebView {
/// The [`Theme`] that this [`ConstellationWebView`] uses. This is communicated to all /// The [`Theme`] that this [`ConstellationWebView`] uses. This is communicated to all
/// `ScriptThread`s so that they know how to render the contents of a particular `WebView. /// `ScriptThread`s so that they know how to render the contents of a particular `WebView.
theme: Theme, theme: Theme,
/// Whether accessibility is active for this webview.
///
/// Set by [`crate::Constellation::set_accessibility_active()`], and forwarded to the
/// webviews *active* pipelines (of those that represent documents) at any given moment
/// via [`ScriptThreadMessage::SetAccessibilityActive`] in `set_accessibility_active()`
/// and [`crate::Constellation::set_frame_tree_for_webview()`].
pub accessibility_active: bool,
} }
impl ConstellationWebView { impl ConstellationWebView {
pub(crate) fn new( pub(crate) fn new(
embedder_proxy: &GenericEmbedderProxy<ConstellationToEmbedderMsg>,
webview_id: WebViewId, webview_id: WebViewId,
active_top_level_pipeline_id: PipelineId,
focused_browsing_context_id: BrowsingContextId, focused_browsing_context_id: BrowsingContextId,
user_content_manager_id: Option<UserContentManagerId>, user_content_manager_id: Option<UserContentManagerId>,
) -> Self { ) -> Self {
embedder_proxy.send(
ConstellationToEmbedderMsg::DocumentAccessibilityTreeIdChanged(
webview_id,
active_top_level_pipeline_id.into(),
),
);
Self { Self {
webview_id, webview_id,
user_content_manager_id, user_content_manager_id,
active_top_level_pipeline_id,
focused_browsing_context_id, focused_browsing_context_id,
hovered_browsing_context_id: None, hovered_browsing_context_id: None,
last_mouse_move_point: Default::default(), last_mouse_move_point: Default::default(),
session_history: JointSessionHistory::new(), session_history: JointSessionHistory::new(),
theme: Theme::Light, theme: Theme::Light,
accessibility_active: false,
} }
} }

View File

@@ -0,0 +1,54 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use accesskit::TreeId;
use embedder_traits::{
InputEventOutcome, JSValue, JavaScriptEvaluationError, JavaScriptEvaluationId,
MediaSessionEvent, NewWebViewDetails, TraversalId,
};
use servo_base::generic_channel::GenericSender;
use servo_base::id::{PipelineId, WebViewId};
use servo_url::ServoUrl;
/// Messages sent from the `Constellation` to the embedder.
pub enum ConstellationToEmbedderMsg {
/// Informs the embedder that the constellation has completed shutdown.
/// Required because the constellation can have pending calls to make
/// (e.g. SetFrameTree) at the time that we send it an ExitMsg.
ShutdownComplete,
/// Report a complete sampled profile
ReportProfile(Vec<u8>),
/// All webviews lost focus for keyboard events.
WebViewBlurred,
/// A history traversal operation completed.
HistoryTraversalComplete(WebViewId, TraversalId),
/// Notifies the embedder about media session events
/// (i.e. when there is metadata for the active media session, playback state changes...).
MediaSessionEvent(WebViewId, MediaSessionEvent),
/// A pipeline panicked. First string is the reason, second one is the backtrace.
Panic(WebViewId, String, Option<String>),
/// A webview potentially gained focus for keyboard events.
/// If the boolean value is false, the webiew could not be focused.
WebViewFocused(WebViewId, bool),
/// Inform the embedding layer that a particular `InputEvent` was handled by Servo
/// and the embedder can continue processing it, if necessary.
InputEventsHandled(WebViewId, Vec<InputEventOutcome>),
/// A webview was destroyed.
WebViewClosed(WebViewId),
/// Inform the embedding layer that a JavaScript evaluation has
/// finished with the given result.
FinishJavaScriptEvaluation(
JavaScriptEvaluationId,
Result<JSValue, JavaScriptEvaluationError>,
),
/// Whether or not to allow script to open a new tab/browser
AllowOpeningWebView(WebViewId, GenericSender<Option<NewWebViewDetails>>),
/// Whether or not to allow a pipeline to load a url.
AllowNavigationRequest(WebViewId, PipelineId, ServoUrl),
/// The history state has changed.
HistoryChanged(WebViewId, Vec<ServoUrl>, usize),
/// Notifies the embedder that the AccessKit [`TreeId`] for the top-level document in this
/// WebView has been changed (or initially set).
DocumentAccessibilityTreeIdChanged(WebViewId, TreeId),
}

View File

@@ -11,18 +11,18 @@ use std::marker::PhantomData;
use std::rc::Rc; use std::rc::Rc;
use background_hang_monitor_api::{BackgroundHangMonitorControlMsg, HangMonitorAlert}; use background_hang_monitor_api::{BackgroundHangMonitorControlMsg, HangMonitorAlert};
use base::generic_channel::{self, GenericReceiver, GenericSender};
use base::id::ScriptEventLoopId;
use constellation_traits::ServiceWorkerManagerFactory;
use embedder_traits::ScriptToEmbedderChan; use embedder_traits::ScriptToEmbedderChan;
use ipc_channel::Error; use ipc_channel::IpcError;
use layout_api::ScriptThreadFactory; use layout_api::ScriptThreadFactory;
use log::error; use log::error;
use media::WindowGLContext; use media::WindowGLContext;
use script_traits::{InitialScriptState, ScriptThreadMessage}; use script_traits::{InitialScriptState, ScriptThreadMessage};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use servo_base::generic_channel::{self, GenericReceiver, GenericSender, SendError};
use servo_base::id::ScriptEventLoopId;
use servo_config::opts::{self, Opts}; use servo_config::opts::{self, Opts};
use servo_config::prefs::{self, Preferences}; use servo_config::prefs::{self, Preferences};
use servo_constellation_traits::ServiceWorkerManagerFactory;
use crate::sandboxing::spawn_multiprocess; use crate::sandboxing::spawn_multiprocess;
use crate::{Constellation, UnprivilegedContent}; use crate::{Constellation, UnprivilegedContent};
@@ -66,9 +66,9 @@ impl EventLoop {
pub(crate) fn spawn<STF: ScriptThreadFactory, SWF: ServiceWorkerManagerFactory>( pub(crate) fn spawn<STF: ScriptThreadFactory, SWF: ServiceWorkerManagerFactory>(
constellation: &mut Constellation<STF, SWF>, constellation: &mut Constellation<STF, SWF>,
is_private: bool, is_private: bool,
) -> Result<Rc<Self>, Error> { ) -> Result<Rc<Self>, IpcError> {
let (script_chan, script_port) = let (script_chan, script_port) =
base::generic_channel::channel().expect("Pipeline script chan"); servo_base::generic_channel::channel().expect("Pipeline script chan");
let embedder_chan = constellation.embedder_proxy.sender.clone(); let embedder_chan = constellation.embedder_proxy.sender.clone();
let eventloop_waker = constellation.embedder_proxy.event_loop_waker.clone(); let eventloop_waker = constellation.embedder_proxy.event_loop_waker.clone();
@@ -153,7 +153,7 @@ impl EventLoop {
fn spawn_in_process<STF: ScriptThreadFactory, SWF: ServiceWorkerManagerFactory>( fn spawn_in_process<STF: ScriptThreadFactory, SWF: ServiceWorkerManagerFactory>(
constellation: &mut Constellation<STF, SWF>, constellation: &mut Constellation<STF, SWF>,
initial_script_state: InitialScriptState, initial_script_state: InitialScriptState,
) -> Result<Self, Error> { ) -> Result<Self, IpcError> {
let script_chan = initial_script_state.constellation_to_script_sender.clone(); let script_chan = initial_script_state.constellation_to_script_sender.clone();
let id = initial_script_state.id; let id = initial_script_state.id;
@@ -192,10 +192,8 @@ impl EventLoop {
} }
/// Send a message to the event loop. /// Send a message to the event loop.
pub fn send(&self, msg: ScriptThreadMessage) -> Result<(), Error> { pub fn send(&self, msg: ScriptThreadMessage) -> Result<(), SendError> {
self.script_chan self.script_chan.send(msg)
.send(msg)
.map_err(|_err| Box::new(ipc_channel::ErrorKind::Custom("SendError".into())))
} }
/// If this is [`EventLoop`] is in another process, send a message to its `BackgroundHangMonitor`, /// If this is [`EventLoop`] is in another process, send a message to its `BackgroundHangMonitor`,

View File

@@ -11,6 +11,7 @@ mod broadcastchannel;
mod browsingcontext; mod browsingcontext;
mod constellation; mod constellation;
mod constellation_webview; mod constellation_webview;
mod embedder;
mod event_loop; mod event_loop;
mod logging; mod logging;
mod pipeline; mod pipeline;
@@ -20,6 +21,7 @@ mod serviceworker;
mod session_history; mod session_history;
pub use crate::constellation::{Constellation, InitialConstellationState}; pub use crate::constellation::{Constellation, InitialConstellationState};
pub use crate::embedder::ConstellationToEmbedderMsg;
pub use crate::event_loop::{EventLoop, NewScriptEventLoopProcessInfo}; pub use crate::event_loop::{EventLoop, NewScriptEventLoopProcessInfo};
pub use crate::logging::{FromEmbedderLogger, FromScriptLogger}; pub use crate::logging::{FromEmbedderLogger, FromScriptLogger};
pub use crate::sandboxing::{UnprivilegedContent, content_process_sandbox_profile}; pub use crate::sandboxing::{UnprivilegedContent, content_process_sandbox_profile};

View File

@@ -11,14 +11,14 @@ use std::sync::Arc;
use std::thread; use std::thread;
use backtrace::Backtrace; use backtrace::Backtrace;
use base::id::{ScriptEventLoopId, TEST_PIPELINE_ID, TEST_WEBVIEW_ID};
use constellation_traits::{
EmbedderToConstellationMessage, LogEntry, ScriptToConstellationMessage,
ScriptToConstellationSender,
};
use crossbeam_channel::Sender; use crossbeam_channel::Sender;
use log::{Level, LevelFilter, Log, Metadata, Record}; use log::{Level, LevelFilter, Log, Metadata, Record};
use parking_lot::ReentrantMutex; use parking_lot::ReentrantMutex;
use servo_base::id::{ScriptEventLoopId, TEST_PIPELINE_ID, TEST_WEBVIEW_ID};
use servo_constellation_traits::{
EmbedderToConstellationMessage, LogEntry, ScriptToConstellationMessage,
ScriptToConstellationSender,
};
/// A logger directed at the constellation from content processes /// A logger directed at the constellation from content processes
/// #[derive(Clone)] /// #[derive(Clone)]

View File

@@ -5,16 +5,16 @@
use std::collections::HashSet; use std::collections::HashSet;
use std::rc::Rc; use std::rc::Rc;
use base::id::{BrowsingContextId, HistoryStateId, PipelineId, WebViewId};
use compositing_traits::{CompositionPipeline, PaintMessage, PaintProxy};
use constellation_traits::{LoadData, ServiceWorkerManagerFactory};
use embedder_traits::{AnimationState, FocusSequenceNumber}; use embedder_traits::{AnimationState, FocusSequenceNumber};
use ipc_channel::Error;
use layout_api::ScriptThreadFactory; use layout_api::ScriptThreadFactory;
use log::{debug, error, warn}; use log::{debug, error, warn};
use paint_api::{CompositionPipeline, PaintMessage, PaintProxy};
use script_traits::{ use script_traits::{
DiscardBrowsingContext, DocumentActivity, NewPipelineInfo, ScriptThreadMessage, DiscardBrowsingContext, DocumentActivity, NewPipelineInfo, ScriptThreadMessage,
}; };
use servo_base::generic_channel::SendError;
use servo_base::id::{BrowsingContextId, HistoryStateId, PipelineId, WebViewId};
use servo_constellation_traits::{LoadData, ServiceWorkerManagerFactory};
use servo_url::ServoUrl; use servo_url::ServoUrl;
use crate::Constellation; use crate::Constellation;
@@ -77,7 +77,7 @@ impl Pipeline {
event_loop: Rc<EventLoop>, event_loop: Rc<EventLoop>,
constellation: &Constellation<STF, SWF>, constellation: &Constellation<STF, SWF>,
throttled: bool, throttled: bool,
) -> Result<Self, Error> { ) -> Result<Self, SendError> {
if let Err(error) = event_loop.send(ScriptThreadMessage::SpawnPipeline( if let Err(error) = event_loop.send(ScriptThreadMessage::SpawnPipeline(
new_pipeline_info.clone(), new_pipeline_info.clone(),
)) { )) {

View File

@@ -34,7 +34,7 @@ impl Process {
} }
} }
type ProcessReceiver = Receiver<Result<(), ipc_channel::Error>>; type ProcessReceiver = Receiver<Result<(), ipc_channel::IpcError>>;
pub(crate) struct ProcessManager { pub(crate) struct ProcessManager {
processes: Vec<(Process, ProcessReceiver)>, processes: Vec<(Process, ProcessReceiver)>,

View File

@@ -17,7 +17,7 @@ use std::{env, process};
) )
))] ))]
use gaol::profile::{Operation, PathPattern, Profile}; use gaol::profile::{Operation, PathPattern, Profile};
use ipc_channel::Error; use ipc_channel::IpcError;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use servo_config::opts::Opts; use servo_config::opts::Opts;
use servo_config::prefs::Preferences; use servo_config::prefs::Preferences;
@@ -146,7 +146,7 @@ pub fn content_process_sandbox_profile() {
target_arch = "arm", target_arch = "arm",
target_arch = "aarch64" target_arch = "aarch64"
))] ))]
pub fn spawn_multiprocess(content: UnprivilegedContent) -> Result<Process, Error> { pub fn spawn_multiprocess(content: UnprivilegedContent) -> Result<Process, IpcError> {
use ipc_channel::ipc::{IpcOneShotServer, IpcSender}; use ipc_channel::ipc::{IpcOneShotServer, IpcSender};
// Note that this function can panic, due to process creation, // Note that this function can panic, due to process creation,
// avoiding this panic would require a mechanism for dealing // avoiding this panic would require a mechanism for dealing
@@ -177,7 +177,7 @@ pub fn spawn_multiprocess(content: UnprivilegedContent) -> Result<Process, Error
not(target_arch = "arm"), not(target_arch = "arm"),
not(target_arch = "aarch64") not(target_arch = "aarch64")
))] ))]
pub fn spawn_multiprocess(content: UnprivilegedContent) -> Result<Process, Error> { pub fn spawn_multiprocess(content: UnprivilegedContent) -> Result<Process, IpcError> {
use gaol::sandbox::{self, Sandbox, SandboxMethods}; use gaol::sandbox::{self, Sandbox, SandboxMethods};
use ipc_channel::ipc::{IpcOneShotServer, IpcSender}; use ipc_channel::ipc::{IpcOneShotServer, IpcSender};

View File

@@ -2,13 +2,13 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use base::generic_channel::GenericSender; use ipc_channel::IpcError;
use constellation_traits::{SWManagerSenders, ServiceWorkerManagerFactory};
use ipc_channel::Error;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use servo_base::generic_channel::GenericSender;
use servo_config::opts::{self, Opts}; use servo_config::opts::{self, Opts};
use servo_config::prefs; use servo_config::prefs;
use servo_config::prefs::Preferences; use servo_config::prefs::Preferences;
use servo_constellation_traits::{SWManagerSenders, ServiceWorkerManagerFactory};
use servo_url::ImmutableOrigin; use servo_url::ImmutableOrigin;
use crate::process_manager::Process; use crate::process_manager::Process;
@@ -49,7 +49,7 @@ impl ServiceWorkerUnprivilegedContent {
} }
/// Start the agent-cluster in it's own process. /// Start the agent-cluster in it's own process.
pub fn spawn_multiprocess(self) -> Result<Process, Error> { pub fn spawn_multiprocess(self) -> Result<Process, IpcError> {
spawn_multiprocess(UnprivilegedContent::ServiceWorker(self)) spawn_multiprocess(UnprivilegedContent::ServiceWorker(self))
} }
} }

View File

@@ -5,10 +5,10 @@
use std::cmp::PartialEq; use std::cmp::PartialEq;
use std::fmt; use std::fmt;
use base::id::{BrowsingContextId, HistoryStateId, PipelineId, WebViewId};
use constellation_traits::LoadData;
use embedder_traits::ViewportDetails; use embedder_traits::ViewportDetails;
use log::debug; use log::debug;
use servo_base::id::{BrowsingContextId, HistoryStateId, PipelineId, WebViewId};
use servo_constellation_traits::LoadData;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use crate::browsingcontext::NewBrowsingContextInfo; use crate::browsingcontext::NewBrowsingContextInfo;

View File

@@ -46,7 +46,7 @@ mod from_embedder {
}; };
} }
impl LogTarget for constellation_traits::EmbedderToConstellationMessage { impl LogTarget for servo_constellation_traits::EmbedderToConstellationMessage {
fn log_target(&self) -> &'static str { fn log_target(&self) -> &'static str {
match self { match self {
Self::Exit => target!("Exit"), Self::Exit => target!("Exit"),
@@ -82,6 +82,8 @@ mod from_embedder {
Self::RequestScreenshotReadiness(..) => target!("RequestScreenshotReadiness"), Self::RequestScreenshotReadiness(..) => target!("RequestScreenshotReadiness"),
Self::EmbedderControlResponse(..) => target!("EmbedderControlResponse"), Self::EmbedderControlResponse(..) => target!("EmbedderControlResponse"),
Self::UserContentManagerAction(..) => target!("UserContentManagerAction"), Self::UserContentManagerAction(..) => target!("UserContentManagerAction"),
Self::UpdatePinchZoomInfos(..) => target!("UpdatePinchZoomInfos"),
Self::SetAccessibilityActive(..) => target!("SetAccessibilityActive"),
} }
} }
} }
@@ -104,7 +106,6 @@ mod from_embedder {
InputEvent::MouseLeftViewport(..) => target_variant!("MouseLeftViewport"), InputEvent::MouseLeftViewport(..) => target_variant!("MouseLeftViewport"),
InputEvent::Touch(..) => target_variant!("Touch"), InputEvent::Touch(..) => target_variant!("Touch"),
InputEvent::Wheel(..) => target_variant!("Wheel"), InputEvent::Wheel(..) => target_variant!("Wheel"),
InputEvent::Scroll(..) => target_variant!("Scroll"),
} }
} }
} }
@@ -119,7 +120,7 @@ mod from_script {
}; };
} }
impl LogTarget for constellation_traits::ScriptToConstellationMessage { impl LogTarget for servo_constellation_traits::ScriptToConstellationMessage {
fn log_target(&self) -> &'static str { fn log_target(&self) -> &'static str {
match self { match self {
Self::CompleteMessagePortTransfer(..) => target!("CompleteMessagePortTransfer"), Self::CompleteMessagePortTransfer(..) => target!("CompleteMessagePortTransfer"),
@@ -143,10 +144,13 @@ mod from_script {
Self::BroadcastStorageEvent(..) => target!("BroadcastStorageEvent"), Self::BroadcastStorageEvent(..) => target!("BroadcastStorageEvent"),
Self::ChangeRunningAnimationsState(..) => target!("ChangeRunningAnimationsState"), Self::ChangeRunningAnimationsState(..) => target!("ChangeRunningAnimationsState"),
Self::CreateCanvasPaintThread(..) => target!("CreateCanvasPaintThread"), Self::CreateCanvasPaintThread(..) => target!("CreateCanvasPaintThread"),
Self::Focus(..) => target!("Focus"), Self::FocusAncestorBrowsingContextsForFocusingSteps(..) => {
Self::FocusRemoteDocument(..) => target!("FocusRemoteDocument"), target!("FocusAncestorBrowsingContextsForFocusingSteps")
},
Self::FocusRemoteBrowsingContext(..) => target!("FocusRemoteBrowsingContext"),
Self::GetTopForBrowsingContext(..) => target!("GetTopForBrowsingContext"), Self::GetTopForBrowsingContext(..) => target!("GetTopForBrowsingContext"),
Self::GetBrowsingContextInfo(..) => target!("GetBrowsingContextInfo"), Self::GetBrowsingContextInfo(..) => target!("GetBrowsingContextInfo"),
Self::GetDocumentOrigin(..) => target!("GetDocumentOrigin"),
Self::GetChildBrowsingContextId(..) => target!("GetChildBrowsingContextId"), Self::GetChildBrowsingContextId(..) => target!("GetChildBrowsingContextId"),
Self::LoadComplete => target!("LoadComplete"), Self::LoadComplete => target!("LoadComplete"),
Self::LoadUrl(..) => target!("LoadUrl"), Self::LoadUrl(..) => target!("LoadUrl"),
@@ -184,6 +188,7 @@ mod from_script {
Self::RespondToScreenshotReadinessRequest(..) => { Self::RespondToScreenshotReadinessRequest(..) => {
target!("RespondToScreenshotReadinessRequest") target!("RespondToScreenshotReadinessRequest")
}, },
Self::TriggerGarbageCollection => target!("TriggerGarbageCollection"),
} }
} }
} }

View File

@@ -0,0 +1,16 @@
[package]
name = "servo-default-resources"
version.workspace = true
authors.workspace = true
repository.workspace = true
description.workspace = true
license.workspace = true
edition.workspace = true
publish.workspace = true
rust-version.workspace = true
[lib]
path = "lib.rs"
[dependencies]
embedder_traits = { workspace = true }

View File

@@ -0,0 +1,39 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::path::PathBuf;
use embedder_traits::resources::{Resource, ResourceReaderMethods};
/// A default resource reader that provides baked in resources.
pub struct DefaultResourceReader;
impl ResourceReaderMethods for DefaultResourceReader {
fn sandbox_access_files(&self) -> Vec<PathBuf> {
vec![]
}
fn sandbox_access_files_dirs(&self) -> Vec<PathBuf> {
vec![]
}
fn read(&self, file: Resource) -> Vec<u8> {
match file {
Resource::BluetoothBlocklist => &include_bytes!("resources/gatt_blocklist.txt")[..],
Resource::DomainList => &include_bytes!("resources/public_domains.txt")[..],
Resource::HstsPreloadList => &include_bytes!("resources/hsts_preload.fstmap")[..],
Resource::BadCertHTML => &include_bytes!("resources/badcert.html")[..],
Resource::NetErrorHTML => &include_bytes!("resources/neterror.html")[..],
Resource::BrokenImageIcon => &include_bytes!("resources/rippy.png")[..],
Resource::CrashHTML => &include_bytes!("resources/crash.html")[..],
Resource::DirectoryListingHTML => {
&include_bytes!("resources/directory-listing.html")[..]
},
Resource::AboutMemoryHTML => &include_bytes!("resources/about-memory.html")[..],
Resource::DebuggerJS => &include_bytes!("resources/debugger.js")[..],
Resource::JsonViewerHTML => &include_bytes!("resources/json-viewer.html")[..],
}
.to_owned()
}
}
embedder_traits::submit_resource_reader!(&DefaultResourceReader);

View File

@@ -154,6 +154,12 @@
} }
function start() { function start() {
window.gcButton.onclick = async () => {
window.gcButton.disabled = true;
navigator.servo.garbageCollectAllContexts();
window.gcButton.disabled = false;
};
window.startButton.onclick = async () => { window.startButton.onclick = async () => {
let content = await navigator.servo.reportMemory(); let content = await navigator.servo.reportMemory();
let reports = JSON.parse(content); let reports = JSON.parse(content);
@@ -211,6 +217,7 @@
<body> <body>
<h2>Memory Reports</h2> <h2>Memory Reports</h2>
<button id="startButton">Measure</button> <button id="startButton">Measure</button>
<button id="gcButton">Force GC</button>
<div id="reports" class="hidden"></div> <div id="reports" class="hidden"></div>
</body> </body>
</html> </html>

View File

@@ -0,0 +1,597 @@
if ("dbg" in this) {
throw new Error("Debugger script must not run more than once!");
}
const dbg = new Debugger;
const debuggeesToPipelineIds = new Map;
const debuggeesToWorkerIds = new Map;
const sourceIdsToScripts = new Map;
const frameActorsToFrames = new Map;
const environmentActorsToEnvironments = new Map;
// <https://searchfox.org/firefox-main/source/devtools/server/actors/thread.js#155>
// Possible values for the `why.type` attribute in "paused" event
const PAUSE_REASONS = {
INTERRUPTED: "interrupted", // Associated with why.onNext attribute
RESUME_LIMIT: "resumeLimit",
};
// Find script by scriptId within a script tree
function findScriptById(script, scriptId) {
if (script.sourceStart === scriptId) {
return script;
}
for (const child of script.getChildScripts()) {
const found = findScriptById(child, scriptId);
if (found) return found;
}
return null;
}
// Walk script tree and call callback for each script
function walkScriptTree(script, callback) {
callback(script);
for (const child of script.getChildScripts()) {
walkScriptTree(child, callback);
}
}
// Find a key by a value in a map
function findKeyByValue(map, search) {
for (const [key, value] of map) {
if (value === search) return key;
}
return undefined;
}
dbg.uncaughtExceptionHook = function(error) {
console.error(`[debugger] Uncaught exception at ${error.fileName}:${error.lineNumber}:${error.columnNumber}: ${error.name}: ${error.message}`);
};
dbg.onNewScript = function(script) {
// TODO: handle wasm (`script.source.introductionType == wasm`)
sourceIdsToScripts.set(script.source.id, script);
notifyNewSource({
pipelineId: debuggeesToPipelineIds.get(script.global),
workerId: debuggeesToWorkerIds.get(script.global),
spidermonkeyId: script.source.id,
url: script.source.url,
urlOverride: script.source.displayURL,
text: script.source.text,
introductionType: script.source.introductionType ?? null,
});
};
// Track a new debuggee global
addEventListener("addDebuggee", event => {
const {global, pipelineId, workerId} = event;
const debuggerObject = dbg.addDebuggee(global);
debuggeesToPipelineIds.set(debuggerObject, pipelineId);
if (workerId !== undefined) {
debuggeesToWorkerIds.set(debuggerObject, workerId);
}
});
// Maximum number of properties to include in preview
// <https://searchfox.org/firefox-main/source/devtools/server/actors/object/previewers.js#29>
const OBJECT_PREVIEW_MAX_ITEMS = 10;
// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/previewers.js#80>
const previewers = {
Function: [],
Array: [],
Object: [],
// TODO: Add Map, FormData etc
};
// Convert debuggee value to property descriptor value
// <https://searchfox.org/firefox-main/source/devtools/server/actors/object/utils.js#116>
function createValueGrip(value, depth = 0) {
switch (typeof value) {
case "undefined":
return { valueType: "undefined" };
case "boolean":
return { valueType: "boolean", booleanValue: value };
case "number":
if (value === Infinity) {
return { valueType: "Infinity" };
} else if (value === -Infinity) {
return { valueType: "-Infinity" };
} else if (Number.isNaN(value)) {
return { valueType: "NaN" };
} else if (!value && 1 / value === -Infinity) {
return { valueType: "-0" };
}
return { valueType: "number", numberValue: value };
case "string":
return { valueType: "string", stringValue: value };
case "object":
if (value === null) {
return { valueType: "null" };
}
// Debugger.Object - get preview using registered previewers
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Object.html>
return {
valueType: "object",
objectClass: value.class,
preview: getPreview(value, depth),
};
default:
return { valueType: "string", stringValue: String(value) };
}
}
// Extract own properties from a debuggee object
// <https://firefox-source-docs.mozilla.org/devtools-user/debugger-api/debugger.object/index.html#function-properties-of-the-debugger-object-prototype>
function extractOwnProperties(obj, depth, maxItems = OBJECT_PREVIEW_MAX_ITEMS) {
const ownProperties = [];
let totalLength = 0;
let names;
try {
names = obj.getOwnPropertyNames();
totalLength = names.length;
} catch (e) {
return { ownProperties, ownPropertiesLength: 0 };
}
let count = 0;
for (const name of names) {
if (count >= maxItems) break;
try {
const desc = obj.getOwnPropertyDescriptor(name);
if (desc) {
const prop = {
name: name,
configurable: desc.configurable ?? false,
enumerable: desc.enumerable ?? false,
writable: desc.writable ?? false,
isAccessor: desc.get !== undefined || desc.set !== undefined,
value: createValueGrip(undefined, depth + 1),
};
if (desc.value !== undefined) {
prop.value = createValueGrip(desc.value, depth + 1);
} else if (desc.get) {
try {
const result = desc.get.call(obj);
if (result && "return" in result) {
prop.value = createValueGrip(result.return, depth + 1);
}
} catch (e) { }
}
ownProperties.push(prop);
count++;
}
} catch (e) {
// For now skip properties that throw on access
}
}
return { ownProperties, ownPropertiesLength: totalLength };
}
// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/previewers.js#125>
previewers.Function.push(function FunctionPreviewer(obj, depth) {
let function_details = {
name: obj.name,
displayName: obj.displayName,
parameterNames: obj.parameterNames ? obj.parameterNames: [],
isAsync: obj.isAsyncFunction,
isGenerator: obj.isGeneratorFunction,
}
if (depth > 1) {
return { kind: "Object", function: function_details };
}
const { ownProperties, ownPropertiesLength } = extractOwnProperties(obj, depth);
return {
kind: "Object",
ownProperties,
ownPropertiesLength,
function: function_details
};
});
// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/previewers.js#172>
// TODO: Add implementation for showing Array items
previewers.Array.push(function ArrayPreviewer(obj, depth) {
const lengthDescriptor = obj.getOwnPropertyDescriptor("length");
const length = lengthDescriptor ? lengthDescriptor.value : 0;
return {
kind: "ArrayLike",
arrayLength: length,
};
});
// Generic fallback for object previewer
// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object/previewers.js#856>
previewers.Object.push(function ObjectPreviewer(obj, depth) {
if (depth > 1) {
return { kind: "Object" };
}
const { ownProperties, ownPropertiesLength } = extractOwnProperties(obj, depth);
return {
kind: "Object",
ownProperties,
ownPropertiesLength,
};
});
function getPreview(obj, depth) {
const className = obj.class;
// <https://searchfox.org/mozilla-central/source/devtools/server/actors/object.js#295>
const typePreviewers = previewers[className] || previewers.Object;
for (const previewer of typePreviewers) {
const result = previewer(obj, depth);
if (result) return result;
}
return { ownProperties: [], ownPropertiesLength: 0 };
}
// Evaluate some javascript code in the global context of the debuggee
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Object.html#executeinglobal-code-options>
addEventListener("eval", event => {
const {code, pipelineId, workerId, frameActorId} = event;
let completionValue;
if (frameActorId) {
const frame = frameActorsToFrames.get(frameActorId);
// <https://searchfox.org/firefox-main/source/js/src/doc/Debugger/Debugger.Frame.md#223>
if (frame?.onStack) {
completionValue = frame.eval(code);
} else {
completionValue = { throw: "Frame not available" };
}
} else {
const object = workerId !== undefined ?
findKeyByValue(debuggeesToWorkerIds, workerId) :
findKeyByValue(debuggeesToPipelineIds, pipelineId);
completionValue = object.executeInGlobal(code);
}
// Completion values: <https://firefox-source-docs.mozilla.org/js/Debugger/Conventions.html#completion-values>
let resultValue;
if (completionValue === null) {
resultValue = { completionType: "terminated", value: createValueGrip(undefined), hasException: false };
} else if ("throw" in completionValue) {
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.html#adoptdebuggeevalue-value>
// <https://searchfox.org/firefox-main/source/devtools/server/actors/webconsole/eval-with-debugger.js#312>
// we probably don't need adoptDebuggeeValue, as we only have one debugger instance for now
// let value = dbg.adoptDebuggeeValue(completionValue.throw);
resultValue = { completionType: "throw", value: createValueGrip(completionValue.throw), hasException: true };
} else if ("return" in completionValue) {
resultValue = { completionType: "return", value: createValueGrip(completionValue.return), hasException: false };
}
// To avoid recursion errors in the WebIDL, preview needs to live outside of the property descriptor
if (resultValue.value.preview) {
resultValue.preview = resultValue.value.preview;
delete resultValue.value.preview;
}
evalResult(event, resultValue);
});
addEventListener("getPossibleBreakpoints", event => {
const {spidermonkeyId} = event;
const script = sourceIdsToScripts.get(spidermonkeyId);
const result = [];
walkScriptTree(script, (currentScript) => {
for (const location of currentScript.getPossibleBreakpoints()) {
location["scriptId"] = currentScript.sourceStart;
result.push(location);
}
});
getPossibleBreakpointsResult(event, result);
});
function createFrameActor(frame, pipelineId) {
let frameActorId = findKeyByValue(frameActorsToFrames, frame);
if (!frameActorId) {
// TODO: Check if we already have an actor for this frame
frameActorId = registerFrameActor(pipelineId, {
// TODO: Some properties throw if terminated is true
// TODO: arguments: frame.arguments,
displayName: frame.script.displayName,
onStack: frame.onStack,
oldest: frame.older == null,
terminated: frame.terminated,
type_: frame.type,
url: frame.script.url,
});
if (!frameActorId) {
console.error("[debugger] Couldn't create frame");
return undefined;
}
frameActorsToFrames.set(frameActorId, frame);
}
return frameActorId;
}
function handlePauseAndRespond(frame, pauseReason) {
dbg.onEnterFrame = undefined;
clearSteppingHooks(frame);
// Get the pipeline ID for this debuggee
const pipelineId = debuggeesToPipelineIds.get(frame.script.global);
if (!pipelineId) {
console.error("[debugger] No pipeline ID for frame's global");
return undefined;
}
let frameActorId = createFrameActor(frame, pipelineId);
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Script.html#getoffsetmetadata-offset>
const offset = frame.offset;
const offsetMetadata = frame.script.getOffsetMetadata(offset);
const frameOffset = {
frameActorId,
column: offsetMetadata.columnNumber - 1,
line: offsetMetadata.lineNumber
};
// Notify devtools and enter pause loop. This blocks until Resume.
pauseAndRespond(
pipelineId,
frameOffset,
pauseReason
);
// <https://firefox-source-docs.mozilla.org/js/Debugger/Conventions.html#resumption-values>
// Return undefined to continue execution normally after resume.
return undefined;
}
addEventListener("frames", event => {
const {pipelineId, start, count} = event;
let frameList = handleListFrames(pipelineId, start, count);
listFramesResult(frameList);
})
// <https://searchfox.org/firefox-main/source/devtools/server/actors/thread.js#1425>
function handleListFrames(pipelineId, start, count) {
let frame = dbg.getNewestFrame()
const walkToParentFrame = () => {
if (!frame) {
return;
}
const currentFrame = frame;
frame = null;
if (currentFrame.older) {
frame = currentFrame.older;
}
}
let i = 0;
while (frame && i < start) {
walkToParentFrame();
i++;
}
// Return count frames, or all remaining frames if count is not defined.
const frames = [];
for (; frame && (!count || i < start + count); i++, walkToParentFrame()) {
const frameActorId = createFrameActor(frame, pipelineId);
frames.push(frameActorId);
}
return frames;
}
addEventListener("setBreakpoint", event => {
const {spidermonkeyId, scriptId, offset} = event;
const script = sourceIdsToScripts.get(spidermonkeyId);
const target = findScriptById(script, scriptId);
if (target) {
target.setBreakpoint(offset, {
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Script.html#setbreakpoint-offset-handler>
// The hit handler receives a Debugger.Frame instance representing the currently executing stack frame.
hit: (frame) => handlePauseAndRespond(frame, {type_: "breakpoint"})
});
}
});
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Frame.html>
addEventListener("interrupt", event => {
dbg.onEnterFrame = (frame) => handlePauseAndRespond(
frame,
{ type_: PAUSE_REASONS.INTERRUPTED, onNext: true }
);
});
function makeSteppingHooks(steppingType, startFrame) {
return {
onEnterFrame: (frame) => {
const { onStep, onPop } = makeSteppingHooks("next", frame);
frame.onStep = onStep;
frame.onPop = onPop;
},
onStep: () => {
const meta = startFrame.script.getOffsetMetadata(startFrame.offset);
if (meta.isBreakpoint && meta.isStepStart) {
return handlePauseAndRespond(startFrame, { type_: PAUSE_REASONS.RESUME_LIMIT });
}
},
onPop: (completion) => {
this.reportedPop = true;
suspendedFrame = startFrame;
if (steppingType !== "finish") {
// TODO: completion contains the return value, we have to send it back
// <https://searchfox.org/firefox-main/source/devtools/server/actors/thread.js#1026>
return handlePauseAndRespond(startFrame, { type_: steppingType });
}
attachSteppingHooks("next", startFrame);
},
}
}
function getNextStepFrame(frame) {
const endOfFrame = frame.reportedPop;
const stepFrame = endOfFrame ? frame.older : frame;
if (!stepFrame || !stepFrame.script) {
return null;
}
return stepFrame;
}
// <https://searchfox.org/firefox-main/source/devtools/server/actors/thread.js#1235>
function attachSteppingHooks(steppingType, frame) {
if (steppingType === "finish" && frame.reportedPop) {
steppingType = "next";
}
const stepFrame = getNextStepFrame(frame);
if (!stepFrame) {
steppingType = "step";
}
const { onEnterFrame, onStep, onPop } = makeSteppingHooks(
steppingType,
frame,
);
if (steppingType === "step") {
dbg.onEnterFrame = onEnterFrame;
}
if (stepFrame) {
switch (steppingType) {
case "step":
case "next":
if (stepFrame.script) {
stepFrame.onStep = onStep;
}
case "finish":
stepFrame.onPop = onPop;
break;
}
}
}
function clearSteppingHooks(suspendedFrame) {
if (suspendedFrame) {
suspendedFrame.onStep = undefined;
suspendedFrame.onPop = undefined;
}
let frame = this.youngestFrame;
if (frame?.onStack) {
while (frame) {
frame.onStep = undefined;
frame.onPop = undefined;
frame = frame.older;
}
}
}
// <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#resuming-a-thread>
addEventListener("resume", event => {
const {resumeLimitType: steppingType, frameActorID} = event;
let frame = dbg.getNewestFrame();
if (frameActorID) {
frame = frameActorsToFrames.get(frameActorID);
if (!frame) {
console.error("[debugger] Couldn't find frame");
}
}
if (steppingType) {
attachSteppingHooks(steppingType, frame);
} else {
clearSteppingHooks(frame);
}
});
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Script.html#clearbreakpoint-handler-offset>
// There may be more than one breakpoint at the same offset with different handlers, but we dont handle that case for now.
addEventListener("clearBreakpoint", event => {
const {spidermonkeyId, scriptId, offset} = event;
const script = sourceIdsToScripts.get(spidermonkeyId);
const target = findScriptById(script, scriptId);
if (target) {
// <https://firefox-source-docs.mozilla.org/js/Debugger/Debugger.Script.html#clearallbreakpoints-offset>
// If the instance refers to a JSScript, remove all breakpoints set in this script at that offset.
target.clearAllBreakpoints(offset);
}
});
// TODO: Get variables (scopes don't show if they don't have a variable)
function createEnvironmentActor(environment) {
let actor = findKeyByValue(environmentActorsToEnvironments, environment);
if (!actor) {
let info = {};
if (environment.type == "declarative") {
info.type_ = environment.calleeScript ? "function" : "block";
} else {
info.type_ = environment.type;
}
info.scopeKind = environment.scopeKind;
if (environment.calleeScript) {
info.functionDisplayName = environment.calleeScript.displayName;
}
let parent = null;
if (environment.parent) {
parent = createEnvironmentActor(environment.parent);
}
if (environment.type == "declarative") {
info.bindingVariables = buildBindings(environment)
}
actor = registerEnvironmentActor(info, parent);
environmentActorsToEnvironments.set(actor, environment);
}
return actor;
}
function buildBindings(environment) {
let bindingVars = [];
for (const name of environment.names()) {
const value = environment.getVariable(name);
const property = {
name: name,
configurable: false,
enumerable: true,
writable: !value?.optimizedOut,
isAccessor: false,
value: createValueGrip(value),
};
// To avoid recursion errors in the WebIDL, preview needs to live outside of the property descriptor
let preview = undefined;
if (property.value.preview) {
preview = property.value.preview;
delete property.value.preview;
}
bindingVars.push({ property, preview });
}
return bindingVars;
}
// Get a `Debugger.Environment` instance within which evaluation is taking place.
// <https://searchfox.org/firefox-main/source/devtools/server/actors/frame.js#109>
addEventListener("getEnvironment", event => {
const {frameActorId} = event;
frame = frameActorsToFrames.get(frameActorId);
const actor = createEnvironmentActor(frame.environment);
getEnvironmentResult(actor);
});

View File

@@ -0,0 +1,269 @@
<html>
<head>
<style>
body {
font-family: monospace;
margin: 0;
padding: 0;
background: #fff;
color: #333;
}
#json-raw {
display: none;
}
#viewer {
display: none;
padding: 0.5em 1em;
line-height: 1.5;
&.active {
display: block;
}
}
#toolbar {
display: flex;
gap: 1em;
padding: 0.5em;
align-items: center;
background: #f5f5f5;
border-bottom: 1px solid #ddd;
& button {
min-width: 5em;
&.active {
background: #ddd;
font-weight: bold;
}
}
}
#raw-view {
display: none;
padding: 0.5em 1em;
white-space: pre-wrap;
word-break: break-all;
&.active {
display: block;
}
}
.json-error {
padding: 0.5em 1em;
color: #c00;
font-weight: bold;
}
/* Syntax highlighting for Json data types */
.json-key {
color: #881391;
}
.json-string {
color: #1a1aa6;
}
.json-number {
color: #1c00cf;
}
.json-boolean {
color: #0d22aa;
}
.json-null {
color: #808080;
}
/* Collapsible tree */
.toggle {
cursor: pointer;
user-select: none;
&::before {
content: "\25BC";
display: inline-block;
width: 1em;
transition: transform 0.1s;
}
&.collapsed::before {
transform: rotate(-90deg);
}
}
.collapsible {
margin-left: 1.5em;
&.hidden {
display: none;
}
}
.bracket {
color: #333;
}
.comma {
color: #333;
}
.line {
padding-left: 0;
}
</style>
<script>
// Shortcut to create an element with an optional class and text content.
function createElement(name, classes = null, textContent = null) {
let node = document.createElement(name);
if (classes) {
node.className = classes;
}
if (textContent) {
node.textContent = textContent;
}
return node;
}
function renderNode(value, container) {
if (value === null) {
let s = createElement("span", "json-null", "null");
container.append(s);
} else if (typeof value === "boolean") {
let s = createElement("span", "json-boolean", String(value));
container.append(s);
} else if (typeof value === "number") {
let s = createElement("span", "json-number", String(value));
container.append(s);
} else if (typeof value === "string") {
let s = createElement("span", "json-string", JSON.stringify(value));
container.append(s);
} else if (Array.isArray(value)) {
renderArray(value, container);
} else if (typeof value === "object") {
renderObject(value, container);
}
}
function renderObject(obj, container) {
let keys = Object.keys(obj);
if (keys.length === 0) {
container.append(createElement("span", "bracket", "{}"));
return;
}
let toggle = createElement("span", "toggle");
container.append(toggle);
container.append(createElement("span", "bracket", "{"));
let inner = createElement("div", "collapsible");
container.append(inner);
keys.forEach((key, i) => {
let line = createElement("div", "line");
line.append(createElement("span", "json-key", JSON.stringify(key)));
line.append(document.createTextNode(": "));
renderNode(obj[key], line);
if (i < keys.length - 1) {
line.append(createElement("span", "comma", ","));
}
inner.append(line);
});
container.append(createElement("span", "bracket", "}"));
toggle.onclick = function () {
toggle.classList.toggle("collapsed");
inner.classList.toggle("hidden");
};
}
function renderArray(arr, container) {
if (arr.length === 0) {
container.append(createElement("span", "bracket", "[]"));
return;
}
let toggle = createElement("span", "toggle");
container.append(toggle);
container.append(createElement("span", "bracket", "["));
let inner = createElement("div", "collapsible");
container.append(inner);
arr.forEach((item, i) => {
let line = createElement("div", "line");
renderNode(item, line);
if (i < arr.length - 1) {
line.append(createElement("span", "comma", ","));
}
inner.append(line);
});
container.append(createElement("span", "bracket", "]"));
toggle.onclick = function () {
toggle.classList.toggle("collapsed");
inner.classList.toggle("hidden");
};
}
document.addEventListener("DOMContentLoaded", function () {
const viewer = document.getElementById("viewer");
const prettyButton = document.getElementById("pretty-toggle");
const rawButton = document.getElementById("raw-toggle");
const rawView = document.getElementById("raw-view");
const rawText = rawView.innerText;
let data;
let parseError = null;
try {
data = JSON.parse(rawText);
} catch (e) {
parseError = e;
}
if (parseError) {
let errDiv = createElement(
"div",
"json-error",
"Invalid JSON: " + parseError.message,
);
viewer.append(errDiv);
viewer.append(createElement("pre", null, rawText));
} else {
renderNode(data, viewer);
rawView.textContent = JSON.stringify(data, null, 2);
}
// Toggle buttons
prettyButton.onclick = function () {
viewer.classList.add("active");
rawView.classList.remove("active");
prettyButton.classList.add("active");
rawButton.classList.remove("active");
};
rawButton.onclick = function () {
rawView.classList.add("active");
viewer.classList.remove("active");
rawButton.classList.add("active");
prettyButton.classList.remove("active");
};
});
</script>
</head>
<body>
<div id="toolbar">
<button id="pretty-toggle" class="active">Pretty</button>
<button id="raw-toggle">Raw</button>
</div>
<div id="viewer" class="active"></div>
<pre id="raw-view">

View File

Before

Width:  |  Height:  |  Size: 144 B

After

Width:  |  Height:  |  Size: 144 B

View File

@@ -1,11 +1,13 @@
[package] [package]
name = "deny_public_fields" name = "servo-deny-public-fields"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
path = "lib.rs" path = "lib.rs"

View File

@@ -1,18 +1,20 @@
[package] [package]
name = "devtools" name = "servo-devtools"
version.workspace = true version.workspace = true
authors.workspace = true authors.workspace = true
license.workspace = true license.workspace = true
edition.workspace = true edition.workspace = true
publish.workspace = true publish.workspace = true
rust-version.workspace = true rust-version.workspace = true
repository.workspace = true
description.workspace = true
[lib] [lib]
name = "devtools" name = "devtools"
path = "lib.rs" path = "lib.rs"
[dependencies] [dependencies]
base = { workspace = true } atomic_refcell = { workspace = true }
base64 = { workspace = true } base64 = { workspace = true }
chrono = { workspace = true } chrono = { workspace = true }
crossbeam-channel = { workspace = true } crossbeam-channel = { workspace = true }
@@ -21,14 +23,18 @@ embedder_traits = { workspace = true }
headers = { workspace = true } headers = { workspace = true }
http = { workspace = true } http = { workspace = true }
log = { workspace = true } log = { workspace = true }
net = { path = "../net" } malloc_size_of = { workspace = true }
malloc_size_of_derive = { workspace = true }
net = { workspace = true }
net_traits = { workspace = true } net_traits = { workspace = true }
profile_traits = { workspace = true }
rand = { workspace = true } rand = { workspace = true }
rustc-hash = { workspace = true } rustc-hash = { workspace = true }
serde = { workspace = true } serde = { workspace = true }
serde_json = { workspace = true } serde_json = { workspace = true }
servo_config = { path = "../config" } servo-base = { workspace = true }
servo_url = { path = "../url" } servo-config = { workspace = true }
servo-url = { workspace = true }
uuid = { workspace = true } uuid = { workspace = true }
[build-dependencies] [build-dependencies]

View File

@@ -3,18 +3,21 @@
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::any::{Any, type_name}; use std::any::{Any, type_name};
use std::cell::{Cell, RefCell};
use std::collections::HashMap; use std::collections::HashMap;
use std::mem; use std::marker::PhantomData;
use std::net::TcpStream; use std::sync::Arc;
use std::sync::atomic::{AtomicU32, Ordering};
use base::id::PipelineId; use atomic_refcell::AtomicRefCell;
use log::{debug, warn}; use log::{debug, warn};
use malloc_size_of::MallocSizeOf;
use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value, json}; use serde_json::{Map, Value, json};
use servo_base::id::PipelineId;
use crate::StreamId; use crate::StreamId;
use crate::protocol::{ClientRequest, JsonPacketStream}; use crate::protocol::{ClientRequest, DevtoolsConnection, JsonPacketStream};
/// Error replies. /// Error replies.
/// ///
@@ -46,8 +49,7 @@ impl ActorError {
/// A common trait for all devtools actors that encompasses an immutable name /// A common trait for all devtools actors that encompasses an immutable name
/// and the ability to process messages that are directed to particular actors. /// and the ability to process messages that are directed to particular actors.
/// TODO: ensure the name is immutable pub(crate) trait Actor: Any + ActorAsAny + Send + Sync + MallocSizeOf {
pub(crate) trait Actor: Any + ActorAsAny + Send {
fn handle_message( fn handle_message(
&self, &self,
request: ClientRequest, request: ClientRequest,
@@ -65,41 +67,56 @@ pub(crate) trait Actor: Any + ActorAsAny + Send {
pub(crate) trait ActorAsAny { pub(crate) trait ActorAsAny {
fn actor_as_any(&self) -> &dyn Any; fn actor_as_any(&self) -> &dyn Any;
fn actor_as_any_mut(&mut self) -> &mut dyn Any;
} }
impl<T: Actor> ActorAsAny for T { impl<T: Actor> ActorAsAny for T {
fn actor_as_any(&self) -> &dyn Any { fn actor_as_any(&self) -> &dyn Any {
self self
} }
fn actor_as_any_mut(&mut self) -> &mut dyn Any {
self
}
} }
pub(crate) trait ActorEncode<T: Serialize>: Actor { pub(crate) trait ActorEncode<T: Serialize>: Actor {
fn encode(&self, registry: &ActorRegistry) -> T; fn encode(&self, registry: &ActorRegistry) -> T;
} }
/// A list of known, owned actors. /// Return value of `ActorRegistry::find` that allows seamless downcasting
/// from `dyn Actor` to the concrete actor type.
pub(crate) struct DowncastableActorArc<T> {
actor: Arc<dyn Actor>,
_phantom: PhantomData<T>,
}
impl<T: 'static> std::ops::Deref for DowncastableActorArc<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
self.actor.actor_as_any().downcast_ref::<T>().unwrap()
}
}
#[derive(Default)] #[derive(Default)]
pub struct ActorRegistry { struct ActorRegistryType(AtomicRefCell<HashMap<String, Arc<dyn Actor>>>);
actors: HashMap<String, Box<dyn Actor>>,
new_actors: RefCell<Vec<Box<dyn Actor>>>,
old_actors: RefCell<Vec<String>>,
script_actors: RefCell<HashMap<String, String>>,
impl MallocSizeOf for ActorRegistryType {
fn size_of(&self, ops: &mut malloc_size_of::MallocSizeOfOps) -> usize {
self.0.borrow().iter().map(|actor| actor.size_of(ops)).sum()
}
}
/// A list of known, owned actors.
#[derive(Default, MallocSizeOf)]
pub(crate) struct ActorRegistry {
actors: ActorRegistryType,
script_actors: AtomicRefCell<HashMap<String, String>>,
/// Lookup table for SourceActor names associated with a given PipelineId. /// Lookup table for SourceActor names associated with a given PipelineId.
source_actor_names: RefCell<HashMap<PipelineId, Vec<String>>>, source_actor_names: AtomicRefCell<HashMap<PipelineId, Vec<String>>>,
/// Lookup table for inline source content associated with a given PipelineId. /// Lookup table for inline source content associated with a given PipelineId.
inline_source_content: RefCell<HashMap<PipelineId, String>>, inline_source_content: AtomicRefCell<HashMap<PipelineId, String>>,
next: AtomicU32,
next: Cell<u32>,
} }
impl ActorRegistry { impl ActorRegistry {
pub(crate) fn cleanup(&self, stream_id: StreamId) { pub(crate) fn cleanup(&self, stream_id: StreamId) {
for actor in self.actors.values() { for actor in self.actors.0.borrow().values() {
actor.cleanup(stream_id); actor.cleanup(stream_id);
} }
} }
@@ -139,36 +156,42 @@ impl ActorRegistry {
} }
/// Create a unique name based on a monotonically increasing suffix /// Create a unique name based on a monotonically increasing suffix
/// TODO: Merge this with `register/register_later` and don't allow to /// TODO: Merge this with `register` and don't allow to
/// create new names without registering an actor. /// create new names without registering an actor.
pub fn new_name<T: Actor>(&self) -> String { pub fn new_name<T: Actor>(&self) -> String {
let suffix = self.next.get(); let suffix = self.next.fetch_add(1, Ordering::Relaxed);
self.next.set(suffix + 1); let base = Self::base_name::<T>();
format!("{}{}", Self::base_name::<T>(), suffix)
// Firefox DevTools client requires "/workerTarget" in actor name to recognize workers
// <https://searchfox.org/firefox-main/source/devtools/client/fronts/watcher.js#65>
if base.contains("WorkerTarget") {
format!("/workerTarget{}", suffix)
} else {
format!("{}{}", base, suffix)
}
} }
/// Add an actor to the registry of known actors that can receive messages. /// Add an actor to the registry of known actors that can receive messages.
pub(crate) fn register<T: Actor>(&mut self, actor: T) { pub(crate) fn register<T: Actor>(&self, actor: T) {
self.actors.insert(actor.name(), Box::new(actor)); self.actors
} .0
.borrow_mut()
/// Add an actor to the registry that can receive messages. .insert(actor.name(), Arc::new(actor));
/// It won't be available until after the next message is processed.
pub(crate) fn register_later<T: Actor>(&self, actor: T) {
let mut actors = self.new_actors.borrow_mut();
actors.push(Box::new(actor));
} }
/// Find an actor by registered name /// Find an actor by registered name
pub fn find<'a, T: Any>(&'a self, name: &str) -> &'a T { pub fn find<T: Actor>(&self, name: &str) -> DowncastableActorArc<T> {
let actor = self.actors.get(name).unwrap(); let actor = self
actor.actor_as_any().downcast_ref::<T>().unwrap() .actors
} .0
.borrow()
/// Find an actor by registered name .get(name)
pub fn find_mut<'a, T: Any>(&'a mut self, name: &str) -> &'a mut T { .expect("Should never look for a nonexistent actor")
let actor = self.actors.get_mut(name).unwrap(); .clone();
actor.actor_as_any_mut().downcast_mut::<T>().unwrap() DowncastableActorArc {
actor,
_phantom: PhantomData,
}
} }
/// Find an actor by registered name and return its serialization /// Find an actor by registered name and return its serialization
@@ -179,9 +202,9 @@ impl ActorRegistry {
/// Attempt to process a message as directed by its `to` property. If the actor is not found, does not support the /// Attempt to process a message as directed by its `to` property. If the actor is not found, does not support the
/// message, or failed to handle the message, send an error reply instead. /// message, or failed to handle the message, send an error reply instead.
pub(crate) fn handle_message( pub(crate) fn handle_message(
&mut self, &self,
msg: &Map<String, Value>, msg: &Map<String, Value>,
stream: &mut TcpStream, stream: &mut DevtoolsConnection,
stream_id: StreamId, stream_id: StreamId,
) -> Result<(), ()> { ) -> Result<(), ()> {
let to = match msg.get("to") { let to = match msg.get("to") {
@@ -192,7 +215,11 @@ impl ActorRegistry {
}, },
}; };
match self.actors.get(to) { let actor = {
let actors_map = self.actors.0.borrow();
actors_map.get(to).cloned()
};
match actor {
None => { None => {
// <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#packets> // <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#packets>
let msg = json!({ "from": to, "error": "noSuchActor" }); let msg = json!({ "from": to, "error": "noSuchActor" });
@@ -200,7 +227,7 @@ impl ActorRegistry {
}, },
Some(actor) => { Some(actor) => {
let msg_type = msg.get("type").unwrap().as_str().unwrap(); let msg_type = msg.get("type").unwrap().as_str().unwrap();
if let Err(error) = ClientRequest::handle(stream, to, |req| { if let Err(error) = ClientRequest::handle(stream.clone(), to, |req| {
actor.handle_message(req, self, msg_type, msg, stream_id) actor.handle_message(req, self, msg_type, msg, stream_id)
}) { }) {
// <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#error-packets> // <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#error-packets>
@@ -212,25 +239,11 @@ impl ActorRegistry {
} }
}, },
} }
let new_actors = mem::take(&mut *self.new_actors.borrow_mut());
for actor in new_actors.into_iter() {
self.actors.insert(actor.name().to_owned(), actor);
}
let old_actors = mem::take(&mut *self.old_actors.borrow_mut());
for name in old_actors {
self.drop_actor(name);
}
Ok(()) Ok(())
} }
pub fn drop_actor(&mut self, name: String) { pub fn remove(&self, name: String) {
self.actors.remove(&name); self.actors.0.borrow_mut().remove(&name);
}
pub fn drop_actor_later(&self, name: String) {
let mut actors = self.old_actors.borrow_mut();
actors.push(name);
} }
pub fn register_source_actor(&self, pipeline_id: PipelineId, actor_name: &str) { pub fn register_source_actor(&self, pipeline_id: PipelineId, actor_name: &str) {
@@ -241,15 +254,15 @@ impl ActorRegistry {
.push(actor_name.to_owned()); .push(actor_name.to_owned());
} }
pub fn source_actor_names_for_pipeline(&mut self, pipeline_id: PipelineId) -> Vec<String> { pub fn source_actor_names_for_pipeline(&self, pipeline_id: PipelineId) -> Vec<String> {
if let Some(source_actor_names) = self.source_actor_names.borrow_mut().get(&pipeline_id) { self.source_actor_names
return source_actor_names.clone(); .borrow_mut()
} .get(&pipeline_id)
.cloned()
vec![] .unwrap_or_default()
} }
pub fn set_inline_source_content(&mut self, pipeline_id: PipelineId, content: String) { pub fn set_inline_source_content(&self, pipeline_id: PipelineId, content: String) {
assert!( assert!(
self.inline_source_content self.inline_source_content
.borrow_mut() .borrow_mut()
@@ -258,7 +271,7 @@ impl ActorRegistry {
); );
} }
pub fn inline_source_content(&mut self, pipeline_id: PipelineId) -> Option<String> { pub fn inline_source_content(&self, pipeline_id: PipelineId) -> Option<String> {
self.inline_source_content self.inline_source_content
.borrow() .borrow()
.get(&pipeline_id) .get(&pipeline_id)

View File

@@ -2,12 +2,35 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use devtools_traits::DevtoolScriptControlMsg;
use malloc_size_of_derive::MallocSizeOf;
use serde::Deserialize;
use serde_json::Map;
use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry}; use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry};
use crate::actors::browsing_context::BrowsingContextActor;
use crate::actors::thread::ThreadActor;
use crate::protocol::ClientRequest; use crate::protocol::ClientRequest;
use crate::{ActorMsg, EmptyReplyMsg}; use crate::{ActorMsg, EmptyReplyMsg};
pub struct BreakpointListActor { #[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BreakpointRequestLocation {
pub line: u32,
pub column: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_url: Option<String>,
}
#[derive(Deserialize)]
struct BreakpointRequest {
location: BreakpointRequestLocation,
}
#[derive(MallocSizeOf)]
pub(crate) struct BreakpointListActor {
name: String, name: String,
browsing_context_name: String,
} }
impl Actor for BreakpointListActor { impl Actor for BreakpointListActor {
@@ -18,9 +41,9 @@ impl Actor for BreakpointListActor {
fn handle_message( fn handle_message(
&self, &self,
request: ClientRequest, request: ClientRequest,
_registry: &crate::actor::ActorRegistry, registry: &crate::actor::ActorRegistry,
msg_type: &str, msg_type: &str,
_msg: &serde_json::Map<String, serde_json::Value>, msg: &Map<String, serde_json::Value>,
_stream_id: crate::StreamId, _stream_id: crate::StreamId,
) -> Result<(), ActorError> { ) -> Result<(), ActorError> {
match msg_type { match msg_type {
@@ -28,6 +51,35 @@ impl Actor for BreakpointListActor {
// Seems to be infallible, unlike the thread actors `setBreakpoint`. // Seems to be infallible, unlike the thread actors `setBreakpoint`.
// <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#breakpoints> // <https://firefox-source-docs.mozilla.org/devtools/backend/protocol.html#breakpoints>
"setBreakpoint" => { "setBreakpoint" => {
let msg: BreakpointRequest =
serde_json::from_value(msg.clone().into()).map_err(|_| ActorError::Internal)?;
let BreakpointRequestLocation {
line,
column,
source_url,
} = msg.location;
let source_url = source_url.ok_or(ActorError::Internal)?;
let browsing_context_actor =
registry.find::<BrowsingContextActor>(&self.browsing_context_name);
let thread_actor =
registry.find::<ThreadActor>(&browsing_context_actor.thread_name);
let source = thread_actor
.source_manager
.find_source(registry, &source_url)
.ok_or(ActorError::Internal)?;
if let Some((script_id, offset)) = source.find_offset(line, column) {
source
.script_sender
.send(DevtoolScriptControlMsg::SetBreakpoint(
source.spidermonkey_id,
script_id,
offset,
))
.map_err(|_| ActorError::Internal)?;
}
let msg = EmptyReplyMsg { from: self.name() }; let msg = EmptyReplyMsg { from: self.name() };
request.reply_final(&msg)? request.reply_final(&msg)?
}, },
@@ -36,6 +88,34 @@ impl Actor for BreakpointListActor {
request.reply_final(&msg)? request.reply_final(&msg)?
}, },
"removeBreakpoint" => { "removeBreakpoint" => {
let msg: BreakpointRequest =
serde_json::from_value(msg.clone().into()).map_err(|_| ActorError::Internal)?;
let BreakpointRequestLocation {
line,
column,
source_url,
} = msg.location;
let source_url = source_url.ok_or(ActorError::Internal)?;
let browsing_context_actor =
registry.find::<BrowsingContextActor>(&self.browsing_context_name);
let thread_actor =
registry.find::<ThreadActor>(&browsing_context_actor.thread_name);
let source = thread_actor
.source_manager
.find_source(registry, &source_url)
.ok_or(ActorError::Internal)?;
if let Some((script_id, offset)) = source.find_offset(line, column) {
source
.script_sender
.send(DevtoolScriptControlMsg::ClearBreakpoint(
source.spidermonkey_id,
script_id,
offset,
))
.map_err(|_| ActorError::Internal)?;
}
let msg = EmptyReplyMsg { from: self.name() }; let msg = EmptyReplyMsg { from: self.name() };
request.reply_final(&msg)? request.reply_final(&msg)?
}, },
@@ -46,8 +126,14 @@ impl Actor for BreakpointListActor {
} }
impl BreakpointListActor { impl BreakpointListActor {
pub fn new(name: String) -> Self { pub fn register(registry: &ActorRegistry, browsing_context_name: String) -> String {
Self { name } let name = registry.new_name::<Self>();
let actor = Self {
name: name.clone(),
browsing_context_name,
};
registry.register::<Self>(actor);
name
} }
} }

View File

@@ -6,19 +6,16 @@
//! Connection point for remote devtools that wish to investigate a particular Browsing Context's contents. //! Connection point for remote devtools that wish to investigate a particular Browsing Context's contents.
//! Supports dynamic attaching and detaching which control notifications of navigation, etc. //! Supports dynamic attaching and detaching which control notifications of navigation, etc.
use std::cell::{Cell, RefCell}; use atomic_refcell::AtomicRefCell;
use std::collections::HashMap; use devtools_traits::DevtoolScriptControlMsg::{self, GetCssDatabase, SimulateColorScheme};
use std::net::TcpStream;
use base::generic_channel::{self, GenericSender};
use base::id::PipelineId;
use devtools_traits::DevtoolScriptControlMsg::{
self, GetCssDatabase, SimulateColorScheme, WantsLiveNotifications,
};
use devtools_traits::{DevtoolsPageInfo, NavigationState}; use devtools_traits::{DevtoolsPageInfo, NavigationState};
use embedder_traits::Theme; use embedder_traits::Theme;
use malloc_size_of_derive::MallocSizeOf;
use rustc_hash::FxHashMap;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value}; use serde_json::{Map, Value};
use servo_base::generic_channel::{self, GenericSender, SendError};
use servo_base::id::PipelineId;
use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry}; use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry};
use crate::actors::inspector::InspectorActor; use crate::actors::inspector::InspectorActor;
@@ -30,7 +27,7 @@ use crate::actors::tab::TabDescriptorActor;
use crate::actors::thread::ThreadActor; use crate::actors::thread::ThreadActor;
use crate::actors::watcher::{SessionContext, SessionContextType, WatcherActor}; use crate::actors::watcher::{SessionContext, SessionContextType, WatcherActor};
use crate::id::{DevtoolsBrowserId, DevtoolsBrowsingContextId, DevtoolsOuterWindowId, IdMap}; use crate::id::{DevtoolsBrowserId, DevtoolsBrowsingContextId, DevtoolsOuterWindowId, IdMap};
use crate::protocol::{ClientRequest, JsonPacketStream}; use crate::protocol::{ClientRequest, DevtoolsConnection, JsonPacketStream};
use crate::resource::ResourceAvailable; use crate::resource::ResourceAvailable;
use crate::{EmptyReplyMsg, StreamId}; use crate::{EmptyReplyMsg, StreamId};
@@ -90,7 +87,7 @@ enum TargetType {
#[derive(Serialize)] #[derive(Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct BrowsingContextActorMsg { pub(crate) struct BrowsingContextActorMsg {
actor: String, actor: String,
title: String, title: String,
url: String, url: String,
@@ -131,26 +128,33 @@ pub struct BrowsingContextActorMsg {
/// The browsing context actor encompasses all of the other supporting actors when debugging a web /// The browsing context actor encompasses all of the other supporting actors when debugging a web
/// view. To this extent, it contains a watcher actor that helps when communicating with the host, /// view. To this extent, it contains a watcher actor that helps when communicating with the host,
/// as well as resource actors that each perform one debugging function. /// as well as resource actors that each perform one debugging function.
#[derive(MallocSizeOf)]
pub(crate) struct BrowsingContextActor { pub(crate) struct BrowsingContextActor {
pub name: String, name: String,
pub title: RefCell<String>, pub title: AtomicRefCell<String>,
pub url: RefCell<String>, pub url: AtomicRefCell<String>,
/// This corresponds to webview_id /// This corresponds to webview_id
pub browser_id: DevtoolsBrowserId, pub browser_id: DevtoolsBrowserId,
pub active_pipeline_id: Cell<PipelineId>, // TODO: Should these ids be atomic?
pub active_outer_window_id: Cell<DevtoolsOuterWindowId>, active_pipeline_id: AtomicRefCell<PipelineId>,
active_outer_window_id: AtomicRefCell<DevtoolsOuterWindowId>,
pub browsing_context_id: DevtoolsBrowsingContextId, pub browsing_context_id: DevtoolsBrowsingContextId,
pub accessibility: String, accessibility_name: String,
pub console: String, pub console_name: String,
pub css_properties: String, css_properties_name: String,
pub inspector: String, pub(crate) inspector_name: String,
pub reflow: String, reflow_name: String,
pub style_sheets: String, style_sheets_name: String,
pub thread: String, pub thread_name: String,
pub _tab: String, _tab: String,
pub script_chan: GenericSender<DevtoolScriptControlMsg>, // Different pipelines may run on different script threads.
pub streams: RefCell<HashMap<StreamId, TcpStream>>, // These should be kept around even when the active pipeline is updated,
pub watcher: String, // in case the browsing context revisits a pipeline via history navigation.
// TODO: Each entry is stored forever; ideally there should be a way to
// detect when `ScriptThread`s are destroyed and remove the associated
// entries.
script_chans: AtomicRefCell<FxHashMap<PipelineId, GenericSender<DevtoolScriptControlMsg>>>,
pub watcher_name: String,
} }
impl ResourceAvailable for BrowsingContextActor { impl ResourceAvailable for BrowsingContextActor {
@@ -189,37 +193,29 @@ impl Actor for BrowsingContextActor {
}; };
Ok(()) Ok(())
} }
fn cleanup(&self, id: StreamId) {
self.streams.borrow_mut().remove(&id);
if self.streams.borrow().is_empty() {
self.script_chan
.send(WantsLiveNotifications(self.active_pipeline_id.get(), false))
.unwrap();
}
}
} }
impl BrowsingContextActor { impl BrowsingContextActor {
#[expect(clippy::too_many_arguments)] #[expect(clippy::too_many_arguments)]
pub(crate) fn new( pub(crate) fn register(
console: String, registry: &ActorRegistry,
console_name: String,
browser_id: DevtoolsBrowserId, browser_id: DevtoolsBrowserId,
browsing_context_id: DevtoolsBrowsingContextId, browsing_context_id: DevtoolsBrowsingContextId,
page_info: DevtoolsPageInfo, page_info: DevtoolsPageInfo,
pipeline_id: PipelineId, pipeline_id: PipelineId,
outer_window_id: DevtoolsOuterWindowId, outer_window_id: DevtoolsOuterWindowId,
script_sender: GenericSender<DevtoolScriptControlMsg>, script_sender: GenericSender<DevtoolScriptControlMsg>,
actors: &mut ActorRegistry, ) -> String {
) -> BrowsingContextActor { let name = registry.new_name::<BrowsingContextActor>();
let name = actors.new_name::<BrowsingContextActor>();
let DevtoolsPageInfo { let DevtoolsPageInfo {
title, title,
url, url,
is_top_level_global, is_top_level_global,
..
} = page_info; } = page_info;
let accessibility = AccessibilityActor::new(actors.new_name::<AccessibilityActor>()); let accessibility_name = AccessibilityActor::register(registry);
let properties = (|| { let properties = (|| {
let (properties_sender, properties_receiver) = generic_channel::channel()?; let (properties_sender, properties_receiver) = generic_channel::channel()?;
@@ -227,58 +223,70 @@ impl BrowsingContextActor {
properties_receiver.recv().ok() properties_receiver.recv().ok()
})() })()
.unwrap_or_default(); .unwrap_or_default();
let css_properties = let css_properties_name = CssPropertiesActor::register(registry, properties);
CssPropertiesActor::new(actors.new_name::<CssPropertiesActor>(), properties);
let inspector = InspectorActor::register(actors, pipeline_id, script_sender.clone()); let inspector_name = InspectorActor::register(registry, name.clone());
let reflow = ReflowActor::new(actors.new_name::<ReflowActor>()); let reflow_name = ReflowActor::register(registry);
let style_sheets = StyleSheetsActor::new(actors.new_name::<StyleSheetsActor>()); let style_sheets_name = StyleSheetsActor::register(registry);
let tabdesc = TabDescriptorActor::new(actors, name.clone(), is_top_level_global); let tab_descriptor_name =
TabDescriptorActor::register(registry, name.clone(), is_top_level_global);
let thread = ThreadActor::new(actors.new_name::<ThreadActor>()); let thread_name =
ThreadActor::register(registry, script_sender.clone(), Some(name.clone()));
let watcher = WatcherActor::new( let watcher_name = WatcherActor::register(
actors, registry,
name.clone(), name.clone(),
SessionContext::new(SessionContextType::BrowserElement), SessionContext::new(SessionContextType::BrowserElement),
); );
let target = BrowsingContextActor { let mut script_chans = FxHashMap::default();
name, script_chans.insert(pipeline_id, script_sender);
script_chan: script_sender,
title: RefCell::new(title), let actor = BrowsingContextActor {
url: RefCell::new(url.into_string()), name: name.clone(),
active_pipeline_id: Cell::new(pipeline_id), script_chans: AtomicRefCell::new(script_chans),
active_outer_window_id: Cell::new(outer_window_id), title: AtomicRefCell::new(title),
url: AtomicRefCell::new(url.into_string()),
active_pipeline_id: AtomicRefCell::new(pipeline_id),
active_outer_window_id: AtomicRefCell::new(outer_window_id),
browser_id, browser_id,
browsing_context_id, browsing_context_id,
accessibility: accessibility.name(), accessibility_name,
console, console_name,
css_properties: css_properties.name(), css_properties_name,
inspector, inspector_name,
reflow: reflow.name(), reflow_name,
streams: RefCell::new(HashMap::new()), style_sheets_name,
style_sheets: style_sheets.name(), _tab: tab_descriptor_name,
_tab: tabdesc.name(), thread_name,
thread: thread.name(), watcher_name,
watcher: watcher.name(),
}; };
actors.register(accessibility); registry.register::<Self>(actor);
actors.register(css_properties);
actors.register(reflow);
actors.register(style_sheets);
actors.register(tabdesc);
actors.register(thread);
actors.register(watcher);
target name
} }
pub(crate) fn navigate(&self, state: NavigationState, id_map: &mut IdMap) { pub(crate) fn handle_new_global(
&self,
pipeline: PipelineId,
script_sender: GenericSender<DevtoolScriptControlMsg>,
) {
self.script_chans
.borrow_mut()
.insert(pipeline, script_sender);
}
pub(crate) fn handle_navigate<'a>(
&self,
state: NavigationState,
id_map: &mut IdMap,
connections: impl Iterator<Item = &'a mut DevtoolsConnection>,
) {
let (pipeline_id, title, url, state) = match state { let (pipeline_id, title, url, state) = match state {
NavigationState::Start(url) => (None, None, url, "start"), NavigationState::Start(url) => (None, None, url, "start"),
NavigationState::Stop(pipeline, info) => { NavigationState::Stop(pipeline, info) => {
@@ -287,8 +295,8 @@ impl BrowsingContextActor {
}; };
if let Some(pipeline_id) = pipeline_id { if let Some(pipeline_id) = pipeline_id {
let outer_window_id = id_map.outer_window_id(pipeline_id); let outer_window_id = id_map.outer_window_id(pipeline_id);
self.active_outer_window_id.set(outer_window_id); *self.active_outer_window_id.borrow_mut() = outer_window_id;
self.active_pipeline_id.set(pipeline_id); *self.active_pipeline_id.borrow_mut() = pipeline_id;
} }
url.as_str().clone_into(&mut self.url.borrow_mut()); url.as_str().clone_into(&mut self.url.borrow_mut());
if let Some(ref t) = title { if let Some(ref t) = title {
@@ -305,13 +313,13 @@ impl BrowsingContextActor {
is_frame_switching: false, is_frame_switching: false,
}; };
for stream in self.streams.borrow_mut().values_mut() { for stream in connections {
let _ = stream.write_json_packet(&msg); let _ = stream.write_json_packet(&msg);
} }
} }
pub(crate) fn title_changed(&self, pipeline_id: PipelineId, title: String) { pub(crate) fn title_changed(&self, pipeline_id: PipelineId, title: String) {
if pipeline_id != self.active_pipeline_id.get() { if pipeline_id != self.pipeline_id() {
return; return;
} }
*self.title.borrow_mut() = title; *self.title.borrow_mut() = title;
@@ -331,10 +339,40 @@ impl BrowsingContextActor {
} }
pub fn simulate_color_scheme(&self, theme: Theme) -> Result<(), ()> { pub fn simulate_color_scheme(&self, theme: Theme) -> Result<(), ()> {
self.script_chan self.script_chan()
.send(SimulateColorScheme(self.active_pipeline_id.get(), theme)) .send(SimulateColorScheme(self.pipeline_id(), theme))
.map_err(|_| ()) .map_err(|_| ())
} }
pub(crate) fn pipeline_id(&self) -> PipelineId {
*self.active_pipeline_id.borrow()
}
pub(crate) fn outer_window_id(&self) -> DevtoolsOuterWindowId {
*self.active_outer_window_id.borrow()
}
/// Returns the script sender for the active pipeline.
pub(crate) fn script_chan(&self) -> GenericSender<DevtoolScriptControlMsg> {
self.script_chans
.borrow()
.get(&self.pipeline_id())
.unwrap()
.clone()
}
pub(crate) fn instruct_script_to_send_live_updates(&self, should_send_updates: bool) {
let result = self
.script_chan()
.send(DevtoolScriptControlMsg::WantsLiveNotifications(
self.pipeline_id(),
should_send_updates,
));
// Notifying the script thread may fail with a "Disconnected" error if servo
// as a whole is being shut down.
debug_assert!(matches!(result, Ok(_) | Err(SendError::Disconnected)));
}
} }
impl ActorEncode<BrowsingContextActorMsg> for BrowsingContextActor { impl ActorEncode<BrowsingContextActorMsg> for BrowsingContextActor {
@@ -353,15 +391,15 @@ impl ActorEncode<BrowsingContextActorMsg> for BrowsingContextActor {
url: self.url.borrow().clone(), url: self.url.borrow().clone(),
browser_id: self.browser_id.value(), browser_id: self.browser_id.value(),
browsing_context_id: self.browsing_context_id.value(), browsing_context_id: self.browsing_context_id.value(),
outer_window_id: self.active_outer_window_id.get().value(), outer_window_id: self.outer_window_id().value(),
is_top_level_target: true, is_top_level_target: true,
accessibility_actor: self.accessibility.clone(), accessibility_actor: self.accessibility_name.clone(),
console_actor: self.console.clone(), console_actor: self.console_name.clone(),
css_properties_actor: self.css_properties.clone(), css_properties_actor: self.css_properties_name.clone(),
inspector_actor: self.inspector.clone(), inspector_actor: self.inspector_name.clone(),
reflow_actor: self.reflow.clone(), reflow_actor: self.reflow_name.clone(),
style_sheets_actor: self.style_sheets.clone(), style_sheets_actor: self.style_sheets_name.clone(),
thread_actor: self.thread.clone(), thread_actor: self.thread_name.clone(),
target_type: TargetType::Frame, target_type: TargetType::Frame,
} }
} }

View File

@@ -6,69 +6,122 @@
//! Mediates interaction between the remote web console and equivalent functionality (object //! Mediates interaction between the remote web console and equivalent functionality (object
//! inspection, JS evaluation, autocompletion) in Servo. //! inspection, JS evaluation, autocompletion) in Servo.
use std::cell::RefCell;
use std::collections::HashMap; use std::collections::HashMap;
use std::net::TcpStream; use std::sync::atomic::{AtomicBool, Ordering};
use std::time::{SystemTime, UNIX_EPOCH};
use base::generic_channel::{self, GenericSender}; use atomic_refcell::AtomicRefCell;
use base::id::TEST_PIPELINE_ID;
use devtools_traits::EvaluateJSReply::{
ActorValue, BooleanValue, NullValue, NumberValue, StringValue, VoidValue,
};
use devtools_traits::{ use devtools_traits::{
CachedConsoleMessage, CachedConsoleMessageTypes, ConsoleClearMessage, ConsoleLog, ConsoleMessage, ConsoleMessageFields, DevtoolScriptControlMsg, PageError, StackFrame,
ConsoleMessage, DevtoolScriptControlMsg, PageError, get_time_stamp,
}; };
use log::debug; use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize; use serde::Serialize;
use serde_json::{self, Map, Number, Value}; use serde_json::{self, Map, Value};
use servo_base::generic_channel::{self, GenericSender};
use servo_base::id::TEST_PIPELINE_ID;
use uuid::Uuid; use uuid::Uuid;
use crate::actor::{Actor, ActorError, ActorRegistry}; use crate::actor::{Actor, ActorError, ActorRegistry};
use crate::actors::browsing_context::BrowsingContextActor; use crate::actors::browsing_context::BrowsingContextActor;
use crate::actors::object::ObjectActor; use crate::actors::object::debugger_value_to_json;
use crate::actors::worker::WorkerActor; use crate::actors::worker::WorkerTargetActor;
use crate::protocol::{ClientRequest, JsonPacketStream}; use crate::protocol::{ClientRequest, DevtoolsConnection, JsonPacketStream};
use crate::resource::{ResourceArrayType, ResourceAvailable}; use crate::resource::{ResourceArrayType, ResourceAvailable};
use crate::{EmptyReplyMsg, StreamId, UniqueId}; use crate::{EmptyReplyMsg, StreamId, UniqueId};
trait EncodableConsoleMessage { #[derive(Clone, Serialize, MallocSizeOf)]
fn encode(&self) -> serde_json::Result<String>; #[serde(rename_all = "camelCase")]
pub(crate) struct DevtoolsConsoleMessage {
#[serde(flatten)]
fields: ConsoleMessageFields,
#[ignore_malloc_size_of = "Currently no way to have serde_json::Value"]
arguments: Vec<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
stacktrace: Option<Vec<StackFrame>>,
// Not implemented in Servo
// inner_window_id
// source_id
} }
impl EncodableConsoleMessage for CachedConsoleMessage { impl DevtoolsConsoleMessage {
fn encode(&self) -> serde_json::Result<String> { pub(crate) fn new(message: ConsoleMessage, registry: &ActorRegistry) -> Self {
match *self { Self {
CachedConsoleMessage::PageError(ref a) => serde_json::to_string(a), fields: message.fields,
CachedConsoleMessage::ConsoleLog(ref a) => serde_json::to_string(a), arguments: message
.arguments
.into_iter()
.map(|argument| debugger_value_to_json(registry, argument))
.collect(),
stacktrace: message.stacktrace,
}
}
}
#[derive(Clone, Serialize, MallocSizeOf)]
#[serde(rename_all = "camelCase")]
struct DevtoolsPageError {
#[serde(flatten)]
page_error: PageError,
category: String,
error: bool,
warning: bool,
info: bool,
private: bool,
#[serde(skip_serializing_if = "Option::is_none")]
stacktrace: Option<Vec<StackFrame>>,
// Not implemented in Servo
// inner_window_id
// source_id
// has_exception
// exception
}
impl From<PageError> for DevtoolsPageError {
fn from(page_error: PageError) -> Self {
Self {
page_error,
category: "script".to_string(),
error: true,
warning: false,
info: false,
private: false,
stacktrace: None,
}
}
}
#[derive(Clone, Serialize, MallocSizeOf)]
#[serde(rename_all = "camelCase")]
pub(crate) struct PageErrorWrapper {
page_error: DevtoolsPageError,
}
impl From<PageError> for PageErrorWrapper {
fn from(page_error: PageError) -> Self {
Self {
page_error: page_error.into(),
}
}
}
#[derive(Clone, Serialize, MallocSizeOf)]
#[serde(untagged)]
pub(crate) enum ConsoleResource {
ConsoleMessage(DevtoolsConsoleMessage),
PageError(PageErrorWrapper),
}
impl ConsoleResource {
pub fn resource_type(&self) -> String {
match self {
ConsoleResource::ConsoleMessage(_) => "console-message".into(),
ConsoleResource::PageError(_) => "error-message".into(),
} }
} }
} }
#[derive(Serialize)] #[derive(Serialize)]
struct StartedListenersTraits; pub struct ConsoleClearMessage {
pub level: String,
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct StartedListenersReply {
from: String,
native_console_api: bool,
started_listeners: Vec<String>,
traits: StartedListenersTraits,
}
#[derive(Serialize)]
struct GetCachedMessagesReply {
from: String,
messages: Vec<Map<String, Value>>,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct StopListenersReply {
from: String,
stopped_listeners: Vec<String>,
} }
#[derive(Serialize)] #[derive(Serialize)]
@@ -88,6 +141,7 @@ struct EvaluateJSReply {
timestamp: u64, timestamp: u64,
exception: Value, exception: Value,
exception_message: Value, exception_message: Value,
has_exception: bool,
helper_result: Value, helper_result: Value,
} }
@@ -104,6 +158,7 @@ struct EvaluateJSEvent {
result_id: String, result_id: String,
exception: Value, exception: Value,
exception_message: Value, exception_message: Value,
has_exception: bool,
helper_result: Value, helper_result: Value,
} }
@@ -120,43 +175,59 @@ struct SetPreferencesReply {
updated: Vec<String>, updated: Vec<String>,
} }
#[derive(Serialize)] #[derive(MallocSizeOf)]
#[serde(rename_all = "camelCase")]
struct PageErrorWrapper {
page_error: PageError,
}
pub(crate) enum Root { pub(crate) enum Root {
BrowsingContext(String), BrowsingContext(String),
DedicatedWorker(String), DedicatedWorker(String),
} }
#[derive(MallocSizeOf)]
pub(crate) struct ConsoleActor { pub(crate) struct ConsoleActor {
pub name: String, name: String,
pub root: Root, root: Root,
pub cached_events: RefCell<HashMap<UniqueId, Vec<CachedConsoleMessage>>>, cached_events: AtomicRefCell<HashMap<UniqueId, Vec<ConsoleResource>>>,
/// Used to control whether to send resource array messages from
/// `handle_console_resource`. It starts being false, and it only gets
/// activated after the client requests `console-message` or `error-message`
/// resources for the first time. Otherwise we would be sending messages
/// before the client is ready to receive them.
client_ready_to_receive_messages: AtomicBool,
} }
impl ConsoleActor { impl ConsoleActor {
fn script_chan<'a>( pub fn register(registry: &ActorRegistry, name: String, root: Root) -> String {
&self, let actor = Self {
registry: &'a ActorRegistry, name: name.clone(),
) -> &'a GenericSender<DevtoolScriptControlMsg> { root,
cached_events: Default::default(),
client_ready_to_receive_messages: false.into(),
};
registry.register(actor);
name
}
fn script_chan(&self, registry: &ActorRegistry) -> GenericSender<DevtoolScriptControlMsg> {
match &self.root { match &self.root {
Root::BrowsingContext(bc) => &registry.find::<BrowsingContextActor>(bc).script_chan, Root::BrowsingContext(browsing_context_name) => registry
Root::DedicatedWorker(worker) => &registry.find::<WorkerActor>(worker).script_chan, .find::<BrowsingContextActor>(browsing_context_name)
.script_chan(),
Root::DedicatedWorker(worker_name) => registry
.find::<WorkerTargetActor>(worker_name)
.script_sender
.clone(),
} }
} }
fn current_unique_id(&self, registry: &ActorRegistry) -> UniqueId { fn current_unique_id(&self, registry: &ActorRegistry) -> UniqueId {
match &self.root { match &self.root {
Root::BrowsingContext(bc) => UniqueId::Pipeline( Root::BrowsingContext(browsing_context_name) => UniqueId::Pipeline(
registry registry
.find::<BrowsingContextActor>(bc) .find::<BrowsingContextActor>(browsing_context_name)
.active_pipeline_id .pipeline_id(),
.get(),
), ),
Root::DedicatedWorker(w) => UniqueId::Worker(registry.find::<WorkerActor>(w).worker_id), Root::DedicatedWorker(worker_name) => {
UniqueId::Worker(registry.find::<WorkerTargetActor>(worker_name).worker_id)
},
} }
} }
@@ -166,132 +237,70 @@ impl ConsoleActor {
msg: &Map<String, Value>, msg: &Map<String, Value>,
) -> Result<EvaluateJSReply, ()> { ) -> Result<EvaluateJSReply, ()> {
let input = msg.get("text").unwrap().as_str().unwrap().to_owned(); let input = msg.get("text").unwrap().as_str().unwrap().to_owned();
let frame_actor_id = msg
.get("frameActor")
.and_then(|v| v.as_str())
.map(String::from);
let (chan, port) = generic_channel::channel().unwrap(); let (chan, port) = generic_channel::channel().unwrap();
// FIXME: Redesign messages so we don't have to fake pipeline ids when // FIXME: Redesign messages so we don't have to fake pipeline ids when communicating with workers.
// communicating with workers.
let pipeline = match self.current_unique_id(registry) { let pipeline = match self.current_unique_id(registry) {
UniqueId::Pipeline(p) => p, UniqueId::Pipeline(p) => p,
UniqueId::Worker(_) => TEST_PIPELINE_ID, UniqueId::Worker(_) => TEST_PIPELINE_ID,
}; };
self.script_chan(registry) self.script_chan(registry)
.send(DevtoolScriptControlMsg::EvaluateJS( .send(DevtoolScriptControlMsg::Eval(
pipeline,
input.clone(), input.clone(),
pipeline,
frame_actor_id,
chan, chan,
)) ))
.unwrap(); .unwrap();
// TODO: Extract conversion into protocol module or some other useful place let eval_result = port.recv().map_err(|_| ())?;
let result = match port.recv().map_err(|_| ())? { let has_exception = eval_result.has_exception;
VoidValue => {
let mut m = Map::new();
m.insert("type".to_owned(), Value::String("undefined".to_owned()));
Value::Object(m)
},
NullValue => {
let mut m = Map::new();
m.insert("type".to_owned(), Value::String("null".to_owned()));
Value::Object(m)
},
BooleanValue(val) => Value::Bool(val),
NumberValue(val) => {
if val.is_nan() {
let mut m = Map::new();
m.insert("type".to_owned(), Value::String("NaN".to_owned()));
Value::Object(m)
} else if val.is_infinite() {
let mut m = Map::new();
if val < 0. {
m.insert("type".to_owned(), Value::String("-Infinity".to_owned()));
} else {
m.insert("type".to_owned(), Value::String("Infinity".to_owned()));
}
Value::Object(m)
} else if val == 0. && val.is_sign_negative() {
let mut m = Map::new();
m.insert("type".to_owned(), Value::String("-0".to_owned()));
Value::Object(m)
} else {
Value::Number(Number::from_f64(val).unwrap())
}
},
StringValue(s) => Value::String(s),
ActorValue { class, uuid } => {
// TODO: Make initial ActorValue message include these properties?
let mut m = Map::new();
let actor = ObjectActor::register(registry, uuid);
m.insert("type".to_owned(), Value::String("object".to_owned()));
m.insert("class".to_owned(), Value::String(class));
m.insert("actor".to_owned(), Value::String(actor));
m.insert("extensible".to_owned(), Value::Bool(true));
m.insert("frozen".to_owned(), Value::Bool(false));
m.insert("sealed".to_owned(), Value::Bool(false));
Value::Object(m)
},
};
// TODO: Catch and return exception values from JS evaluation
let reply = EvaluateJSReply { let reply = EvaluateJSReply {
from: self.name(), from: self.name(),
input, input,
result, result: debugger_value_to_json(registry, eval_result.value),
timestamp: SystemTime::now() timestamp: get_time_stamp(),
.duration_since(UNIX_EPOCH)
.unwrap_or_default()
.as_millis() as u64,
exception: Value::Null, exception: Value::Null,
exception_message: Value::Null, exception_message: Value::Null,
has_exception,
helper_result: Value::Null, helper_result: Value::Null,
}; };
std::result::Result::Ok(reply) Ok(reply)
} }
pub(crate) fn handle_page_error( pub(crate) fn handle_console_resource(
&self, &self,
page_error: PageError, resource: ConsoleResource,
id: UniqueId, id: UniqueId,
registry: &ActorRegistry, registry: &ActorRegistry,
stream: &mut TcpStream, stream: &mut DevtoolsConnection,
) { ) {
self.cached_events self.cached_events
.borrow_mut() .borrow_mut()
.entry(id.clone()) .entry(id.clone())
.or_default() .or_default()
.push(CachedConsoleMessage::PageError(page_error.clone())); .push(resource.clone());
if id == self.current_unique_id(registry) { if !self
if let Root::BrowsingContext(bc) = &self.root { .client_ready_to_receive_messages
registry.find::<BrowsingContextActor>(bc).resource_array( .load(Ordering::Relaxed)
PageErrorWrapper { page_error }, {
"error-message".into(), return;
ResourceArrayType::Available,
stream,
)
};
} }
} let resource_type = resource.resource_type();
pub(crate) fn handle_console_api(
&self,
console_message: ConsoleMessage,
id: UniqueId,
registry: &ActorRegistry,
stream: &mut TcpStream,
) {
let log_message: ConsoleLog = console_message.into();
self.cached_events
.borrow_mut()
.entry(id.clone())
.or_default()
.push(CachedConsoleMessage::ConsoleLog(log_message.clone()));
if id == self.current_unique_id(registry) { if id == self.current_unique_id(registry) {
if let Root::BrowsingContext(bc) = &self.root { if let Root::BrowsingContext(browsing_context_name) = &self.root {
registry.find::<BrowsingContextActor>(bc).resource_array( registry
log_message, .find::<BrowsingContextActor>(browsing_context_name)
"console-message".into(), .resource_array(
ResourceArrayType::Available, resource,
stream, resource_type,
) ResourceArrayType::Available,
stream,
)
}; };
} }
} }
@@ -300,21 +309,45 @@ impl ConsoleActor {
&self, &self,
id: UniqueId, id: UniqueId,
registry: &ActorRegistry, registry: &ActorRegistry,
stream: &mut TcpStream, stream: &mut DevtoolsConnection,
) { ) {
if id == self.current_unique_id(registry) { if id == self.current_unique_id(registry) {
if let Root::BrowsingContext(bc) = &self.root { if let Root::BrowsingContext(browsing_context_name) = &self.root {
registry.find::<BrowsingContextActor>(bc).resource_array( registry
ConsoleClearMessage { .find::<BrowsingContextActor>(browsing_context_name)
level: "clear".to_owned(), .resource_array(
}, ConsoleClearMessage {
"console-message".into(), level: "clear".to_owned(),
ResourceArrayType::Available, },
stream, "console-message".into(),
) ResourceArrayType::Available,
stream,
)
}; };
} }
} }
pub(crate) fn get_cached_messages(
&self,
registry: &ActorRegistry,
resource: &str,
) -> Vec<ConsoleResource> {
let id = self.current_unique_id(registry);
let cached_events = self.cached_events.borrow();
let Some(events) = cached_events.get(&id) else {
return vec![];
};
events
.iter()
.filter(|event| event.resource_type() == resource)
.cloned()
.collect()
}
pub(crate) fn received_first_message_from_client(&self) {
self.client_ready_to_receive_messages
.store(true, Ordering::Relaxed);
}
} }
impl Actor for ConsoleActor { impl Actor for ConsoleActor {
@@ -331,95 +364,11 @@ impl Actor for ConsoleActor {
_id: StreamId, _id: StreamId,
) -> Result<(), ActorError> { ) -> Result<(), ActorError> {
match msg_type { match msg_type {
"clearMessagesCache" => { "clearMessagesCacheAsync" => {
self.cached_events self.cached_events
.borrow_mut() .borrow_mut()
.remove(&self.current_unique_id(registry)); .remove(&self.current_unique_id(registry));
// FIXME: need to send a reply here! let msg = EmptyReplyMsg { from: self.name() };
return Err(ActorError::UnrecognizedPacketType);
},
"getCachedMessages" => {
let str_types = msg
.get("messageTypes")
.unwrap()
.as_array()
.unwrap()
.iter()
.map(|json_type| json_type.as_str().unwrap());
let mut message_types = CachedConsoleMessageTypes::empty();
for str_type in str_types {
match str_type {
"PageError" => message_types.insert(CachedConsoleMessageTypes::PAGE_ERROR),
"ConsoleAPI" => {
message_types.insert(CachedConsoleMessageTypes::CONSOLE_API)
},
s => debug!("unrecognized message type requested: \"{}\"", s),
};
}
let mut messages = vec![];
for event in self
.cached_events
.borrow()
.get(&self.current_unique_id(registry))
.unwrap_or(&vec![])
.iter()
{
let include = match event {
CachedConsoleMessage::PageError(_)
if message_types.contains(CachedConsoleMessageTypes::PAGE_ERROR) =>
{
true
},
CachedConsoleMessage::ConsoleLog(_)
if message_types.contains(CachedConsoleMessageTypes::CONSOLE_API) =>
{
true
},
_ => false,
};
if include {
let json_string = event.encode().unwrap();
let json = serde_json::from_str::<Value>(&json_string).unwrap();
messages.push(json.as_object().unwrap().to_owned())
}
}
let msg = GetCachedMessagesReply {
from: self.name(),
messages,
};
request.reply_final(&msg)?
},
"startListeners" => {
// TODO: actually implement listener filters that support starting/stopping
let listeners = msg.get("listeners").unwrap().as_array().unwrap().to_owned();
let msg = StartedListenersReply {
from: self.name(),
native_console_api: true,
started_listeners: listeners
.into_iter()
.map(|s| s.as_str().unwrap().to_owned())
.collect(),
traits: StartedListenersTraits,
};
request.reply_final(&msg)?
},
"stopListeners" => {
// TODO: actually implement listener filters that support starting/stopping
let msg = StopListenersReply {
from: self.name(),
stopped_listeners: msg
.get("listeners")
.unwrap()
.as_array()
.unwrap_or(&vec![])
.iter()
.map(|listener| listener.as_str().unwrap().to_owned())
.collect(),
};
request.reply_final(&msg)? request.reply_final(&msg)?
}, },
@@ -447,7 +396,7 @@ impl Actor for ConsoleActor {
}; };
// Emit an eager reply so that the client starts listening // Emit an eager reply so that the client starts listening
// for an async event with the resultID // for an async event with the resultID
let stream = request.reply(&early_reply)?; let mut stream = request.reply(&early_reply)?;
if msg.get("eager").and_then(|v| v.as_bool()).unwrap_or(false) { if msg.get("eager").and_then(|v| v.as_bool()).unwrap_or(false) {
// We don't support the side-effect free evaluation that eager evaluation // We don't support the side-effect free evaluation that eager evaluation
@@ -465,6 +414,7 @@ impl Actor for ConsoleActor {
result_id, result_id,
exception: reply.exception, exception: reply.exception,
exception_message: reply.exception_message, exception_message: reply.exception_message,
has_exception: reply.has_exception,
helper_result: reply.helper_result, helper_result: reply.helper_result,
}; };
// Send the data from evaluateJS along with a resultID // Send the data from evaluateJS along with a resultID
@@ -479,14 +429,9 @@ impl Actor for ConsoleActor {
request.reply_final(&msg)? request.reply_final(&msg)?
}, },
"clearMessagesCacheAsync" => { // NOTE: Do not handle `startListeners`, it is a legacy API.
self.cached_events // Instead, enable the resource in `WatcherActor::supported_resources`
.borrow_mut() // and handle the messages there.
.remove(&self.current_unique_id(registry));
let msg = EmptyReplyMsg { from: self.name() };
request.reply_final(&msg)?
},
_ => return Err(ActorError::UnrecognizedPacketType), _ => return Err(ActorError::UnrecognizedPacketType),
}; };
Ok(()) Ok(())

View File

@@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value}; use serde_json::{Map, Value};
@@ -34,8 +35,9 @@ struct SystemInfo {
include!(concat!(env!("OUT_DIR"), "/build_id.rs")); include!(concat!(env!("OUT_DIR"), "/build_id.rs"));
pub struct DeviceActor { #[derive(MallocSizeOf)]
pub name: String, pub(crate) struct DeviceActor {
name: String,
} }
impl Actor for DeviceActor { impl Actor for DeviceActor {
@@ -58,7 +60,7 @@ impl Actor for DeviceActor {
apptype: "servo".to_string(), apptype: "servo".to_string(),
version: env!("CARGO_PKG_VERSION").to_string(), version: env!("CARGO_PKG_VERSION").to_string(),
appbuildid: BUILD_ID.to_string(), appbuildid: BUILD_ID.to_string(),
platformversion: "145.0".to_string(), platformversion: "146.0".to_string(),
brand_name: "Servo".to_string(), brand_name: "Servo".to_string(),
}, },
}; };
@@ -72,8 +74,11 @@ impl Actor for DeviceActor {
} }
impl DeviceActor { impl DeviceActor {
pub fn new(name: String) -> DeviceActor { pub fn register(registry: &ActorRegistry) -> String {
DeviceActor { name } let name = registry.new_name::<Self>();
let actor = DeviceActor { name: name.clone() };
registry.register::<Self>(actor);
name
} }
pub fn description() -> ActorDescription { pub fn description() -> ActorDescription {

View File

@@ -2,31 +2,20 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::collections::HashMap;
use devtools_traits::EnvironmentInfo;
use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value}; use serde_json::Value;
use crate::actor::{Actor, ActorEncode, ActorRegistry}; use crate::actor::{Actor, ActorEncode, ActorRegistry};
use crate::actors::object::ObjectActorMsg; use crate::actors::object::{ObjectActorMsg, ObjectPropertyDescriptor};
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub enum EnvironmentType {
Function,
_Block,
_Object,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
pub enum EnvironmentScope {
Function,
_Global,
}
#[derive(Serialize)] #[derive(Serialize)]
struct EnvironmentBindings { struct EnvironmentBindings {
arguments: Vec<Value>, arguments: Vec<Value>,
variables: Map<String, Value>, variables: HashMap<String, ObjectPropertyDescriptor>,
} }
#[derive(Serialize)] #[derive(Serialize)]
@@ -37,11 +26,11 @@ struct EnvironmentFunction {
#[derive(Serialize)] #[derive(Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct EnvironmentActorMsg { pub(crate) struct EnvironmentActorMsg {
actor: String, actor: String,
#[serde(rename = "type")] #[serde(rename = "type")]
type_: EnvironmentType, type_: Option<String>,
scope_kind: EnvironmentScope, scope_kind: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
parent: Option<Box<EnvironmentActorMsg>>, parent: Option<Box<EnvironmentActorMsg>>,
#[serde(skip_serializing_if = "Option::is_none")] #[serde(skip_serializing_if = "Option::is_none")]
@@ -57,9 +46,11 @@ pub struct EnvironmentActorMsg {
/// Resposible for listing the bindings in an environment and assigning new values to them. /// Resposible for listing the bindings in an environment and assigning new values to them.
/// Referenced by `FrameActor` when replying to `getEnvironment` messages. /// Referenced by `FrameActor` when replying to `getEnvironment` messages.
/// <https://searchfox.org/firefox-main/source/devtools/server/actors/environment.js> /// <https://searchfox.org/firefox-main/source/devtools/server/actors/environment.js>
pub struct EnvironmentActor { #[derive(MallocSizeOf)]
pub name: String, pub(crate) struct EnvironmentActor {
pub parent: Option<String>, name: String,
environment: EnvironmentInfo,
parent_name: Option<String>,
} }
impl Actor for EnvironmentActor { impl Actor for EnvironmentActor {
@@ -68,22 +59,60 @@ impl Actor for EnvironmentActor {
} }
} }
impl EnvironmentActor {
pub fn register(
registry: &ActorRegistry,
environment: EnvironmentInfo,
parent_name: Option<String>,
) -> String {
let environment_name = registry.new_name::<Self>();
let environment_actor = Self {
name: environment_name.clone(),
parent_name,
environment,
};
registry.register(environment_actor);
environment_name
}
}
impl ActorEncode<EnvironmentActorMsg> for EnvironmentActor { impl ActorEncode<EnvironmentActorMsg> for EnvironmentActor {
fn encode(&self, registry: &ActorRegistry) -> EnvironmentActorMsg { fn encode(&self, registry: &ActorRegistry) -> EnvironmentActorMsg {
let parent = self let parent = self
.parent .parent_name
.as_ref() .as_ref()
.map(|p| registry.find::<EnvironmentActor>(p)) .map(|p| registry.find::<EnvironmentActor>(p))
.map(|p| Box::new(p.encode(registry))); .map(|p| Box::new(p.encode(registry)));
// TODO: Change hardcoded values. // TODO: Change hardcoded values.
EnvironmentActorMsg { EnvironmentActorMsg {
actor: self.name(), actor: self.name(),
type_: EnvironmentType::Function, type_: self.environment.type_.clone(),
scope_kind: EnvironmentScope::Function, scope_kind: self.environment.scope_kind.clone(),
parent, parent,
bindings: None, function: self
function: None, .environment
.function_display_name
.clone()
.map(|display_name| EnvironmentFunction { display_name }),
object: None, object: None,
bindings: Some(EnvironmentBindings {
arguments: [].to_vec(),
variables: self
.environment
.binding_variables
.clone()
.into_iter()
.map(|ref property_descriptor| {
(
property_descriptor.name.clone(),
ObjectPropertyDescriptor::from_property_descriptor(
registry,
property_descriptor,
),
)
})
.collect(),
}),
} }
} }
} }

View File

@@ -2,16 +2,19 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// TODO: Remove once the actor is used use atomic_refcell::AtomicRefCell;
#![expect(dead_code)] use devtools_traits::{DevtoolScriptControlMsg, FrameInfo};
use malloc_size_of_derive::MallocSizeOf;
use serde::Serialize; use serde::Serialize;
use serde_json::{Map, Value}; use serde_json::{Map, Value};
use servo_base::generic_channel::channel;
use crate::StreamId; use crate::StreamId;
use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry}; use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry};
use crate::actors::environment::{EnvironmentActor, EnvironmentActorMsg}; use crate::actors::environment::{EnvironmentActor, EnvironmentActorMsg};
use crate::protocol::ClientRequest; use crate::actors::object::ObjectActor;
use crate::actors::source::SourceActor;
use crate::protocol::{ClientRequest, JsonPacketStream};
#[derive(Serialize)] #[derive(Serialize)]
struct FrameEnvironmentReply { struct FrameEnvironmentReply {
@@ -24,12 +27,12 @@ struct FrameEnvironmentReply {
#[serde(rename_all = "kebab-case")] #[serde(rename_all = "kebab-case")]
pub enum FrameState { pub enum FrameState {
OnStack, OnStack,
Suspended, _Suspended,
Dead, _Dead,
} }
#[derive(Serialize)] #[derive(Serialize)]
pub struct FrameWhere { pub(crate) struct FrameWhere {
actor: String, actor: String,
line: u32, line: u32,
column: u32, column: u32,
@@ -37,7 +40,7 @@ pub struct FrameWhere {
#[derive(Serialize)] #[derive(Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct FrameActorMsg { pub(crate) struct FrameActorMsg {
actor: String, actor: String,
#[serde(rename = "type")] #[serde(rename = "type")]
type_: String, type_: String,
@@ -46,15 +49,20 @@ pub struct FrameActorMsg {
display_name: String, display_name: String,
oldest: bool, oldest: bool,
state: FrameState, state: FrameState,
this: Value,
#[serde(rename = "where")] #[serde(rename = "where")]
where_: FrameWhere, where_: FrameWhere,
} }
/// Represents an stack frame. Used by `ThreadActor` when replying to interrupt messages. /// Represents an stack frame. Used by `ThreadActor` when replying to interrupt messages.
/// <https://searchfox.org/firefox-main/source/devtools/server/actors/frame.js> /// <https://searchfox.org/firefox-main/source/devtools/server/actors/frame.js>
pub struct FrameActor { #[derive(MallocSizeOf)]
pub name: String, pub(crate) struct FrameActor {
pub source_actor: String, name: String,
object_actor: String,
source_name: String,
frame_result: FrameInfo,
current_offset: AtomicRefCell<(u32, u32)>,
} }
impl Actor for FrameActor { impl Actor for FrameActor {
@@ -65,7 +73,7 @@ impl Actor for FrameActor {
// https://searchfox.org/firefox-main/source/devtools/shared/specs/frame.js // https://searchfox.org/firefox-main/source/devtools/shared/specs/frame.js
fn handle_message( fn handle_message(
&self, &self,
request: ClientRequest, mut request: ClientRequest,
registry: &ActorRegistry, registry: &ActorRegistry,
msg_type: &str, msg_type: &str,
_msg: &Map<String, Value>, _msg: &Map<String, Value>,
@@ -73,16 +81,24 @@ impl Actor for FrameActor {
) -> Result<(), ActorError> { ) -> Result<(), ActorError> {
match msg_type { match msg_type {
"getEnvironment" => { "getEnvironment" => {
let environment = EnvironmentActor { let Some((tx, rx)) = channel() else {
name: registry.new_name::<EnvironmentActor>(), return Err(ActorError::Internal);
parent: None,
}; };
let source_actor = registry.find::<SourceActor>(&self.source_name);
source_actor
.script_sender
.send(DevtoolScriptControlMsg::GetEnvironment(self.name(), tx))
.map_err(|_| ActorError::Internal)?;
let environment_name = rx.recv().map_err(|_| ActorError::Internal)?;
let msg = FrameEnvironmentReply { let msg = FrameEnvironmentReply {
from: self.name(), from: self.name(),
environment: environment.encode(registry), environment: registry.encode::<EnvironmentActor, _>(&environment_name),
}; };
registry.register_later(environment); // This reply has a `type` field but it doesn't need a followup,
request.reply_final(&msg)? // unlike most messages. We need to skip the validity check.
request.write_json_packet(&msg)?;
request.mark_handled();
}, },
_ => return Err(ActorError::UnrecognizedPacketType), _ => return Err(ActorError::UnrecognizedPacketType),
}; };
@@ -90,8 +106,33 @@ impl Actor for FrameActor {
} }
} }
impl FrameActor {
pub fn register(
registry: &ActorRegistry,
source_name: String,
frame_result: FrameInfo,
) -> String {
let object_name = ObjectActor::register(registry, None, "Object".to_owned(), None);
let name = registry.new_name::<Self>();
let actor = Self {
name: name.clone(),
object_actor: object_name,
source_name,
frame_result,
current_offset: Default::default(),
};
registry.register::<Self>(actor);
name
}
pub(crate) fn set_offset(&self, column: u32, line: u32) {
*self.current_offset.borrow_mut() = (column, line);
}
}
impl ActorEncode<FrameActorMsg> for FrameActor { impl ActorEncode<FrameActorMsg> for FrameActor {
fn encode(&self, _: &ActorRegistry) -> FrameActorMsg { fn encode(&self, registry: &ActorRegistry) -> FrameActorMsg {
// TODO: Handle other states // TODO: Handle other states
let state = FrameState::OnStack; let state = FrameState::OnStack;
let async_cause = if let FrameState::OnStack = state { let async_cause = if let FrameState::OnStack = state {
@@ -99,18 +140,22 @@ impl ActorEncode<FrameActorMsg> for FrameActor {
} else { } else {
Some("await".into()) Some("await".into())
}; };
let (column, line) = *self.current_offset.borrow();
// <https://searchfox.org/firefox-main/source/devtools/docs/user/debugger-api/debugger.frame/index.rst>
FrameActorMsg { FrameActorMsg {
actor: self.name(), actor: self.name(),
type_: "call".into(), type_: self.frame_result.type_.clone(),
arguments: vec![], arguments: vec![],
async_cause, async_cause,
display_name: "".into(), // TODO: get display name // TODO: Should be optional
oldest: true, display_name: self.frame_result.display_name.clone(),
this: registry.encode::<ObjectActor, _>(&self.object_actor),
oldest: self.frame_result.oldest,
state, state,
where_: FrameWhere { where_: FrameWhere {
actor: self.source_actor.clone(), actor: self.source_name.clone(),
line: 1, // TODO: get from breakpoint? line,
column: 1, column,
}, },
} }
} }

View File

@@ -4,19 +4,22 @@
use std::mem; use std::mem;
use base::generic_channel::GenericSender; use atomic_refcell::AtomicRefCell;
use base::id::PipelineId;
use devtools_traits::DevtoolScriptControlMsg; use devtools_traits::DevtoolScriptControlMsg;
use malloc_size_of_derive::MallocSizeOf;
use servo_base::generic_channel::GenericSender;
use servo_base::id::PipelineId;
use crate::actor::{Actor, ActorRegistry}; use crate::actor::{Actor, ActorRegistry};
use crate::actors::timeline::HighResolutionStamp; use crate::actors::timeline::HighResolutionStamp;
pub struct FramerateActor { #[derive(MallocSizeOf)]
pub(crate) struct FramerateActor {
name: String, name: String,
pipeline_id: PipelineId, pipeline_id: PipelineId,
script_sender: GenericSender<DevtoolScriptControlMsg>, script_sender: GenericSender<DevtoolScriptControlMsg>,
is_recording: bool, is_recording: bool,
ticks: Vec<HighResolutionStamp>, ticks: AtomicRefCell<Vec<HighResolutionStamp>>,
} }
impl Actor for FramerateActor { impl Actor for FramerateActor {
@@ -38,16 +41,18 @@ impl FramerateActor {
pipeline_id, pipeline_id,
script_sender, script_sender,
is_recording: false, is_recording: false,
ticks: Vec::new(), ticks: Default::default(),
}; };
actor.start_recording(); actor.start_recording();
registry.register_later(actor); registry.register(actor);
actor_name actor_name
} }
pub fn add_tick(&mut self, tick: f64) { pub fn add_tick(&self, tick: f64) {
self.ticks.push(HighResolutionStamp::wrap(tick)); self.ticks
.borrow_mut()
.push(HighResolutionStamp::wrap(tick));
if self.is_recording { if self.is_recording {
let msg = DevtoolScriptControlMsg::RequestAnimationFrame(self.pipeline_id, self.name()); let msg = DevtoolScriptControlMsg::RequestAnimationFrame(self.pipeline_id, self.name());
@@ -55,8 +60,8 @@ impl FramerateActor {
} }
} }
pub fn take_pending_ticks(&mut self) -> Vec<HighResolutionStamp> { pub fn take_pending_ticks(&self) -> Vec<HighResolutionStamp> {
mem::take(&mut self.ticks) mem::take(&mut self.ticks.borrow_mut())
} }
fn start_recording(&mut self) { fn start_recording(&mut self) {

Some files were not shown because too many files have changed in this diff Show More