1<!DOCTYPE html> 2<meta charset=utf-8> 3<title>Determined event propagation path - target removed</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<table id="table" border="1" style="display: none"> 9 <tbody id="table-body"> 10 <tr id="table-row"> 11 <td id="table-cell">Shady Grove</td> 12 <td>Aeolian</td> 13 </tr> 14 <tr id="parent"> 15 <td id="target">Over the river, Charlie</td> 16 <td>Dorian</td> 17 </tr> 18 </tbody> 19</table> 20<script> 21test(function() { 22 var event_type = "foo"; 23 var target = document.getElementById("target"); 24 var parent = document.getElementById("parent"); 25 var tbody = document.getElementById("table-body"); 26 var table = document.getElementById("table"); 27 var body = document.body; 28 var html = document.documentElement; 29 var targets = [window, document, html, body, table, tbody, parent, target]; 30 var expected_targets = targets.concat([target, parent, tbody, table, body, html, document, window]); 31 var phases = [ 32 Event.CAPTURING_PHASE, 33 Event.CAPTURING_PHASE, 34 Event.CAPTURING_PHASE, 35 Event.CAPTURING_PHASE, 36 Event.CAPTURING_PHASE, 37 Event.CAPTURING_PHASE, 38 Event.CAPTURING_PHASE, 39 Event.AT_TARGET, 40 Event.AT_TARGET, 41 Event.BUBBLING_PHASE, 42 Event.BUBBLING_PHASE, 43 Event.BUBBLING_PHASE, 44 Event.BUBBLING_PHASE, 45 Event.BUBBLING_PHASE, 46 Event.BUBBLING_PHASE, 47 Event.BUBBLING_PHASE, 48 ]; 49 50 var actual_targets = [], actual_phases = []; 51 var test_event = this.step_func(function(evt) { 52 if (parent === target.parentNode) { 53 parent.removeChild(target); 54 } 55 56 actual_targets.push(evt.currentTarget); 57 actual_phases.push(evt.eventPhase); 58 }); 59 60 for (var i = 0; i < targets.length; i++) { 61 targets[i].addEventListener(event_type, test_event, true); 62 targets[i].addEventListener(event_type, test_event, false); 63 } 64 65 var evt = document.createEvent("Event"); 66 evt.initEvent(event_type, true, true); 67 target.dispatchEvent(evt); 68 69 assert_array_equals(actual_targets, expected_targets, "targets"); 70 assert_array_equals(actual_phases, phases, "phases"); 71}, "Event propagation path when an element in it is removed from the DOM"); 72</script> 73