|
| 1 | +<!DOCTYPE html> |
| 2 | +<title>Default passive event listeners on window, document, document element, body</title> |
| 3 | +<link rel="help" href="https://dom.spec.whatwg.org/#default-passive-value"> |
| 4 | +<script src="/resources/testharness.js"></script> |
| 5 | +<script src="/resources/testharnessreport.js"></script> |
| 6 | +<body> |
| 7 | + <div id="div"></div> |
| 8 | +<script> |
| 9 | + function isListenerPassive(eventName, eventTarget, passive, expectPassive) { |
| 10 | + test(() => { |
| 11 | + let defaultPrevented = null; |
| 12 | + let handler = event => { |
| 13 | + event.preventDefault(); |
| 14 | + defaultPrevented = event.defaultPrevented; |
| 15 | + eventTarget.removeEventListener(eventName, handler); |
| 16 | + }; |
| 17 | + if (passive === 'omitted') { |
| 18 | + eventTarget.addEventListener(eventName, handler); |
| 19 | + } else { |
| 20 | + eventTarget.addEventListener(eventName, handler, {passive}); |
| 21 | + } |
| 22 | + let dispatchEventReturnValue = eventTarget.dispatchEvent(new Event(eventName, {cancelable: true})); |
| 23 | + assert_equals(defaultPrevented, !expectPassive, 'defaultPrevented'); |
| 24 | + assert_equals(dispatchEventReturnValue, expectPassive, 'dispatchEvent() return value'); |
| 25 | + }, `${eventName} listener is ${expectPassive ? '' : 'non-'}passive ${passive === 'omitted' ? 'by default' : `with {passive:${passive}}`} for ${eventTarget.constructor.name}`); |
| 26 | + } |
| 27 | + |
| 28 | + const eventNames = { |
| 29 | + touchstart: true, |
| 30 | + touchmove: true, |
| 31 | + wheel: true, |
| 32 | + mousewheel: true, |
| 33 | + touchend: false |
| 34 | + }; |
| 35 | + const passiveEventTargets = [window, document, document.documentElement, document.body]; |
| 36 | + const div = document.getElementById('div'); |
| 37 | + |
| 38 | + for (const eventName in eventNames) { |
| 39 | + for (const eventTarget of passiveEventTargets) { |
| 40 | + isListenerPassive(eventName, eventTarget, 'omitted', eventNames[eventName]); |
| 41 | + isListenerPassive(eventName, eventTarget, undefined, eventNames[eventName]); |
| 42 | + isListenerPassive(eventName, eventTarget, false, false); |
| 43 | + isListenerPassive(eventName, eventTarget, true, true); |
| 44 | + } |
| 45 | + isListenerPassive(eventName, div, 'omitted', false); |
| 46 | + isListenerPassive(eventName, div, undefined, false); |
| 47 | + isListenerPassive(eventName, div, false, false); |
| 48 | + isListenerPassive(eventName, div, true, true); |
| 49 | + } |
| 50 | +</script> |
0 commit comments