• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1const otherWindow = document.body.appendChild(document.createElement("iframe")).contentWindow;
2
3["EventTarget", "XMLHttpRequest"].forEach(constructorName => {
4  async_test(t => {
5    const eventTarget = new otherWindow[constructorName]();
6    eventTarget.addEventListener("hi", t.step_func_done(e => {
7      assert_equals(otherWindow.event, undefined);
8      assert_equals(e, window.event);
9    }));
10    eventTarget.dispatchEvent(new Event("hi"));
11  }, "window.event for constructors from another global: " + constructorName);
12});
13
14// XXX: It would be good to test a subclass of EventTarget once we sort out
15// https://github.com/heycam/webidl/issues/540
16
17async_test(t => {
18  const element = document.body.appendChild(otherWindow.document.createElement("meh"));
19  element.addEventListener("yo", t.step_func_done(e => {
20    assert_equals(e, window.event);
21  }));
22  element.dispatchEvent(new Event("yo"));
23}, "window.event and element from another document");
24
25async_test(t => {
26  const doc = otherWindow.document,
27        element = doc.body.appendChild(doc.createElement("meh")),
28        child = element.appendChild(doc.createElement("bleh"));
29  element.addEventListener("yoyo", t.step_func(e => {
30    document.body.appendChild(element);
31    assert_equals(element.ownerDocument, document);
32    assert_equals(window.event, e);
33    assert_equals(otherWindow.event, undefined);
34  }), true);
35  element.addEventListener("yoyo", t.step_func(e => {
36    assert_equals(element.ownerDocument, document);
37    assert_equals(window.event, e);
38    assert_equals(otherWindow.event, undefined);
39  }), true);
40  child.addEventListener("yoyo", t.step_func_done(e => {
41    assert_equals(child.ownerDocument, document);
42    assert_equals(window.event, e);
43    assert_equals(otherWindow.event, undefined);
44  }));
45  child.dispatchEvent(new Event("yoyo"));
46}, "window.event and moving an element post-dispatch");
47
48test(t => {
49  const host = document.createElement("div"),
50        shadow = host.attachShadow({ mode: "open" }),
51        child = shadow.appendChild(document.createElement("trala")),
52        furtherChild = child.appendChild(document.createElement("waddup"));
53  let counter = 0;
54  host.addEventListener("hi", t.step_func(e => {
55    assert_equals(window.event, e);
56    assert_equals(counter++, 3);
57  }));
58  child.addEventListener("hi", t.step_func(e => {
59    assert_equals(window.event, undefined);
60    assert_equals(counter++, 2);
61  }));
62  furtherChild.addEventListener("hi", t.step_func(e => {
63    host.appendChild(child);
64    assert_equals(window.event, undefined);
65    assert_equals(counter++, 0);
66  }));
67  furtherChild.addEventListener("hi", t.step_func(e => {
68    assert_equals(window.event, undefined);
69    assert_equals(counter++, 1);
70  }));
71  furtherChild.dispatchEvent(new Event("hi", { composed: true, bubbles: true }));
72  assert_equals(counter, 4);
73}, "window.event should not be affected by nodes moving post-dispatch");
74
75async_test(t => {
76  const frame = document.body.appendChild(document.createElement("iframe"));
77  frame.src = "resources/event-global-extra-frame.html";
78  frame.onload = t.step_func_done((load_event) => {
79    const event = new Event("hi");
80    document.addEventListener("hi", frame.contentWindow.listener); // listener intentionally not wrapped in t.step_func
81    document.addEventListener("hi", t.step_func(e => {
82      assert_equals(event, e);
83      assert_equals(window.event, e);
84    }));
85    document.dispatchEvent(event);
86    assert_equals(frameState.event, event);
87    assert_equals(frameState.windowEvent, event);
88    assert_equals(frameState.parentEvent, load_event);
89  });
90}, "Listener from a different global");
91