summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/importScripts_3rdParty_worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/importScripts_3rdParty_worker.js')
-rw-r--r--dom/workers/test/importScripts_3rdParty_worker.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/dom/workers/test/importScripts_3rdParty_worker.js b/dom/workers/test/importScripts_3rdParty_worker.js
new file mode 100644
index 000000000..ebf2d3b14
--- /dev/null
+++ b/dom/workers/test/importScripts_3rdParty_worker.js
@@ -0,0 +1,82 @@
+const workerURL = 'http://mochi.test:8888/tests/dom/workers/test/importScripts_3rdParty_worker.js';
+
+onmessage = function(a) {
+ if (a.data.nested) {
+ var worker = new Worker(workerURL);
+ worker.onmessage = function(event) {
+ postMessage(event.data);
+ }
+
+ worker.onerror = function(event) {
+ event.preventDefault();
+ postMessage({ error: event instanceof ErrorEvent &&
+ event.filename == workerURL });
+ }
+
+ a.data.nested = false;
+ worker.postMessage(a.data);
+ return;
+ }
+
+ // This first URL will use the same origin of this script.
+ var sameOriginURL = new URL(a.data.url);
+ var fileName1 = 42;
+
+ // This is cross-origin URL.
+ var crossOriginURL = new URL(a.data.url);
+ crossOriginURL.host = 'example.com';
+ crossOriginURL.port = 80;
+ var fileName2 = 42;
+
+ if (a.data.test == 'none') {
+ importScripts(crossOriginURL.href);
+ return;
+ }
+
+ try {
+ importScripts(sameOriginURL.href);
+ } catch(e) {
+ if (!(e instanceof SyntaxError)) {
+ postMessage({ result: false });
+ return;
+ }
+
+ fileName1 = e.fileName;
+ }
+
+ if (fileName1 != sameOriginURL.href || !fileName1) {
+ postMessage({ result: false });
+ return;
+ }
+
+ if (a.data.test == 'try') {
+ var exception;
+ try {
+ importScripts(crossOriginURL.href);
+ } catch(e) {
+ fileName2 = e.filename;
+ exception = e;
+ }
+
+ postMessage({ result: fileName2 == workerURL &&
+ exception.name == "NetworkError" &&
+ exception.code == DOMException.NETWORK_ERR });
+ return;
+ }
+
+ if (a.data.test == 'eventListener') {
+ addEventListener("error", function(event) {
+ event.preventDefault();
+ postMessage({result: event instanceof ErrorEvent &&
+ event.filename == workerURL });
+ });
+ }
+
+ if (a.data.test == 'onerror') {
+ onerror = function(...args) {
+ postMessage({result: args[1] == workerURL });
+ }
+ }
+
+ importScripts(crossOriginURL.href);
+}