mirror of
https://github.com/servo/servo.git
synced 2025-10-04 02:29:12 +01:00
Many types used directly in the `libservo` API are in the `script_traits` crate, which was created to break circular dependencies. Move all API exposed types to `embedder_traits` which now contains types exposed via the `libservo` embedding API. Also expose these at the root of the `libservo` `servo` crate so that the API won't break when they move around in the future. The idea with `embedder_traits` in the future is that it contains types that are available throughout servo because they are used in the embedding API and thus should have minimal dependencies on other Servo crates (a bit like `base`). Signed-off-by: Martin Robinson <mrobinson@igalia.com>
73 lines
2.4 KiB
Rust
73 lines
2.4 KiB
Rust
/* 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/. */
|
|
|
|
//! Implements the global methods required by Servo (not window/gl/compositor related).
|
|
|
|
use net::protocols::ProtocolRegistry;
|
|
use servo::compositing::windowing::EmbedderMethods;
|
|
use servo::servo_config::pref;
|
|
use servo::{EmbedderProxy, EventLoopWaker};
|
|
use webxr::glwindow::GlWindowDiscovery;
|
|
#[cfg(target_os = "windows")]
|
|
use webxr::openxr::OpenXrDiscovery;
|
|
|
|
use crate::desktop::protocols::{resource, servo as servo_handler, urlinfo};
|
|
|
|
pub enum XrDiscovery {
|
|
GlWindow(GlWindowDiscovery),
|
|
#[cfg(target_os = "windows")]
|
|
OpenXr(OpenXrDiscovery),
|
|
}
|
|
|
|
pub struct EmbedderCallbacks {
|
|
event_loop_waker: Box<dyn EventLoopWaker>,
|
|
xr_discovery: Option<XrDiscovery>,
|
|
}
|
|
|
|
impl EmbedderCallbacks {
|
|
pub fn new(
|
|
event_loop_waker: Box<dyn EventLoopWaker>,
|
|
xr_discovery: Option<XrDiscovery>,
|
|
) -> EmbedderCallbacks {
|
|
EmbedderCallbacks {
|
|
event_loop_waker,
|
|
xr_discovery,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl EmbedderMethods for EmbedderCallbacks {
|
|
fn create_event_loop_waker(&mut self) -> Box<dyn EventLoopWaker> {
|
|
self.event_loop_waker.clone()
|
|
}
|
|
|
|
#[cfg(feature = "webxr")]
|
|
fn register_webxr(
|
|
&mut self,
|
|
xr: &mut webxr::MainThreadRegistry,
|
|
_embedder_proxy: EmbedderProxy,
|
|
) {
|
|
if pref!(dom_webxr_test) {
|
|
xr.register_mock(webxr::headless::HeadlessMockDiscovery::new());
|
|
} else if let Some(xr_discovery) = self.xr_discovery.take() {
|
|
match xr_discovery {
|
|
XrDiscovery::GlWindow(discovery) => xr.register(discovery),
|
|
#[cfg(target_os = "windows")]
|
|
XrDiscovery::OpenXr(discovery) => xr.register(discovery),
|
|
}
|
|
}
|
|
}
|
|
|
|
fn get_protocol_handlers(&self) -> ProtocolRegistry {
|
|
let mut registry = ProtocolRegistry::default();
|
|
registry.register("urlinfo", urlinfo::UrlInfoProtocolHander::default());
|
|
registry.register("servo", servo_handler::ServoProtocolHandler::default());
|
|
registry.register("resource", resource::ResourceProtocolHandler::default());
|
|
registry
|
|
}
|
|
|
|
fn get_version_string(&self) -> Option<String> {
|
|
crate::servo_version().into()
|
|
}
|
|
}
|