WebDriver: Wait focus to complete when switching window (#38160)

Previously the webdriver do not wait for focus to complete, which can
cause some instability.

No matter interact as human or webdriver, the focus chain always goes
as: Embedder forwards -> Constellation (do some updates) -> Embedder (do
some updates).

---------

Signed-off-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
Euclid Ye 2025-07-21 12:18:21 +08:00 committed by GitHub
parent 7c96084298
commit b0a29393a9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 48 additions and 23 deletions

View file

@ -1266,9 +1266,14 @@ impl Handler {
let webview_id = *webview_id;
session.webview_id = webview_id;
session.browsing_context_id = BrowsingContextId::from(webview_id);
let msg = WebDriverCommandMsg::FocusWebView(webview_id);
let (sender, receiver) = ipc::channel().unwrap();
let msg = WebDriverCommandMsg::FocusWebView(webview_id, sender);
self.send_message_to_embedder(msg)?;
if wait_for_script_response(receiver)? {
debug!("Focus new webview successfully");
} else {
debug!("Focus new webview failed, it may not exist anymore");
}
Ok(WebDriverResponse::Void)
} else {
Err(WebDriverError::new(