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.
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.
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: SharedBookmarkStorePersistent bookmark storage shared across tabs.
history_store: SharedHistoryStorePersistent 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: DownloadManagerDownload 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§
Auto Trait Implementations§
impl Freeze for HostState
impl !RefUnwindSafe for HostState
impl Send for HostState
impl Sync for HostState
impl Unpin for HostState
impl UnsafeUnpin for HostState
impl !UnwindSafe for HostState
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2where
T: SharedNiching<N1, N2>,
N1: Niching<T>,
N2: Niching<T>,
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere
T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Pointee for T
impl<T> Pointee for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().