mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
webdriver: Move NewWebView
, FocusWebView
, GetWindowSize
, and SetWindowSize
to servoshell (#37555)
Follow up to: https://github.com/servo/servo/pull/36714 Moving webdriver [context commands](https://www.w3.org/TR/webdriver2/#contexts) to be handled in embedder: - [x] New Window command - `WebdriverCommandMsg::NewWebView` - [x] Switch To Window command - `WebdriverCommandMsg::FocusWebView` - [x] Resizing commands cc: @xiaochengh --------- Signed-off-by: batu_hoang <longvatrong111@gmail.com>
This commit is contained in:
parent
5ea003752a
commit
d970584332
8 changed files with 148 additions and 97 deletions
|
@ -517,11 +517,8 @@ impl Handler {
|
|||
}
|
||||
|
||||
fn focus_webview_id(&self) -> WebDriverResult<WebViewId> {
|
||||
debug!("Getting focused context.");
|
||||
let (sender, receiver) = ipc::channel().unwrap();
|
||||
|
||||
let msg = EmbedderToConstellationMessage::GetFocusTopLevelBrowsingContext(sender.clone());
|
||||
self.constellation_chan.send(msg).unwrap();
|
||||
self.send_message_to_embedder(WebDriverCommandMsg::GetFocusedWebView(sender.clone()))?;
|
||||
// Wait until the document is ready before returning the top-level browsing context id.
|
||||
match wait_for_script_response(receiver)? {
|
||||
Some(webview_id) => Ok(webview_id),
|
||||
|
@ -807,18 +804,14 @@ impl Handler {
|
|||
|
||||
self.verify_top_level_browsing_context_is_open(webview_id)?;
|
||||
|
||||
let cmd_msg = WebDriverCommandMsg::GetWindowSize(webview_id, sender);
|
||||
|
||||
self.constellation_chan
|
||||
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
|
||||
.unwrap();
|
||||
self.send_message_to_embedder(WebDriverCommandMsg::GetWindowSize(webview_id, sender))?;
|
||||
|
||||
let window_size = wait_for_script_response(receiver)?;
|
||||
let window_size_response = WindowRectResponse {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: window_size.width as i32,
|
||||
height: window_size.height as i32,
|
||||
width: window_size.width,
|
||||
height: window_size.height,
|
||||
};
|
||||
Ok(WebDriverResponse::WindowRect(window_size_response))
|
||||
}
|
||||
|
@ -844,30 +837,30 @@ impl Handler {
|
|||
// Step 12. If session's current top-level browsing context is no longer open,
|
||||
// return error with error code no such window.
|
||||
self.verify_top_level_browsing_context_is_open(webview_id)?;
|
||||
let cmd_msg = WebDriverCommandMsg::SetWindowSize(webview_id, size.to_i32(), sender.clone());
|
||||
|
||||
self.constellation_chan
|
||||
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
|
||||
.unwrap();
|
||||
self.send_message_to_embedder(WebDriverCommandMsg::SetWindowSize(
|
||||
webview_id,
|
||||
size.to_i32(),
|
||||
sender.clone(),
|
||||
))?;
|
||||
|
||||
let timeout = self.resize_timeout;
|
||||
let constellation_chan = self.constellation_chan.clone();
|
||||
let embedder_sender = self.embedder_sender.clone();
|
||||
let waker = self.event_loop_waker.clone();
|
||||
thread::spawn(move || {
|
||||
// On timeout, we send a GetWindowSize message to the constellation,
|
||||
// which will give the current window size.
|
||||
thread::sleep(Duration::from_millis(timeout as u64));
|
||||
let cmd_msg = WebDriverCommandMsg::GetWindowSize(webview_id, sender);
|
||||
constellation_chan
|
||||
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
|
||||
.unwrap();
|
||||
let _ = embedder_sender.send(WebDriverCommandMsg::GetWindowSize(webview_id, sender));
|
||||
waker.wake();
|
||||
});
|
||||
|
||||
let window_size = wait_for_script_response(receiver)?;
|
||||
let window_size_response = WindowRectResponse {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: window_size.width as i32,
|
||||
height: window_size.height as i32,
|
||||
width: window_size.width,
|
||||
height: window_size.height,
|
||||
};
|
||||
Ok(WebDriverResponse::WindowRect(window_size_response))
|
||||
}
|
||||
|
@ -1071,16 +1064,10 @@ impl Handler {
|
|||
let session = self.session().unwrap();
|
||||
self.verify_top_level_browsing_context_is_open(session.webview_id)?;
|
||||
|
||||
let cmd_msg = WebDriverCommandMsg::NewWebView(
|
||||
session.webview_id,
|
||||
sender,
|
||||
self.load_status_sender.clone(),
|
||||
);
|
||||
let cmd_msg = WebDriverCommandMsg::NewWebView(sender, self.load_status_sender.clone());
|
||||
// Step 5. Create a new top-level browsing context by running the window open steps.
|
||||
// This MUST be done without invoking the focusing steps.
|
||||
self.constellation_chan
|
||||
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
|
||||
.unwrap();
|
||||
self.send_message_to_embedder(cmd_msg)?;
|
||||
|
||||
let mut handle = self.session.as_ref().unwrap().id.to_string();
|
||||
if let Ok(new_webview_id) = receiver.recv() {
|
||||
|
@ -1145,8 +1132,8 @@ impl Handler {
|
|||
session.webview_id = webview_id;
|
||||
session.browsing_context_id = BrowsingContextId::from(webview_id);
|
||||
|
||||
let msg = EmbedderToConstellationMessage::FocusWebView(webview_id);
|
||||
self.constellation_chan.send(msg).unwrap();
|
||||
let msg = WebDriverCommandMsg::FocusWebView(webview_id);
|
||||
self.send_message_to_embedder(msg)?;
|
||||
Ok(WebDriverResponse::Void)
|
||||
} else {
|
||||
Err(WebDriverError::new(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue