aboutsummaryrefslogtreecommitdiffstats
path: root/components/webdriver_server/actions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/webdriver_server/actions.rs')
-rw-r--r--components/webdriver_server/actions.rs41
1 files changed, 20 insertions, 21 deletions
diff --git a/components/webdriver_server/actions.rs b/components/webdriver_server/actions.rs
index b18a6eaaf2e..2d49ebbea22 100644
--- a/components/webdriver_server/actions.rs
+++ b/components/webdriver_server/actions.rs
@@ -16,9 +16,9 @@ use webdriver::actions::{
PointerDownAction, PointerMoveAction, PointerOrigin, PointerType, PointerUpAction, WheelAction,
WheelActionItem, WheelScrollAction,
};
-use webdriver::error::ErrorStatus;
+use webdriver::error::{ErrorStatus, WebDriverError};
-use crate::Handler;
+use crate::{Handler, wait_for_script_response};
// Interval between wheelScroll and pointerMove increments in ms, based on common vsync
static POINTERMOVE_INTERVAL: u64 = 17;
@@ -399,8 +399,11 @@ impl Handler {
WebDriverScriptCommand::GetElementInViewCenterPoint(x.to_string(), sender),
)
.unwrap();
-
- let Some(point) = receiver.recv().unwrap()? else {
+ let response = match wait_for_script_response(receiver) {
+ Ok(response) => response,
+ Err(WebDriverError { error, .. }) => return Err(error),
+ };
+ let Ok(Some(point)) = response else {
return Err(ErrorStatus::UnknownError);
};
point
@@ -410,21 +413,21 @@ impl Handler {
// Step 5 - 6
self.check_viewport_bound(x, y)?;
- // Step 9
+ // Step 7
let duration = match action.duration {
Some(duration) => duration,
None => tick_duration,
};
- // Step 10
+ // Step 8
if duration > 0 {
thread::sleep(Duration::from_millis(POINTERMOVE_INTERVAL));
}
- // Step 11
+ // Step 9 - 18
self.perform_pointer_move(source_id, duration, start_x, start_y, x, y, tick_start);
- // Step 12
+ // Step 19
Ok(())
}
@@ -479,6 +482,7 @@ impl Handler {
// Step 7.2
let cmd_msg =
WebDriverCommandMsg::MouseMoveAction(session.webview_id, x as f32, y as f32);
+ //TODO: Need Synchronization here before updating `pointer_input_state`
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
@@ -645,19 +649,14 @@ impl Handler {
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
- match receiver.recv() {
- Ok(viewport_size) => {
- if x < 0 ||
- x as f32 > viewport_size.width ||
- y < 0 ||
- y as f32 > viewport_size.height
- {
- Err(ErrorStatus::MoveTargetOutOfBounds)
- } else {
- Ok(())
- }
- },
- Err(_) => Err(ErrorStatus::UnknownError),
+ let viewport_size = match wait_for_script_response(receiver) {
+ Ok(response) => response,
+ Err(WebDriverError { error, .. }) => return Err(error),
+ };
+ if x < 0 || x as f32 > viewport_size.width || y < 0 || y as f32 > viewport_size.height {
+ Err(ErrorStatus::MoveTargetOutOfBounds)
+ } else {
+ Ok(())
}
}
}