Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 3 additions & 61 deletions components/compositing/compositor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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()));
Expand Down
3 changes: 0 additions & 3 deletions components/compositing/tracing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand Down
16 changes: 0 additions & 16 deletions components/compositing/webview_renderer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -818,22 +818,6 @@ impl WebViewRenderer {
}));
}

/// Push scroll pending event when receiving wheel action from webdriver
pub(crate) fn on_webdriver_wheel_action(
Comment thread
longvatrong111 marked this conversation as resolved.
&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.
Expand Down
61 changes: 10 additions & 51 deletions components/constellation/constellation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1468,6 +1468,9 @@ where
)
}
},
EmbedderToConstellationMessage::SetWebDriverResponseSender(sender) => {
self.webdriver.input_command_response_sender = Some(sender);
},
}
}

Expand Down Expand Up @@ -1850,7 +1853,6 @@ where
.send(WebDriverCommandResponse { id: msg_id })
.unwrap_or_else(|_| {
warn!("Failed to send WebDriverInputComplete {:?}", msg_id);
self.webdriver.input_command_response_sender = None;
});
} else {
warn!("No WebDriver input_command_response_sender");
Expand Down Expand Up @@ -4616,14 +4618,7 @@ where
}
}
},
WebDriverCommandMsg::KeyboardAction(
browsing_context_id,
key_event,
msg_id,
response_sender,
) => {
self.webdriver.input_command_response_sender = Some(response_sender);

WebDriverCommandMsg::KeyboardAction(browsing_context_id, key_event, msg_id) => {
let pipeline_id = match self.browsing_contexts.get(&browsing_context_id) {
Some(browsing_context) => browsing_context.pipeline_id,
None => {
Expand All @@ -4649,50 +4644,14 @@ where
self.handle_send_error(pipeline_id, e)
}
},
WebDriverCommandMsg::MouseButtonAction(
webview_id,
mouse_event_type,
mouse_button,
x,
y,
msg_id,
response_sender,
) => {
self.webdriver.input_command_response_sender = Some(response_sender);

self.compositor_proxy
.send(CompositorMsg::WebDriverMouseButtonEvent(
webview_id,
mouse_event_type,
mouse_button,
x,
y,
msg_id,
));
WebDriverCommandMsg::MouseButtonAction(..) => {
unreachable!("This command should be send directly to the embedder.");
},
WebDriverCommandMsg::MouseMoveAction(webview_id, x, y, msg_id, response_sender) => {
self.webdriver.input_command_response_sender = Some(response_sender);

self.compositor_proxy
.send(CompositorMsg::WebDriverMouseMoveEvent(
webview_id, x, y, msg_id,
));
WebDriverCommandMsg::MouseMoveAction(..) => {
unreachable!("This command should be send directly to the embedder.");
},
WebDriverCommandMsg::WheelScrollAction(
webview_id,
x,
y,
delta_x,
delta_y,
msg_id,
response_sender,
) => {
self.webdriver.input_command_response_sender = Some(response_sender);

self.compositor_proxy
.send(CompositorMsg::WebDriverWheelScrollEvent(
Comment thread
longvatrong111 marked this conversation as resolved.
webview_id, x, y, delta_x, delta_y, msg_id,
));
WebDriverCommandMsg::WheelScrollAction(..) => {
unreachable!("This command should be send directly to the embedder.");
},
WebDriverCommandMsg::TakeScreenshot(webview_id, rect, response_sender) => {
self.compositor_proxy.send(CompositorMsg::CreatePng(
Expand Down
1 change: 1 addition & 0 deletions components/constellation/tracing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ mod from_compositor {
Self::EvaluateJavaScript(..) => target!("EvaluateJavaScript"),
Self::CreateMemoryReport(..) => target!("CreateMemoryReport"),
Self::SendImageKeysForPipeline(..) => target!("SendImageKeysForPipeline"),
Self::SetWebDriverResponseSender(..) => target!("SetWebDriverResponseSender"),
}
}
}
Expand Down
19 changes: 1 addition & 18 deletions components/shared/compositing/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,7 @@ use std::fmt::{Debug, Error, Formatter};

use base::id::{PipelineId, WebViewId};
use crossbeam_channel::Sender;
use embedder_traits::{
AnimationState, EventLoopWaker, MouseButton, MouseButtonAction, TouchEventResult,
WebDriverMessageId,
};
use embedder_traits::{AnimationState, EventLoopWaker, TouchEventResult};
use euclid::Rect;
use ipc_channel::ipc::IpcSender;
use log::warn;
Expand Down Expand Up @@ -105,20 +102,6 @@ pub enum CompositorMsg {
PipelineExited(WebViewId, PipelineId, PipelineExitSource),
/// The load of a page has completed
LoadComplete(WebViewId),
/// WebDriver mouse button event
WebDriverMouseButtonEvent(
WebViewId,
MouseButtonAction,
MouseButton,
f32,
f32,
Option<WebDriverMessageId>,
),
/// WebDriver mouse move event
WebDriverMouseMoveEvent(WebViewId, f32, f32, Option<WebDriverMessageId>),
// Webdriver wheel scroll event
WebDriverWheelScrollEvent(WebViewId, f32, f32, f64, f64, Option<WebDriverMessageId>),

/// Inform WebRender of the existence of this pipeline.
SendInitialTransaction(WebRenderPipelineId),
/// Perform a scroll operation.
Expand Down
4 changes: 3 additions & 1 deletion components/shared/constellation/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ use base::cross_process_instant::CrossProcessInstant;
use base::id::{MessagePortId, PipelineId, WebViewId};
use embedder_traits::{
CompositorHitTestResult, Cursor, InputEvent, JavaScriptEvaluationId, MediaSessionActionType,
Theme, ViewportDetails, WebDriverCommandMsg,
Theme, ViewportDetails, WebDriverCommandMsg, WebDriverCommandResponse,
};
pub use from_script_message::*;
use ipc_channel::ipc::IpcSender;
Expand Down Expand Up @@ -96,6 +96,8 @@ pub enum EmbedderToConstellationMessage {
CreateMemoryReport(IpcSender<MemoryReportResult>),
/// Sends the generated image key to the image cache associated with this pipeline.
SendImageKeysForPipeline(PipelineId, Vec<ImageKey>),
/// Set WebDriver input event handled sender.
SetWebDriverResponseSender(IpcSender<WebDriverCommandResponse>),
}

/// A description of a paint metric that is sent from the Servo renderer to the
Expand Down
7 changes: 3 additions & 4 deletions components/shared/embedder/webdriver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ pub struct WebDriverMessageId(pub usize);
/// Messages to the constellation originating from the WebDriver server.
#[derive(Debug, Deserialize, Serialize)]
pub enum WebDriverCommandMsg {
/// Used in the initialization of the WebDriver server to set the sender for sending responses
/// back to the WebDriver client. It is set to constellation for now
SetWebDriverResponseSender(IpcSender<WebDriverCommandResponse>),
/// Get the window size.
GetWindowRect(WebViewId, IpcSender<DeviceIntRect>),
/// Get the viewport size.
Expand All @@ -53,7 +56,6 @@ pub enum WebDriverCommandMsg {
KeyboardEvent,
// Should never be None.
Option<WebDriverMessageId>,
IpcSender<WebDriverCommandResponse>,
),
/// Act as if the mouse was clicked in the browsing context with the given ID.
MouseButtonAction(
Expand All @@ -64,7 +66,6 @@ pub enum WebDriverCommandMsg {
f32,
// Should never be None.
Option<WebDriverMessageId>,
IpcSender<WebDriverCommandResponse>,
),
/// Act as if the mouse was moved in the browsing context with the given ID.
MouseMoveAction(
Expand All @@ -74,7 +75,6 @@ pub enum WebDriverCommandMsg {
// None if it's not the last `perform_pointer_move` since we only
// expect one response from constellation for each tick actions.
Option<WebDriverMessageId>,
IpcSender<WebDriverCommandResponse>,
),
/// Act as if the mouse wheel is scrolled in the browsing context given the given ID.
WheelScrollAction(
Expand All @@ -86,7 +86,6 @@ pub enum WebDriverCommandMsg {
// None if it's not the last `perform_wheel_scroll` since we only
// expect one response from constellation for each tick actions.
Option<WebDriverMessageId>,
IpcSender<WebDriverCommandResponse>,
),
/// Set the window size.
SetWindowSize(
Expand Down
33 changes: 7 additions & 26 deletions components/webdriver_server/actions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ use std::thread;
use std::time::{Duration, Instant};

use base::id::BrowsingContextId;
use constellation_traits::EmbedderToConstellationMessage;
use embedder_traits::{MouseButtonAction, WebDriverCommandMsg, WebDriverScriptCommand};
use ipc_channel::ipc;
use keyboard_types::webdriver::KeyInputState;
Expand Down Expand Up @@ -178,7 +177,7 @@ impl Handler {
//
// Wait for num_pending_actions number of responses
for _ in 0..self.num_pending_actions.get() {
match self.constellation_receiver.recv() {
match self.webdriver_response_receiver.recv() {
Ok(response) => {
let current_waiting_id = self
.current_action_id
Expand Down Expand Up @@ -316,11 +315,8 @@ impl Handler {
self.session().unwrap().browsing_context_id,
keyboard_event,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);
}

/// <https://w3c.github.io/webdriver/#dfn-dispatch-a-keyup-action>
Expand Down Expand Up @@ -358,11 +354,8 @@ impl Handler {
self.session().unwrap().browsing_context_id,
keyboard_event,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);
}
}

Expand Down Expand Up @@ -390,11 +383,8 @@ impl Handler {
pointer_input_state.x as f32,
pointer_input_state.y as f32,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);
}

/// <https://w3c.github.io/webdriver/#dfn-dispatch-a-pointerup-action>
Expand Down Expand Up @@ -439,11 +429,8 @@ impl Handler {
pointer_input_state.x as f32,
pointer_input_state.y as f32,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);
}

/// <https://w3c.github.io/webdriver/#dfn-dispatch-a-pointermove-action>
Expand Down Expand Up @@ -567,11 +554,8 @@ impl Handler {
x as f32,
y as f32,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);
// Step 7.3
pointer_input_state.x = x;
pointer_input_state.y = y;
Expand Down Expand Up @@ -707,11 +691,8 @@ impl Handler {
delta_x as f64,
delta_y as f64,
msg_id,
self.constellation_sender.clone(),
);
self.constellation_chan
.send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg))
.unwrap();
let _ = self.send_message_to_embedder(cmd_msg);

curr_delta_x += delta_x;
curr_delta_y += delta_y;
Expand Down
Loading