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: WorkerScriptSourceThe script URL or inline source to load. @trace REQ-BRW-004 [entity:Worker] [DF-WK-2]
script_type: WorkerScriptTypeThe script type (Classic or Module). @trace REQ-BRW-004 [entity:Worker] [DF-WK-2]
Implementations§
Source§impl WorkerScriptLoader
impl WorkerScriptLoader
Sourcepub fn inline(script: String, script_type: WorkerScriptType) -> Self
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]
Sourcepub fn url(url: String, script_type: WorkerScriptType) -> Self
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]
Sourcepub fn from_source(
source: WorkerScriptSource,
script_type: WorkerScriptType,
) -> Self
pub fn from_source( source: WorkerScriptSource, script_type: WorkerScriptType, ) -> Self
Create from WorkerScriptSource.
@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]
Sourcepub fn resolve(&self) -> Result<WorkerScriptSource, WorkerScriptLoadError>
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]
Sourcepub fn validate_mime_type(
mime_type: &str,
url: &str,
) -> Result<(), WorkerScriptLoadError>
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]
Sourcepub fn script_url(&self) -> Option<&str>
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]
Sourcepub fn requires_fetch(&self) -> bool
pub fn requires_fetch(&self) -> bool
Returns true if this loader requires a network fetch.
@trace REQ-BRW-004 [entity:Worker] [DF-WK-2]
Sourcepub fn load<F>(
&self,
stealth_profile: &Option<StealthProfile>,
state_callback: F,
) -> Result<WorkerScriptLoadResult, WorkerScriptLoadError>where
F: FnMut(WorkerScriptLoadState),
pub fn load<F>(
&self,
stealth_profile: &Option<StealthProfile>,
state_callback: F,
) -> Result<WorkerScriptLoadResult, WorkerScriptLoadError>where
F: FnMut(WorkerScriptLoadState),
Load the Worker script through the full DF-WK-2 pipeline.
This method implements the complete Worker script loading pipeline:
- Resolve — URL parsing / data: / file: extraction
- Fetch — HTTP GET via bao_runtime’s stealth HTTP client
- Validate — MIME type check (JS MIME types only)
- Decode — UTF-8 decode of response body
- Compile — SpiderMonkey compilation (Classic vs Module)
- 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
Sourcepub fn load_simple(
&self,
stealth_profile: &Option<StealthProfile>,
) -> Result<WorkerScriptLoadResult, WorkerScriptLoadError>
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]
Trait Implementations§
Source§impl Clone for WorkerScriptLoader
impl Clone for WorkerScriptLoader
Source§fn clone(&self) -> WorkerScriptLoader
fn clone(&self) -> WorkerScriptLoader
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for WorkerScriptLoader
impl RefUnwindSafe for WorkerScriptLoader
impl Send for WorkerScriptLoader
impl Sync for WorkerScriptLoader
impl Unpin for WorkerScriptLoader
impl UnsafeUnpin for WorkerScriptLoader
impl UnwindSafe for WorkerScriptLoader
Blanket Implementations§
Source§impl<T> AsCtxPtr for Twhere
T: ?Sized,
impl<T> AsCtxPtr for Twhere
T: ?Sized,
Source§fn as_ctx_ptr(&self) -> *mut Selfwhere
Self: Sized,
fn as_ctx_ptr(&self) -> *mut Selfwhere
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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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