@@ -20,8 +20,8 @@ use servo::{
2020 AllowOrDenyRequest , AuthenticationRequest , EmbedderControl , EmbedderControlId ,
2121 GamepadHapticEffectType , InputEvent , InputEventId , InputEventResult , JSValue , LoadStatus ,
2222 PermissionRequest , Servo , ServoDelegate , ServoError , SimpleDialog , TraversalId ,
23- WebDriverCommandMsg , WebDriverJSResult , WebDriverLoadStatus , WebDriverSenders ,
24- WebDriverUserPrompt , WebView , WebViewBuilder , WebViewDelegate ,
23+ WebDriverCommandMsg , WebDriverLoadStatus , WebDriverUserPrompt , WebView , WebViewBuilder ,
24+ WebViewDelegate ,
2525} ;
2626use url:: Url ;
2727
@@ -30,6 +30,7 @@ use super::dialog::Dialog;
3030use super :: gamepad:: GamepadSupport ;
3131use super :: window_trait:: WindowPortsMethods ;
3232use crate :: prefs:: ServoShellPreferences ;
33+ use crate :: running_app_state:: { RunningAppStateBase , RunningAppStateTrait } ;
3334
3435pub ( crate ) enum AppState {
3536 Initializing ,
@@ -38,6 +39,7 @@ pub(crate) enum AppState {
3839}
3940
4041pub ( crate ) struct RunningAppState {
42+ base : RunningAppStateBase ,
4143 /// A handle to the Servo instance of the [`RunningAppState`]. This is not stored inside
4244 /// `inner` so that we can keep a reference to Servo in order to spin the event loop,
4345 /// which will in turn call delegates doing a mutable borrow on `inner`.
@@ -48,7 +50,6 @@ pub(crate) struct RunningAppState {
4850 /// A [`Receiver`] for receiving commands from a running WebDriver server, if WebDriver
4951 /// was enabled.
5052 webdriver_receiver : Option < Receiver < WebDriverCommandMsg > > ,
51- webdriver_senders : RefCell < WebDriverSenders > ,
5253 inner : RefCell < RunningAppStateInner > ,
5354}
5455
@@ -108,6 +109,16 @@ impl Drop for RunningAppState {
108109 }
109110}
110111
112+ impl RunningAppStateTrait for RunningAppState {
113+ fn base ( & self ) -> & RunningAppStateBase {
114+ & self . base
115+ }
116+
117+ fn base_mut ( & mut self ) -> & mut RunningAppStateBase {
118+ & mut self . base
119+ }
120+ }
121+
111122impl RunningAppState {
112123 pub fn new (
113124 servo : Servo ,
@@ -122,10 +133,10 @@ impl RunningAppState {
122133 None
123134 } ;
124135 RunningAppState {
136+ base : RunningAppStateBase :: new ( ) ,
125137 servo,
126138 servoshell_preferences,
127139 webdriver_receiver,
128- webdriver_senders : RefCell :: default ( ) ,
129140 inner : RefCell :: new ( RunningAppStateInner {
130141 webviews : HashMap :: default ( ) ,
131142 creation_order : Default :: default ( ) ,
@@ -420,6 +431,7 @@ impl RunningAppState {
420431 // Dialogs block the page load, so need need to notify WebDriver
421432 let webview_id = webview. id ( ) ;
422433 if let Some ( sender) = self
434+ . base ( )
423435 . webdriver_senders
424436 . borrow_mut ( )
425437 . load_status_senders
@@ -457,37 +469,6 @@ impl RunningAppState {
457469 . position ( |webview| webview. 0 == focused_id)
458470 }
459471
460- pub ( crate ) fn set_pending_traversal (
461- & self ,
462- traversal_id : TraversalId ,
463- sender : GenericSender < WebDriverLoadStatus > ,
464- ) {
465- self . webdriver_senders
466- . borrow_mut ( )
467- . pending_traversals
468- . insert ( traversal_id, sender) ;
469- }
470-
471- pub ( crate ) fn set_load_status_sender (
472- & self ,
473- webview_id : WebViewId ,
474- sender : GenericSender < WebDriverLoadStatus > ,
475- ) {
476- self . webdriver_senders
477- . borrow_mut ( )
478- . load_status_senders
479- . insert ( webview_id, sender) ;
480- }
481-
482- pub ( crate ) fn set_script_command_interrupt_sender (
483- & self ,
484- sender : Option < IpcSender < WebDriverJSResult > > ,
485- ) {
486- self . webdriver_senders
487- . borrow_mut ( )
488- . script_evaluation_interrupt_sender = sender;
489- }
490-
491472 /// Interrupt any ongoing WebDriver-based script evaluation.
492473 ///
493474 /// From <https://w3c.github.io/webdriver/#dfn-execute-a-function-body>:
@@ -499,6 +480,7 @@ impl RunningAppState {
499480 /// > other steps of this algorithm in parallel.
500481 fn interrupt_webdriver_script_evaluation ( & self ) {
501482 if let Some ( sender) = & self
483+ . base ( )
502484 . webdriver_senders
503485 . borrow ( )
504486 . script_evaluation_interrupt_sender
@@ -511,13 +493,6 @@ impl RunningAppState {
511493 }
512494 }
513495
514- pub ( crate ) fn remove_load_status_sender ( & self , webview_id : WebViewId ) {
515- self . webdriver_senders
516- . borrow_mut ( )
517- . load_status_senders
518- . remove ( & webview_id) ;
519- }
520-
521496 /// Return a list of all webviews that have favicons that have not yet been loaded by egui.
522497 pub ( crate ) fn take_pending_favicon_loads ( & self ) -> Vec < WebViewId > {
523498 mem:: take ( & mut self . inner_mut ( ) . pending_favicon_loads )
@@ -619,7 +594,7 @@ impl WebViewDelegate for RunningAppState {
619594 }
620595
621596 fn notify_traversal_complete ( & self , _webview : servo:: WebView , traversal_id : TraversalId ) {
622- let mut webdriver_state = self . webdriver_senders . borrow_mut ( ) ;
597+ let mut webdriver_state = self . base ( ) . webdriver_senders . borrow_mut ( ) ;
623598 if let Entry :: Occupied ( entry) = webdriver_state. pending_traversals . entry ( traversal_id) {
624599 let sender = entry. remove ( ) ;
625600 let _ = sender. send ( WebDriverLoadStatus :: Complete ) ;
@@ -713,6 +688,7 @@ impl WebViewDelegate for RunningAppState {
713688
714689 if status == LoadStatus :: Complete {
715690 if let Some ( sender) = self
691+ . base ( )
716692 . webdriver_senders
717693 . borrow_mut ( )
718694 . load_status_senders
0 commit comments