diff --git a/dom/html/nsGenericHTMLElement.cpp b/dom/html/nsGenericHTMLElement.cpp index b43eb52840ffd..d6b614e58c712 100644 --- a/dom/html/nsGenericHTMLElement.cpp +++ b/dom/html/nsGenericHTMLElement.cpp @@ -1968,6 +1968,12 @@ bool nsGenericHTMLFormElement::IsElementDisabledForEvents(WidgetEvent* aEvent, case eLegacyMouseLineOrPageScroll: case eLegacyMousePixelScroll: return false; + case ePointerDown: + case ePointerUp: + case ePointerCancel: + case ePointerGotCapture: + case ePointerLostCapture: + return !StaticPrefs::dom_forms_always_allow_pointer_events_enabled(); default: break; } diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index f0eddf60d2f5d..d390defe56213 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -2887,6 +2887,11 @@ value: true mirror: always +- name: dom.forms.always_allow_pointer_events.enabled + type: bool + value: @IS_NIGHTLY_BUILD@ + mirror: always + # Is support for HTMLInputElement.showPicker enabled? - name: dom.input.showPicker type: bool diff --git a/testing/web-platform/meta/pointerevents/pointerevent_disabled_form_control.html.ini b/testing/web-platform/meta/pointerevents/pointerevent_disabled_form_control.html.ini index d6bb72ba6115d..cedf82737e9ff 100644 --- a/testing/web-platform/meta/pointerevents/pointerevent_disabled_form_control.html.ini +++ b/testing/web-platform/meta/pointerevents/pointerevent_disabled_form_control.html.ini @@ -1,15 +1,5 @@ -[pointerevent_disabled_form_control.html?mouse] - expected: TIMEOUT - [mouse pointerevent attributes] - expected: NOTRUN - - +prefs: [dom.forms.always_allow_pointer_events.enabled:true] [pointerevent_disabled_form_control.html?pen] expected: if (os == "android") and fission: [ERROR, TIMEOUT] ERROR - -[pointerevent_disabled_form_control.html?touch] - expected: TIMEOUT - [touch pointerevent attributes] - expected: NOTRUN diff --git a/testing/web-platform/tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html b/testing/web-platform/tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html new file mode 100644 index 0000000000000..0c00cc8db078b --- /dev/null +++ b/testing/web-platform/tests/html/semantics/disabled-elements/event-propagate-disabled.tentative.html @@ -0,0 +1,243 @@ + + + +Event propagation on disabled form elements + + + + + + + + + +
+ + + +
Text
+
Span
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/testing/web-platform/tests/pointerevents/pointerevent_disabled_form_control.html b/testing/web-platform/tests/pointerevents/pointerevent_disabled_form_control.html index 83ad053a146a9..d253111115f1e 100644 --- a/testing/web-platform/tests/pointerevents/pointerevent_disabled_form_control.html +++ b/testing/web-platform/tests/pointerevents/pointerevent_disabled_form_control.html @@ -18,7 +18,7 @@ var inputSource = location.search.substring(1); var detected_pointertypes = {}; var detected_eventTypes = {}; - var eventList = ['pointerout', 'pointerover', 'pointerenter', 'pointermove', 'pointerdown', 'pointerup', 'pointerleave']; + var eventList = ['pointerout', 'pointerover', 'pointerenter', 'pointermove', 'pointerdown', 'gotpointercapture', 'pointerup', 'lostpointercapture', 'pointerleave']; function resetTestState() { detected_eventTypes = {}; @@ -29,10 +29,14 @@ var actions_promise; eventList.forEach(function(eventName) { - on_event(target, eventName, function (event) { + on_event(target, eventName, function (event) { detected_eventTypes[event.type] = true; detected_pointertypes[event.pointerType] = true; + if (event.type === "pointerdown") { + target.setPointerCapture(event.pointerId); + } + if (Object.keys(detected_eventTypes).length == eventList.length) { // Make sure the test finishes after all the input actions are completed. actions_promise.then( () => { @@ -55,6 +59,7 @@ actions_promise = clickInTarget(inputSource, target).then(function() { return new test_driver.Actions() .addPointer(inputSource + "Pointer1", inputSource) + .pointerMove(0, 0, {origin: target}) .pointerMove(0, 0) .send(); });