Skip to main content

WorkerChannelBridge

Struct WorkerChannelBridge 

Source
pub struct WorkerChannelBridge {
    pub worker_id: WorkerId,
    pub page_to_worker_tx: Sender<StructuredClonePayload>,
    pub worker_to_page_rx: Receiver<WorkerStructuredMessage>,
    /* private fields */
}
Expand description

Bidirectional channel bridge for a single Worker’s postMessage channel.

Holds the mpsc channel endpoints for page↔worker communication. The bridge does NOT hold JSObject references — only channel endpoints and serialized data. This is safe to store across threads.

SPEC DF-WK-4: page→worker (sender → receiver in worker thread) SPEC DF-WK-5: worker→page (sender in worker thread → receiver here)

@trace REQ-BRW-004 [entity:Worker] [entity:DedicatedWorkerGlobalScope] [criterion:6] DF-WK-4 / DF-WK-5

Fields§

§worker_id: WorkerId

Worker ID this bridge belongs to.

§page_to_worker_tx: Sender<StructuredClonePayload>

Sender for page→worker messages (DF-WK-4: worker.postMessage(msg)). Structured-clone serialized bytes sent through this channel. @trace REQ-BRW-004 [entity:Worker] DF-WK-4

§worker_to_page_rx: Receiver<WorkerStructuredMessage>

Receiver for worker→page messages (DF-WK-5: self.postMessage(msg)). @trace REQ-BRW-004 [entity:DedicatedWorkerGlobalScope] DF-WK-5

Implementations§

Source§

impl WorkerChannelBridge

Source

pub fn new(worker_id: WorkerId) -> (Self, WorkerChannelEndpoints)

Create a new channel bridge for the given Worker.

Returns the bridge (kept by bao_browser) and a WorkerChannelEndpoints struct that should be sent to the worker thread for its use.

@trace REQ-BRW-004 [entity:Worker] [criterion:6] DF-WK-4 / DF-WK-5

Source

pub fn post_message_to_worker( &self, payload: StructuredClonePayload, ) -> Result<(), SendError<StructuredClonePayload>>

Post a message from the page to this Worker (DF-WK-4).

Sends structured-clone serialized bytes through the channel. Returns Err if the worker thread has exited (channel closed).

@trace REQ-BRW-004 [entity:Worker] [criterion:6] DF-WK-4

Source

pub fn try_recv_from_worker( &self, ) -> Result<Option<WorkerStructuredMessage>, ()>

Try to receive a message from this Worker (DF-WK-5).

Non-blocking: returns Ok(Some(msg)) if a message is available, Ok(None) if the channel is empty, Err if the worker has exited.

@trace REQ-BRW-004 [entity:DedicatedWorkerGlobalScope] [criterion:6] DF-WK-5

Source

pub fn drain_worker_messages(&self) -> WorkerDrainResult

Drain all pending worker→page messages (DF-WK-5).

Called during spin_event_loop to process all queued messages from workers. Returns a WorkerDrainResult that includes both the drained messages and whether the worker has disconnected.

When disconnected is true, the worker thread has exited and the caller should trigger cleanup (reap terminated workers).

@trace REQ-BRW-004 [entity:DedicatedWorkerGlobalScope] DF-WK-5 @trace REQ-BRW-004 [criterion:18] crash-safe teardown detection

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