diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index e7aa82900ff..d29d0c823fd 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -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 { + /// + fn wait_for_navigation_to_complete(&self) -> WebDriverResult { 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 { @@ -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 { @@ -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 { @@ -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,