dom/workers/test/test_multi_sharedWorker_lifetimes.html

branch
TOR_BUG_9701
changeset 14
925c144e1f1f
equal deleted inserted replaced
-1:000000000000 0:4888d17c657a
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";
13
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;
19
20 const frameRelativeURL = "multi_sharedWorker_frame.html";
21 const storedData = "0123456789abcdefghijklmnopqrstuvwxyz";
22
23 let testGenerator = (function() {
24 SimpleTest.waitForExplicitFinish();
25
26 if (!SpecialPowers.getBoolPref(swPref)) {
27 ok(!("SharedWorker" in window), "No SharedWorker without pref set");
28 }
29
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;
38
39 window.addEventListener("message", function(event) {
40 if (typeof(event.data) == "string") {
41 info(event.data);
42 } else {
43 sendToGenerator(event);
44 }
45 });
46
47 let frame = document.getElementById("frame");
48 frame.src = frameRelativeURL;
49 frame.onload = sendToGenerator;
50
51 yield undefined;
52
53 frame = frame.contentWindow;
54 frame.postMessage({ command: "retrieve" }, "*");
55
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");
61
62 frame.postMessage({ command: "store", data: storedData }, "*");
63 frame.postMessage({ command: "retrieve" }, "*");
64
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");
70
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;
77
78 yield undefined;
79
80 info("Navigating to " + frameRelativeURL);
81 frame.src = frameRelativeURL;
82 frame.contentWindow.document.body.offsetTop;
83
84 yield undefined;
85
86 frame = frame.contentWindow;
87 frame.postMessage({ command: "retrieve" }, "*");
88
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");
94
95 frame.postMessage({ command: "store", data: storedData }, "*");
96 frame.postMessage({ command: "retrieve" }, "*");
97
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");
103
104 info("Enabling '" + bfCacheEnabledPref + "' pref");
105 SpecialPowers.pushPrefEnv({ set: [[bfCacheEnabledPref, true],
106 [bfCacheDepthPref, bfCacheDepth]] },
107 sendToGenerator);
108 yield undefined;
109
110 // Navigate when the bfcache is enabled.
111 let frame = document.getElementById("frame");
112 frame.onload = sendToGenerator;
113
114 info("Navigating to about:blank");
115 frame.src = "about:blank";
116 frame.contentWindow.document.body.offsetTop;
117
118 yield undefined;
119
120 for (let i = 0; i < 3; i++) {
121 info("Running GC");
122 SpecialPowers.exactGC(window, sendToGenerator);
123 yield undefined;
124
125 info("Waiting the event queue to clear");
126 SpecialPowers.executeSoon(sendToGenerator);
127 yield undefined;
128 }
129
130 info("Navigating to " + frameRelativeURL);
131 frame.src = frameRelativeURL;
132 frame.contentWindow.document.body.offsetTop;
133
134 yield undefined;
135
136 frame = frame.contentWindow;
137 frame.postMessage({ command: "retrieve" }, "*");
138
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");
144
145 info("Resetting '" + bfCacheEnabledPref + "' pref");
146 SpecialPowers.popPrefEnv(sendToGenerator);
147 yield undefined;
148
149 window.removeEventListener("message", sendToGenerator);
150
151 SimpleTest.finish();
152 yield undefined;
153 })();
154
155 let sendToGenerator = testGenerator.send.bind(testGenerator);
156
157 </script>
158 </head>
159 <body onload="testGenerator.next();">
160 <iframe id="frame"></iframe>
161 </body>
162 </html>

mercurial