1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/workers/test/eventDispatch_worker.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,67 @@ 1.4 +/** 1.5 + * Any copyright is dedicated to the Public Domain. 1.6 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.7 + */ 1.8 +const fakeEventType = "foo"; 1.9 + 1.10 +function testEventTarget(event) { 1.11 + if (event.target !== self) { 1.12 + throw new Error("Event has a bad target!"); 1.13 + } 1.14 + if (event.currentTarget) { 1.15 + throw new Error("Event has a bad currentTarget!"); 1.16 + } 1.17 + postMessage(event.data); 1.18 +} 1.19 + 1.20 +addEventListener(fakeEventType, function(event) { 1.21 + throw new Error("Trusted event listener received untrusted event!"); 1.22 +}, false, false); 1.23 + 1.24 +addEventListener(fakeEventType, function(event) { 1.25 + if (event.target !== self || event.currentTarget !== self) { 1.26 + throw new Error("Fake event has bad target!"); 1.27 + } 1.28 + if (event.isTrusted) { 1.29 + throw new Error("Event should be untrusted!"); 1.30 + } 1.31 + event.stopImmediatePropagation(); 1.32 + postMessage(event.data); 1.33 +}, false, true); 1.34 + 1.35 +addEventListener(fakeEventType, function(event) { 1.36 + throw new Error("This shouldn't get called because of stopImmediatePropagation."); 1.37 +}, false, true); 1.38 + 1.39 +var count = 0; 1.40 +onmessage = function(event) { 1.41 + if (event.target !== self || event.currentTarget !== self) { 1.42 + throw new Error("Event has bad target!"); 1.43 + } 1.44 + 1.45 + if (!count++) { 1.46 + var exception; 1.47 + try { 1.48 + self.dispatchEvent(event); 1.49 + } 1.50 + catch(e) { 1.51 + exception = e; 1.52 + } 1.53 + 1.54 + if (!exception) { 1.55 + throw new Error("Recursive dispatch didn't fail!"); 1.56 + } 1.57 + 1.58 + event = new MessageEvent(fakeEventType, { bubbles: event.bubbles, 1.59 + cancelable: event.cancelable, 1.60 + data: event.data, 1.61 + origin: "*", 1.62 + source: null 1.63 + }); 1.64 + self.dispatchEvent(event); 1.65 + 1.66 + return; 1.67 + } 1.68 + 1.69 + setTimeout(testEventTarget, 0, event); 1.70 +};