tor-browser

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

eventhandler-cancellation.html (2847B)


      1 <!doctype html>
      2 <meta charset=utf-8>
      3 <title></title>
      4 <script src=/resources/testharness.js></script>
      5 <script src=/resources/testharnessreport.js></script>
      6 <!-- A window to work with that won't trigger the harness exception detection
      7     when we fire "error" events at it -->
      8 <iframe style="display: none"></iframe>
      9 <script>
     10  test(function() {
     11    var blob = new Blob([""]);
     12    // Most targets disabled for now until
     13    // https://github.com/whatwg/html/issues/2296 is sorted out.
     14    var targets = [ frames[0] /*, document, document.documentElement,
     15                    new Worker(URL.createObjectURL(blob) */ ];
     16    // Event constructors also mostly disabled until
     17    // https://github.com/whatwg/html/issues/2296 is sorted out.
     18    var eventCtors = [ /* Event, */ ErrorEvent /*, MouseEvent */ ];
     19    var values = [true, false, "", "abc", {}, 0, 1, -1, null, undefined,
     20                  2.5, NaN, Infinity, Symbol.toStringTag ];
     21    // Event types also mostly disabled pending
     22    // https://github.com/whatwg/html/issues/2296
     23    var eventTypes = [ "error"/*, "click", "load"*/ ];
     24 
     25    // Variables that keep track of which subtest we're running.
     26    var curTarget;
     27    var curValue;
     28    var curCtor;
     29    var curType;
     30 
     31    function defaultPreventedTester(event) {
     32      var expectedValue;
     33      if (curTarget === frames[0] &&
     34          curCtor === ErrorEvent &&
     35          curValue === true &&
     36          curType == "error") {
     37        expectedValue = true;
     38      } else {
     39        // This will need adjusting once we allow more targets and event
     40        // constructors above!
     41        expectedValue = false;
     42      }
     43      var valueRepr;
     44      if (typeof curValue == "string") {
     45        valueRepr = '"' + curValue + '"';
     46      } else {
     47        valueRepr = String(curValue);
     48      }
     49      test(function() {
     50        assert_equals(event.defaultPrevented, expectedValue);
     51      }, "Returning " + valueRepr +
     52         " from " + String(curTarget) + "'s on" + curType +
     53         " event handler while " + curCtor.name +
     54         " is firing should" +
     55         (expectedValue ? "" : " not") +
     56         " cancel the event");
     57    }
     58 
     59    for (curCtor of eventCtors) {
     60      for (curTarget of targets) {
     61        for (curType of eventTypes) {
     62          for (curValue of values) {
     63            // We have to make sure that defaultPreventedTester is added after
     64            // our event handler.
     65            curTarget["on" + curType] = function() { return curValue; }
     66            curTarget.addEventListener(curType, defaultPreventedTester);
     67            var e = new curCtor(curType, { cancelable: true });
     68            curTarget.dispatchEvent(e);
     69            curTarget["on" + curType] = null;
     70            curTarget.removeEventListener(curType, defaultPreventedTester);
     71          }
     72        }
     73      }
     74    }
     75  }, "event handler cancellation behavior");
     76 </script>