mirror of
https://github.com/servo/servo.git
synced 2025-09-27 23:30:08 +01:00
libservo: Expose a ServoBuilder
(#36549)
Expose a `ServoBuilder` for easily creating Servo instances using default values. This change enables removing `EmbedderTraits`. Testing: This is covered by `Servo` unit tests. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
7a8e75266f
commit
d8a7abda69
17 changed files with 252 additions and 271 deletions
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue