summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/workers/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/workers/interfaces')
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js23
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.js40
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html25
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html39
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.html23
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.js1
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.js8
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null-in-array.html26
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html25
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-undefined.html25
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/setting-postMessage.html24
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-imagedata.html30
-rw-r--r--testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-message.html58
-rw-r--r--testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/getting.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/setting.html25
-rw-r--r--testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/onconnect.html39
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/incoming-message.html29
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/sending-messages.html27
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setInterval.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setTimeout.html28
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/helper-redirect.py3
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/members.html31
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/post-location-members.js8
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/redirect.html28
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/setting-members.html43
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/worker-separate-file.html28
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html32
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/handled.html36
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/not-handled.html32
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html31
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/self.html39
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/001.html23
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/002.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/003.html22
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/004.html23
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/001.worker.js7
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/002.worker.js11
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/003.html28
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/004.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/005.html30
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/006.html33
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/007.html25
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/008.html23
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/009.html29
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/010.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/011.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/012.html34
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/11
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/null1
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/undefined1
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/002.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/003.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/004.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/005.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/006.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/007.html30
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/language.html21
-rw-r--r--testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js22
59 files changed, 1487 insertions, 0 deletions
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js
new file mode 100644
index 000000000..954c46c07
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/EventTarget.worker.js
@@ -0,0 +1,23 @@
+importScripts("/resources/testharness.js");
+
+test(function(t) {
+ var i = 0;
+ addEventListener("message", function listener(evt) {
+ t.step(function() {
+ ++i;
+ removeEventListener("message", listener, true);
+ });
+ }, true);
+ self.dispatchEvent(new Event("message"));
+ self.dispatchEvent(new Event("message"));
+ assert_equals(i, 1);
+}, "removeEventListener");
+
+test(function() {
+ addEventListener("message", this.step_func(function(evt) {
+ assert_equals(evt.target, self);
+ }), true);
+ self.dispatchEvent(new Event("message"));
+}, "target");
+
+done();
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.js b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.js
new file mode 100644
index 000000000..6f285caac
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/onmessage.worker.js
@@ -0,0 +1,40 @@
+importScripts("/resources/testharness.js");
+
+test(function() {
+ self.onmessage = 1;
+ assert_equals(self.onmessage, null,
+ "attribute should return null after being set to a primitive");
+}, "Setting onmessage to 1");
+
+test(function() {
+ var object = {
+ handleEvent: this.unreached_func()
+ };
+ self.onmessage = object;
+ assert_equals(self.onmessage, object,
+ "attribute should return the object it was set to.");
+
+ self.dispatchEvent(new Event("message"));
+}, "Setting onmessage to an object");
+
+test(function() {
+ var triggered = false;
+ var f = function(e) { triggered = true; };
+ self.onmessage = f;
+ assert_equals(self.onmessage, f,
+ "attribute should return the function it was set to.");
+
+ self.dispatchEvent(new Event("message"));
+ assert_true(triggered, "event handler should have been triggered");
+}, "Setting onmessage to a function");
+
+
+test(function() {
+ assert_not_equals(self.onmessage, null,
+ "attribute should not return null after being set to a function");
+ self.onmessage = 1;
+ assert_equals(self.onmessage, null,
+ "attribute should return null after being set to a primitive");
+}, "Setting onmessage to 1 (again)");
+
+done();
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html
new file mode 100644
index 000000000..7ae4b0704
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/event-ports-dedicated.html
@@ -0,0 +1,25 @@
+<!--
+onmessage = function(e) {
+ postMessage(e.ports instanceof Array && e.ports.length === 0);
+}
+/*
+-->
+<!doctype html>
+<title>e.ports in dedicated worker</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ worker.postMessage(1);
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html
new file mode 100644
index 000000000..204130154
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/imagedata-cloned-canvas-in-array.html
@@ -0,0 +1,39 @@
+<!--
+onmessage = function(e) {
+ function processPixels(imagedata) {
+ var pixeldata = imagedata.data;
+ for (var i = 0; i < pixeldata.length; i = i+4) {
+ pixeldata[i] = 128;
+ }
+ postMessage(imagedata);
+ }
+ processPixels(e.data[0]);
+}
+
+/*
+-->
+<!doctype html>
+<title>posting an imagedata (from a cloned canvas) in an array</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ var canvas = document.createElement('canvas');
+ var clone = canvas.cloneNode(true);
+ var ctx = clone.getContext('2d');
+ var imagedata = ctx.getImageData(0, 0, 300, 150);
+ worker.postMessage([imagedata]);
+ worker.onmessage = this.step_func(function(e) {
+ var pixeldata = e.data.data;
+ for (var i = 0; i < pixeldata.length; i++) {
+ assert_equals(pixeldata[i], (i % 4 == 0) ? 128 : 0);
+ }
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//--> \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.html
new file mode 100644
index 000000000..91ec63268
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<meta charset=utf-8>
+<title>'message' event properties</title>
+<link rel=help href="http://www.whatwg.org/html/#dom-dedicatedworkerglobalscope-postmessage">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<div id=log></div>
+<script>
+async_test("Properties of the 'message' event").step(function() {
+ var worker = new Worker("message-event.js");
+ worker.onmessage = this.step_func_done(function (evt) {
+ assert_class_string(evt, "MessageEvent");
+ assert_equals(evt.type, "message");
+ assert_false(evt.bubbles, "bubbles should be false");
+ assert_false(evt.cancelable, "cancelable should be false");
+ assert_equals(evt.data, "test");
+ assert_equals(evt.origin, "", "origin");
+ assert_equals(evt.lastEventId, "", "lastEventId");
+ assert_equals(evt.source, null, "source");
+ assert_array_equals(evt.ports, [], "ports");
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.js b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.js
new file mode 100644
index 000000000..54a250005
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/message-event.js
@@ -0,0 +1 @@
+postMessage("test");
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.js b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.js
new file mode 100644
index 000000000..521251699
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/return-value.worker.js
@@ -0,0 +1,8 @@
+importScripts("/resources/testharness.js");
+
+test(function() {
+ var rv = postMessage(1);
+ assert_equals(rv, undefined);
+}, "return value of postMessage");
+
+done();
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null-in-array.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null-in-array.html
new file mode 100644
index 000000000..df4c9f83e
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null-in-array.html
@@ -0,0 +1,26 @@
+<!--
+try {
+ postMessage(false, [null]);
+} catch(e) {
+ postMessage(e instanceof TypeError);
+}
+/*
+-->
+<!doctype html>
+<title>Using [null] in postMessage's second argument</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html
new file mode 100644
index 000000000..e81a56bad
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-null.html
@@ -0,0 +1,25 @@
+<!--
+try {
+ postMessage(1, null);
+} catch(e) {
+ postMessage(e instanceof TypeError);
+}
+/*
+-->
+<!doctype html>
+<title>Using null in postMessage's second argument</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-undefined.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-undefined.html
new file mode 100644
index 000000000..7d01eba7a
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/second-argument-undefined.html
@@ -0,0 +1,25 @@
+<!--
+try {
+ postMessage(1, undefined);
+} catch(e) {
+ postMessage(''+e);
+}
+/*
+-->
+<!doctype html>
+<title>Using undefined in postMessage's second argument</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, 1);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/setting-postMessage.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/setting-postMessage.html
new file mode 100644
index 000000000..d1a3f0f5c
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/setting-postMessage.html
@@ -0,0 +1,24 @@
+<!--
+var x = postMessage;
+postMessage = 1;
+x(postMessage == 1);
+
+/*
+-->
+<!doctype html>
+<title>setting postMessage</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-imagedata.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-imagedata.html
new file mode 100644
index 000000000..c0ded6a28
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-imagedata.html
@@ -0,0 +1,30 @@
+<!--
+onmessage = function(e) {
+ var imagedata = e.data;
+ imagedata.data[0] = 128;
+ postMessage(imagedata);
+}
+
+/*
+-->
+<!doctype html>
+<title>structured clone of ImageData</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+(async_test()).step(function() {
+ var worker = new Worker('#');
+ var ctx = document.createElement('canvas').getContext('2d');
+ var imagedata = ctx.getImageData(0, 0, 300, 150);
+ worker.postMessage(imagedata);
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(''+e.data, '[object ImageData]');
+ assert_equals(e.data.data[0], 128);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-message.html b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-message.html
new file mode 100644
index 000000000..ba357421f
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/DedicatedWorkerGlobalScope/postMessage/structured-clone-message.html
@@ -0,0 +1,58 @@
+<!--
+var err = new Error('foo');
+var date = new Date();
+// commented out bits are either tested elsewhere or not supported yet. or uncloneable.
+var tests = [undefined, null, false, true, 1, NaN, Infinity, 'foo', date, /foo/, /* ImageData, File, FileData, FileList,*/ null/*self*/,
+ [undefined, null, false, true, 1, NaN, Infinity, 'foo', /*date, /foo/,*/ null/*self*/, /*[], {},*/ null/*err*/],
+ {a:undefined, b:null, c:false, d:true, e:1, f:NaN, g:Infinity, h:'foo', /*i:date, j:/foo/,*/ k:null/*self*/, /*l:[], m:{},*/ n:null/*err*/},
+ null/*err*/];
+for (var i = 0; i < tests.length; ++i) {
+ try {
+ postMessage(tests[i]);
+ } catch(e) {
+ postMessage(''+e);
+ }
+}
+/*
+-->
+<!doctype html>
+<title>structured clone of message</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var wrapper_test = async_test();
+var tests = [
+ {test:async_test('undefined'), check:function(e) { assert_equals(e.data, undefined); }},
+ {test:async_test('null'), check:function(e) { assert_equals(e.data, null); }},
+ {test:async_test('false'), check:function(e) { assert_false(e.data); }},
+ {test:async_test('true'), check:function(e) { assert_true(e.data); }},
+ {test:async_test('1'), check:function(e) { assert_equals(e.data, 1); }},
+ {test:async_test('NaN'), check:function(e) { assert_equals(e.data, NaN); }},
+ {test:async_test('Infinity'), check:function(e) { assert_equals(e.data, Infinity); }},
+ {test:async_test('string'), check:function(e) { assert_equals(e.data, 'foo'); }},
+ {test:async_test('date'), check:function(e) { assert_equals(e.data instanceof Date, true); }},
+ {test:async_test('regexp'), check:function(e) { assert_equals('' + e.data, '/foo/'); assert_equals(e.data instanceof RegExp, true, 'e.data instanceof RegExp'); }},
+ {test:async_test('self'), check:function(e) { assert_equals(e.data, null); }},
+ {test:async_test('array'), check:function(e) { assert_array_equals(e.data, [undefined, null, false, true, 1, NaN, Infinity, 'foo', null, null]); }},
+ {test:async_test('object'), check:function(e) { assert_object_equals(e.data, {a:undefined, b:null, c:false, d:true, e:1, f:NaN, g:Infinity, h:'foo', k:null, n:null}); }},
+ {test:async_test('error'), check:function(e) { assert_equals(e.data, null, 'new Error()'); }},
+ {test:wrapper_test, check:function(e) { assert_unreached(); }}
+];
+// make wrapper_test pass after 500ms
+setTimeout(tests[tests.length-1].test.step_func(function() {
+ this.done();
+}), 500);
+
+wrapper_test.step(function() {
+ var worker = new Worker('#');
+ var i = 0;
+ worker.onmessage = function(e) {
+ tests[i].test.step(function() { tests[i].check(e); this.done(); });
+ i++;
+ };
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/getting.html b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/getting.html
new file mode 100644
index 000000000..bfe81a8a9
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/getting.html
@@ -0,0 +1,34 @@
+<!--
+addEventListener('connect', function(e) {
+ var passed;
+ switch (location.hash) {
+ case '#1': passed = name == ''; break;
+ case '#2': passed = name == 'a'; break;
+ case '#3': passed = name == '0'; break;
+ }
+ e.ports[0].postMessage(passed);
+}, false);
+/*
+-->
+<!doctype html>
+<title>getting name</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var tests = [['#1', ''], ['#2', 'a'], ['#3', -0]];
+tests.forEach(function(t) {
+ async_test(function() {
+ var w = new SharedWorker(t[0], t[1]);
+ w.port.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+ });
+});
+</script>
+<!--
+*/
+//-->
+
+
diff --git a/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/setting.html b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/setting.html
new file mode 100644
index 000000000..39cdf7b67
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/name/setting.html
@@ -0,0 +1,25 @@
+<!--
+addEventListener('connect', function(e) {
+ name = 1;
+ e.ports[0].postMessage(name);
+}, false);
+/*
+-->
+<!doctype html>
+<title>setting name</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var w1 = new SharedWorker('#1', 'x');
+ w1.port.addEventListener('message', this.step_func(function(e) {
+ assert_equals(e.data, 'x');
+ this.done();
+ }), false);
+ w1.port.start();
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/onconnect.html b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/onconnect.html
new file mode 100644
index 000000000..2ad155bf7
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/SharedWorkerGlobalScope/onconnect.html
@@ -0,0 +1,39 @@
+<!--
+var results = [];
+try {
+ self.onconnect = 1;
+ results.push(String(onconnect));
+} catch(e) {
+ results.push(''+e);
+}
+try {
+ self.onconnect = {handleEvent:function(){}};
+ results.push(String(onconnect));
+} catch(e) {
+ results.push(''+e);
+}
+var f = function(e) {
+ results.push(e.data);
+ e.ports[0].postMessage(results);
+};
+onconnect = f;
+results.push(typeof onconnect);
+/*
+-->
+<!doctype html>
+<title>onconnect</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var w1 = new SharedWorker('#', '');
+ w1.port.addEventListener('message', this.step_func(function(e) {
+ assert_array_equals(e.data, ['null', 'null', 'function', '']);
+ }), false);
+ w1.port.start();
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/incoming-message.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/incoming-message.html
new file mode 100644
index 000000000..d65695632
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/incoming-message.html
@@ -0,0 +1,29 @@
+<!--
+onmessage = function(e) {
+ postMessage(1);
+ throw new Error();
+}
+close();
+/*
+-->
+<!doctype html>
+<title>close() and incoming message</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var worker = new Worker('#');
+worker.onmessage = function(e) {
+ assert_unreached("Got message");
+};
+worker.onerror = function(e) {
+ assert_unreached("Got error");
+};
+worker.postMessage(1);
+setTimeout(done, 2000);
+</script>
+<!--
+*/
+//-->
+
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/sending-messages.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/sending-messages.html
new file mode 100644
index 000000000..983c422cc
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/sending-messages.html
@@ -0,0 +1,27 @@
+<!--
+postMessage(1);
+close();
+postMessage(2);
+/*
+-->
+<!doctype html>
+<title>close() and sending messages</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ var i = 0;
+ worker.onmessage = this.step_func(function(e) {
+ i++;
+ assert_equals(e.data, i);
+ if (i == 2) {
+ this.done();
+ }
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setInterval.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setInterval.html
new file mode 100644
index 000000000..1d7d178d2
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setInterval.html
@@ -0,0 +1,34 @@
+<!--
+var interval1 = setInterval(function() {
+ clearInterval(interval1);
+ postMessage(1);
+ throw new Error();
+}, 10);
+close();
+var interval2 = setInterval(function() {
+ clearInterval(interval2);
+ postMessage(1);
+ throw new Error();
+}, 10);
+/*
+-->
+<!doctype html>
+<title>close() and setInterval</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var worker = new Worker('#');
+worker.onmessage = function(e) {
+ assert_unreached("Got message");
+};
+worker.onerror = function(e) {
+ assert_unreached("Got error");
+};
+setTimeout(done, 2000);
+</script>
+<!--
+*/
+//-->
+
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setTimeout.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setTimeout.html
new file mode 100644
index 000000000..c2fa10dfc
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/close/setTimeout.html
@@ -0,0 +1,28 @@
+<!--
+function x() {
+ postMessage(1);
+ throw new Error();
+}
+setTimeout(x, 0);
+close();
+setTimeout(x, 0);
+/*
+-->
+<!doctype html>
+<title>close() and setTimeout</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var worker = new Worker('#');
+worker.onmessage = function(e) {
+ assert_unreached("Got message");
+};
+worker.onerror = function(e) {
+ assert_unreached("Got error");
+};
+setTimeout(done, 2000);
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/helper-redirect.py b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/helper-redirect.py
new file mode 100644
index 000000000..eb1599a57
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/helper-redirect.py
@@ -0,0 +1,3 @@
+def main(request, response):
+ response.status = 302
+ response.headers.append("Location", "post-location-members.js?a")
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/members.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/members.html
new file mode 100644
index 000000000..31ddf37a1
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/members.html
@@ -0,0 +1,31 @@
+<!--
+postMessage([null, location.href, location.protocol, location.host,
+ location.hostname, location.port, location.pathname,
+ location.search, location.hash]);
+/*
+-->
+<!doctype html>
+<title>members of WorkerLocation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], null);
+ assert_equals(e.data[1], location.href + '#', 'href');
+ assert_equals(e.data[2], location.protocol, 'protocol');
+ assert_equals(e.data[3], location.host, 'host');
+ assert_equals(e.data[4], location.hostname, 'hostname');
+ assert_equals(e.data[5], location.port, 'port');
+ assert_equals(e.data[6], location.pathname, 'pathname');
+ assert_equals(e.data[7], location.search, 'search');
+ assert_equals(e.data[8], '', 'hash');
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/post-location-members.js b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/post-location-members.js
new file mode 100644
index 000000000..e850b76b6
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/post-location-members.js
@@ -0,0 +1,8 @@
+postMessage([location.href,
+ location.protocol,
+ location.host,
+ location.hostname,
+ location.port,
+ location.pathname,
+ location.search,
+ location.hash]); \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/redirect.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/redirect.html
new file mode 100644
index 000000000..2fd16a4c1
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/redirect.html
@@ -0,0 +1,28 @@
+<!--
+/*
+-->
+<!doctype html>
+<title>location with a worker in separate file that redirects</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('helper-redirect.py?fail');
+ worker.onmessage = this.step_func_done(function(e) {
+ assert_equals(e.data[0], location.href.replace(/\/[^\/]+$/, '/post-location-members.js?a'));
+ assert_equals(e.data[1], location.protocol);
+ assert_equals(e.data[2], location.host);
+ assert_equals(e.data[3], location.hostname);
+ assert_equals(e.data[4], location.port);
+ assert_equals(e.data[5], location.pathname.replace(/\/[^\/]+$/, '/post-location-members.js'));
+ assert_equals(e.data[6], '?a');
+ assert_equals(e.data[7], '');
+ });
+});
+</script>
+<!--
+*/
+//-->
+
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html
new file mode 100644
index 000000000..40559c166
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/returns-same-object.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(location === location);
+/*
+-->
+<!doctype html>
+<title>location === location</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/setting-members.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/setting-members.html
new file mode 100644
index 000000000..d2f470ffc
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/setting-members.html
@@ -0,0 +1,43 @@
+<!--
+var exceptions = [];
+try { location.href = 1; } catch(e) { exceptions.push('href'); }
+try { location.protocol = 1; } catch(e) { exceptions.push('protocol'); }
+try { location.host = 1; } catch(e) { exceptions.push('host'); }
+try { location.hostname = 1; } catch(e) { exceptions.push('hostname');}
+try { location.port = 1; } catch(e) { exceptions.push('port'); }
+try { location.pathname = 1; } catch(e) { exceptions.push('pathname'); }
+try { location.search = 1; } catch(e) { exceptions.push('search'); }
+try { location.hash = 1; } catch(e) { exceptions.push('hash'); }
+
+postMessage([null, location.href, location.protocol, location.host,
+ location.hostname, location.port, location.pathname,
+ location.search, location.hash, exceptions]);
+/*
+-->
+<!doctype html>
+<title>setting members of WorkerLocation</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], null);
+ assert_equals(e.data[1], location.href + '#', 'href');
+ assert_equals(e.data[2], location.protocol, 'protocol');
+ assert_equals(e.data[3], location.host, 'host');
+ assert_equals(e.data[4], location.hostname, 'hostname');
+ assert_equals(e.data[5], location.port, 'port');
+ assert_equals(e.data[6], location.pathname, 'pathname');
+ assert_equals(e.data[7], location.search, 'search');
+ assert_equals(e.data[8], '', 'hash');
+ assert_array_equals(e.data[9], [], 'number of exceptions');
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/worker-separate-file.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/worker-separate-file.html
new file mode 100644
index 000000000..ac8e64dcc
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/location/worker-separate-file.html
@@ -0,0 +1,28 @@
+<!--
+/*
+-->
+<!doctype html>
+<title>location with a worker in separate file</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('post-location-members.js?a#b?c');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], location.href.replace(/\/[^\/]+$/, '/post-location-members.js?a#b?c'));
+ assert_equals(e.data[1], location.protocol);
+ assert_equals(e.data[2], location.host);
+ assert_equals(e.data[3], location.hostname);
+ assert_equals(e.data[4], location.port);
+ assert_equals(e.data[5], location.pathname.replace(/\/[^\/]+$/, '/post-location-members.js'));
+ assert_equals(e.data[6], '?a');
+ assert_equals(e.data[7], '#b?c');
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html
new file mode 100644
index 000000000..4b5af71d5
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/exception-in-onerror.html
@@ -0,0 +1,32 @@
+<!--
+onerror = function(a, b, c, d) {
+ y(); // the error is "not handled"
+}
+function x() {
+ y();
+}
+x();
+/*
+-->
+<!doctype html>
+<title>onerror, "not handled" with an error in the onerror function</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onerror = this.step_func(function(e) {
+ assert_true(e instanceof ErrorEvent, 'e instanceof ErrorEvent');
+ assert_equals(typeof e.message, 'string', 'typeof e.message');
+ assert_equals(e.filename, document.URL+'#', 'e.filename');
+ assert_equals(typeof e.lineno, 'number', 'typeof e.lineno');
+ assert_equals(typeof e.colno, 'number', 'typeof e.column');
+ e.preventDefault(); // "handled"
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/handled.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/handled.html
new file mode 100644
index 000000000..56fee8e06
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/handled.html
@@ -0,0 +1,36 @@
+<!--
+onerror = function(a, b, c, d) {
+ postMessage([a, b, c, d]);
+ return true; // the error is "handled"
+}
+function x() {
+ y();
+}
+x();
+/*
+-->
+<!doctype html>
+<title>onerror, "handled"</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(typeof e.data[0], 'string', 'first argument');
+ assert_equals(e.data[1], document.URL+'#', 'second argument');
+ assert_equals(typeof e.data[2], 'number', 'third argument');
+ assert_equals(typeof e.data[3], 'number', 'fourth argument');
+ setTimeout(this.step_func(function() {
+ this.done();
+ }), 100);
+ });
+ worker.onerror = this.step_func(function(e) {
+ assert_unreached();
+ });
+});
+</script>
+<!--
+*/
+//--> \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/not-handled.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/not-handled.html
new file mode 100644
index 000000000..f6107ada4
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/not-handled.html
@@ -0,0 +1,32 @@
+<!--
+onerror = function(a, b, c, d) {
+ return false; // the error is "not handled"
+}
+function x() {
+ y();
+}
+x();
+/*
+-->
+<!doctype html>
+<title>onerror, "not handled"</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onerror = this.step_func(function(e) {
+ assert_true(e instanceof ErrorEvent, 'e instanceof ErrorEvent');
+ assert_equals(typeof e.message, 'string', 'typeof e.message');
+ assert_equals(e.filename, document.URL+'#', 'e.filename');
+ assert_equals(typeof e.lineno, 'number', 'typeof e.lineno');
+ assert_equals(typeof e.colno, 'number', 'typeof e.column');
+ e.preventDefault(); // "handled"
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html
new file mode 100644
index 000000000..b6a61e235
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/onerror/propagate-to-window-onerror.html
@@ -0,0 +1,31 @@
+<!--
+function x() {
+ y();
+}
+x();
+/*
+-->
+<!doctype html>
+<title>onerror, "not handled" with only window.onerror defined</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+setup({
+ allow_uncaught_exception: true,
+});
+async_test(function() {
+ var worker = new Worker('#');
+ window.onerror = this.step_func(function(a, b, c, d) {
+ assert_equals(typeof a, 'string', 'first argument');
+ assert_equals(b, document.URL+'#', 'second argument');
+ assert_equals(typeof c, 'number', 'third argument');
+ assert_equals(typeof d, 'number', 'fourth argument');
+ this.done();
+ return true; // "handled"
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/self.html b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/self.html
new file mode 100644
index 000000000..39c2c36c0
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerGlobalScope/self.html
@@ -0,0 +1,39 @@
+<!--
+var results = [];
+function check(func, msg) {
+ try {
+ results.push([func(), msg]);
+ } catch(ex) {
+ results.push([String(ex), msg]);
+ }
+}
+check(function() { return self === self; }, 'self === self');
+check(function() { return self instanceof WorkerGlobalScope; }, 'self instanceof WorkerGlobalScope');
+check(function() { return 'self' in self; }, '\'self\' in self');
+check(function() {
+ var x = self;
+ self = 1;
+ return x === self;
+}, 'self = 1');
+postMessage(results);
+/*
+-->
+<!doctype html>
+<title>self</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ for (var i = 0; i < e.data.length; ++i) {
+ assert_true(e.data[i][0], e.data[i][1]);
+ }
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//--> \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/001.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/001.html
new file mode 100644
index 000000000..a80897518
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/001.html
@@ -0,0 +1,23 @@
+<!--
+setTimeout(function() { postMessage(1) }, 10);
+/*
+-->
+<!doctype html>
+<title>setTimeout</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, 1);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/002.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/002.html
new file mode 100644
index 000000000..06685a905
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/002.html
@@ -0,0 +1,21 @@
+<!--
+var t = setTimeout(function() { postMessage(1); }, 10);
+clearTimeout(t);
+/*
+-->
+<!doctype html>
+<title>clearTimeout</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ var gotMessage = false;
+ worker.onmessage = function() { gotMessage = true; };
+ setTimeout(this.step_func(function() { assert_false(gotMessage); this.done(); }), 100);
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/003.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/003.html
new file mode 100644
index 000000000..942f139fa
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/003.html
@@ -0,0 +1,22 @@
+<!--
+setInterval(function() { postMessage(1); }, 10);
+/*
+-->
+<!doctype html>
+<title>setInterval</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, 1);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/004.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/004.html
new file mode 100644
index 000000000..5548eec4a
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/WindowTimers/004.html
@@ -0,0 +1,23 @@
+<!--
+var t = setInterval(function() {
+ postMessage(1);
+}, 10);
+clearInterval(t);
+/*
+-->
+<!doctype html>
+<title>clearInterval</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ var i = 0;
+ worker.onmessage = function() { i++; }
+ setTimeout(this.step_func(function() { assert_equals(i, 0); this.done(); }), 100);
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/001.worker.js b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/001.worker.js
new file mode 100644
index 000000000..aa86c8ef1
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/001.worker.js
@@ -0,0 +1,7 @@
+importScripts("/resources/testharness.js");
+
+test(function() {
+ importScripts();
+});
+
+done();
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/002.worker.js b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/002.worker.js
new file mode 100644
index 000000000..2cecbcb53
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/002.worker.js
@@ -0,0 +1,11 @@
+importScripts("/resources/testharness.js");
+
+test(function() {
+ var ran = false;
+ assert_throws("SyntaxError", function() {
+ importScripts('data:text/javascript,ran=true','http://foo bar');
+ });
+ assert_false(ran, 'first argument to importScripts ran');
+});
+
+done();
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/003.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/003.html
new file mode 100644
index 000000000..7ff30ae2a
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/003.html
@@ -0,0 +1,28 @@
+<!--
+var x = 'a';
+try {
+ importScripts('data:text/javascript,x+="b"',
+ 'data:text/javascript,x+="c"');
+} catch(e) {
+ x += "d"
+}
+postMessage(x);
+/*
+-->
+<!doctype html>
+<title>importScripts running scripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, "abc");
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/004.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/004.html
new file mode 100644
index 000000000..2d39d3ce7
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/004.html
@@ -0,0 +1,34 @@
+<!--
+var x = '';
+var exception;
+try {
+ importScripts('data:text/javascript,x+="first script successful. "',
+ 'data:text/javascript,x+="FAIL (second script). "; for(;) break;', // doesn't compile
+ 'data:text/javascript,x+="FAIL (third script)"');
+} catch(ex) {
+ if (ex instanceof SyntaxError)
+ exception = true;
+ else
+ exception = String(ex);
+}
+postMessage([x, exception]);
+/*
+-->
+<!doctype html>
+<title>importScripts broken script</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], "first script successful. ");
+ assert_true(e.data[1], 'expected SyntaxError');
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/005.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/005.html
new file mode 100644
index 000000000..f8abe14c2
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/005.html
@@ -0,0 +1,30 @@
+<!--
+var x;
+var y;
+try {
+ importScripts('data:text/javascript,x={',
+ 'data:text/javascript,}');
+} catch(e) {
+ y = true;
+}
+postMessage([x, y]);
+/*
+-->
+<!doctype html>
+<title>importScripts separate scripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], undefined);
+ assert_true(e.data[1]);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/006.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/006.html
new file mode 100644
index 000000000..06aea9696
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/006.html
@@ -0,0 +1,33 @@
+<!--
+var x;
+var y;
+var z;
+try {
+ importScripts('data:text/javascript,x=1',
+ 'data:text/javascript,throw 2',
+ 'data:text/javascript,z=3');
+} catch(e) {
+ y = e;
+}
+postMessage([x, y, z]);
+/*
+-->
+<!doctype html>
+<title>importScripts uncaught exception</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data[0], 1);
+ assert_equals(e.data[1], 2);
+ assert_equals(e.data[2], undefined);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/007.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/007.html
new file mode 100644
index 000000000..128fb1b64
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/007.html
@@ -0,0 +1,25 @@
+<!--
+importScripts('data:text/javascript,postMessage(1)');
+postMessage(2);
+/*
+-->
+<!doctype html>
+<title>postMessage in importScripts</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ var i = 0;
+ worker.onmessage = this.step_func(function(e) {
+ i++;
+ assert_equals(e.data, i);
+ if (i == 2)
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/008.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/008.html
new file mode 100644
index 000000000..07b800ebb
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/008.html
@@ -0,0 +1,23 @@
+<!--
+var log = postMessage;
+importScripts('data:text/javascript,function run() { log(true) }');
+run();
+/*
+-->
+<!doctype html>
+<title>variables and functions crossing importScripts boundary</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_true(e.data);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/009.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/009.html
new file mode 100644
index 000000000..95d3839dc
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/009.html
@@ -0,0 +1,29 @@
+<!--
+var log = postMessage;
+importScripts('data:text/javascript,function run() { for(var i = 0; i < 1000; ++i) { if (i == 500) log(true); } return 1; }');
+postMessage(run());
+/*
+-->
+<!doctype html>
+<title>variables and functions crossing importScripts boundary, take 2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ var i = 0;
+ worker.onmessage = this.step_func(function(e) {
+ i++;
+ if (i == 1) {
+ assert_true(e.data);
+ } else {
+ assert_equals(e.data, 1);
+ this.done();
+ }
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/010.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/010.html
new file mode 100644
index 000000000..9c76e7d4d
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/010.html
@@ -0,0 +1,34 @@
+<!--
+// prevent recursion
+if ('beenThere' in self) {
+ throw 'undefined stringified to the empty string';
+}
+beenThere = true;
+try {
+ importScripts(undefined);
+ postMessage(got);
+} catch(ex) {
+ postMessage(String(ex));
+}
+/*
+-->
+<!doctype html>
+<title>importScripts(undefined)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, 'undefined');
+ this.done();
+ })
+ worker.onerror = this.step_func(function(e) {
+ assert_unreached(e.message);
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/011.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/011.html
new file mode 100644
index 000000000..46499318f
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/011.html
@@ -0,0 +1,34 @@
+<!--
+// prevent recursion
+if ('beenThere' in self) {
+ throw 'null stringified to the empty string';
+}
+beenThere = true;
+try {
+ importScripts(null);
+ postMessage(got);
+} catch(ex) {
+ postMessage(String(ex));
+}
+/*
+-->
+<!doctype html>
+<title>importScripts(null)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, 'null');
+ this.done();
+ });
+ worker.onerror = this.step_func(function(e) {
+ assert_unreached(e.message);
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/012.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/012.html
new file mode 100644
index 000000000..f7622bdc9
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/012.html
@@ -0,0 +1,34 @@
+<!--
+// prevent recursion
+if ('beenThere' in self) {
+ throw '1 stringified to the empty string';
+}
+beenThere = true;
+try {
+ importScripts(1);
+ postMessage(got);
+} catch(ex) {
+ postMessage(String(ex));
+}
+/*
+-->
+<!doctype html>
+<title>importScripts(1)</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '1');
+ this.done();
+ });
+ worker.onerror = this.step_func(function(e) {
+ assert_unreached(e.message);
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/1 b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/1
new file mode 100644
index 000000000..18cea4ff0
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/1
@@ -0,0 +1 @@
+var got = '1'; \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/null b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/null
new file mode 100644
index 000000000..8e54b66c5
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/null
@@ -0,0 +1 @@
+var got = 'null'; \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/undefined b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/undefined
new file mode 100644
index 000000000..f99ba4be7
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/importScripts/undefined
@@ -0,0 +1 @@
+var got = 'undefined'; \ No newline at end of file
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/002.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/002.html
new file mode 100644
index 000000000..d3aa2ec65
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/002.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.appName);
+/*
+-->
+<!doctype html>
+<title>navigator.appName</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.appName);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/003.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/003.html
new file mode 100644
index 000000000..a2e5c9487
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/003.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.appVersion);
+/*
+-->
+<!doctype html>
+<title>navigator.appVersion</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.appVersion);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/004.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/004.html
new file mode 100644
index 000000000..2231c4ab8
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/004.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.platform);
+/*
+-->
+<!doctype html>
+<title>navigator.platform</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.platform);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/005.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/005.html
new file mode 100644
index 000000000..b3d99588f
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/005.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.userAgent);
+/*
+-->
+<!doctype html>
+<title>navigator.userAgent</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.userAgent);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/006.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/006.html
new file mode 100644
index 000000000..c027d630d
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/006.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.onLine);
+/*
+-->
+<!doctype html>
+<title>navigator.onLine</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.onLine);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/007.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/007.html
new file mode 100644
index 000000000..a6afc5637
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/007.html
@@ -0,0 +1,30 @@
+<!--
+var log = [];
+var neverEncounteredValue = "This is not the value you are looking for.";
+for (x in navigator) {
+ // this should silently fail and not throw per webidl
+ navigator[x] = neverEncounteredValue;
+ if (navigator[x] === neverEncounteredValue)
+ log.push(x);
+}
+postMessage(log.join(', '));
+/*
+-->
+<!doctype html>
+<title>readonlyness of members of Navigator</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '');
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
+
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/language.html b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/language.html
new file mode 100644
index 000000000..f1aa446cb
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/language.html
@@ -0,0 +1,21 @@
+<!--
+postMessage(navigator.language);
+/*
+-->
+<!doctype html>
+<title>navigator.language</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var worker = new Worker('#');
+ worker.onmessage = this.step_func(function(e) {
+ assert_equals(e.data, navigator.language);
+ this.done();
+ });
+});
+</script>
+<!--
+*/
+//-->
diff --git a/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js
new file mode 100644
index 000000000..7095281ec
--- /dev/null
+++ b/testing/web-platform/tests/workers/interfaces/WorkerUtils/navigator/window-only.worker.js
@@ -0,0 +1,22 @@
+importScripts("/resources/testharness.js");
+
+var properties = [
+ "appCodeName",
+ "product",
+ "productSub",
+ "vendor",
+ "vendorSub",
+
+ // Only exist in Window scopes if navigator compatibility mode is Gecko;
+ // never exist in workers.
+ "taintEnabled",
+ "oscpu",
+];
+
+properties.forEach(function(property) {
+ test(function() {
+ assert_false(property in navigator);
+ }, "NavigatorID properties exposed only for Window: " + property);
+});
+
+done();