From 4210d4b0ef5759a53e726d54e5a512223b58183f Mon Sep 17 00:00:00 2001 From: Joey Arhar Date: Fri, 17 Nov 2023 00:42:19 +0000 Subject: [PATCH] Don't fire dblclick on disabled form control elements As discussed here, we should apply the event blocking behavior for disabled form controls to dblclick in addition to click, mouseup, and mousedown: https://github.com/whatwg/html/issues/2368#issuecomment-1791704780 Change-Id: Ibc52585ce0704d8ba8467efc3462bd378d23fbae Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5007308 Commit-Queue: Joey Arhar Reviewed-by: Mason Freed Cr-Commit-Position: refs/heads/main@{#1225838} --- .../blink/renderer/core/events/mouse_event.cc | 5 ++++- .../platform/runtime_enabled_features.json5 | 5 +++++ .../disabled-event-dispatch.tentative.html | 15 +++++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/third_party/blink/renderer/core/events/mouse_event.cc b/third_party/blink/renderer/core/events/mouse_event.cc index bd9fc68dcff93c..81ba75f0913bb2 100644 --- a/third_party/blink/renderer/core/events/mouse_event.cc +++ b/third_party/blink/renderer/core/events/mouse_event.cc @@ -389,7 +389,10 @@ DispatchEventResult MouseEvent::DispatchEvent(EventDispatcher& dispatcher) { return dispatcher.Dispatch(); if (is_click || type() == event_type_names::kMousedown || - type() == event_type_names::kMouseup) { + type() == event_type_names::kMouseup || + (RuntimeEnabledFeatures:: + DontFireDblclickOnDisabledFormControlsEnabled() && + type() == event_type_names::kDblclick)) { GetEventPath().AdjustForDisabledFormControl(); } diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 6c8069533e2ab9..4bbc1fe3127145 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5 @@ -1459,6 +1459,11 @@ name: "DOMPartsAPIActivePartTracking", depends_on: ["DOMPartsAPI"], }, + { + // Shipping in M121, so should be safe to remove in M126. + name: "DontFireDblclickOnDisabledFormControls", + status: "stable", + }, { name: "EditContext", origin_trial_feature_name: "EditContext", diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html index e2b8846fc3dbe9..0b2b967bfb4a29 100644 --- a/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html +++ b/third_party/blink/web_tests/external/wpt/html/semantics/disabled-elements/disabled-event-dispatch.tentative.html @@ -25,7 +25,7 @@ static get formAssociated() { return true; } }); -['mousedown', 'mouseup', 'pointerdown', 'pointerup', 'click'].forEach(eventName => { +['mousedown', 'mouseup', 'pointerdown', 'pointerup', 'click', 'dblclick'].forEach(eventName => { [true, false].forEach(clickChildElement => { for (const target of targetparent.children) { promise_test(async () => { @@ -39,7 +39,18 @@ let targetchild = target.firstElementChild; targetchild.addEventListener(eventName, () => childReceivedEvent = true); - await test_driver.click(clickChildElement ? targetchild : target); + const elementToClick = clickChildElement ? targetchild : target; + if (eventName === 'dblclick') { + await (new test_driver.Actions() + .pointerMove(1, 1, {origin: elementToClick}) + .pointerDown() + .pointerUp() + .pointerDown() + .pointerUp()) + .send(); + } else { + await test_driver.click(elementToClick); + } const parentShouldReceiveEvents = eventName.startsWith('pointer'); assert_equals(parentReceivedEvent, parentShouldReceiveEvents,