Skip to main content

BaoRuntime

Struct BaoRuntime 

Source
pub struct BaoRuntime { /* private fields */ }

Implementations§

Source§

impl BaoRuntime

Source

pub fn new(config: BaoConfig) -> Result<Self, BrowserError>

Source

pub fn page_pool(&self) -> &Rc<PagePool>

Source

pub fn create_page( &self, config: &PageConfig, ) -> Result<PageHandle, BrowserError>

Source

pub fn create_worker( &self, page: &PageHandle, script: &str, ) -> Result<WorkerHandle, BrowserError>

Create a Dedicated Worker bridged to a page’s servo Realm.

This is the primary entry point for the Worker constructor bridging Create a Dedicated Worker via servo’s native Worker::Constructor.

Per DEC-WK-001 (BCE-20260627-008), bao no longer spawns a bao_engine::WebWorker bypass thread. Instead, this method dispatches new Worker(url) into the page via servo’s DOM binding, and servo constructs the Worker thread + DedicatedWorkerGlobalScope internally. bao’s role is reduced to:

  1. Steering stealth profile + DedicatedWorkerGlobalScope Web APIs by registering the scope callback via register_worker_scope_callback_native (invoked at page-init time, see inject_all_with_profile). The callback runs on the Worker thread via the servo vendor patch drain_worker_scope_callbacks.
  2. Tracking the WorkerHandle for CDP observability + page-unload termination (criterion #10, AutoCloseWorker).
  3. Providing a WorkerChannelBridge for page↔worker postMessage (criterion #6, DF-WK-4/5) so the bao side can still observe structured-clone traffic even though the thread is servo-owned.

The script argument is treated as a Worker script URL. For inline scripts, callers should materialize a data:/blob: URL and pass it here (or call create_worker_with_url).

@trace DEC-WK-001 servo-native Worker path (bypass removed) @trace REQ-BRW-004 [entity:Worker] [criterion:1..10] [criterion:12..18] @trace REQ-BRW-4 [criterion:C1..C4]

Source

pub fn create_worker_with_url( &self, page: &PageHandle, url: &str, ) -> Result<WorkerHandle, BrowserError>

Create a Dedicated Worker with a script URL resolved by servo’s native script loading pipeline.

Per DEC-WK-001 (BCE-20260627-008) the bypass bao_engine::WebWorker path is removed. The Worker is constructed by servo’s DOM Worker::Constructor when new Worker(url) is evaluated in the page. This method:

  1. Builds the WorkerId + WorkerHandle (closing/terminated flags + REALM_PROFILES global_addr_slot, criterion #18).
  2. Wires up the WorkerChannelBridge (criterion #6, DF-WK-4/5).
  3. Registers DedicatedWorkerGlobalScope state for CDP observability (criteria #8, #12-17 stealth consistency).
  4. Tracks the Worker with AutoCloseWorker (criterion #10).
  5. Dispatches new Worker(url) into the page via servo’s DOM binding.

@trace DEC-WK-001 servo-native Worker path (bypass removed) @trace REQ-BRW-004 [entity:Worker] [DF-WK-2] @trace REQ-BRW-4 [criterion:C1..C4]

Source

pub fn spin_event_loop(&self)

Source

pub fn set_console_log_channel(&self, tx: Sender<ConsoleMessage>)

Set the console log forwarding channel on the servo delegate. Console messages from servo will be sent to this channel.

Source

pub fn set_event_channel(&self, tx: Sender<ServoEvent>)

Set the structured event forwarding channel on the servo delegate. When set, servo callbacks push ServoEvent (Path B) as the primary event path. @trace REQ-CDP-006 [entity:ServoDelegateHooks]

Source

pub fn run(&self) -> Result<(), BrowserError>

Source

pub fn pump_cdp(&self, duration: Duration)

Bounded single-thread CDP pump: spin the servo loop and drain the memory:// CDP bridge for duration. This is the single-threaded consumer contract for in-process CDP — the BaoRuntime is !Send (per-thread JSContext model), so the runtime thread pumps while a helper thread holds the Browser client whose dispatches arrive through the bridge channel this drain answers.

BaoRuntime::run is the unbounded version (it also drains).

Source

pub fn run_with_bridge( &self, bridge_rx: BridgeReceiver, servo_event_rx: Receiver<ServoEvent>, broadcaster: Arc<EventBroadcaster>, ) -> Result<(), BrowserError>

Run with a CDP bridge that processes commands during the event loop. Also drains ServoEvent from the EventSubscriber path (Path B) and broadcasts translated CdpEvents via the shared EventBroadcaster. @trace REQ-CDP-006 [entity:ServoDelegateHooks]

Trait Implementations§

Source§

impl Drop for BaoRuntime

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. 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> 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, 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