11cb0ef41Sopenharmony_ciconst otherWindow = document.body.appendChild(document.createElement("iframe")).contentWindow; 21cb0ef41Sopenharmony_ci 31cb0ef41Sopenharmony_ci["EventTarget", "XMLHttpRequest"].forEach(constructorName => { 41cb0ef41Sopenharmony_ci async_test(t => { 51cb0ef41Sopenharmony_ci const eventTarget = new otherWindow[constructorName](); 61cb0ef41Sopenharmony_ci eventTarget.addEventListener("hi", t.step_func_done(e => { 71cb0ef41Sopenharmony_ci assert_equals(otherWindow.event, undefined); 81cb0ef41Sopenharmony_ci assert_equals(e, window.event); 91cb0ef41Sopenharmony_ci })); 101cb0ef41Sopenharmony_ci eventTarget.dispatchEvent(new Event("hi")); 111cb0ef41Sopenharmony_ci }, "window.event for constructors from another global: " + constructorName); 121cb0ef41Sopenharmony_ci}); 131cb0ef41Sopenharmony_ci 141cb0ef41Sopenharmony_ci// XXX: It would be good to test a subclass of EventTarget once we sort out 151cb0ef41Sopenharmony_ci// https://github.com/heycam/webidl/issues/540 161cb0ef41Sopenharmony_ci 171cb0ef41Sopenharmony_ciasync_test(t => { 181cb0ef41Sopenharmony_ci const element = document.body.appendChild(otherWindow.document.createElement("meh")); 191cb0ef41Sopenharmony_ci element.addEventListener("yo", t.step_func_done(e => { 201cb0ef41Sopenharmony_ci assert_equals(e, window.event); 211cb0ef41Sopenharmony_ci })); 221cb0ef41Sopenharmony_ci element.dispatchEvent(new Event("yo")); 231cb0ef41Sopenharmony_ci}, "window.event and element from another document"); 241cb0ef41Sopenharmony_ci 251cb0ef41Sopenharmony_ciasync_test(t => { 261cb0ef41Sopenharmony_ci const doc = otherWindow.document, 271cb0ef41Sopenharmony_ci element = doc.body.appendChild(doc.createElement("meh")), 281cb0ef41Sopenharmony_ci child = element.appendChild(doc.createElement("bleh")); 291cb0ef41Sopenharmony_ci element.addEventListener("yoyo", t.step_func(e => { 301cb0ef41Sopenharmony_ci document.body.appendChild(element); 311cb0ef41Sopenharmony_ci assert_equals(element.ownerDocument, document); 321cb0ef41Sopenharmony_ci assert_equals(window.event, e); 331cb0ef41Sopenharmony_ci assert_equals(otherWindow.event, undefined); 341cb0ef41Sopenharmony_ci }), true); 351cb0ef41Sopenharmony_ci element.addEventListener("yoyo", t.step_func(e => { 361cb0ef41Sopenharmony_ci assert_equals(element.ownerDocument, document); 371cb0ef41Sopenharmony_ci assert_equals(window.event, e); 381cb0ef41Sopenharmony_ci assert_equals(otherWindow.event, undefined); 391cb0ef41Sopenharmony_ci }), true); 401cb0ef41Sopenharmony_ci child.addEventListener("yoyo", t.step_func_done(e => { 411cb0ef41Sopenharmony_ci assert_equals(child.ownerDocument, document); 421cb0ef41Sopenharmony_ci assert_equals(window.event, e); 431cb0ef41Sopenharmony_ci assert_equals(otherWindow.event, undefined); 441cb0ef41Sopenharmony_ci })); 451cb0ef41Sopenharmony_ci child.dispatchEvent(new Event("yoyo")); 461cb0ef41Sopenharmony_ci}, "window.event and moving an element post-dispatch"); 471cb0ef41Sopenharmony_ci 481cb0ef41Sopenharmony_citest(t => { 491cb0ef41Sopenharmony_ci const host = document.createElement("div"), 501cb0ef41Sopenharmony_ci shadow = host.attachShadow({ mode: "open" }), 511cb0ef41Sopenharmony_ci child = shadow.appendChild(document.createElement("trala")), 521cb0ef41Sopenharmony_ci furtherChild = child.appendChild(document.createElement("waddup")); 531cb0ef41Sopenharmony_ci let counter = 0; 541cb0ef41Sopenharmony_ci host.addEventListener("hi", t.step_func(e => { 551cb0ef41Sopenharmony_ci assert_equals(window.event, e); 561cb0ef41Sopenharmony_ci assert_equals(counter++, 3); 571cb0ef41Sopenharmony_ci })); 581cb0ef41Sopenharmony_ci child.addEventListener("hi", t.step_func(e => { 591cb0ef41Sopenharmony_ci assert_equals(window.event, undefined); 601cb0ef41Sopenharmony_ci assert_equals(counter++, 2); 611cb0ef41Sopenharmony_ci })); 621cb0ef41Sopenharmony_ci furtherChild.addEventListener("hi", t.step_func(e => { 631cb0ef41Sopenharmony_ci host.appendChild(child); 641cb0ef41Sopenharmony_ci assert_equals(window.event, undefined); 651cb0ef41Sopenharmony_ci assert_equals(counter++, 0); 661cb0ef41Sopenharmony_ci })); 671cb0ef41Sopenharmony_ci furtherChild.addEventListener("hi", t.step_func(e => { 681cb0ef41Sopenharmony_ci assert_equals(window.event, undefined); 691cb0ef41Sopenharmony_ci assert_equals(counter++, 1); 701cb0ef41Sopenharmony_ci })); 711cb0ef41Sopenharmony_ci furtherChild.dispatchEvent(new Event("hi", { composed: true, bubbles: true })); 721cb0ef41Sopenharmony_ci assert_equals(counter, 4); 731cb0ef41Sopenharmony_ci}, "window.event should not be affected by nodes moving post-dispatch"); 741cb0ef41Sopenharmony_ci 751cb0ef41Sopenharmony_ciasync_test(t => { 761cb0ef41Sopenharmony_ci const frame = document.body.appendChild(document.createElement("iframe")); 771cb0ef41Sopenharmony_ci frame.src = "resources/event-global-extra-frame.html"; 781cb0ef41Sopenharmony_ci frame.onload = t.step_func_done((load_event) => { 791cb0ef41Sopenharmony_ci const event = new Event("hi"); 801cb0ef41Sopenharmony_ci document.addEventListener("hi", frame.contentWindow.listener); // listener intentionally not wrapped in t.step_func 811cb0ef41Sopenharmony_ci document.addEventListener("hi", t.step_func(e => { 821cb0ef41Sopenharmony_ci assert_equals(event, e); 831cb0ef41Sopenharmony_ci assert_equals(window.event, e); 841cb0ef41Sopenharmony_ci })); 851cb0ef41Sopenharmony_ci document.dispatchEvent(event); 861cb0ef41Sopenharmony_ci assert_equals(frameState.event, event); 871cb0ef41Sopenharmony_ci assert_equals(frameState.windowEvent, event); 881cb0ef41Sopenharmony_ci assert_equals(frameState.parentEvent, load_event); 891cb0ef41Sopenharmony_ci }); 901cb0ef41Sopenharmony_ci}, "Listener from a different global"); 91