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> 51