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());
|
WebDriverCommandMsg::LoadUrl(webview_id, url, self.load_status_sender.clone());
|
||||||
self.send_message_to_embedder(cmd_msg)?;
|
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");
|
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;
|
let timeout = self.session()?.load_timeout;
|
||||||
|
|
||||||
|
// TODO: Step 4. Implement timer parameter
|
||||||
|
|
||||||
let result = select! {
|
let result = select! {
|
||||||
recv(self.load_status_receiver) -> res => {
|
recv(self.load_status_receiver) -> res => {
|
||||||
match res {
|
match res {
|
||||||
|
@ -950,7 +973,7 @@ impl Handler {
|
||||||
webview_id,
|
webview_id,
|
||||||
self.load_status_sender.clone(),
|
self.load_status_sender.clone(),
|
||||||
))?;
|
))?;
|
||||||
self.wait_for_load()
|
self.wait_for_navigation_to_complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_go_forward(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_go_forward(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
|
@ -963,7 +986,7 @@ impl Handler {
|
||||||
webview_id,
|
webview_id,
|
||||||
self.load_status_sender.clone(),
|
self.load_status_sender.clone(),
|
||||||
))?;
|
))?;
|
||||||
self.wait_for_load()
|
self.wait_for_navigation_to_complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_refresh(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_refresh(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
|
@ -975,7 +998,7 @@ impl Handler {
|
||||||
let cmd_msg = WebDriverCommandMsg::Refresh(webview_id, self.load_status_sender.clone());
|
let cmd_msg = WebDriverCommandMsg::Refresh(webview_id, self.load_status_sender.clone());
|
||||||
self.send_message_to_embedder(cmd_msg)?;
|
self.send_message_to_embedder(cmd_msg)?;
|
||||||
|
|
||||||
self.wait_for_load()
|
self.wait_for_navigation_to_complete()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
|
fn handle_title(&self) -> WebDriverResult<WebDriverResponse> {
|
||||||
|
@ -1083,7 +1106,7 @@ impl Handler {
|
||||||
session.window_handles.insert(new_webview_id, new_handle);
|
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 {
|
Ok(WebDriverResponse::NewWindow(NewWindowResponse {
|
||||||
handle,
|
handle,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue