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: WorkerIdWorker 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
impl WorkerChannelBridge
Sourcepub fn new(worker_id: WorkerId) -> (Self, WorkerChannelEndpoints)
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
Sourcepub fn post_message_to_worker(
&self,
payload: StructuredClonePayload,
) -> Result<(), SendError<StructuredClonePayload>>
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
Sourcepub fn try_recv_from_worker(
&self,
) -> Result<Option<WorkerStructuredMessage>, ()>
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
Sourcepub fn drain_worker_messages(&self) -> WorkerDrainResult
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§
impl !Sync for WorkerChannelBridge
impl Freeze for WorkerChannelBridge
impl RefUnwindSafe for WorkerChannelBridge
impl Send for WorkerChannelBridge
impl Unpin for WorkerChannelBridge
impl UnsafeUnpin for WorkerChannelBridge
impl UnwindSafe for WorkerChannelBridge
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
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