webdriver: Keep constellation alive and Open new top-level browsing context with new session request when none is open (#37410)

Keep Constellation alive even when all browsing context closed in
WebDriver mode. In this case, when creating a new session, we would open
a new top-level browsing context.

Fixes: #37408
Testing: `./mach test-wpt -r
.\tests\wpt\tests\webdriver\tests\classic\close_window\close.py
--product servodriver`

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
Signed-off-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
Euclid Ye 2025-07-30 14:41:58 +08:00 committed by GitHub
parent 0e18057863
commit 8b3e7b1c6a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 50 additions and 41 deletions

View file

@ -369,8 +369,9 @@ impl App {
if let Err(error) = response_sender.send(new_webview.id()) {
warn!("Failed to send response of NewWebview: {error}");
}
running_state.set_load_status_sender(new_webview.id(), load_status_sender);
if let Some(load_status_sender) = load_status_sender {
running_state.set_load_status_sender(new_webview.id(), load_status_sender);
}
},
WebDriverCommandMsg::CloseWebView(webview_id) => {
running_state.close_webview(webview_id);
@ -446,8 +447,10 @@ impl App {
warn!("Failed to send response of GetViewportSize: {error}");
}
},
// This is only received when start new session.
WebDriverCommandMsg::GetFocusedWebView(sender) => {
let focused_webview = running_state.focused_webview();
if let Err(error) = sender.send(focused_webview.map(|w| w.id())) {
warn!("Failed to send response of GetFocusedWebView: {error}");
};

View file

@ -272,7 +272,13 @@ impl RunningAppState {
Some(last_created_webview) => {
last_created_webview.focus();
},
None => self.servo.start_shutting_down(),
None if self.servoshell_preferences.webdriver_port.is_none() => {
self.servo.start_shutting_down()
},
None => {
// For WebDriver, don't shut down when last webview closed
// https://github.com/servo/servo/issues/37408
},
}
}