servo/components/script
Josh Matthews 9e2ee0029a
script: Reduce usage of Trusted in Node::insert. (#37762)
These changes introduce a new kind of task that uses a variation of the
`task!` syntax. Existing `task!` usages create task structs that have a
`Send` bound, which requires the use of `Trusted<T>` to reference a DOM
object T inside of the task closure. The new syntax replaces the `Send`
bound with a `JSTraceable` bound, which requires explicit capture
clauses with types. This looks like:
```rust
task!(ScriptPrepare: {script: DomRoot<HTMLScriptElement>} |script| {
    script.prepare(CanGc::note());
}),
```

The capture clauses must list every value that will be referenced from
the closure's environment—these values are moved into fields in the
generated task structure, which allows them to be traced by the GC as
part of a generated JSTraceable implementation. Since the closure itself
is not a `move` closure, any attempts to reference values not explicitly
captured will generate a borrow checker error since the closure requires
the `'static` lifetime.

Testing: Existing WPT tests exercise these code paths. I also attempted
to write incorrect tasks that capture references or use values not
explicitly captured, and the compiler correctly errors out.
Fixes: part of #35517

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2025-07-15 01:11:12 +00:00
..
docs doc: fix broken link to UnrootedMustRoot plugin (#36198) 2025-03-28 10:23:41 +00:00
dom script: Reduce usage of Trusted in Node::insert. (#37762) 2025-07-15 01:11:12 +00:00
layout_dom script: Wrapping unsafe code in unsafe blocks for basic DOM types (#37997) 2025-07-11 11:38:02 +00:00
resources Embed user agent stylesheets and media control resouces in libservo (#36803) 2025-05-04 18:48:09 +00:00
xpath script: Update name validation for attribute, element, and doctype (#37747) 2025-07-11 02:45:52 +00:00
animation_timeline.rs
animations.rs Fix potential clippy warning for NodeDamage enum variant (#37391) 2025-06-11 09:53:15 +00:00
body.rs Consistently use Dom in native promise handlers (#37226) 2025-06-03 07:41:34 +00:00
build.rs script: copy include! files from script_bindings to script's OUT_DIR (#36384) 2025-04-08 19:22:24 +00:00
canvas_context.rs canvas: Make OffscreenCanvas transferable (without placeholder) (#37872) 2025-07-08 14:47:29 +00:00
canvas_state.rs canvas: Use wrapped kurbo::BezPath for path everywhere (#37967) 2025-07-12 10:37:47 +00:00
Cargo.toml canvas: Use wrapped kurbo::BezPath for path everywhere (#37967) 2025-07-12 10:37:47 +00:00
clipboard_provider.rs Move ScriptToConstellationMsg to constellation_traits (#36364) 2025-04-05 22:13:29 +00:00
conversions.rs
devtools.rs script: Upgrade node_ids to pipeline_to_node_ids to track the owner pipeline of the node (#37213) 2025-06-02 12:26:45 +00:00
document_collection.rs Update rustfmt to the 2024 style edition (#35764) 2025-03-03 11:26:53 +00:00
document_loader.rs script: LoadBlocker's drop impl shouldn't run after termination. (#36508) 2025-04-21 07:17:00 +00:00
drag_data_store.rs Add support for static SVG images using resvg crate (#36721) 2025-05-27 11:02:40 +00:00
fetch.rs Return correct source position for element CSP violations (#37970) 2025-07-11 08:42:51 +00:00
iframe_collection.rs script: Clean up Window::force_reflow a little (#37725) 2025-06-27 12:27:15 +00:00
image_animation.rs script: Properly root nodes with animating images (#37689) 2025-06-25 13:52:11 +00:00
init.rs
layout_image.rs Return correct source position for element CSP violations (#37970) 2025-07-11 08:42:51 +00:00
lib.rs canvas: Use wrapped kurbo::BezPath for path everywhere (#37967) 2025-07-12 10:37:47 +00:00
links.rs Use version of markup5ever with web_atoms crate (#36542) 2025-04-19 11:49:37 +00:00
messaging.rs Add a basic caching mechanism for ImageKeys. (#37369) 2025-07-03 13:16:43 +00:00
microtask.rs Implement MicrotaskRunnable for DefaultTeeReadRequestMicrotask (#37404) 2025-06-12 10:46:31 +00:00
mime.rs Switch to data_url::mime for document content type (#36522) 2025-04-15 17:12:48 +00:00
navigation.rs constellation: Pass system theme to new Pipelines (#37132) 2025-05-26 12:05:38 +00:00
network_listener.rs
realms.rs Move generated bindings to script_bindings (#36323) 2025-04-04 06:45:08 +00:00
routed_promise.rs script: add TaskSource argument to route_promise (#36831) 2025-05-04 17:05:27 +00:00
script_module.rs Return correct source position for element CSP violations (#37970) 2025-07-11 08:42:51 +00:00
script_runtime.rs script: const initialize LIVE_REFERENCES (#37688) 2025-06-25 11:27:56 +00:00
script_thread.rs script: Wrapping unsafe code in unsafe blocks for basic DOM types (#37997) 2025-07-11 11:38:02 +00:00
security_manager.rs Return correct source position for element CSP violations (#37970) 2025-07-11 08:42:51 +00:00
serviceworker_manager.rs Move ScriptToConstellationMsg to constellation_traits (#36364) 2025-04-05 22:13:29 +00:00
stylesheet_loader.rs Return correct source position for element CSP violations (#37970) 2025-07-11 08:42:51 +00:00
stylesheet_set.rs
task.rs script: Reduce usage of Trusted in Node::insert. (#37762) 2025-07-15 01:11:12 +00:00
task_manager.rs Initial IndexedDB Support (#33044) 2025-06-19 05:19:07 +00:00
task_queue.rs Use strum to iterate through enum variants and get their names (#35933) 2025-03-13 12:00:31 +00:00
task_source.rs Initial IndexedDB Support (#33044) 2025-06-19 05:19:07 +00:00
test.rs script: Refactor dom/headers to match spec better (#36943) 2025-05-21 19:07:32 +00:00
textinput.rs Send synthetic keydown/keyup at ime_insert_text (#37175) 2025-05-30 02:06:15 +00:00
timers.rs Move CSP code into one entrypoint (#37604) 2025-06-24 08:50:30 +00:00
unminify.rs Update rustfmt to the 2024 style edition (#35764) 2025-03-03 11:26:53 +00:00
webdriver_handlers.rs script: Improve webdriver_handler::get_element_in_view_center_point (#38058) 2025-07-15 00:14:17 +00:00
window_named_properties.rs Migrate to the 2024 edition (#35755) 2025-03-13 10:28:11 +00:00