tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

passive-by-default.html (2177B)


      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>