servo/servo_delegate.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use embedder_traits::Notification;
use crate::Servo;
use crate::webview_delegate::{AllowOrDenyRequest, WebResourceLoad};
#[derive(Debug)]
pub enum ServoError {
/// The channel to the off-the-main-thread web engine has been lost. No further
/// attempts to communicate will happen. This is an unrecoverable error in Servo.
LostConnectionWithBackend,
/// The devtools server, used to expose pages to remote web inspectors has failed
/// to start.
DevtoolsFailedToStart,
/// Failed to send response to delegate request.
ResponseFailedToSend(bincode::Error),
}
pub trait ServoDelegate {
/// Notification that Servo has received a major error.
fn notify_error(&self, _servo: &Servo, _error: ServoError) {}
/// Report that the DevTools server has started on the given `port`. The `token` that
/// be used to bypass the permission prompt from the DevTools client.
fn notify_devtools_server_started(&self, _servo: &Servo, _port: u16, _token: String) {}
/// Request a DevTools connection from a DevTools client. Typically an embedder application
/// will show a permissions prompt when this happens to confirm a connection is allowed.
fn request_devtools_connection(&self, _servo: &Servo, _request: AllowOrDenyRequest) {}
/// Any [`WebView`] in this Servo instance has either started to animate or WebXR is
/// running. 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`].
fn notify_animating_changed(&self, _animating: bool) {}
/// Triggered when Servo 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.
///
/// Note: This delegate method is called for all resource loads not associated with a
/// [`WebView`]. For loads associated with a [`WebView`], Servo will call
/// [`crate::WebViewDelegate::load_web_resource`].
fn load_web_resource(&self, _load: WebResourceLoad) {}
/// Request to display a notification.
fn show_notification(&self, _notification: Notification) {}
}
pub(crate) struct DefaultServoDelegate;
impl ServoDelegate for DefaultServoDelegate {}