tor-browser

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

Event-dispatch-handlers-changed.html (2824B)


      1 <!DOCTYPE html>
      2 <meta charset=utf-8>
      3 <title> Dispatch additional events inside an event listener </title>
      4 <link rel="help" href="https://dom.spec.whatwg.org/#concept-event-dispatch">
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 <div id=log></div>
      8 
      9 <table id="table" border="1" style="display: none">
     10    <tbody id="table-body">
     11    <tr id="table-row">
     12        <td id="table-cell">Shady Grove</td>
     13        <td>Aeolian</td>
     14    </tr>
     15    <tr id="parent">
     16        <td id="target">Over the river, Charlie</td>
     17        <td>Dorian</td>
     18    </tr>
     19    </tbody>
     20 </table>
     21 
     22 <script>
     23 test(function() {
     24  var event_type = "bar";
     25  var target = document.getElementById("target");
     26  var parent = document.getElementById("parent");
     27  var tbody = document.getElementById("table-body");
     28  var table = document.getElementById("table");
     29  var body = document.body;
     30  var html = document.documentElement;
     31  var targets = [window, document, html, body, table, tbody, parent, target];
     32  var expected_targets = [
     33    window,
     34    document,
     35    html,
     36    body,
     37    table,
     38    tbody,
     39    parent,
     40    target,
     41    target,
     42    target, // The additional listener for target runs as we copy its listeners twice
     43    parent,
     44    tbody,
     45    table,
     46    body,
     47    html,
     48    document,
     49    window
     50  ];
     51  var expected_listeners = [0,0,0,0,0,0,0,0,1,3,1,1,1,1,1,1,1];
     52 
     53  var actual_targets = [], actual_listeners = [];
     54  var test_event_function = function(i) {
     55    return this.step_func(function(evt) {
     56      actual_targets.push(evt.currentTarget);
     57      actual_listeners.push(i);
     58 
     59      if (evt.eventPhase != evt.BUBBLING_PHASE && evt.currentTarget.foo != 1) {
     60        evt.currentTarget.removeEventListener(event_type, event_handlers[0], true);
     61        evt.currentTarget.addEventListener(event_type, event_handlers[2], true);
     62        evt.currentTarget.foo = 1;
     63      }
     64 
     65      if (evt.eventPhase != evt.CAPTURING_PHASE && evt.currentTarget.foo != 3) {
     66        evt.currentTarget.removeEventListener(event_type, event_handlers[0], false);
     67        evt.currentTarget.addEventListener(event_type, event_handlers[3], false);
     68        evt.currentTarget.foo = 3;
     69      }
     70    });
     71  }.bind(this);
     72  var event_handlers = [
     73    test_event_function(0),
     74    test_event_function(1),
     75    test_event_function(2),
     76    test_event_function(3),
     77  ];
     78 
     79  for (var i = 0; i < targets.length; ++i) {
     80    targets[i].addEventListener(event_type, event_handlers[0], true);
     81    targets[i].addEventListener(event_type, event_handlers[1], false);
     82  }
     83 
     84  var evt = document.createEvent("Event");
     85  evt.initEvent(event_type, true, true);
     86  target.dispatchEvent(evt);
     87 
     88  assert_array_equals(actual_targets, expected_targets, "actual_targets");
     89  assert_array_equals(actual_listeners, expected_listeners, "actual_listeners");
     90 });
     91 </script>