summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/multi_sharedWorker_manager.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/multi_sharedWorker_manager.js')
-rw-r--r--dom/workers/test/multi_sharedWorker_manager.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/dom/workers/test/multi_sharedWorker_manager.js b/dom/workers/test/multi_sharedWorker_manager.js
new file mode 100644
index 0000000000..c0a9455ef1
--- /dev/null
+++ b/dom/workers/test/multi_sharedWorker_manager.js
@@ -0,0 +1,58 @@
+var query = window.location.search;
+var bc = new BroadcastChannel("bugSharedWorkerLiftetime" + query);
+bc.onmessage = msgEvent => {
+ var msg = msgEvent.data;
+ var command = msg.command;
+ if (command == "postToWorker") {
+ postToWorker(msg.workerMessage);
+ } else if (command == "navigate") {
+ window.location = msg.location;
+ } else if (command == "finish") {
+ bc.postMessage({ command: "finished" });
+ bc.close();
+ window.close();
+ }
+};
+
+window.onload = () => {
+ bc.postMessage({ command: "loaded" });
+};
+
+function debug(message) {
+ if (typeof message != "string") {
+ throw new Error("debug() only accepts strings!");
+ }
+ bc.postMessage({ command: "debug", message });
+}
+
+let worker;
+
+function postToWorker(msg) {
+ if (!worker) {
+ worker = new SharedWorker(
+ "multi_sharedWorker_sharedWorker.js",
+ "FrameWorker"
+ );
+ worker.onerror = function (error) {
+ debug("Worker error: " + error.message);
+ error.preventDefault();
+
+ let data = {
+ type: "error",
+ message: error.message,
+ filename: error.filename,
+ lineno: error.lineno,
+ isErrorEvent: error instanceof ErrorEvent,
+ };
+ bc.postMessage({ command: "fromWorker", workerMessage: data });
+ };
+
+ worker.port.onmessage = function (message) {
+ debug("Worker message: " + JSON.stringify(message.data));
+ bc.postMessage({ command: "fromWorker", workerMessage: message.data });
+ };
+ }
+
+ debug("Posting message: " + JSON.stringify(msg));
+ worker.port.postMessage(msg);
+}