Implement Trusted types worker sinks (#36811)

Part of #36258

Built on top of #36668

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
This commit is contained in:
Tim van der Lippe 2025-05-04 19:05:07 +02:00 committed by GitHub
parent c00e0aae61
commit 1e8896800a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 37 additions and 43 deletions

View file

@ -21,12 +21,12 @@ use crate::dom::abstractworker::{SimpleWorkerErrorHandler, WorkerScriptMsg};
use crate::dom::bindings::cell::DomRefCell;
use crate::dom::bindings::codegen::Bindings::MessagePortBinding::StructuredSerializeOptions;
use crate::dom::bindings::codegen::Bindings::WorkerBinding::{WorkerMethods, WorkerOptions};
use crate::dom::bindings::codegen::UnionTypes::TrustedScriptURLOrUSVString;
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::refcounted::Trusted;
use crate::dom::bindings::reflector::{DomGlobal, reflect_dom_object_with_proto};
use crate::dom::bindings::root::DomRoot;
use crate::dom::bindings::str::USVString;
use crate::dom::bindings::structuredclone;
use crate::dom::bindings::trace::{CustomTraceable, RootedTraceableBox};
use crate::dom::dedicatedworkerglobalscope::{
@ -35,6 +35,7 @@ use crate::dom::dedicatedworkerglobalscope::{
use crate::dom::eventtarget::EventTarget;
use crate::dom::globalscope::GlobalScope;
use crate::dom::messageevent::MessageEvent;
use crate::dom::trustedscripturl::TrustedScriptURL;
use crate::dom::window::Window;
use crate::dom::workerglobalscope::prepare_workerscope_init;
use crate::realms::enter_realm;
@ -162,11 +163,21 @@ impl WorkerMethods<crate::DomTypeHolder> for Worker {
global: &GlobalScope,
proto: Option<HandleObject>,
can_gc: CanGc,
script_url: USVString,
script_url: TrustedScriptURLOrUSVString,
worker_options: &WorkerOptions,
) -> Fallible<DomRoot<Worker>> {
// Step 1: Let compliantScriptURL be the result of invoking the
// Get Trusted Type compliant string algorithm with TrustedScriptURL,
// this's relevant global object, scriptURL, "Worker constructor", and "script".
let compliant_script_url = TrustedScriptURL::get_trusted_script_url_compliant_string(
global,
script_url,
"Worker",
"constructor",
can_gc,
)?;
// Step 2-4.
let worker_url = match global.api_base_url().join(&script_url) {
let worker_url = match global.api_base_url().join(&compliant_script_url) {
Ok(url) => url,
Err(_) => return Err(Error::Syntax),
};