Skip to main content

WebViewEngine

Trait WebViewEngine 

pub trait WebViewEngine: Send + Sync {
Show 31 methods // Required methods fn send(&self, cmd: WebViewCommand); fn frames(&self) -> Arc<Mutex<Option<Frame>>> ⓘ; fn drain_events(&self) -> Vec<WebViewEvent>; // Provided methods fn supports_text_input(&self) -> bool { ... } fn supports_guarded_edit_history(&self) -> bool { ... } fn handle_undo_request(&self, request: UndoRequest) -> bool { ... } fn text_input(&self, request: Request) -> Option<Receipt> { ... } fn create_tab(&self) -> Result<Arc<dyn WebViewEngine>, String> { ... } fn set_visible(&self, _visible: bool) { ... } fn set_modifiers(&self, modifiers: KeyModifiers) { ... } fn take_new_tab_requests(&self) -> Vec<(String, bool)> { ... } fn accept_popups(&self) { ... } fn accept_page_dialogs(&self) { ... } fn share_clipboard(&self) { ... } fn take_popups(&self) -> Vec<Popup> { ... } fn adopt_popup(&self, popup: u32) -> Result<Arc<dyn WebViewEngine>, String> { ... } fn supports_native_filtering(&self) -> bool { ... } fn measures_document(&self) -> bool { ... } fn navigate_owned( &self, request_id: u32, command: NavigationCommand, ) -> Result<(), String> { ... } fn paint_seq(&self) -> u64 { ... } fn request_close(&self) -> bool { ... } fn drain_download_events(&self) -> Vec<WebViewEvent> { ... } fn set_waker(&self, _waker: Box<dyn Fn() + Send + Sync>) { ... } fn presented(&self) { ... } fn wrapped(&self) -> Option<&Arc<dyn WebViewEngine>> { ... } fn supports_composition(&self) -> bool { ... } fn text_field(&self) -> Option<TextField> { ... } fn cursor(&self) -> Option<CursorIcon> { ... } fn paint_frame(&self) -> Option<Arc<Frame>> { ... } fn paint_blob(&self, _hash: &[u8; 32]) -> Option<Arc<Vec<u8>>> { ... } fn take_paint_stream(&self, _keyframe: bool) -> Vec<Payload> { ... }
}
Expand description

A running web engine instance. Implementations are Send + Sync so the widget, the host app, and the engine’s own thread can share one handle.

Required Methods§

fn send(&self, cmd: WebViewCommand)

Enqueue a command. Must never block on engine work.

fn frames(&self) -> Arc<Mutex<Option<Frame>>> ⓘ

fn drain_events(&self) -> Vec<WebViewEvent>

Take all pending events, oldest first.

Provided Methods§

fn supports_text_input(&self) -> bool

fn supports_guarded_edit_history(&self) -> bool

Whether original-field acknowledged Undo/Redo is supported.

fn handle_undo_request(&self, request: UndoRequest) -> bool

Offer system Undo/Redo to this page’s native editing history. True means the backend consumed the request, not that a history entry existed or that an asynchronous edit has already completed.

fn text_input(&self, request: Request) -> Option<Receipt>

Private text transactions never enter the app event or page-agent stream.

fn create_tab(&self) -> Result<Arc<dyn WebViewEngine>, String>

Create an independent document in the same runtime/profile.

§Errors

Returns an error when tabs are unsupported, capacity is exhausted, or the engine cannot create another document.

fn set_visible(&self, _visible: bool)

Suspend painting without discarding the document or its session history.

fn set_modifiers(&self, modifiers: KeyModifiers)

Keep pointer modifiers current even when no key event reaches the page.

fn take_new_tab_requests(&self) -> Vec<(String, bool)>

Native new-window intents, delivered to browser chrome as tab requests.

fn accept_popups(&self)

Have the page’s popup windows (window.open with a size: a sign-in, a payment) opened as popups of this page, which can answer it, rather than as tabs: Self::take_popups then lists them. An engine that cannot goes on opening them as tabs.

fn accept_page_dialogs(&self)

Have the page’s own questions (alert, confirm, prompt, “leave this page?”) sent as WebViewEvent::PageDialog for the embedder to show and answer. Until then, and in an engine that cannot, each is declined at once and a page may always be left.

fn share_clipboard(&self)

Have what the page copies sent as WebViewEvent::ClipboardWrite, and its pastes and reads asked of the embedder (WebViewEvent::ClipboardRead), where the engine cannot reach the system clipboard itself. Until then, and in an engine that can or cannot ask, the page’s clipboard is the engine’s own.

fn take_popups(&self) -> Vec<Popup>

The popups the page opened since the last call.

fn adopt_popup(&self, popup: u32) -> Result<Arc<dyn WebViewEngine>, String>

The engine of a popup Self::take_popups listed, to show it. Dropping it closes the popup.

§Errors

Returns an error when the popup is no longer open or this engine has none.

fn supports_native_filtering(&self) -> bool

Whether this backend accepts source rules instead of WebKit JSON.

fn measures_document(&self) -> bool

Whether WebViewCommand::ReportDocumentSize is answered: the engine measures its document. Known once the engine is ready.

fn navigate_owned( &self, request_id: u32, command: NavigationCommand, ) -> Result<(), String>

Admit a navigation and reserve its terminal outcome. IDs must increase strictly within this engine’s lifetime and fit a positive CEF signed integer.

§Errors

Returns an error without admission if the backend, request or capacity cannot support the operation. A successful admission completes only with the matching NavigationOutcome, or is invalidated by cancellation.

fn paint_seq(&self) -> u64

The sequence number of the display list this engine paints (Self::paint_frame’s Frame::seq): moves on with every change to what the page draws, so a widget repaints exactly when the page did. 0 for an engine that paints pixels rather than a display list.

fn request_close(&self) -> bool

Request native close admission. True allows immediate local close; false completes asynchronously through TabClosed, TabDetached or TabCloseBlocked.

fn drain_download_events(&self) -> Vec<WebViewEvent>

Runtime-owned download events, independent of a tab lifetime.

fn set_waker(&self, _waker: Box<dyn Fn() + Send + Sync>)

Invoked (from any thread) whenever a new frame or event is ready — typically wired to the winit event loop proxy so idle apps repaint on engine activity. Synchronous engines don’t need one.

fn presented(&self)

A view drew this engine’s page just now. Engines that stop painting pages nobody draws (see paint::PaintEngine) resume here.

fn wrapped(&self) -> Option<&Arc<dyn WebViewEngine>>

The engine this one wraps, for what only a backend can answer.

fn supports_composition(&self) -> bool

Whether the engine takes an input method’s composition (WebViewCommand::ImeComposition, WebViewCommand::ImeCommit) and reports the page’s focused field (Self::text_field).

fn text_field(&self) -> Option<TextField>

The page’s focused editable field, for the platform input method; None while nothing editable in the page has the focus.

fn cursor(&self) -> Option<CursorIcon>

The pointer shape the page last asked for where the pointer is (a hand on a link, an I-beam on text); None for the default arrow, or an engine that does not say.

fn paint_frame(&self) -> Option<Arc<Frame>>

The page as a display list. An engine that has one is drawn from it instead of frames (see paint).

fn paint_blob(&self, _hash: &[u8; 32]) -> Option<Arc<Vec<u8>>>

Encoded bytes of an image a paint_frame references.

fn take_paint_stream(&self, _keyframe: bool) -> Vec<Payload>

The page as a stream for a session to share: a whole frame when keyframe (or when the consumer must start over), else the patches since the last call, followed by images not sent yet. Empty for an engine without a display list.

Implementors§