mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
servoshell: Do not focus and raise new auxiliary WebDriver-created WebView
s (#37284)
For Desktop port of `request_open_auxiliary_webview`, stay on the original WebView if the request originates WebDriver. This is to make sure `webdriver_server::handle_new_window` does not focus the new window, according to spec. Seec7eba2dbba/tests/wpt/tests/webdriver/tests/classic/new_window/new_window.py (L31-L37)
**To clarify**: this won't change the behaviour when user interacts, but only affects WebDriver [New Window](https://w3c.github.io/webdriver/#new-window). Testing: `./mach test-wpt -r --log-raw "D:/servo log/all.txt" ./tests/wpt/tests/webdriver/tests/classic --product servodriver` based on96b0973037
--------- Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
This commit is contained in:
parent
0fa3de3937
commit
a3c792e5aa
27 changed files with 76 additions and 158 deletions
|
@ -4702,25 +4702,38 @@ where
|
|||
WebDriverCommandMsg::CloseWebView(webview_id) => {
|
||||
self.handle_close_top_level_browsing_context(webview_id);
|
||||
},
|
||||
WebDriverCommandMsg::NewWebView(webview_id, sender, load_sender) => {
|
||||
let (chan, port) = match ipc::channel() {
|
||||
WebDriverCommandMsg::NewWebView(
|
||||
originating_webview_id,
|
||||
response_sender,
|
||||
load_status_sender,
|
||||
) => {
|
||||
let (embedder_sender, receiver) = match ipc::channel() {
|
||||
Ok(result) => result,
|
||||
Err(error) => return warn!("Failed to create channel: {error:?}"),
|
||||
};
|
||||
self.embedder_proxy
|
||||
.send(EmbedderMsg::AllowOpeningWebView(webview_id, chan));
|
||||
let (webview_id, viewport_details) = match port.recv() {
|
||||
Ok(Some((webview_id, viewport_details))) => (webview_id, viewport_details),
|
||||
self.embedder_proxy.send(EmbedderMsg::AllowOpeningWebView(
|
||||
originating_webview_id,
|
||||
embedder_sender,
|
||||
));
|
||||
let (new_webview_id, viewport_details) = match receiver.recv() {
|
||||
Ok(Some((new_webview_id, viewport_details))) => {
|
||||
(new_webview_id, viewport_details)
|
||||
},
|
||||
Ok(None) => return warn!("Embedder refused to allow opening webview"),
|
||||
Err(error) => return warn!("Failed to receive webview id: {error:?}"),
|
||||
};
|
||||
self.handle_new_top_level_browsing_context(
|
||||
ServoUrl::parse_with_base(None, "about:blank").expect("Infallible parse"),
|
||||
webview_id,
|
||||
new_webview_id,
|
||||
viewport_details,
|
||||
Some(load_sender),
|
||||
Some(load_status_sender),
|
||||
);
|
||||
let _ = sender.send(webview_id);
|
||||
if let Err(error) = response_sender.send(new_webview_id) {
|
||||
error!(
|
||||
"WebDriverCommandMsg::NewWebView: IPC error when sending new_webview_id \
|
||||
to webdriver server: {error}"
|
||||
);
|
||||
}
|
||||
},
|
||||
WebDriverCommandMsg::FocusWebView(webview_id) => {
|
||||
self.handle_focus_web_view(webview_id);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue