Fri, 16 Jan 2015 18:13:44 +0100
Integrate suggestion from review to improve consistency with existing code.
1 /**
2 * Any copyright is dedicated to the Public Domain.
3 * http://creativecommons.org/publicdomain/zero/1.0/
4 */
5 const fakeEventType = "foo";
7 function testEventTarget(event) {
8 if (event.target !== self) {
9 throw new Error("Event has a bad target!");
10 }
11 if (event.currentTarget) {
12 throw new Error("Event has a bad currentTarget!");
13 }
14 postMessage(event.data);
15 }
17 addEventListener(fakeEventType, function(event) {
18 throw new Error("Trusted event listener received untrusted event!");
19 }, false, false);
21 addEventListener(fakeEventType, function(event) {
22 if (event.target !== self || event.currentTarget !== self) {
23 throw new Error("Fake event has bad target!");
24 }
25 if (event.isTrusted) {
26 throw new Error("Event should be untrusted!");
27 }
28 event.stopImmediatePropagation();
29 postMessage(event.data);
30 }, false, true);
32 addEventListener(fakeEventType, function(event) {
33 throw new Error("This shouldn't get called because of stopImmediatePropagation.");
34 }, false, true);
36 var count = 0;
37 onmessage = function(event) {
38 if (event.target !== self || event.currentTarget !== self) {
39 throw new Error("Event has bad target!");
40 }
42 if (!count++) {
43 var exception;
44 try {
45 self.dispatchEvent(event);
46 }
47 catch(e) {
48 exception = e;
49 }
51 if (!exception) {
52 throw new Error("Recursive dispatch didn't fail!");
53 }
55 event = new MessageEvent(fakeEventType, { bubbles: event.bubbles,
56 cancelable: event.cancelable,
57 data: event.data,
58 origin: "*",
59 source: null
60 });
61 self.dispatchEvent(event);
63 return;
64 }
66 setTimeout(testEventTarget, 0, event);
67 };