servoshell: Actually set the Servo delegate in servoshell (#35502)

This was implemented, but unset.

Fixes #35481.
Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-02-17 00:13:19 +01:00 committed by GitHub
parent 966888615f
commit a17b2e0cb2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 13 additions and 8 deletions

View file

@ -191,7 +191,7 @@ mod media_platform {
/// loop to pump messages between the embedding application and /// loop to pump messages between the embedding application and
/// various browser components. /// various browser components.
pub struct Servo { pub struct Servo {
delegate: Rc<dyn ServoDelegate>, delegate: RefCell<Rc<dyn ServoDelegate>>,
compositor: Rc<RefCell<IOCompositor>>, compositor: Rc<RefCell<IOCompositor>>,
constellation_proxy: ConstellationProxy, constellation_proxy: ConstellationProxy,
embedder_receiver: Receiver<EmbedderMsg>, embedder_receiver: Receiver<EmbedderMsg>,
@ -536,7 +536,7 @@ impl Servo {
); );
Servo { Servo {
delegate: Rc::new(DefaultServoDelegate), delegate: RefCell::new(Rc::new(DefaultServoDelegate)),
compositor: Rc::new(RefCell::new(compositor)), compositor: Rc::new(RefCell::new(compositor)),
constellation_proxy: ConstellationProxy::new(constellation_chan), constellation_proxy: ConstellationProxy::new(constellation_chan),
embedder_receiver, embedder_receiver,
@ -546,11 +546,11 @@ impl Servo {
} }
pub fn delegate(&self) -> Rc<dyn ServoDelegate> { pub fn delegate(&self) -> Rc<dyn ServoDelegate> {
self.delegate.clone() self.delegate.borrow().clone()
} }
pub fn set_delegate(&mut self, delegate: Rc<dyn ServoDelegate>) { pub fn set_delegate(&self, delegate: Rc<dyn ServoDelegate>) {
self.delegate = delegate; *self.delegate.borrow_mut() = delegate;
} }
fn create_media_window_gl_context( fn create_media_window_gl_context(

View file

@ -89,6 +89,7 @@ impl RunningAppState {
window: Rc<dyn WindowPortsMethods>, window: Rc<dyn WindowPortsMethods>,
headless: bool, headless: bool,
) -> RunningAppState { ) -> RunningAppState {
servo.set_delegate(Rc::new(ServoShellServoDelegate));
RunningAppState { RunningAppState {
servo, servo,
inner: RefCell::new(RunningAppStateInner { inner: RefCell::new(RunningAppStateInner {
@ -315,7 +316,8 @@ impl RunningAppState {
} }
} }
impl ServoDelegate for RunningAppState { struct ServoShellServoDelegate;
impl ServoDelegate for ServoShellServoDelegate {
fn notify_devtools_server_started(&self, _servo: &Servo, port: u16, _token: String) { fn notify_devtools_server_started(&self, _servo: &Servo, port: u16, _token: String) {
info!("Devtools Server running on port {port}"); info!("Devtools Server running on port {port}");
} }

View file

@ -98,7 +98,8 @@ struct RunningAppStateInner {
context_menu_sender: Option<IpcSender<ContextMenuResult>>, context_menu_sender: Option<IpcSender<ContextMenuResult>>,
} }
impl ServoDelegate for RunningAppState { struct ServoShellServoDelegate;
impl ServoDelegate for ServoShellServoDelegate {
fn notify_devtools_server_started(&self, _servo: &Servo, port: u16, _token: String) { fn notify_devtools_server_started(&self, _servo: &Servo, port: u16, _token: String) {
info!("Devtools Server running on port {port}"); info!("Devtools Server running on port {port}");
} }
@ -291,6 +292,9 @@ impl RunningAppState {
.or_else(|| Url::parse(&servoshell_preferences.homepage).ok()) .or_else(|| Url::parse(&servoshell_preferences.homepage).ok())
.or_else(|| Url::parse("about:blank").ok()) .or_else(|| Url::parse("about:blank").ok())
.unwrap(); .unwrap();
servo.set_delegate(Rc::new(ServoShellServoDelegate));
let app_state = Rc::new(Self { let app_state = Rc::new(Self {
rendering_context, rendering_context,
servo, servo,
@ -306,7 +310,6 @@ impl RunningAppState {
}); });
app_state.new_toplevel_webview(initial_url); app_state.new_toplevel_webview(initial_url);
app_state app_state
} }