dom/workers/test/test_multi_sharedWorker.html

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 <!--
     2   Any copyright is dedicated to the Public Domain.
     3   http://creativecommons.org/publicdomain/zero/1.0/
     4 -->
     5 <!DOCTYPE HTML>
     6 <html>
     7   <head>
     8     <title>Test for SharedWorker</title>
     9     <script src="/tests/SimpleTest/SimpleTest.js"></script>
    10     <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
    11       <script class="testbody" type="text/javascript;version=1.7">
    12         "use strict";
    14         const swPref = "dom.workers.sharedWorkers.enabled";
    16         const basePath =
    17           location.pathname.substring(0,
    18                                       location.pathname.lastIndexOf("/") + 1);
    19         const baseURL = location.origin + basePath;
    21         const frameRelativeURL = "multi_sharedWorker_frame.html";
    22         const frameAbsoluteURL = baseURL + frameRelativeURL;
    23         const workerAbsoluteURL =
    24           baseURL + "multi_sharedWorker_sharedWorker.js";
    26         const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
    27         const errorMessage = "Error: Expected";
    28         const errorLineno = 34;
    30         let testGenerator = (function() {
    31           SimpleTest.waitForExplicitFinish();
    33           if (!SpecialPowers.getBoolPref(swPref)) {
    34             ok(!("SharedWorker" in window), "No SharedWorker without pref set");
    35           }
    37           SpecialPowers.pushPrefEnv({ set: [[swPref, true]] }, sendToGenerator);
    38           yield undefined;
    40           window.addEventListener("message", function(event) {
    41             if (typeof(event.data) == "string") {
    42               info(event.data);
    43             } else {
    44               sendToGenerator(event);
    45             }
    46           });
    48           let frame1 = document.getElementById("frame1");
    49           frame1.src = frameRelativeURL;
    50           frame1.onload = sendToGenerator;
    52           yield undefined;
    54           frame1 = frame1.contentWindow;
    56           let frame2 = document.getElementById("frame2");
    57           frame2.src = frameAbsoluteURL;
    58           frame2.onload = sendToGenerator;
    60           yield undefined;
    62           frame2 = frame2.contentWindow;
    64           let data = {
    65             command: "start"
    66           };
    68           frame1.postMessage(data, "*");
    69           frame2.postMessage(data, "*");
    71           let event = yield undefined;
    72           ok(event instanceof MessageEvent, "Got a MessageEvent");
    73           is(event.source, frame1, "First window got the event");
    74           is(event.data.type, "connect", "Got a connect message");
    76           data = {
    77             command: "retrieve"
    78           };
    79           frame1.postMessage(data, "*");
    81           event = yield undefined;
    82           ok(event instanceof MessageEvent, "Got a MessageEvent");
    83           is(event.source, frame1, "First window got the event");
    84           is(event.data.type, "result", "Got a result message");
    85           is(event.data.data, undefined, "No data stored yet");
    87           frame2.postMessage(data, "*");
    89           event = yield undefined;
    90           ok(event instanceof MessageEvent, "Got a MessageEvent");
    91           is(event.source, frame2, "Second window got the event");
    92           is(event.data.type, "result", "Got a result message");
    93           is(event.data.data, undefined, "No data stored yet");
    95           data = {
    96             command: "store",
    97             data: storedData
    98           };
    99           frame2.postMessage(data, "*");
   101           data = {
   102             command: "retrieve"
   103           };
   104           frame1.postMessage(data, "*");
   106           event = yield undefined;
   107           ok(event instanceof MessageEvent, "Got a MessageEvent");
   108           is(event.source, frame1, "First window got the event");
   109           is(event.data.type, "result", "Got a result message");
   110           is(event.data.data, storedData, "Got stored data");
   112           // This will generate two MessageEvents, one for each window.
   113           let sawFrame1Error = false;
   114           let sawFrame2Error = false;
   116           data = {
   117             command: "error"
   118           };
   119           frame1.postMessage(data, "*");
   121           // First event.
   122           event = yield undefined;
   124           ok(event instanceof MessageEvent, "Got a MessageEvent");
   125           is(event.data.type, "worker-error", "Got an error message");
   126           is(event.data.message, errorMessage, "Got correct error message");
   127           is(event.data.filename, workerAbsoluteURL, "Got correct filename");
   128           is(event.data.lineno, errorLineno, "Got correct lineno");
   129           if (event.source == frame1) {
   130             is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
   131             sawFrame1Error = true;
   132           } else if (event.source == frame2) {
   133             is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
   134             sawFrame2Error = true;
   135           } else {
   136             ok(false, "Saw error from unknown window");
   137           }
   139           // Second event
   140           event = yield undefined;
   142           ok(event instanceof MessageEvent, "Got a MessageEvent");
   143           is(event.data.type, "worker-error", "Got an error message");
   144           is(event.data.message, errorMessage, "Got correct error message");
   145           is(event.data.filename, workerAbsoluteURL, "Got correct filename");
   146           is(event.data.lineno, errorLineno, "Got correct lineno");
   147           if (event.source == frame1) {
   148             is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
   149             sawFrame1Error = true;
   150           } else if (event.source == frame2) {
   151             is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
   152             sawFrame2Error = true;
   153           } else {
   154             ok(false, "Saw error from unknown window");
   155           }
   157           is(sawFrame1Error, true, "Saw error for frame1");
   158           is(sawFrame2Error, true, "Saw error for frame2");
   160           // This will generate two MessageEvents, one for each window.
   161           sawFrame1Error = false;
   162           sawFrame2Error = false;
   164           data = {
   165             command: "error"
   166           };
   167           frame1.postMessage(data, "*");
   169           // First event.
   170           event = yield undefined;
   172           ok(event instanceof MessageEvent, "Got a MessageEvent");
   173           is(event.data.type, "error", "Got an error message");
   174           is(event.data.message, errorMessage, "Got correct error message");
   175           is(event.data.filename, workerAbsoluteURL, "Got correct filename");
   176           is(event.data.lineno, errorLineno, "Got correct lineno");
   177           is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
   178           if (event.source == frame1) {
   179             is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
   180             sawFrame1Error = true;
   181           } else if (event.source == frame2) {
   182             is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
   183             sawFrame2Error = true;
   184           } else {
   185             ok(false, "Saw error from unknown window");
   186           }
   188           // Second event
   189           event = yield undefined;
   191           ok(event instanceof MessageEvent, "Got a MessageEvent");
   192           is(event.data.type, "error", "Got an error message");
   193           is(event.data.message, errorMessage, "Got correct error message");
   194           is(event.data.filename, workerAbsoluteURL, "Got correct filename");
   195           is(event.data.lineno, errorLineno, "Got correct lineno");
   196           is(event.data.isErrorEvent, true, "Frame got an ErrorEvent");
   197           if (event.source == frame1) {
   198             is(sawFrame1Error, false, "Haven't seen error for frame1 yet");
   199             sawFrame1Error = true;
   200           } else if (event.source == frame2) {
   201             is(sawFrame2Error, false, "Haven't seen error for frame1 yet");
   202             sawFrame2Error = true;
   203           } else {
   204             ok(false, "Saw error from unknown window");
   205           }
   207           is(sawFrame1Error, true, "Saw error for frame1");
   208           is(sawFrame2Error, true, "Saw error for frame2");
   210           // Try a shared worker in a different origin.
   211           frame1 = document.getElementById("frame1");
   212           frame1.src = "http://example.org" + basePath + frameRelativeURL;
   213           frame1.onload = sendToGenerator;
   214           yield undefined;
   216           frame1 = frame1.contentWindow;
   218           data = {
   219             command: "retrieve"
   220           };
   221           frame1.postMessage(data, "*");
   223           event = yield undefined;
   224           ok(event instanceof MessageEvent, "Got a MessageEvent");
   225           is(event.source, frame1, "First window got the event");
   226           is(event.data.type, "result", "Got a result message");
   227           is(event.data.data, undefined, "No data stored yet");
   229           frame2.postMessage(data, "*");
   231           event = yield undefined;
   232           ok(event instanceof MessageEvent, "Got a MessageEvent");
   233           is(event.source, frame2, "First window got the event");
   234           is(event.data.type, "result", "Got a result message");
   235           is(event.data.data, storedData, "Got stored data");
   237           window.removeEventListener("message", sendToGenerator);
   239           SimpleTest.finish();
   240           yield undefined;
   241         })();
   243         let sendToGenerator = testGenerator.send.bind(testGenerator);
   245       </script>
   246   </head>
   247   <body onload="testGenerator.next();">
   248     <iframe id="frame1"></iframe>
   249     <iframe id="frame2"></iframe>
   250   </body>
   251 </html>

mercurial