eventDispatch_worker.js (1720B)
1 /** 2 * Any copyright is dedicated to the Public Domain. 3 * http://creativecommons.org/publicdomain/zero/1.0/ 4 */ 5 const fakeEventType = "foo"; 6 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 } 16 17 addEventListener( 18 fakeEventType, 19 function (event) { 20 throw new Error("Trusted event listener received untrusted event!"); 21 }, 22 false, 23 false 24 ); 25 26 addEventListener( 27 fakeEventType, 28 function (event) { 29 if (event.target !== self || event.currentTarget !== self) { 30 throw new Error("Fake event has bad target!"); 31 } 32 if (event.isTrusted) { 33 throw new Error("Event should be untrusted!"); 34 } 35 event.stopImmediatePropagation(); 36 postMessage(event.data); 37 }, 38 false, 39 true 40 ); 41 42 addEventListener( 43 fakeEventType, 44 function (event) { 45 throw new Error( 46 "This shouldn't get called because of stopImmediatePropagation." 47 ); 48 }, 49 false, 50 true 51 ); 52 53 var count = 0; 54 onmessage = function (event) { 55 if (event.target !== self || event.currentTarget !== self) { 56 throw new Error("Event has bad target!"); 57 } 58 59 if (!count++) { 60 var exception; 61 try { 62 self.dispatchEvent(event); 63 } catch (e) { 64 exception = e; 65 } 66 67 if (!exception) { 68 throw new Error("Recursive dispatch didn't fail!"); 69 } 70 71 event = new MessageEvent(fakeEventType, { 72 bubbles: event.bubbles, 73 cancelable: event.cancelable, 74 data: event.data, 75 origin: "*", 76 source: null, 77 }); 78 self.dispatchEvent(event); 79 80 return; 81 } 82 83 setTimeout(testEventTarget, 0, event); 84 };