dom/workers/test/test_multi_sharedWorker_lifetimes.html

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 <!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";
    15         const scrollbarPref = "layout.testing.overlay-scrollbars.always-visible";
    16         const bfCacheEnabledPref = "browser.sessionhistory.cache_subframes";
    17         const bfCacheDepthPref = "browser.sessionhistory.max_total_viewers";
    18         const bfCacheDepth = 10;
    20         const frameRelativeURL = "multi_sharedWorker_frame.html";
    21         const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
    23         let testGenerator = (function() {
    24           SimpleTest.waitForExplicitFinish();
    26           if (!SpecialPowers.getBoolPref(swPref)) {
    27             ok(!("SharedWorker" in window), "No SharedWorker without pref set");
    28           }
    30           // Enable SharedWorkers and force scrollbar to always be shown.  The
    31           // scrollbar setting is necessary to avoid the fade-in/fade-out from
    32           // evicting our document from the BF cache below.  If bug 1049277
    33           // is fixed, then we can stop setting the scrollbar pref here.
    34           SpecialPowers.pushPrefEnv({ set: [[swPref, true],
    35                                             [scrollbarPref, true]] },
    36                                     sendToGenerator);
    37           yield undefined;
    39           window.addEventListener("message", function(event) {
    40             if (typeof(event.data) == "string") {
    41               info(event.data);
    42             } else {
    43               sendToGenerator(event);
    44             }
    45           });
    47           let frame = document.getElementById("frame");
    48           frame.src = frameRelativeURL;
    49           frame.onload = sendToGenerator;
    51           yield undefined;
    53           frame = frame.contentWindow;
    54           frame.postMessage({ command: "retrieve" }, "*");
    56           let event = yield undefined;
    57           ok(event instanceof MessageEvent, "Got a MessageEvent");
    58           is(event.source, frame, "Correct window got the event");
    59           is(event.data.type, "result", "Got a result message");
    60           is(event.data.data, undefined, "No data stored yet");
    62           frame.postMessage({ command: "store", data: storedData }, "*");
    63           frame.postMessage({ command: "retrieve" }, "*");
    65           event = yield undefined;
    66           ok(event instanceof MessageEvent, "Got a MessageEvent");
    67           is(event.source, frame, "Correct window got the event");
    68           is(event.data.type, "result", "Got a result message");
    69           is(event.data.data, storedData, "Got stored data");
    71           // Navigate when the bfcache is disabled.
    72           info("Navigating to about:blank");
    73           let frame = document.getElementById("frame");
    74           frame.onload = sendToGenerator;
    75           frame.src = "about:blank";
    76           frame.contentWindow.document.body.offsetTop;
    78           yield undefined;
    80           info("Navigating to " + frameRelativeURL);
    81           frame.src = frameRelativeURL;
    82           frame.contentWindow.document.body.offsetTop;
    84           yield undefined;
    86           frame = frame.contentWindow;
    87           frame.postMessage({ command: "retrieve" }, "*");
    89           let event = yield undefined;
    90           ok(event instanceof MessageEvent, "Got a MessageEvent");
    91           is(event.source, frame, "Correct window got the event");
    92           is(event.data.type, "result", "Got a result message");
    93           is(event.data.data, undefined, "No data stored");
    95           frame.postMessage({ command: "store", data: storedData }, "*");
    96           frame.postMessage({ command: "retrieve" }, "*");
    98           event = yield undefined;
    99           ok(event instanceof MessageEvent, "Got a MessageEvent");
   100           is(event.source, frame, "Correct window got the event");
   101           is(event.data.type, "result", "Got a result message");
   102           is(event.data.data, storedData, "Got stored data");
   104           info("Enabling '" + bfCacheEnabledPref + "' pref");
   105           SpecialPowers.pushPrefEnv({ set: [[bfCacheEnabledPref, true],
   106                                             [bfCacheDepthPref, bfCacheDepth]] },
   107                                     sendToGenerator);
   108           yield undefined;
   110           // Navigate when the bfcache is enabled.
   111           let frame = document.getElementById("frame");
   112           frame.onload = sendToGenerator;
   114           info("Navigating to about:blank");
   115           frame.src = "about:blank";
   116           frame.contentWindow.document.body.offsetTop;
   118           yield undefined;
   120           for (let i = 0; i < 3; i++) {
   121             info("Running GC");
   122             SpecialPowers.exactGC(window, sendToGenerator);
   123             yield undefined;
   125             info("Waiting the event queue to clear");
   126             SpecialPowers.executeSoon(sendToGenerator);
   127             yield undefined;
   128           }
   130           info("Navigating to " + frameRelativeURL);
   131           frame.src = frameRelativeURL;
   132           frame.contentWindow.document.body.offsetTop;
   134           yield undefined;
   136           frame = frame.contentWindow;
   137           frame.postMessage({ command: "retrieve" }, "*");
   139           let event = yield undefined;
   140           ok(event instanceof MessageEvent, "Got a MessageEvent");
   141           is(event.source, frame, "Correct window got the event");
   142           is(event.data.type, "result", "Got a result message");
   143           is(event.data.data, storedData, "Still have data stored");
   145           info("Resetting '" + bfCacheEnabledPref + "' pref");
   146           SpecialPowers.popPrefEnv(sendToGenerator);
   147           yield undefined;
   149           window.removeEventListener("message", sendToGenerator);
   151           SimpleTest.finish();
   152           yield undefined;
   153         })();
   155         let sendToGenerator = testGenerator.send.bind(testGenerator);
   157       </script>
   158   </head>
   159   <body onload="testGenerator.next();">
   160     <iframe id="frame"></iframe>
   161   </body>
   162 </html>

mercurial