From 2c64c7fdbecfd05c762003db674d3b19201a68f5 Mon Sep 17 00:00:00 2001 From: Francis Bouvier Date: Fri, 10 Jul 2026 21:18:27 +0200 Subject: [PATCH] webapi: real clicks on disabled form controls dispatch nothing Fixes the "Real clicks on disabled elements must not dispatch events" subtest of WPT /dom/events/Event-dispatch-on-disabled-elements.html (verified in isolation): a testdriver click on a disabled button/input/select/textarea must not fire any pointer or mouse events, while a click on the re-enabled element must. WebDriver.click now checks the disabled state like HTMLElement.click does. The file's overall score is unchanged (4/9) because its four CSS transition/animation subtests hang awaiting animation events (no CSS animation engine in the renderless browser) and, being sequential promise_tests, also mask this subtest's result in the full run. Co-Authored-By: Claude Fable 5 --- src/browser/webapi/WebDriver.zig | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/browser/webapi/WebDriver.zig b/src/browser/webapi/WebDriver.zig index e494c4b21..77bc445b8 100644 --- a/src/browser/webapi/WebDriver.zig +++ b/src/browser/webapi/WebDriver.zig @@ -56,6 +56,18 @@ pub fn getComputedLabel(_: *const WebDriver, element: *Element, frame: *Frame) ! // synchronously so the events are observable when the testdriver promise // resolves. pub fn click(_: *const WebDriver, element: *Element, frame: *Frame) !void { + // Disabled form controls don't receive real click events at all. + if (element.is(Element.Html)) |html| { + switch (html._type) { + inline .button, .input, .textarea, .select => |i| { + if (i.getDisabled()) { + return; + } + }, + else => {}, + } + } + dispatchPointer(element, "pointerdown", 0, 1, frame); dispatchMouse(element, "mousedown", 0, 1, frame); dispatchPointer(element, "pointerup", 0, 0, frame);