webdriver: Element Send keys use dispatch actions for KeyboardEvent (#38444)

Previously we immediately passed the KeyboardEvent to embedder. Now we
make element send keys go through the dispatch action which required by
spec. CompositionEvent still immediately passed through embedder

Testing: Should make
`./tests/wpt/tests/webdriver/tests/classic/element_send_keys/` more
stable.
Fixes: https://github.com/servo/servo/issues/38354
Fixes: https://github.com/servo/servo/issues/38442

---------

Signed-off-by: PotatoCP <Kenzie.Raditya.Tirtarahardja@huawei.com>
Co-authored-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
Kenzie Raditya Tirtarahardja 2025-08-22 13:20:54 +08:00 committed by GitHub
parent 56ce19511c
commit cae8d22823
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 138 additions and 137 deletions

View file

@ -12,8 +12,7 @@ use euclid::default::Rect as UntypedRect;
use euclid::{Rect, Size2D};
use hyper_serde::Serde;
use ipc_channel::ipc::IpcSender;
use keyboard_types::KeyboardEvent;
use keyboard_types::webdriver::Event as WebDriverInputEvent;
use keyboard_types::{CompositionEvent, KeyboardEvent};
use pixels::RasterImage;
use serde::{Deserialize, Serialize};
use servo_geometry::DeviceIndependentIntRect;
@ -92,8 +91,8 @@ pub enum WebDriverCommandMsg {
/// Pass a webdriver command to the script thread of the current pipeline
/// of a browsing context.
ScriptCommand(BrowsingContextId, WebDriverScriptCommand),
/// Act as if keys were pressed in the browsing context with the given ID.
SendKeys(WebViewId, Vec<WebDriverInputEvent>),
/// Dispatch composition event from element send keys command.
DispatchComposition(WebViewId, CompositionEvent),
/// Act as if keys were pressed or release in the browsing context with the given ID.
KeyboardAction(
WebViewId,