Commit Graph

617 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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