From a17b2e0cb247e2e6e8d0a66479148d531f33e578 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Mon, 17 Feb 2025 00:13:19 +0100 Subject: [PATCH] servoshell: Actually set the Servo delegate in servoshell (#35502) This was implemented, but unset. Fixes #35481. Signed-off-by: Martin Robinson --- components/servo/lib.rs | 10 +++++----- ports/servoshell/desktop/app_state.rs | 4 +++- ports/servoshell/egl/app_state.rs | 7 +++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 1e8f89d9b66..1a514a6f8ad 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -191,7 +191,7 @@ mod media_platform { /// loop to pump messages between the embedding application and /// various browser components. pub struct Servo { - delegate: Rc, + delegate: RefCell>, compositor: Rc>, constellation_proxy: ConstellationProxy, embedder_receiver: Receiver, @@ -536,7 +536,7 @@ impl Servo { ); Servo { - delegate: Rc::new(DefaultServoDelegate), + delegate: RefCell::new(Rc::new(DefaultServoDelegate)), compositor: Rc::new(RefCell::new(compositor)), constellation_proxy: ConstellationProxy::new(constellation_chan), embedder_receiver, @@ -546,11 +546,11 @@ impl Servo { } pub fn delegate(&self) -> Rc { - self.delegate.clone() + self.delegate.borrow().clone() } - pub fn set_delegate(&mut self, delegate: Rc) { - self.delegate = delegate; + pub fn set_delegate(&self, delegate: Rc) { + *self.delegate.borrow_mut() = delegate; } fn create_media_window_gl_context( diff --git a/ports/servoshell/desktop/app_state.rs b/ports/servoshell/desktop/app_state.rs index b9df312ae71..154daea0712 100644 --- a/ports/servoshell/desktop/app_state.rs +++ b/ports/servoshell/desktop/app_state.rs @@ -89,6 +89,7 @@ impl RunningAppState { window: Rc, headless: bool, ) -> RunningAppState { + servo.set_delegate(Rc::new(ServoShellServoDelegate)); RunningAppState { servo, 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) { info!("Devtools Server running on port {port}"); } diff --git a/ports/servoshell/egl/app_state.rs b/ports/servoshell/egl/app_state.rs index 23d1f8b81f4..1dc99f6c2d8 100644 --- a/ports/servoshell/egl/app_state.rs +++ b/ports/servoshell/egl/app_state.rs @@ -98,7 +98,8 @@ struct RunningAppStateInner { context_menu_sender: Option>, } -impl ServoDelegate for RunningAppState { +struct ServoShellServoDelegate; +impl ServoDelegate for ServoShellServoDelegate { fn notify_devtools_server_started(&self, _servo: &Servo, port: u16, _token: String) { 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("about:blank").ok()) .unwrap(); + + servo.set_delegate(Rc::new(ServoShellServoDelegate)); + let app_state = Rc::new(Self { rendering_context, servo, @@ -306,7 +310,6 @@ impl RunningAppState { }); app_state.new_toplevel_webview(initial_url); - app_state }