tor-browser

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

stopPropagation.deferred.effect.html (2301B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <title> Event.stopPropagation() deferred effect </title>
      5 <script src="/resources/testharness.js"></script>
      6 <script src="/resources/testharnessreport.js"></script>
      7 </head>
      8 <body>
      9 <div id=log></div>
     10 
     11 <table id="table" border="1" style="display: none">
     12    <tbody id="table-body">
     13    <tr id="table-row">
     14        <td id="table-cell">Shady Grove</td>
     15        <td>Aeolian</td>
     16    </tr>
     17    <tr id="parent">
     18        <td id="target">Over the river, Charlie</td>
     19        <td>Dorian</td>
     20    </tr>
     21    </tbody>
     22 </table>
     23 
     24 <script>
     25    var EVENT = "foo";
     26    var TARGET = document.getElementById("target");
     27    var PARENT = document.getElementById("parent");
     28    var TBODY = document.getElementById("table-body");
     29    var TABLE = document.getElementById("table");
     30    var BODY = document.body;
     31    var HTML = document.documentElement;
     32    var CurrentTargets = [window, document, HTML, BODY, TABLE, TBODY, PARENT, TARGET];
     33    var ExpectResult = [window, window, document, document, HTML, HTML, BODY, BODY, TABLE, TABLE];
     34    var ActualResult = [];
     35    var ExpectListeners = [0,1,0,1,0,1,0,1,0,1];
     36    var ActualListeners = [];
     37 
     38    var description = "Test Description: " +
     39                      "stopPropagation() prevents other event listeners from being triggered but its effect must be " +
     40                      "deferred until all event listeners attached on the Event.currentTarget have been triggered.";
     41 
     42    test(function()
     43    {
     44        for (var i=0; i < CurrentTargets.length; i++)
     45        {
     46            CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 0)}, true);
     47            CurrentTargets[i].addEventListener(EVENT, function(e){TestEvent(e, 1)}, true);
     48        }
     49 
     50        var evt = document.createEvent("Event");
     51        evt.initEvent(EVENT, true, true);
     52        TARGET.dispatchEvent(evt);
     53 
     54        assert_array_equals(ActualResult, ExpectResult, "ActualResult");
     55        assert_array_equals(ActualListeners, ExpectListeners, "ActualListeners");
     56 
     57    }, description);
     58 
     59    function TestEvent(evt, i)
     60    {
     61        ActualResult.push(evt.currentTarget);
     62        ActualListeners.push(i);
     63        if ((1 == evt.eventPhase) && (TABLE == evt.currentTarget) && (0 == i))
     64        {
     65            evt.stopPropagation();
     66        }
     67    }
     68 </script>
     69 </body>
     70 </html>