mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Move webdriver actions commands to servoshell (#37669)
Move webdriver actions commands to servoshell. Testing: Test with webdriver enable in the CI [Test result 1](https://github.com/longvatrong111/servo/actions/runs/15875355256) [Test result 2](https://github.com/longvatrong111/servo/actions/runs/15875356595) [Test result 3](https://github.com/longvatrong111/servo/actions/runs/15875361886) Fixes: https://github.com/servo/servo/issues/37370 Signed-off-by: batu_hoang <longvatrong111@gmail.com>
This commit is contained in:
parent
9bd8d4f026
commit
940eff9497
12 changed files with 126 additions and 208 deletions
|
@ -27,10 +27,10 @@ use constellation_traits::{EmbedderToConstellationMessage, PaintMetricEvent};
|
|||
use crossbeam_channel::{Receiver, Sender};
|
||||
use dpi::PhysicalSize;
|
||||
use embedder_traits::{
|
||||
CompositorHitTestResult, Cursor, InputEvent, MouseButtonEvent, MouseMoveEvent, ShutdownState,
|
||||
UntrustedNodeAddress, ViewportDetails, WheelDelta, WheelEvent, WheelMode,
|
||||
CompositorHitTestResult, Cursor, InputEvent, ShutdownState, UntrustedNodeAddress,
|
||||
ViewportDetails,
|
||||
};
|
||||
use euclid::{Point2D, Rect, Scale, Size2D, Transform3D, Vector2D};
|
||||
use euclid::{Point2D, Rect, Scale, Size2D, Transform3D};
|
||||
use ipc_channel::ipc::{self, IpcSharedMemory};
|
||||
use libc::c_void;
|
||||
use log::{debug, info, trace, warn};
|
||||
|
@ -672,64 +672,6 @@ impl IOCompositor {
|
|||
}
|
||||
},
|
||||
|
||||
CompositorMsg::WebDriverMouseButtonEvent(
|
||||
webview_id,
|
||||
action,
|
||||
button,
|
||||
x,
|
||||
y,
|
||||
message_id,
|
||||
) => {
|
||||
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
||||
warn!("Handling input event for unknown webview: {webview_id}");
|
||||
return;
|
||||
};
|
||||
let dppx = webview_renderer.device_pixels_per_page_pixel();
|
||||
let point = dppx.transform_point(Point2D::new(x, y));
|
||||
webview_renderer.dispatch_point_input_event(
|
||||
InputEvent::MouseButton(MouseButtonEvent::new(action, button, point))
|
||||
.with_webdriver_message_id(message_id),
|
||||
);
|
||||
},
|
||||
|
||||
CompositorMsg::WebDriverMouseMoveEvent(webview_id, x, y, message_id) => {
|
||||
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
||||
warn!("Handling input event for unknown webview: {webview_id}");
|
||||
return;
|
||||
};
|
||||
let dppx = webview_renderer.device_pixels_per_page_pixel();
|
||||
let point = dppx.transform_point(Point2D::new(x, y));
|
||||
webview_renderer.dispatch_point_input_event(
|
||||
InputEvent::MouseMove(MouseMoveEvent::new(point))
|
||||
.with_webdriver_message_id(message_id),
|
||||
);
|
||||
},
|
||||
|
||||
CompositorMsg::WebDriverWheelScrollEvent(webview_id, x, y, dx, dy, message_id) => {
|
||||
let Some(webview_renderer) = self.webview_renderers.get_mut(webview_id) else {
|
||||
warn!("Handling input event for unknown webview: {webview_id}");
|
||||
return;
|
||||
};
|
||||
// The sign of wheel delta value definition in uievent
|
||||
// is inverted compared to `winit`s wheel delta. Hence,
|
||||
// here we invert the sign to mimic wheel scroll
|
||||
// implementation in `headed_window.rs`.
|
||||
let delta = WheelDelta {
|
||||
x: -dx,
|
||||
y: -dy,
|
||||
z: 0.0,
|
||||
mode: WheelMode::DeltaPixel,
|
||||
};
|
||||
let dppx = webview_renderer.device_pixels_per_page_pixel();
|
||||
let point = dppx.transform_point(Point2D::new(x, y));
|
||||
let scroll_delta = dppx.transform_vector(Vector2D::new(dx as f32, dy as f32));
|
||||
webview_renderer.dispatch_point_input_event(
|
||||
InputEvent::Wheel(WheelEvent::new(delta, point))
|
||||
.with_webdriver_message_id(message_id),
|
||||
);
|
||||
webview_renderer.on_webdriver_wheel_action(scroll_delta, point);
|
||||
},
|
||||
|
||||
CompositorMsg::SendInitialTransaction(pipeline) => {
|
||||
let mut txn = Transaction::new();
|
||||
txn.set_display_list(WebRenderEpoch(0), (pipeline, Default::default()));
|
||||
|
|
|
@ -40,9 +40,6 @@ mod from_constellation {
|
|||
Self::NewWebRenderFrameReady(..) => target!("NewWebRenderFrameReady"),
|
||||
Self::PipelineExited(..) => target!("PipelineExited"),
|
||||
Self::LoadComplete(..) => target!("LoadComplete"),
|
||||
Self::WebDriverMouseButtonEvent(..) => target!("WebDriverMouseButtonEvent"),
|
||||
Self::WebDriverMouseMoveEvent(..) => target!("WebDriverMouseMoveEvent"),
|
||||
Self::WebDriverWheelScrollEvent(..) => target!("WebDriverWheelScrollEvent"),
|
||||
Self::SendInitialTransaction(..) => target!("SendInitialTransaction"),
|
||||
Self::SendScrollNode(..) => target!("SendScrollNode"),
|
||||
Self::SendDisplayList { .. } => target!("SendDisplayList"),
|
||||
|
|
|
@ -792,22 +792,6 @@ impl WebViewRenderer {
|
|||
}));
|
||||
}
|
||||
|
||||
/// Push scroll pending event when receiving wheel action from webdriver
|
||||
pub(crate) fn on_webdriver_wheel_action(
|
||||
&mut self,
|
||||
scroll_delta: Vector2D<f32, DevicePixel>,
|
||||
point: Point2D<f32, DevicePixel>,
|
||||
) {
|
||||
if self.global.borrow().shutdown_state() != ShutdownState::NotShuttingDown {
|
||||
return;
|
||||
}
|
||||
|
||||
let scroll_location =
|
||||
ScrollLocation::Delta(LayoutVector2D::from_untyped(scroll_delta.to_untyped()));
|
||||
let cursor = DeviceIntPoint::new(point.x as i32, point.y as i32);
|
||||
self.on_scroll_window_event(scroll_location, cursor)
|
||||
}
|
||||
|
||||
/// Process pending scroll events for this [`WebViewRenderer`]. Returns a tuple containing:
|
||||
///
|
||||
/// - A boolean that is true if a zoom occurred.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue