mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
WebDriver: Implement some missing steps of wait for navigation to complete (#38079)
Based on https://w3c.github.io/webdriver/#dfn-wait-for-navigation-to-complete. We still have not implement the timer parameter, but I think it makes sense to implement Step 8.4 of `Navigation To` first. --------- Signed-off-by: PotatoCP <Kenzie.Raditya.Tirtarahardja@huawei.com>
This commit is contained in:
parent
8f9d484693
commit
7dae7f9983
1 changed files with 29 additions and 6 deletions
|
@ -781,12 +781,35 @@ impl Handler {
|
|||
WebDriverCommandMsg::LoadUrl(webview_id, url, self.load_status_sender.clone());
|
||||
self.send_message_to_embedder(cmd_msg)?;
|
||||
|
||||
self.wait_for_load()
|
||||
self.wait_for_navigation_to_complete()
|
||||
}
|
||||
|
||||
fn wait_for_load(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
/// <https://w3c.github.io/webdriver/#dfn-wait-for-navigation-to-complete>
|
||||
fn wait_for_navigation_to_complete(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
debug!("waiting for load");
|
||||
|
||||
let session = self.session()?;
|
||||
|
||||
// Step 1. If session's page loading strategy is "none",
|
||||
// return success with data null.
|
||||
if session.page_loading_strategy == "none" {
|
||||
return Ok(WebDriverResponse::Void);
|
||||
}
|
||||
|
||||
// Step 2. If session's current browsing context is no longer open,
|
||||
// return success with data null.
|
||||
if self
|
||||
.verify_browsing_context_is_open(session.browsing_context_id)
|
||||
.is_err()
|
||||
{
|
||||
return Ok(WebDriverResponse::Void);
|
||||
}
|
||||
|
||||
// Step 3. let timeout be the session's page load timeout.
|
||||
let timeout = self.session()?.load_timeout;
|
||||
|
||||
// TODO: Step 4. Implement timer parameter
|
||||
|
||||
let result = select! {
|
||||
recv(self.load_status_receiver) -> res => {
|
||||
match res {
|
||||
|
@ -950,7 +973,7 @@ impl Handler {
|
|||
webview_id,
|
||||
self.load_status_sender.clone(),
|
||||
))?;
|
||||
self.wait_for_load()
|
||||
self.wait_for_navigation_to_complete()
|
||||
}
|
||||
|
||||
fn handle_go_forward(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
|
@ -963,7 +986,7 @@ impl Handler {
|
|||
webview_id,
|
||||
self.load_status_sender.clone(),
|
||||
))?;
|
||||
self.wait_for_load()
|
||||
self.wait_for_navigation_to_complete()
|
||||
}
|
||||
|
||||
fn handle_refresh(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
|
@ -975,7 +998,7 @@ impl Handler {
|
|||
let cmd_msg = WebDriverCommandMsg::Refresh(webview_id, self.load_status_sender.clone());
|
||||
self.send_message_to_embedder(cmd_msg)?;
|
||||
|
||||
self.wait_for_load()
|
||||
self.wait_for_navigation_to_complete()
|
||||
}
|
||||
|
||||
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
|
||||
|
@ -1083,7 +1106,7 @@ impl Handler {
|
|||
session.window_handles.insert(new_webview_id, new_handle);
|
||||
}
|
||||
|
||||
let _ = self.wait_for_load();
|
||||
let _ = self.wait_for_navigation_to_complete();
|
||||
|
||||
Ok(WebDriverResponse::NewWindow(NewWindowResponse {
|
||||
handle,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue