RunningAppState

Struct RunningAppState 

Source
pub(crate) struct RunningAppState {
    gamepad_support: RefCell<Option<GamepadSupport>>,
    pub(crate) webdriver_senders: RefCell<WebDriverSenders>,
    pub(crate) webdriver_embedder_controls: WebDriverEmbedderControls,
    pub(crate) pending_webdriver_events: RefCell<HashMap<InputEventId, Sender<()>>>,
    pub(crate) webdriver_receiver: Option<Receiver<WebDriverCommandMsg>>,
    pub(crate) servoshell_preferences: ServoShellPreferences,
    pub(crate) servo: Servo,
    pub(crate) achieved_stable_image: Rc<Cell<bool>>,
    exit_scheduled: Cell<bool>,
    experimental_preferences_enabled: Cell<bool>,
    windows: RefCell<HashMap<ServoShellWindowId, Rc<ServoShellWindow>>>,
}

Fields§

§gamepad_support: RefCell<Option<GamepadSupport>>

Gamepad support, which may be None if it failed to initialize.

§webdriver_senders: RefCell<WebDriverSenders>

The WebDriverSenders used to reply to pending WebDriver requests.

§webdriver_embedder_controls: WebDriverEmbedderControls

When running in WebDriver mode, WebDriverEmbedderControls is a virtual container for all embedder controls. This overrides the normal behavior where these controls are shown in the GUI or not processed at all in headless mode.

§pending_webdriver_events: RefCell<HashMap<InputEventId, Sender<()>>>

A HashMap of pending WebDriver events. It is the WebDriver embedder’s responsibility to inform the WebDriver server when the event has been fully handled. This map is used to report back to WebDriver when that happens.

§webdriver_receiver: Option<Receiver<WebDriverCommandMsg>>

A Receiver for receiving commands from a running WebDriver server, if WebDriver was enabled.

§servoshell_preferences: ServoShellPreferences

servoshell specific preferences created during startup of the application.

§servo: Servo

A handle to the Servo instance.

§achieved_stable_image: Rc<Cell<bool>>

Whether or not the application has achieved stable image output. This is used for the exit_after_stable_image option.

§exit_scheduled: Cell<bool>

Whether or not program exit has been triggered. This means that all windows will be destroyed and shutdown will start at the end of the current event loop.

§experimental_preferences_enabled: Cell<bool>

Whether the user has enabled experimental preferences.

§windows: RefCell<HashMap<ServoShellWindowId, Rc<ServoShellWindow>>>

The set of ServoShellWindows that currently exist for this instance of servoshell.

Implementations§

Source§

impl RunningAppState

Source

pub(crate) fn new( servo: Servo, servoshell_preferences: ServoShellPreferences, event_loop_waker: Box<dyn EventLoopWaker>, ) -> Self

Source

pub(crate) fn open_window( self: &Rc<Self>, platform_window: Rc<dyn PlatformWindow>, initial_url: Url, )

Source

pub(crate) fn windows<'a>( &'a self, ) -> Ref<'a, HashMap<ServoShellWindowId, Rc<ServoShellWindow>>>

Source

pub(crate) fn any_window(&self) -> Rc<ServoShellWindow>

Get any ServoShellWindow from this state’s collection of windows. This is used for WebDriver, which currently doesn’t have great support for per-window operation.

Source

pub(crate) fn focused_window(&self) -> Option<Rc<ServoShellWindow>>

Source

pub(crate) fn window( &self, id: ServoShellWindowId, ) -> Option<Rc<ServoShellWindow>>

Source

pub(crate) fn webview_by_id(&self, webview_id: WebViewId) -> Option<WebView>

Source

pub(crate) fn webdriver_receiver( &self, ) -> Option<&Receiver<WebDriverCommandMsg>>

Source

pub(crate) fn servo(&self) -> &Servo

Source

pub(crate) fn schedule_exit(&self)

Source

pub(crate) fn experimental_preferences_enabled(&self) -> bool

Source

pub(crate) fn set_experimental_preferences_enabled(&self, new_value: bool)

Source

pub(crate) fn spin_event_loop(self: &Rc<Self>) -> bool

Spins the internal application event loop.

  • Notifies Servo about incoming gamepad events
  • Spin the Servo event loop, which will run the compositor and trigger delegate methods.

Returns true if the event loop should continue spinning and false if it should exit.

Source

pub(crate) fn foreach_window_and_interface_commands( self: &Rc<Self>, callback: impl Fn(&ServoShellWindow, Vec<UserInterfaceCommand>), )

Source

pub(crate) fn maybe_window_for_webview_id( &self, webview_id: WebViewId, ) -> Option<Rc<ServoShellWindow>>

Source

pub(crate) fn window_for_webview_id( &self, webview_id: WebViewId, ) -> Rc<ServoShellWindow>

Source

pub(crate) fn platform_window_for_webview_id( &self, webview_id: WebViewId, ) -> Rc<dyn PlatformWindow>

Source

fn maybe_request_screenshot(&self, webview: WebView)

If we are exiting after achieving a stable image or we want to save the display of the WebView to an image file, request a screenshot of the WebView.

Source

pub(crate) fn set_pending_traversal( &self, traversal_id: TraversalId, sender: GenericSender<WebDriverLoadStatus>, )

Source

pub(crate) fn set_load_status_sender( &self, webview_id: WebViewId, sender: GenericSender<WebDriverLoadStatus>, )

Source

fn remove_load_status_sender(&self, webview_id: WebViewId)

Source

fn set_script_command_interrupt_sender( &self, sender: Option<IpcSender<WebDriverJSResult>>, )

Source

pub(crate) fn handle_webdriver_input_event( &self, webview_id: WebViewId, input_event: InputEvent, response_sender: Option<Sender<()>>, )

Source

pub(crate) fn handle_webdriver_screenshot( &self, webview_id: WebViewId, rect: Option<Rect<f32, CSSPixel>>, result_sender: Sender<Result<RgbaImage, ScreenshotCaptureError>>, )

Source

pub(crate) fn handle_webdriver_script_command( &self, script_command: &WebDriverScriptCommand, )

Source

pub(crate) fn handle_webdriver_load_url( &self, webview_id: WebViewId, url: Url, load_status_sender: GenericSender<WebDriverLoadStatus>, )

Source

pub(crate) fn handle_gamepad_events(&self)

Source

fn interrupt_webdriver_script_evaluation(&self)

Interrupt any ongoing WebDriver-based script evaluation.

From https://w3c.github.io/webdriver/#dfn-execute-a-function-body:

The rules to execute a function body are as follows. The algorithm returns an ECMAScript completion record.

If at any point during the algorithm a user prompt appears, immediately return Completion { Type: normal, Value: null, Target: empty }, but continue to run the other steps of this algorithm in parallel.

Source§

impl RunningAppState

Source

pub(crate) fn handle_webdriver_messages(self: &Rc<Self>)

Trait Implementations§

Source§

impl WebViewDelegate for RunningAppState

Source§

fn screen_geometry(&self, webview: WebView) -> Option<ScreenGeometry>

Get the ScreenGeometry for this WebView. If this is unimplemented or returns None the screen will have the size of the WebView’s RenderingContext and WebView will be considered to be positioned at the screen’s origin.
Source§

fn notify_status_text_changed(&self, webview: WebView, _status: Option<String>)

The status text of the currently loaded page in this WebView has changed. The new status text can accessed via WebView::status_text.
Source§

fn notify_history_changed( &self, webview: WebView, _entries: Vec<Url>, _current: usize, )

The navigation history of this WebView has changed. The navigation history is represented as a Vec<Url> and _current denotes the current index in the history. New navigations, back navigation, and forward navigation modify this index.
Source§

fn notify_page_title_changed(&self, webview: WebView, _: Option<String>)

The page title of the currently loaded page in this WebView has changed. The new title can accessed via WebView::page_title.
Source§

fn notify_traversal_complete( &self, _webview: WebView, traversal_id: TraversalId, )

A history traversal operation is complete.
Source§

fn request_move_to(&self, webview: WebView, new_position: DeviceIntPoint)

Move the window to a point.
Source§

fn request_resize_to( &self, webview: WebView, requested_outer_size: DeviceIntSize, )

Try to resize the window that contains this WebView to the provided outer size. These resize requests can come from page content. Servo will ensure that the values are greater than zero, but it is up to the embedder to limit the maximum size. For instance, a reasonable limitation might be that the final size is no larger than the screen size.
Source§

fn request_authentication( &self, webview: WebView, authentication_request: AuthenticationRequest, )

Source§

fn request_open_auxiliary_webview( &self, parent_webview: WebView, ) -> Option<WebView>

Whether or not to allow script to open a new WebView. If not handled by the embedder, these requests are automatically denied.
Source§

fn notify_closed(&self, webview: WebView)

Page content has closed this WebView via window.close(). It’s the embedder’s responsibility to remove the WebView from the interface when this notification occurs.
Source§

fn notify_input_event_handled( &self, webview: WebView, id: InputEventId, result: InputEventResult, )

An input event passed to this WebView via WebView::notify_input_event has been handled by Servo. This allows post-procesing of input events, such as chaining up unhandled events to parent UI elements.
Source§

fn notify_cursor_changed(&self, webview: WebView, cursor: Cursor)

The Cursor of the currently loaded page in this WebView has changed. The new cursor can accessed via WebView::cursor.
Source§

fn notify_load_status_changed(&self, webview: WebView, status: LoadStatus)

The LoadStatus of the currently loading or loaded page in this WebView has changed. The new status can accessed via WebView::load_status.
Source§

fn notify_fullscreen_state_changed( &self, webview: WebView, fullscreen_state: bool, )

A notification that the WebView has entered or exited fullscreen mode. This is an opportunity for the embedder to transition the containing window into or out of fullscreen mode and to show or hide extra UI elements. Regardless of how the notification is handled, the page will enter or leave fullscreen state internally according to the Fullscreen API.
Source§

fn show_bluetooth_device_dialog( &self, webview: WebView, devices: Vec<String>, response_sender: GenericSender<Option<String>>, )

Open dialog to select bluetooth device. TODO: This API needs to be reworked to match the new model of how responses are sent.
Source§

fn request_permission( &self, webview: WebView, permission_request: PermissionRequest, )

Content in a WebView is requesting permission to access a feature requiring permission from the user. The embedder should allow or deny the request, either by reading a cached value or querying the user for permission via the user interface.
Source§

fn notify_new_frame_ready(&self, webview: WebView)

Notify the embedder that it needs to present a new frame.
Source§

fn play_gamepad_haptic_effect( &self, _webview: WebView, index: usize, effect_type: GamepadHapticEffectType, effect_complete_sender: IpcSender<bool>, )

Request to play a haptic effect on a connected gamepad.
Source§

fn stop_gamepad_haptic_effect( &self, _webview: WebView, index: usize, haptic_stop_sender: IpcSender<bool>, )

Request to stop a haptic effect on a connected gamepad.
Source§

fn show_embedder_control( &self, webview: WebView, embedder_control: EmbedderControl, )

Request that the embedder show UI elements for form controls that are not integrated into page content, such as dropdowns for <select> elements.
Source§

fn hide_embedder_control( &self, webview: WebView, embedder_control_id: EmbedderControlId, )

Request that the embedder hide and ignore a previous EmbedderControl request, if it hasn’t already responded to it. Read more
Source§

fn notify_favicon_changed(&self, webview: WebView)

The favicon of the currently loaded page in this WebView has changed. The new favicon [Image] can accessed via WebView::favicon.
Source§

fn notify_media_session_event(&self, webview: WebView, event: MediaSessionEvent)

Notifies the embedder about media session events (i.e. when there is metadata for the active media session, playback state changes…).
Source§

fn notify_crashed( &self, webview: WebView, reason: String, backtrace: Option<String>, )

A pipeline in the webview panicked. First string is the reason, second one is the backtrace.
Source§

fn notify_url_changed(&self, _webview: WebView, _url: Url)

The URL of the currently loaded page in this WebView has changed. The new URL can accessed via WebView::url.
Source§

fn notify_focus_changed(&self, _webview: WebView, _focused: bool)

This WebView has either become focused or lost focus. Whether or not the WebView is focused can be accessed via WebView::focused.
Source§

fn notify_animating_changed(&self, _webview: WebView, _animating: bool)

This WebView has either started to animate or stopped animating. When a WebView is animating, it is up to the embedding application ensure that Servo::spin_event_loop is called at regular intervals in order to update the painted contents of the WebView.
Source§

fn request_navigation( &self, _webview: WebView, _navigation_request: NavigationRequest, )

Whether or not to allow a WebView to load a URL in its main frame or one of its nested <iframe>s. NavigationRequests are accepted by default.
Source§

fn request_unload(&self, _webview: WebView, _unload_request: AllowOrDenyRequest)

Whether or not to allow a WebView to unload a Document in its main frame or one of its nested <iframe>s. By default, unloads are allowed.
Source§

fn request_protocol_handler( &self, _webview: WebView, _protocol_handler_registration: ProtocolHandlerRegistration, _allow_deny_request: AllowOrDenyRequest, )

Whether or not to allow a WebView to (un)register a protocol handler (e.g. mailto:). Typically an embedder application will show a permissions prompt when this happens to confirm a protocol handler is allowed. By default, requests are denied. For more information, see the specification: https://html.spec.whatwg.org/multipage/#custom-handlers
Source§

fn load_web_resource(&self, _webview: WebView, _load: WebResourceLoad)

Triggered when this WebView will load a web (HTTP/HTTPS) resource. The load may be intercepted and alternate contents can be loaded by the client by calling WebResourceLoad::intercept. If not handled, the load will continue as normal. Read more
Source§

fn show_notification(&self, _webview: WebView, _notification: Notification)

Request to display a notification.

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> AsVoidPtr for T

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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

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

Source§

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

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

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

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.
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> 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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(value: T, _simd: S) -> 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, 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<T> Upcast<T> for T

Source§

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

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

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T