webdriver: Rename wait_for_script_response to wait_for_ipc_response (#38537)

As titled. Initially I want to include this as part of another PR but
looks so messy..
The motivation is that we are no longer just waiting for script
response.

Testing: No behaviour change.

Signed-off-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
Euclid Ye 2025-08-08 17:49:57 +08:00 committed by GitHub
parent 6651f37c05
commit 31acac316d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 48 additions and 50 deletions

View file

@ -20,7 +20,7 @@ use webdriver::actions::{
use webdriver::command::ActionsParameters; use webdriver::command::ActionsParameters;
use webdriver::error::{ErrorStatus, WebDriverError}; use webdriver::error::{ErrorStatus, WebDriverError};
use crate::{Handler, VerifyBrowsingContextIsOpen, WebElement, wait_for_script_response}; use crate::{Handler, VerifyBrowsingContextIsOpen, WebElement, wait_for_ipc_response};
// Interval between wheelScroll and pointerMove increments in ms, based on common vsync // Interval between wheelScroll and pointerMove increments in ms, based on common vsync
static POINTERMOVE_INTERVAL: u64 = 17; static POINTERMOVE_INTERVAL: u64 = 17;
@ -801,7 +801,7 @@ impl Handler {
self.send_message_to_embedder(cmd_msg) self.send_message_to_embedder(cmd_msg)
.map_err(|_| ErrorStatus::UnknownError)?; .map_err(|_| ErrorStatus::UnknownError)?;
let viewport_size = match wait_for_script_response(receiver) { let viewport_size = match wait_for_ipc_response(receiver) {
Ok(response) => response, Ok(response) => response,
Err(WebDriverError { error, .. }) => return Err(error), Err(WebDriverError { error, .. }) => return Err(error),
}; };
@ -823,7 +823,7 @@ impl Handler {
VerifyBrowsingContextIsOpen::No, VerifyBrowsingContextIsOpen::No,
) )
.unwrap(); .unwrap();
let response = match wait_for_script_response(receiver) { let response = match wait_for_ipc_response(receiver) {
Ok(response) => response, Ok(response) => response,
Err(WebDriverError { error, .. }) => return Err(error), Err(WebDriverError { error, .. }) => return Err(error),
}; };

View file

@ -525,7 +525,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
self.send_message_to_embedder(WebDriverCommandMsg::GetFocusedWebView(sender.clone()))?; self.send_message_to_embedder(WebDriverCommandMsg::GetFocusedWebView(sender.clone()))?;
// Wait until the document is ready before returning the top-level browsing context id. // Wait until the document is ready before returning the top-level browsing context id.
wait_for_script_response(receiver) wait_for_ipc_response(receiver)
} }
fn session(&self) -> WebDriverResult<&WebDriverSession> { fn session(&self) -> WebDriverResult<&WebDriverSession> {
@ -816,7 +816,7 @@ impl Handler {
VerifyBrowsingContextIsOpen::No, VerifyBrowsingContextIsOpen::No,
)?; )?;
let url = wait_for_script_response(receiver)?; let url = wait_for_ipc_response(receiver)?;
Ok(WebDriverResponse::Generic(ValueResponse( Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(url.as_str())?, serde_json::to_value(url.as_str())?,
@ -841,7 +841,7 @@ impl Handler {
self.send_message_to_embedder(WebDriverCommandMsg::GetWindowRect(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::GetWindowRect(webview_id, sender))?;
let window_rect = wait_for_script_response(receiver)?; let window_rect = wait_for_ipc_response(receiver)?;
let window_size_response = WindowRectResponse { let window_size_response = WindowRectResponse {
x: window_rect.min.x, x: window_rect.min.x,
y: window_rect.min.y, y: window_rect.min.y,
@ -905,7 +905,7 @@ impl Handler {
sender, sender,
))?; ))?;
let window_rect = wait_for_script_response(receiver)?; let window_rect = wait_for_ipc_response(receiver)?;
debug!("Result window_rect: {window_rect:?}"); debug!("Result window_rect: {window_rect:?}");
let window_size_response = WindowRectResponse { let window_size_response = WindowRectResponse {
x: window_rect.min.x, x: window_rect.min.x,
@ -937,7 +937,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
self.send_message_to_embedder(WebDriverCommandMsg::MaximizeWebView(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::MaximizeWebView(webview_id, sender))?;
let window_rect = wait_for_script_response(receiver)?; let window_rect = wait_for_ipc_response(receiver)?;
debug!("Result window_rect: {window_rect:?}"); debug!("Result window_rect: {window_rect:?}");
let window_size_response = WindowRectResponse { let window_size_response = WindowRectResponse {
x: window_rect.min.x, x: window_rect.min.x,
@ -956,7 +956,7 @@ impl Handler {
VerifyBrowsingContextIsOpen::Yes, VerifyBrowsingContextIsOpen::Yes,
)?; )?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(is_enabled) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(is_enabled) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(is_enabled)?, serde_json::to_value(is_enabled)?,
))), ))),
@ -972,7 +972,7 @@ impl Handler {
VerifyBrowsingContextIsOpen::Yes, VerifyBrowsingContextIsOpen::Yes,
)?; )?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(is_selected) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(is_selected) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(is_selected)?, serde_json::to_value(is_selected)?,
))), ))),
@ -1053,7 +1053,7 @@ impl Handler {
// Step 3. Let title be the session's current top-level // Step 3. Let title be the session's current top-level
// browsing context's active document's title. // browsing context's active document's title.
let title = wait_for_script_response(receiver)?; let title = wait_for_ipc_response(receiver)?;
Ok(WebDriverResponse::Generic(ValueResponse( Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(title)?, serde_json::to_value(title)?,
))) )))
@ -1228,7 +1228,7 @@ impl Handler {
// Step 4. If session's current parent browsing context is not null, // Step 4. If session's current parent browsing context is not null,
// set the current browsing context with session and current parent browsing context. // set the current browsing context with session and current parent browsing context.
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(browsing_context_id) => { Ok(browsing_context_id) => {
self.session_mut()?.browsing_context_id = browsing_context_id; self.session_mut()?.browsing_context_id = browsing_context_id;
Ok(WebDriverResponse::Void) Ok(WebDriverResponse::Void)
@ -1273,7 +1273,7 @@ impl Handler {
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
self.handle_any_user_prompts(self.session()?.webview_id)?; self.handle_any_user_prompts(self.session()?.webview_id)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(browsing_context_id) => { Ok(browsing_context_id) => {
self.session_mut()?.browsing_context_id = browsing_context_id; self.session_mut()?.browsing_context_id = browsing_context_id;
Ok(WebDriverResponse::Void) Ok(WebDriverResponse::Void)
@ -1329,7 +1329,7 @@ impl Handler {
}, },
} }
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => { Ok(value) => {
let resp_value: Vec<WebElement> = value.into_iter().map(WebElement).collect(); let resp_value: Vec<WebElement> = value.into_iter().map(WebElement).collect();
Ok(WebDriverResponse::Generic(ValueResponse( Ok(WebDriverResponse::Generic(ValueResponse(
@ -1408,7 +1408,7 @@ impl Handler {
}, },
} }
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => { Ok(value) => {
let resp_value: Vec<Value> = value let resp_value: Vec<Value> = value
.into_iter() .into_iter()
@ -1478,7 +1478,7 @@ impl Handler {
}, },
} }
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => { Ok(value) => {
let resp_value: Vec<Value> = value let resp_value: Vec<Value> = value
.into_iter() .into_iter()
@ -1515,7 +1515,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementShadowRoot(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementShadowRoot(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => { Ok(value) => {
let Some(value) = value else { let Some(value) = value else {
return Err(WebDriverError::new(ErrorStatus::NoSuchShadowRoot, "")); return Err(WebDriverError::new(ErrorStatus::NoSuchShadowRoot, ""));
@ -1538,7 +1538,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementRect(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementRect(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(rect) => { Ok(rect) => {
let response = ElementRectResponse { let response = ElementRectResponse {
x: rect.origin.x, x: rect.origin.x,
@ -1562,7 +1562,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementText(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementText(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?, serde_json::to_value(value)?,
))), ))),
@ -1580,8 +1580,8 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetActiveElement(sender); let cmd = WebDriverScriptCommand::GetActiveElement(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
let value = wait_for_script_response(receiver)? let value =
.map(|x| serde_json::to_value(WebElement(x)).unwrap()); wait_for_ipc_response(receiver)?.map(|x| serde_json::to_value(WebElement(x)).unwrap());
// Step 4. If active element is a non-null element, return success // Step 4. If active element is a non-null element, return success
// with data set to web element reference object for session and active element. // with data set to web element reference object for session and active element.
// Otherwise, return error with error code no such element. // Otherwise, return error with error code no such element.
@ -1607,7 +1607,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetComputedRole(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetComputedRole(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?, serde_json::to_value(value)?,
))), ))),
@ -1625,7 +1625,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetElementTagName(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetElementTagName(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?, serde_json::to_value(value)?,
))), ))),
@ -1651,7 +1651,7 @@ impl Handler {
sender, sender,
); );
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?, serde_json::to_value(value)?,
))), ))),
@ -1679,7 +1679,7 @@ impl Handler {
); );
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(SendableWebDriverJSValue(value))?, serde_json::to_value(SendableWebDriverJSValue(value))?,
))), ))),
@ -1702,7 +1702,7 @@ impl Handler {
let cmd = let cmd =
WebDriverScriptCommand::GetElementCSS(element.to_string(), name.to_owned(), sender); WebDriverScriptCommand::GetElementCSS(element.to_string(), name.to_owned(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(value) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(value)?, serde_json::to_value(value)?,
))), ))),
@ -1720,7 +1720,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookies(sender); let cmd = WebDriverScriptCommand::GetCookies(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
let cookies = match wait_for_script_response(receiver)? { let cookies = match wait_for_ipc_response(receiver)? {
Ok(cookies) => cookies, Ok(cookies) => cookies,
Err(error) => return Err(WebDriverError::new(error, "")), Err(error) => return Err(WebDriverError::new(error, "")),
}; };
@ -1741,7 +1741,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetCookie(name, sender); let cmd = WebDriverScriptCommand::GetCookie(name, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
let cookies = match wait_for_script_response(receiver)? { let cookies = match wait_for_ipc_response(receiver)? {
Ok(cookies) => cookies, Ok(cookies) => cookies,
Err(error) => return Err(WebDriverError::new(error, "")), Err(error) => return Err(WebDriverError::new(error, "")),
}; };
@ -1796,7 +1796,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::AddCookie(cookie_builder.build(), sender); let cmd = WebDriverScriptCommand::AddCookie(cookie_builder.build(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")), Err(error) => Err(WebDriverError::new(error, "")),
} }
@ -1812,7 +1812,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookie(name, sender); let cmd = WebDriverScriptCommand::DeleteCookie(name, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")), Err(error) => Err(WebDriverError::new(error, "")),
} }
@ -1828,7 +1828,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::DeleteCookies(sender); let cmd = WebDriverScriptCommand::DeleteCookies(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")), Err(error) => Err(WebDriverError::new(error, "")),
} }
@ -1883,7 +1883,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::GetPageSource(sender); let cmd = WebDriverScriptCommand::GetPageSource(sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(source) => Ok(WebDriverResponse::Generic(ValueResponse( Ok(source) => Ok(WebDriverResponse::Generic(ValueResponse(
serde_json::to_value(source)?, serde_json::to_value(source)?,
))), ))),
@ -1985,7 +1985,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::ExecuteScript(script, sender); let cmd = WebDriverScriptCommand::ExecuteScript(script, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
let result = wait_for_script_response(receiver)?; let result = wait_for_ipc_response(receiver)?;
self.postprocess_js_result(result) self.postprocess_js_result(result)
} }
@ -2035,7 +2035,7 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::ExecuteAsyncScript(script, sender); let cmd = WebDriverScriptCommand::ExecuteAsyncScript(script, sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
let result = wait_for_script_response(receiver)?; let result = wait_for_ipc_response(receiver)?;
self.postprocess_js_result(result) self.postprocess_js_result(result)
} }
@ -2097,7 +2097,7 @@ impl Handler {
// TODO: distinguish the not found and not focusable cases // TODO: distinguish the not found and not focusable cases
// File input and non-typeable form control should have // File input and non-typeable form control should have
// been handled in `webdriver_handler.rs`. // been handled in `webdriver_handler.rs`.
if !wait_for_script_response(receiver)?.map_err(|error| WebDriverError::new(error, ""))? { if !wait_for_ipc_response(receiver)?.map_err(|error| WebDriverError::new(error, ""))? {
return Ok(WebDriverResponse::Void); return Ok(WebDriverResponse::Void);
} }
@ -2127,7 +2127,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::ElementClear(element.to_string(), sender); let cmd = WebDriverScriptCommand::ElementClear(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(_) => Ok(WebDriverResponse::Void), Ok(_) => Ok(WebDriverResponse::Void),
Err(error) => Err(WebDriverError::new(error, "")), Err(error) => Err(WebDriverError::new(error, "")),
} }
@ -2149,7 +2149,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::ElementClick(element.to_string(), sender); let cmd = WebDriverScriptCommand::ElementClick(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::No)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(element_id) => match element_id { Ok(element_id) => match element_id {
Some(element_id) => { Some(element_id) => {
// Load status sender should be set up before we dispatch actions // Load status sender should be set up before we dispatch actions
@ -2260,7 +2260,7 @@ impl Handler {
webview_id, rect, sender, webview_id, rect, sender,
))?; ))?;
if let Some(x) = wait_for_script_response(receiver)? { if let Some(x) = wait_for_ipc_response(receiver)? {
img = Some(x); img = Some(x);
break; break;
}; };
@ -2316,7 +2316,7 @@ impl Handler {
let cmd = WebDriverScriptCommand::GetBoundingClientRect(element.to_string(), sender); let cmd = WebDriverScriptCommand::GetBoundingClientRect(element.to_string(), sender);
self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?; self.browsing_context_script_command(cmd, VerifyBrowsingContextIsOpen::Yes)?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
Ok(rect) => { Ok(rect) => {
let encoded = self.take_screenshot(Some(Rect::from_untyped(&rect)))?; let encoded = self.take_screenshot(Some(Rect::from_untyped(&rect)))?;
@ -2429,7 +2429,7 @@ impl Handler {
fn focus_webview(&self, webview_id: WebViewId) -> Result<(), WebDriverError> { fn focus_webview(&self, webview_id: WebViewId) -> Result<(), WebDriverError> {
let (sender, receiver) = ipc::channel().unwrap(); let (sender, receiver) = ipc::channel().unwrap();
self.send_message_to_embedder(WebDriverCommandMsg::FocusWebView(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::FocusWebView(webview_id, sender))?;
if wait_for_script_response(receiver)? { if wait_for_ipc_response(receiver)? {
debug!("Focus new webview successfully"); debug!("Focus new webview successfully");
} else { } else {
debug!("Focus new webview failed, it may not exist anymore"); debug!("Focus new webview failed, it may not exist anymore");
@ -2608,9 +2608,7 @@ fn webdriver_value_to_js_argument(v: &Value) -> String {
} }
} }
// TODO: This waits for not only the script response fn wait_for_ipc_response<T>(receiver: IpcReceiver<T>) -> Result<T, WebDriverError>
// need to make another name
fn wait_for_script_response<T>(receiver: IpcReceiver<T>) -> Result<T, WebDriverError>
where where
T: for<'de> Deserialize<'de> + Serialize, T: for<'de> Deserialize<'de> + Serialize,
{ {

View file

@ -12,7 +12,7 @@ use serde_json::{Map, Value};
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult}; use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
use webdriver::response::{ValueResponse, WebDriverResponse}; use webdriver::response::{ValueResponse, WebDriverResponse};
use crate::{Handler, wait_for_script_response}; use crate::{Handler, wait_for_ipc_response};
const KNOWN_PROMPT_HANDLERS: [&str; 5] = [ const KNOWN_PROMPT_HANDLERS: [&str; 5] = [
"dismiss", "dismiss",
@ -188,7 +188,7 @@ impl Handler {
sender, sender,
))?; ))?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
// Step 2. If the current user prompt is null, return error with error code no such alert. // Step 2. If the current user prompt is null, return error with error code no such alert.
Err(()) => Err(WebDriverError::new( Err(()) => Err(WebDriverError::new(
ErrorStatus::NoSuchAlert, ErrorStatus::NoSuchAlert,
@ -213,7 +213,7 @@ impl Handler {
sender, sender,
))?; ))?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
// Step 2. If the current user prompt is null, return error with error code no such alert. // Step 2. If the current user prompt is null, return error with error code no such alert.
Err(()) => Err(WebDriverError::new( Err(()) => Err(WebDriverError::new(
ErrorStatus::NoSuchAlert, ErrorStatus::NoSuchAlert,
@ -236,7 +236,7 @@ impl Handler {
sender, sender,
))?; ))?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
// Step 2. If the current user prompt is null, return error with error code no such alert. // Step 2. If the current user prompt is null, return error with error code no such alert.
Err(()) => Err(WebDriverError::new( Err(()) => Err(WebDriverError::new(
ErrorStatus::NoSuchAlert, ErrorStatus::NoSuchAlert,
@ -271,7 +271,7 @@ impl Handler {
self.send_message_to_embedder(WebDriverCommandMsg::CurrentUserPrompt(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::CurrentUserPrompt(webview_id, sender))?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
// Step 4. If the current user prompt is null, return error with error code no such alert. // Step 4. If the current user prompt is null, return error with error code no such alert.
None => Err(WebDriverError::new( None => Err(WebDriverError::new(
ErrorStatus::NoSuchAlert, ErrorStatus::NoSuchAlert,
@ -315,7 +315,7 @@ impl Handler {
self.send_message_to_embedder(WebDriverCommandMsg::CurrentUserPrompt(webview_id, sender))?; self.send_message_to_embedder(WebDriverCommandMsg::CurrentUserPrompt(webview_id, sender))?;
match wait_for_script_response(receiver)? { match wait_for_ipc_response(receiver)? {
// Step 1. If the current user prompt is null, return success with data null. // Step 1. If the current user prompt is null, return success with data null.
None => Ok(WebDriverResponse::Void), None => Ok(WebDriverResponse::Void),
Some(prompt_type) => { Some(prompt_type) => {
@ -333,7 +333,7 @@ impl Handler {
if handler.notify || handler.handler == WebDriverUserPromptAction::Ignore { if handler.notify || handler.handler == WebDriverUserPromptAction::Ignore {
// Step 6. If handler's notify is true, return annotated unexpected alert open error. // Step 6. If handler's notify is true, return annotated unexpected alert open error.
let alert_text = wait_for_script_response(receiver)? let alert_text = wait_for_ipc_response(receiver)?
.unwrap_or_default() .unwrap_or_default()
.unwrap_or_default(); .unwrap_or_default();