diff options
Diffstat (limited to 'components/webdriver_server/actions.rs')
-rw-r--r-- | components/webdriver_server/actions.rs | 41 |
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(()) } } } |