Skip to main content

HostState

Struct HostState 

Source
pub struct HostState {
Show 42 fields pub console: Arc<Mutex<Vec<ConsoleEntry>>>, pub canvas: Arc<Mutex<CanvasState>>, pub storage: Arc<Mutex<HashMap<String, String>>>, pub timers: Arc<Mutex<Vec<TimerEntry>>>, pub animation_requests: Arc<Mutex<Vec<AnimationRequest>>>, pub timer_next_id: Arc<Mutex<u32>>, pub clipboard: Arc<Mutex<String>>, pub clipboard_allowed: Arc<Mutex<bool>>, pub kv_db: Option<Arc<Db>>, pub memory: Option<Memory>, pub module_loader: Option<Arc<ModuleLoader>>, pub navigation: Arc<Mutex<NavigationStack>>, pub hyperlinks: Arc<Mutex<Vec<Hyperlink>>>, pub pending_navigation: Arc<Mutex<Option<String>>>, pub current_url: Arc<Mutex<String>>, pub input_state: Arc<Mutex<InputState>>, pub widget_commands: Arc<Mutex<Vec<WidgetCommand>>>, pub widget_states: Arc<Mutex<HashMap<u32, WidgetValue>>>, pub widget_clicked: Arc<Mutex<HashSet<u32>>>, pub canvas_offset: Arc<Mutex<(f32, f32)>>, pub bookmark_store: SharedBookmarkStore, pub history_store: SharedHistoryStore, pub audio: Arc<Mutex<Option<AudioEngine>>>, pub last_audio_url_content_type: Arc<Mutex<String>>, pub video: Arc<Mutex<VideoPlaybackState>>, pub video_pip_frame: Arc<Mutex<Option<DecodedImage>>>, pub video_pip_serial: Arc<Mutex<u64>>, pub media_capture: Arc<Mutex<MediaCaptureState>>, pub gpu: Arc<Mutex<Option<GpuState>>>, pub rtc: Arc<Mutex<Option<RtcState>>>, pub ws: Arc<Mutex<Option<WsState>>>, pub midi: Arc<Mutex<Option<MidiState>>>, pub fetch: Arc<Mutex<Option<FetchState>>>, pub file_picker: Arc<Mutex<FilePickerState>>, pub events: Arc<Mutex<EventState>>, pub download_manager: DownloadManager, pub focused: Arc<AtomicBool>, pub text_system: Arc<Mutex<Option<Arc<WindowTextSystem>>>>, pub content_width: Arc<Mutex<u32>>, pub content_height: Arc<Mutex<u32>>, pub scroll_x: Arc<Mutex<f32>>, pub scroll_y: Arc<Mutex<f32>>,
}
Expand description

All shared state between the browser host and a guest Wasm module (and dynamically loaded children).

Most fields are behind Arc and Mutex so the same state can be shared across threads and nested module loads. Host code sets fields like HostState::memory and HostState::current_url before or during execution; guest imports mutate the rest through the registered oxide functions.

Fields§

§console: Arc<Mutex<Vec<ConsoleEntry>>>

Console log lines shown in the host UI, appended by console_log and api_* helpers.

§canvas: Arc<Mutex<CanvasState>>

Raster canvas: queued draw commands and decoded images for the current frame.

§storage: Arc<Mutex<HashMap<String, String>>>

In-memory key/value session storage (string keys and values), similar to localStorage in scope.

§timers: Arc<Mutex<Vec<TimerEntry>>>

Pending one-shot and interval timers; the host drains these and invokes on_timer on the guest.

§animation_requests: Arc<Mutex<Vec<AnimationRequest>>>

Pending one-shot animation frame requests. Drained every frame (before timers and on_frame) and fired via the existing on_timer export. See drain_animation_frame_requests.

§timer_next_id: Arc<Mutex<u32>>

Monotonic counter used to assign unique TimerEntry::id values for api_set_timeout / api_set_interval.

§clipboard: Arc<Mutex<String>>

Last text written to or read from the clipboard via the guest API (when permitted).

§clipboard_allowed: Arc<Mutex<bool>>

When false, api_clipboard_read / api_clipboard_write are blocked and log a warning.

§kv_db: Option<Arc<Db>>

Optional embedded [sled] database for persistent per-origin key/value bytes (api_kv_store_*).

§memory: Option<Memory>

The guest’s exported linear memory, used to read/write pointers passed to host imports.

§module_loader: Option<Arc<ModuleLoader>>

Engine and limits used by api_load_module to fetch and instantiate child Wasm modules.

§navigation: Arc<Mutex<NavigationStack>>

Session history stack for api_push_state, api_replace_state, and back/forward navigation.

§hyperlinks: Arc<Mutex<Vec<Hyperlink>>>

Hit-test regions registered by the guest for link clicks in the canvas area.

§pending_navigation: Arc<Mutex<Option<String>>>

Set by guest api_navigate — consumed by the UI after module returns.

§current_url: Arc<Mutex<String>>

The URL of the currently loaded module (set by the host before execution).

§input_state: Arc<Mutex<InputState>>

Input state polled by the guest each frame.

§widget_commands: Arc<Mutex<Vec<WidgetCommand>>>

Widget commands issued by the guest during on_frame.

§widget_states: Arc<Mutex<HashMap<u32, WidgetValue>>>

Persistent widget values (checkbox, slider, text input state).

§widget_clicked: Arc<Mutex<HashSet<u32>>>

Button IDs that were clicked during the last render pass.

§canvas_offset: Arc<Mutex<(f32, f32)>>

Top-left corner of the canvas panel in GPUI screen coords.

§bookmark_store: SharedBookmarkStore

Persistent bookmark storage shared across tabs.

§history_store: SharedHistoryStore

Persistent browsing history shared across tabs.

§audio: Arc<Mutex<Option<AudioEngine>>>

Audio playback engine (lazily initialised on first audio API call).

§last_audio_url_content_type: Arc<Mutex<String>>

Content-Type from the last api_audio_play_url response (UTF-8), for codec negotiation introspection.

§video: Arc<Mutex<VideoPlaybackState>>

Video playback, decode, subtitles, and HLS variant metadata (FFmpeg).

§video_pip_frame: Arc<Mutex<Option<DecodedImage>>>

Last decoded video frame for picture-in-picture (RGBA, copied when PiP is enabled).

§video_pip_serial: Arc<Mutex<u64>>

Bumped when the PiP buffer is updated so the UI can refresh the floating texture.

§media_capture: Arc<Mutex<MediaCaptureState>>

Camera, microphone, and screen capture (permission prompts + native APIs).

§gpu: Arc<Mutex<Option<GpuState>>>

WebGPU-style GPU resource state (lazily initialised on first GPU API call).

§rtc: Arc<Mutex<Option<RtcState>>>

WebRTC peer connections, data channels, and signaling (lazily initialised on first RTC call).

§ws: Arc<Mutex<Option<WsState>>>

WebSocket connections (lazily initialised on first ws call).

§midi: Arc<Mutex<Option<MidiState>>>

MIDI input/output connections (lazily initialised on first midi_open call).

§fetch: Arc<Mutex<Option<FetchState>>>

Streaming / non-blocking fetch state (lazily initialised on first api_fetch_begin).

§file_picker: Arc<Mutex<FilePickerState>>

Native file and folder picker handles. Paths never cross the sandbox; guests only see opaque u32 handles allocated here.

§events: Arc<Mutex<EventState>>

Event listeners, queued events, and built-in event detector state (resize, focus, online/offline, touch, gamepad, drag-drop).

§download_manager: DownloadManager

Download manager for saving files and exporting canvas content.

§focused: Arc<AtomicBool>

Whether the canvas currently has keyboard/window focus. Set by the UI layer each frame; consumed by the event system to fire focus / blur / visibility_change.

§text_system: Arc<Mutex<Option<Arc<WindowTextSystem>>>>

Per-frame GPUI [WindowTextSystem] used for synchronous text shaping from api_canvas_measure_text. The UI layer installs it right before calling on_frame and clears it immediately after, so this is only Some during guest frame callbacks.

§content_width: Arc<Mutex<u32>>

Virtual width of guest content.

§content_height: Arc<Mutex<u32>>

Virtual height of guest content.

§scroll_x: Arc<Mutex<f32>>

Absolute scroll horizontal offset.

§scroll_y: Arc<Mutex<f32>>

Absolute scroll vertical offset.

Trait Implementations§

Source§

impl Clone for HostState

Source§

fn clone(&self) -> HostState

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 Default for HostState

Source§

fn default() -> Self

Returns the “default value” for a type. 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
§

impl<T> ArchivePointee for T

§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

impl<T> Instrument for T

§

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

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

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
§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

impl<T> LayoutRaw for T

§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Returns the layout of the type.
§

impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
where T: SharedNiching<N1, N2>, N1: Niching<T>, N2: Niching<T>,

§

unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool

Returns whether the given value has been niched. Read more
§

fn resolve_niched(out: Place<NichedOption<T, N1>>)

Writes data to out indicating that a T is niched.
§

impl<T> NoneValue for T
where T: Default,

§

type NoneType = T

§

fn null_value() -> T

The none-equivalent value.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

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

impl<T> Pointee for T

§

type Metadata = ()

The metadata type for pointers and references to this type.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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
§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

§

fn to_sample_(self) -> U

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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,