dom/workers/test/test_multi_sharedWorker_lifetimes.html

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/dom/workers/test/test_multi_sharedWorker_lifetimes.html	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,162 @@
     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 +<!DOCTYPE HTML>
     1.9 +<html>
    1.10 +  <head>
    1.11 +    <title>Test for SharedWorker</title>
    1.12 +    <script src="/tests/SimpleTest/SimpleTest.js"></script>
    1.13 +    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css">
    1.14 +      <script class="testbody" type="text/javascript;version=1.7">
    1.15 +        "use strict";
    1.16 +
    1.17 +        const swPref = "dom.workers.sharedWorkers.enabled";
    1.18 +        const scrollbarPref = "layout.testing.overlay-scrollbars.always-visible";
    1.19 +        const bfCacheEnabledPref = "browser.sessionhistory.cache_subframes";
    1.20 +        const bfCacheDepthPref = "browser.sessionhistory.max_total_viewers";
    1.21 +        const bfCacheDepth = 10;
    1.22 +
    1.23 +        const frameRelativeURL = "multi_sharedWorker_frame.html";
    1.24 +        const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
    1.25 +
    1.26 +        let testGenerator = (function() {
    1.27 +          SimpleTest.waitForExplicitFinish();
    1.28 +
    1.29 +          if (!SpecialPowers.getBoolPref(swPref)) {
    1.30 +            ok(!("SharedWorker" in window), "No SharedWorker without pref set");
    1.31 +          }
    1.32 +
    1.33 +          // Enable SharedWorkers and force scrollbar to always be shown.  The
    1.34 +          // scrollbar setting is necessary to avoid the fade-in/fade-out from
    1.35 +          // evicting our document from the BF cache below.  If bug 1049277
    1.36 +          // is fixed, then we can stop setting the scrollbar pref here.
    1.37 +          SpecialPowers.pushPrefEnv({ set: [[swPref, true],
    1.38 +                                            [scrollbarPref, true]] },
    1.39 +                                    sendToGenerator);
    1.40 +          yield undefined;
    1.41 +
    1.42 +          window.addEventListener("message", function(event) {
    1.43 +            if (typeof(event.data) == "string") {
    1.44 +              info(event.data);
    1.45 +            } else {
    1.46 +              sendToGenerator(event);
    1.47 +            }
    1.48 +          });
    1.49 +
    1.50 +          let frame = document.getElementById("frame");
    1.51 +          frame.src = frameRelativeURL;
    1.52 +          frame.onload = sendToGenerator;
    1.53 +
    1.54 +          yield undefined;
    1.55 +
    1.56 +          frame = frame.contentWindow;
    1.57 +          frame.postMessage({ command: "retrieve" }, "*");
    1.58 +
    1.59 +          let event = yield undefined;
    1.60 +          ok(event instanceof MessageEvent, "Got a MessageEvent");
    1.61 +          is(event.source, frame, "Correct window got the event");
    1.62 +          is(event.data.type, "result", "Got a result message");
    1.63 +          is(event.data.data, undefined, "No data stored yet");
    1.64 +
    1.65 +          frame.postMessage({ command: "store", data: storedData }, "*");
    1.66 +          frame.postMessage({ command: "retrieve" }, "*");
    1.67 +
    1.68 +          event = yield undefined;
    1.69 +          ok(event instanceof MessageEvent, "Got a MessageEvent");
    1.70 +          is(event.source, frame, "Correct window got the event");
    1.71 +          is(event.data.type, "result", "Got a result message");
    1.72 +          is(event.data.data, storedData, "Got stored data");
    1.73 +
    1.74 +          // Navigate when the bfcache is disabled.
    1.75 +          info("Navigating to about:blank");
    1.76 +          let frame = document.getElementById("frame");
    1.77 +          frame.onload = sendToGenerator;
    1.78 +          frame.src = "about:blank";
    1.79 +          frame.contentWindow.document.body.offsetTop;
    1.80 +
    1.81 +          yield undefined;
    1.82 +
    1.83 +          info("Navigating to " + frameRelativeURL);
    1.84 +          frame.src = frameRelativeURL;
    1.85 +          frame.contentWindow.document.body.offsetTop;
    1.86 +
    1.87 +          yield undefined;
    1.88 +
    1.89 +          frame = frame.contentWindow;
    1.90 +          frame.postMessage({ command: "retrieve" }, "*");
    1.91 +
    1.92 +          let event = yield undefined;
    1.93 +          ok(event instanceof MessageEvent, "Got a MessageEvent");
    1.94 +          is(event.source, frame, "Correct window got the event");
    1.95 +          is(event.data.type, "result", "Got a result message");
    1.96 +          is(event.data.data, undefined, "No data stored");
    1.97 +
    1.98 +          frame.postMessage({ command: "store", data: storedData }, "*");
    1.99 +          frame.postMessage({ command: "retrieve" }, "*");
   1.100 +
   1.101 +          event = yield undefined;
   1.102 +          ok(event instanceof MessageEvent, "Got a MessageEvent");
   1.103 +          is(event.source, frame, "Correct window got the event");
   1.104 +          is(event.data.type, "result", "Got a result message");
   1.105 +          is(event.data.data, storedData, "Got stored data");
   1.106 +
   1.107 +          info("Enabling '" + bfCacheEnabledPref + "' pref");
   1.108 +          SpecialPowers.pushPrefEnv({ set: [[bfCacheEnabledPref, true],
   1.109 +                                            [bfCacheDepthPref, bfCacheDepth]] },
   1.110 +                                    sendToGenerator);
   1.111 +          yield undefined;
   1.112 +
   1.113 +          // Navigate when the bfcache is enabled.
   1.114 +          let frame = document.getElementById("frame");
   1.115 +          frame.onload = sendToGenerator;
   1.116 +
   1.117 +          info("Navigating to about:blank");
   1.118 +          frame.src = "about:blank";
   1.119 +          frame.contentWindow.document.body.offsetTop;
   1.120 +
   1.121 +          yield undefined;
   1.122 +
   1.123 +          for (let i = 0; i < 3; i++) {
   1.124 +            info("Running GC");
   1.125 +            SpecialPowers.exactGC(window, sendToGenerator);
   1.126 +            yield undefined;
   1.127 +
   1.128 +            info("Waiting the event queue to clear");
   1.129 +            SpecialPowers.executeSoon(sendToGenerator);
   1.130 +            yield undefined;
   1.131 +          }
   1.132 +
   1.133 +          info("Navigating to " + frameRelativeURL);
   1.134 +          frame.src = frameRelativeURL;
   1.135 +          frame.contentWindow.document.body.offsetTop;
   1.136 +
   1.137 +          yield undefined;
   1.138 +
   1.139 +          frame = frame.contentWindow;
   1.140 +          frame.postMessage({ command: "retrieve" }, "*");
   1.141 +
   1.142 +          let event = yield undefined;
   1.143 +          ok(event instanceof MessageEvent, "Got a MessageEvent");
   1.144 +          is(event.source, frame, "Correct window got the event");
   1.145 +          is(event.data.type, "result", "Got a result message");
   1.146 +          is(event.data.data, storedData, "Still have data stored");
   1.147 +
   1.148 +          info("Resetting '" + bfCacheEnabledPref + "' pref");
   1.149 +          SpecialPowers.popPrefEnv(sendToGenerator);
   1.150 +          yield undefined;
   1.151 +
   1.152 +          window.removeEventListener("message", sendToGenerator);
   1.153 +
   1.154 +          SimpleTest.finish();
   1.155 +          yield undefined;
   1.156 +        })();
   1.157 +
   1.158 +        let sendToGenerator = testGenerator.send.bind(testGenerator);
   1.159 +
   1.160 +      </script>
   1.161 +  </head>
   1.162 +  <body onload="testGenerator.next();">
   1.163 +    <iframe id="frame"></iframe>
   1.164 +  </body>
   1.165 +</html>

mercurial