aboutsummaryrefslogtreecommitdiffstats
path: root/ports/servoshell/desktop/app.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ports/servoshell/desktop/app.rs')
-rw-r--r--ports/servoshell/desktop/app.rs62
1 files changed, 30 insertions, 32 deletions
diff --git a/ports/servoshell/desktop/app.rs b/ports/servoshell/desktop/app.rs
index 880178aaff8..4dde169fb4b 100644
--- a/ports/servoshell/desktop/app.rs
+++ b/ports/servoshell/desktop/app.rs
@@ -11,16 +11,14 @@ use std::rc::Rc;
use std::time::Instant;
use std::{env, fs};
+use ::servo::ServoBuilder;
use log::{info, trace, warn};
+use net::protocols::ProtocolRegistry;
+use servo::EventLoopWaker;
use servo::config::opts::Opts;
use servo::config::prefs::Preferences;
-use servo::servo_config::pref;
use servo::servo_url::ServoUrl;
use servo::user_content_manager::{UserContentManager, UserScript};
-use servo::webxr::glwindow::GlWindowDiscovery;
-#[cfg(target_os = "windows")]
-use servo::webxr::openxr::{AppInfo, OpenXrDiscovery};
-use servo::{EventLoopWaker, Servo};
use url::Url;
use winit::application::ApplicationHandler;
use winit::event::WindowEvent;
@@ -32,8 +30,9 @@ use super::events_loop::{EventsLoop, WakerEvent};
use super::minibrowser::{Minibrowser, MinibrowserEvent};
use super::{headed_window, headless_window};
use crate::desktop::app_state::RunningAppState;
-use crate::desktop::embedder::{EmbedderCallbacks, XrDiscovery};
+use crate::desktop::protocols;
use crate::desktop::tracing::trace_winit_event;
+use crate::desktop::webxr::XrDiscoveryWebXrRegistry;
use crate::desktop::window_trait::WindowPortsMethods;
use crate::parser::{get_default_url, location_bar_input_to_url};
use crate::prefs::ServoShellPreferences;
@@ -115,26 +114,6 @@ impl App {
self.suspended.set(false);
let (_, window) = self.windows.iter().next().unwrap();
- let xr_discovery = if pref!(dom_webxr_openxr_enabled) && !headless {
- #[cfg(target_os = "windows")]
- let openxr = {
- let app_info = AppInfo::new("Servoshell", 0, "Servo", 0);
- Some(XrDiscovery::OpenXr(OpenXrDiscovery::new(None, app_info)))
- };
- #[cfg(not(target_os = "windows"))]
- let openxr = None;
-
- openxr
- } else if pref!(dom_webxr_glwindow_enabled) && !headless {
- let window = window.new_glwindow(event_loop.unwrap());
- Some(XrDiscovery::GlWindow(GlWindowDiscovery::new(window)))
- } else {
- None
- };
-
- // Implements embedder methods, used by libservo and constellation.
- let embedder = Box::new(EmbedderCallbacks::new(self.waker.clone(), xr_discovery));
-
let mut user_content_manager = UserContentManager::new();
for script in load_userscripts(self.servoshell_preferences.userscripts_directory.as_deref())
.expect("Loading userscripts failed")
@@ -142,13 +121,32 @@ impl App {
user_content_manager.add_script(script);
}
- let servo = Servo::new(
- self.opts.clone(),
- self.preferences.clone(),
- window.rendering_context(),
- embedder,
- user_content_manager,
+ let mut protocol_registry = ProtocolRegistry::default();
+ protocol_registry.register(
+ "urlinfo",
+ protocols::urlinfo::UrlInfoProtocolHander::default(),
+ );
+ protocol_registry.register("servo", protocols::servo::ServoProtocolHandler::default());
+ protocol_registry.register(
+ "resource",
+ protocols::resource::ResourceProtocolHandler::default(),
);
+
+ let servo_builder = ServoBuilder::new(window.rendering_context())
+ .opts(self.opts.clone())
+ .preferences(self.preferences.clone())
+ .user_content_manager(user_content_manager)
+ .protocol_registry(protocol_registry)
+ .event_loop_waker(self.waker.clone());
+
+ #[cfg(feature = "webxr")]
+ let servo_builder = servo_builder.webxr_registry(XrDiscoveryWebXrRegistry::new_boxed(
+ window.clone(),
+ event_loop,
+ &self.preferences,
+ ));
+
+ let servo = servo_builder.build();
servo.setup_logging();
let running_state = Rc::new(RunningAppState::new(