libservo: Move WebDriver messages to the embedder crate (#35602)

This is the first step toward moving the WebDriver implementation to
servoshell. This move will make it possible to start testing the
embedding API with WebDriver. See [this zulip thread][a] for more details.

While WebDriver will be able to use a lot of API commands to do what it
is doing now, there will still need to be some "cheat codes" for more
gnarly access to `ScriptThread` details. That's why we likely won't be
able to remove all WebDriver-specific messages from the API -- but maybe
they will be useful for embedders somehow.

A couple messages have to change as they depended on `script_traits`
types, particularly those that used `WindowSizeData` and `LoadData`. I
think this helps to encapsulate the WebDriver commands a bit more
though.

[a]: https://servo.zulipchat.com/#narrow/channel/437943-embedding/topic/webdriver.20as.20embedding.20api.20playgound

Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
Martin Robinson 2025-02-24 14:57:28 +01:00 committed by GitHub
parent 41c2422a66
commit 6062995636
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 125 additions and 124 deletions

View file

@ -7,11 +7,9 @@ use std::time::{Duration, Instant};
use std::{cmp, thread};
use compositing_traits::ConstellationMsg;
use embedder_traits::MouseButtonAction;
use embedder_traits::{MouseButtonAction, WebDriverCommandMsg, WebDriverScriptCommand};
use ipc_channel::ipc;
use keyboard_types::webdriver::KeyInputState;
use script_traits::webdriver_msg::WebDriverScriptCommand;
use script_traits::WebDriverCommandMsg;
use webdriver::actions::{
ActionSequence, ActionsType, GeneralAction, KeyAction, KeyActionItem, KeyDownAction,
KeyUpAction, NullActionItem, PointerAction, PointerActionItem, PointerActionParameters,
@ -398,8 +396,8 @@ impl Handler {
.unwrap();
// Steps 7 - 8
let viewport = receiver.recv().unwrap().initial_viewport;
if x < 0 || x as f32 > viewport.width || y < 0 || y as f32 > viewport.height {
let viewport_size = receiver.recv().unwrap();
if x < 0 || x as f32 > viewport_size.width || y < 0 || y as f32 > viewport_size.height {
return Err(ErrorStatus::MoveTargetOutOfBounds);
}