Skip to main content

WorkerScriptLoader

Struct WorkerScriptLoader 

Source
pub struct WorkerScriptLoader {
    pub source: WorkerScriptSource,
    pub script_type: WorkerScriptType,
}
Expand description

Worker script loader — handles URL-based script fetching for Workers.

Provides the bridge between bao_browser’s Worker tracking and the script loading process described in DF-WK-2. In browser mode, servo’s DOM Worker binding handles the full script loading pipeline internally. This struct provides the bao_browser-side tracking and validation that supplements servo’s internal mechanism.

For Workers created via bao_engine::WebWorker (CLI/test mode), this loader resolves script URLs and provides script content for evaluation on the Worker thread.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Fields§

§source: WorkerScriptSource

The script URL or inline source to load. @trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

§script_type: WorkerScriptType

The script type (Classic or Module). @trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Implementations§

Source§

impl WorkerScriptLoader

Source

pub fn inline(script: String, script_type: WorkerScriptType) -> Self

Create a new WorkerScriptLoader for an inline script source.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn url(url: String, script_type: WorkerScriptType) -> Self

Create a new WorkerScriptLoader for a URL-based script.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn from_source( source: WorkerScriptSource, script_type: WorkerScriptType, ) -> Self

Create from WorkerScriptSource.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn resolve(&self) -> Result<WorkerScriptSource, WorkerScriptLoadError>

Resolve the script source to loadable content.

For inline sources, returns the content directly. For URL sources, resolves the URL to determine the script location. In browser mode, servo handles the actual HTTP fetch internally — this method validates the URL and returns it for servo to fetch. For data:/blob: URLs embedded in the WorkerScriptSource::Inline variant, the content is already available.

Returns the script content (for inline) or the validated URL (for URL source).

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn validate_mime_type( mime_type: &str, url: &str, ) -> Result<(), WorkerScriptLoadError>

Validate the MIME type of a Worker script response.

Per DF-WK-2: “JS MIME 校验” — HTTP responses for Worker scripts must have a JavaScript MIME type. This validation applies to HTTP responses only (not data: or blob: URLs).

Returns Ok(()) if the MIME type is valid, or Err with the invalid MIME type details.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn script_url(&self) -> Option<&str>

Returns the script URL for this loader (if URL-based).

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn requires_fetch(&self) -> bool

Returns true if this loader requires a network fetch.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn load<F>( &self, stealth_profile: &Option<StealthProfile>, state_callback: F, ) -> Result<WorkerScriptLoadResult, WorkerScriptLoadError>

Load the Worker script through the full DF-WK-2 pipeline.

This method implements the complete Worker script loading pipeline:

  1. Resolve — URL parsing / data: / file: extraction
  2. Fetch — HTTP GET via bao_runtime’s stealth HTTP client
  3. Validate — MIME type check (JS MIME types only)
  4. Decode — UTF-8 decode of response body
  5. Compile — SpiderMonkey compilation (Classic vs Module)
  6. Ready — script source available for evaluation

For inline/data:/file: sources, steps 2–4 are skipped — content is already available as a UTF-8 string.

The stealth_profile is passed through to the HTTP client so that Worker script fetches use the same TLS/HTTP2 fingerprint as the parent page (SPEC criterion #12: CRIT-STL-WK).

The state_callback is called at each pipeline stage transition, enabling CDP observability of the loading progress.

Returns WorkerScriptLoadResult on success, or WorkerScriptLoadError at the stage where loading failed.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2] pipeline: fetch → MIME check → decode → compile @trace REQ-BRW-004 [criterion:12] CRIT-STL-WK: Worker fetch uses parent page’s stealth TLS/HTTP2 profile

Source

pub fn load_simple( &self, stealth_profile: &Option<StealthProfile>, ) -> Result<WorkerScriptLoadResult, WorkerScriptLoadError>

Load the Worker script without state callbacks (simplified API).

Equivalent to load() with a no-op state callback. Use when CDP observability of loading stages is not needed.

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Source

pub fn is_module(&self) -> bool

Returns the script type for SpiderMonkey compilation options.

Module Workers use ES module compilation; Classic Workers use the default script compilation (DF-WK-2: “Classic/Module 编译”).

@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]

Trait Implementations§

Source§

impl Clone for WorkerScriptLoader

Source§

fn clone(&self) -> WorkerScriptLoader

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for WorkerScriptLoader

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsCtxPtr for T
where T: ?Sized,

Source§

fn as_ctx_ptr(&self) -> *mut Self
where Self: Sized,

self’s address as *mut Self for deferred-task / scopeguard / ref_guard ctx slots. The closures/trampolines deref it as shared (&*p) — every method they reach is &self post-R-2, so no write provenance is required; the *mut spelling is purely to match the existing DerefOnDrop / HasAutoFlush / RefCount ABI.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> Filterable for T

Source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> MaybeBoxed<Box<T>> for T

Source§

fn maybe_boxed(self) -> Box<T>

Convert
Source§

impl<T> MaybeBoxed<T> for T

Source§

fn maybe_boxed(self) -> T

Convert
Source§

impl<T> MaybeSendSync for T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Send for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> Sync for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more