dom/workers/test/eventDispatch_worker.js

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

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 };

mercurial