summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webmessaging/without-ports
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webmessaging/without-ports')
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/001.html12
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/002.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/003.html12
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/004.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/005.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/006.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/007.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/009.html12
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/010.html112
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/011.html29
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/012.html16
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/013.html17
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/014.html17
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/015.html15
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/016.html23
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/017.html18
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/018.html17
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/019-1.html1
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/019.html20
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/020-1.html5
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/020.html32
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/021.html32
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/023.html29
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/024.html14
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/025-1.js15
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/025.html13
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/026.html17
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/027.html19
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/028.html19
-rw-r--r--testing/web-platform/tests/webmessaging/without-ports/029.html20
30 files changed, 606 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webmessaging/without-ports/001.html b/testing/web-platform/tests/webmessaging/without-ports/001.html
new file mode 100644
index 0000000000..09c28c5a5c
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/001.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>resolving broken url</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ assert_throws_dom('SYNTAX_ERR', function() {
+ postMessage('', 'http://foo bar');
+ }, 'should have failed to resolve');
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/002.html b/testing/web-platform/tests/webmessaging/without-ports/002.html
new file mode 100644
index 0000000000..ef3eceb2a0
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/002.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>resolving url with stuff in host-specific</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ postMessage('', location.protocol + '//' + location.host + '//');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.origin, location.protocol + '//' + location.host);
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/003.html b/testing/web-platform/tests/webmessaging/without-ports/003.html
new file mode 100644
index 0000000000..6dc1e55777
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/003.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>resolving 'example.org'</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ assert_throws_dom('SYNTAX_ERR', function() {
+ postMessage('', 'example.org');
+ }, 'targetOrigin is not an absolute url');
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/004.html b/testing/web-platform/tests/webmessaging/without-ports/004.html
new file mode 100644
index 0000000000..9a9eb81a5d
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/004.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>special value '/'</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ postMessage('', '/');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '');
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/005.html b/testing/web-platform/tests/webmessaging/without-ports/005.html
new file mode 100644
index 0000000000..ed05a476bc
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/005.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>resolving a same origin targetOrigin</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ postMessage('', location.protocol + '//' + location.host);
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '');
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/006.html b/testing/web-platform/tests/webmessaging/without-ports/006.html
new file mode 100644
index 0000000000..47479ea011
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/006.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>resolving a same origin targetOrigin with trailing slash</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ postMessage('', location.protocol + '//' + location.host + '/');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '');
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/007.html b/testing/web-platform/tests/webmessaging/without-ports/007.html
new file mode 100644
index 0000000000..eb2b5c52e5
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/007.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>targetOrigin '*'</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ postMessage('', '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, '');
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/009.html b/testing/web-platform/tests/webmessaging/without-ports/009.html
new file mode 100644
index 0000000000..d613b4a073
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/009.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<title>zero arguments</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+test(function() {
+ assert_throws_js(TypeError, function() {
+ postMessage();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/010.html b/testing/web-platform/tests/webmessaging/without-ports/010.html
new file mode 100644
index 0000000000..062316f680
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/010.html
@@ -0,0 +1,112 @@
+<!doctype html>
+<title>message clone</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../support/compare.js"></script>
+<div id=log></div>
+<script>
+ var err = new Error('foo');
+ var date = new Date();
+
+ var test_array = [ undefined,
+ null,
+ false,
+ true,
+ 1,
+ NaN,
+ Infinity,
+ 'foo',
+ date,
+ /foo/,
+ null/*self*/,
+ null/*err*/];
+
+ var cloned_array = [ undefined,
+ null,
+ false,
+ true,
+ 1,
+ NaN,
+ Infinity,
+ 'foo',
+ date,
+ /foo/,
+ null/*self*/,
+ null/*err*/];
+
+ var test_object = {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*/};
+
+ var cloned_object = {a:undefined, b:null, c:false, d:true, e:1, f:NaN, g:Infinity, h:'foo', i: date, j: /foo/, k:null, l: [], m: {}, n:null};
+
+ var tests = [undefined, null,
+ false, true,
+ 1, NaN, Infinity,
+ 'foo',
+ date,
+ /foo/,
+ /* ImageData, File, FileData, FileList, */
+ null /*self*/,
+ test_array,
+ test_object,
+ null /*err*/];
+
+ for (var i = 0; i < tests.length; ++i) {
+ postMessage(tests[i], '*');
+ }
+
+ var test_undefined = async_test('undefined');
+ var test_null = async_test('null');
+ var test_false = async_test('false');
+ var test_true = async_test('true');
+ var test_1 = async_test('1');
+ var test_NaN = async_test('NaN');
+ var test_Infinity = async_test('Infinity');
+ var test_string = async_test('string');
+ var test_date = async_test('date');
+ var test_regex = async_test('regex');
+ var test_self = async_test('self');
+ var test_array = async_test('array');
+ var test_object = async_test('object');
+ var test_error = async_test('error');
+ var test_unreached = async_test('unreached');
+
+ var j = 0;
+ onmessage = function(e) {
+ switch (j) {
+ case 0: test_undefined.step(function() { assert_equals(e.data, undefined); this.done(); }); break;
+ case 1: test_null.step(function() { assert_equals(e.data, null); this.done(); }); break;
+ case 2: test_false.step(function() { assert_false(e.data); this.done(); }); break;
+ case 3: test_true.step(function() { assert_true(e.data); this.done(); }); break;
+ case 4: test_1.step(function() { assert_equals(e.data, 1); this.done(); }); break;
+ case 5: test_NaN.step(function() { assert_equals(e.data, NaN); this.done(); }); break;
+ case 6: test_Infinity.step(function() { assert_equals(e.data, Infinity); this.done(); }); break;
+ case 7: test_string.step(function() { assert_equals(e.data, 'foo'); this.done(); }); break;
+ case 8: test_date.step(function() { assert_true(sameDate(e.data, date)); this.done(); }); break;
+ case 9: test_regex.step(function() { assert_equals('' + e.data, '/foo/'); assert_equals(e.data instanceof RegExp, true, 'e.data instanceof RegExp'); this.done(); }); break;
+ // not testing it any more, as cloning host objects will now raise exceptions. TODO: add (exceptional) tests for these.
+ case 10: test_self.step(function() { assert_equals(e.data, null); this.done(); }); break;
+ case 11: test_array.step(function() { assert_array_equals_(e.data, cloned_array, 'array'); this.done(); }); break;
+ case 12: test_object.step(function() { assert_object_equals_(e.data, cloned_object, 'object'); this.done(); }); break;
+ case 13:
+ test_error.step(function() { assert_equals(e.data, null, 'new Error()'); this.done(); });
+ setTimeout(test_unreached.step_func(function() { assert_equals(j, 14); this.done(); }), 50);
+ break;
+ default: test_unreached.step(function() { assert_unreached('got an unexpected message event ('+j+')'); });
+ };
+ j++;
+ }
+
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/011.html b/testing/web-platform/tests/webmessaging/without-ports/011.html
new file mode 100644
index 0000000000..cac2990c49
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/011.html
@@ -0,0 +1,29 @@
+<!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(function() {
+
+ var canvas = document.createElement('canvas');
+ var clone = canvas.cloneNode(true);
+ var ctx = clone.getContext('2d');
+ var imagedata = ctx.getImageData(0, 0, 300, 150);
+ postMessage([imagedata], '*');
+
+ onmessage = this.step_func(function(e) {
+ function processPixels(imagedata) {
+ var pixeldata = imagedata.data;
+ for (var i = 0; i < pixeldata.length; i = i+4) {
+ pixeldata[i] = 128;
+ assert_equals(pixeldata[i], 128);
+ }
+ }
+ processPixels(e.data[0]);
+ this.done();
+ });
+
+});
+</script>
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/012.html b/testing/web-platform/tests/webmessaging/without-ports/012.html
new file mode 100644
index 0000000000..8eb46539b7
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/012.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<title>loop in array in structured clone</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var x = [];
+ x[0] = x;
+ postMessage(x, '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, e.data[0]);
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/013.html b/testing/web-platform/tests/webmessaging/without-ports/013.html
new file mode 100644
index 0000000000..34ba76221a
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/013.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<title>loop in object in structured clone</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function() {
+ var x = {};
+ x.foo = x;
+ postMessage(x, '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data, e.data.foo);
+ this.done();
+ });
+});
+</script>
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/014.html b/testing/web-platform/tests/webmessaging/without-ports/014.html
new file mode 100644
index 0000000000..f200aa4673
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/014.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<title>structured clone vs reference</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+async_test(function(t) {
+ var x = [];
+ y = [x,x];
+ postMessage(y, '*');
+ onmessage = t.step_func(function(e) {
+ assert_equals(e.data[0], e.data[1], 'e.data[0] === e.data[1]');
+ assert_not_equals(e.data[0], x, 'e.data[0] !== x');
+ t.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/015.html b/testing/web-platform/tests/webmessaging/without-ports/015.html
new file mode 100644
index 0000000000..a17c97be19
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/015.html
@@ -0,0 +1,15 @@
+<!doctype html>
+<title>different origin</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ postMessage('', 'http://example.org', []);
+ onmessage = this.step_func(function(e) {
+ assert_unreached();
+ });
+ setTimeout(this.step_func(function(){ this.done(); }), 50);
+});
+</script>
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/016.html b/testing/web-platform/tests/webmessaging/without-ports/016.html
new file mode 100644
index 0000000000..51cadec7c1
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/016.html
@@ -0,0 +1,23 @@
+<!doctype html>
+<title>origin of the script that invoked the method, data:</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="data:text/html,<script>onmessage = function(e) { parent.postMessage(e.origin, '*'); }; parent.postMessage('loaded', '*');</script>"></iframe>
+<div id=log></div>
+<script>
+async_test(function() {
+ onmessage = this.step_func(function(e) {
+ if (e.data === 'loaded') {
+ window[0].postMessage('', '*');
+ return;
+ }
+
+ assert_equals(e.data, location.protocol + '//' + location.host);
+ assert_equals(e.origin, 'null');
+ assert_array_equals(e.ports, []);
+ this.done();
+ });
+});
+</script>
+
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/017.html b/testing/web-platform/tests/webmessaging/without-ports/017.html
new file mode 100644
index 0000000000..a4a0483624
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/017.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<title>origin of the script that invoked the method, about:blank</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="about:blank"></iframe>
+<div id=log></div>
+<script>
+async_test(function() {
+ window[0].postMessage('', '*');
+ window[0].onmessage = this.step_func(function(e) {
+ assert_equals(e.origin, location.protocol + '//' + location.host);
+ assert_array_equals(e.ports, []);
+ this.done();
+ });
+});
+</script>
+
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/018.html b/testing/web-platform/tests/webmessaging/without-ports/018.html
new file mode 100644
index 0000000000..207ae36ed8
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/018.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<title>origin of the script that invoked the method, javascript:</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="javascript:''"></iframe>
+<div id=log></div>
+<script>
+async_test(function() {
+ window[0].postMessage('', '*');
+ window[0].onmessage = this.step_func(function(e) {
+ assert_equals(e.origin, location.protocol + '//' + location.host);
+ this.done();
+ });
+});
+</script>
+
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/019-1.html b/testing/web-platform/tests/webmessaging/without-ports/019-1.html
new file mode 100644
index 0000000000..513123ee6d
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/019-1.html
@@ -0,0 +1 @@
+<!-- blank --> \ No newline at end of file
diff --git a/testing/web-platform/tests/webmessaging/without-ports/019.html b/testing/web-platform/tests/webmessaging/without-ports/019.html
new file mode 100644
index 0000000000..38e7ca230e
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/019.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>origin of the script that invoked the method, scheme/host/port</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="../without-ports/019-1.html"></iframe>
+<div id=log></div>
+<script>
+async_test(function(test) {
+ onload = test.step_func(function() {
+ window[0].postMessage('', location.protocol.toUpperCase() + '//' + location.host.toUpperCase() + '/');
+ window[0].onmessage = test.step_func(function(e) {
+ assert_equals(e.origin, location.protocol + '//' + location.host);
+ assert_array_equals(e.ports, []);
+ test.done();
+ });
+ });
+});
+</script>
+
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/020-1.html b/testing/web-platform/tests/webmessaging/without-ports/020-1.html
new file mode 100644
index 0000000000..225bd7a41e
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/020-1.html
@@ -0,0 +1,5 @@
+<script>
+onmessage = function(e) {
+ parent.postMessage([e.data, e.origin], '*');
+}
+</script> \ No newline at end of file
diff --git a/testing/web-platform/tests/webmessaging/without-ports/020.html b/testing/web-platform/tests/webmessaging/without-ports/020.html
new file mode 100644
index 0000000000..61bfddb901
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/020.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<title>cross-origin test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="../without-ports/020-1.html"></iframe>
+<div id="log"></div>
+<script>
+setup({ single_test: true });
+
+var iframe = document.createElement('iframe');
+var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, '');
+var url = url_prefix + '/without-ports/020-1.html';
+iframe.src = url;
+document.body.appendChild(iframe);
+</script>
+<div id=log></div>
+<script>
+onload = function() {
+ window[0].postMessage(1, location.href);
+ window[1].postMessage(2, url);
+ var i = 0;
+ onmessage = function(e) {
+ i++;
+ assert_equals(e.data[0], i);
+ assert_equals(e.data[1], location.protocol + '//' + location.host);
+ if (i == 2) {
+ done();
+ }
+ };
+};
+</script>
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/021.html b/testing/web-platform/tests/webmessaging/without-ports/021.html
new file mode 100644
index 0000000000..5072508d9c
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/021.html
@@ -0,0 +1,32 @@
+<!doctype html>
+<title>cross-origin test</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<iframe src="../without-ports/020-1.html"></iframe>
+<div id="log"></div>
+<script>
+setup({ single_test: true });
+
+var iframe = document.createElement('iframe');
+var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, '');
+var url = url_prefix + '/without-ports/020-1.html';
+iframe.src = url;
+document.body.appendChild(iframe);
+</script>
+<div id=log></div>
+<script>
+onload = function() {
+ window[0].postMessage(1, '*');
+ window[1].postMessage(2, '*');
+ var i = 0;
+ onmessage = function(e) {
+ i++;
+ assert_equals(e.data[0], i);
+ assert_equals(e.data[1], location.protocol + '//' + location.host);
+ if (i === 2) {
+ done();
+ }
+ };
+};
+</script>
+
diff --git a/testing/web-platform/tests/webmessaging/without-ports/023.html b/testing/web-platform/tests/webmessaging/without-ports/023.html
new file mode 100644
index 0000000000..1e12ac4a55
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/023.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<title>Object cloning: own properties only, don't follow prototype</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+var Parent = function(){
+ this.c = "xyz";
+};
+
+var Child = function(a, b) {
+ this.a = a;
+ this.b = b;
+};
+Child.prototype = new Parent;
+
+async_test(function() {
+ var obj = new Child(1, 2);
+ var ch = new MessageChannel();
+ ch.port1.onmessage = this.step_func(function(e) {
+ for (var i in e.data.obj)
+ assert_not_equals(i, 'c');
+ this.done();
+ });
+ ch.port2.start();
+ ch.port2.postMessage({obj: obj});
+});
+
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/024.html b/testing/web-platform/tests/webmessaging/without-ports/024.html
new file mode 100644
index 0000000000..0e4651593a
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/024.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>Object cloning: throw an exception if function values encountered</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+test(function() {
+ var obj = { f : function(){}};
+ var ch = new MessageChannel();
+ ch.port1.onmessage = function(){};
+ ch.port2.start();
+ assert_throws_dom('DATA_CLONE_ERR', function() { ch.port2.postMessage({obj: obj}); });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/025-1.js b/testing/web-platform/tests/webmessaging/without-ports/025-1.js
new file mode 100644
index 0000000000..bd1d778d9b
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/025-1.js
@@ -0,0 +1,15 @@
+importScripts("/resources/testharness.js");
+
+test(function() {
+ var ch = new MessageChannel();
+ assert_true(ch.port1 instanceof MessagePort,
+ "Worker MessageChannel's port not an instance of MessagePort");
+}, "Worker MessageChannel's port should be an instance of MessagePort");
+
+test(function() {
+ assert_throws_js(TypeError, function() {
+ new MessagePort()
+ }, "MessagePort is [[Callable]]");
+}, "Worker MessagePort should not be [[Callable]]");
+
+done();
diff --git a/testing/web-platform/tests/webmessaging/without-ports/025.html b/testing/web-platform/tests/webmessaging/without-ports/025.html
new file mode 100644
index 0000000000..4686febe94
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/025.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<title>MessagePort constructor properties</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+test(function() {
+ var ch = new MessageChannel();
+ assert_true(ch.port1 instanceof MessagePort, "MessageChannel's port not an instance of MessagePort");
+ assert_throws_js(TypeError, function () { var p = new MessagePort();}, "MessagePort is [[Callable]]");
+});
+fetch_tests_from_worker(new Worker("025-1.js"));
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/026.html b/testing/web-platform/tests/webmessaging/without-ports/026.html
new file mode 100644
index 0000000000..546da8a91b
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/026.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<title>Cloning objects with getter properties</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var obj = {};
+ var err = new Error("getter_should_propagate_exceptions");
+ obj.__defineGetter__( "field", function(){ throw err });
+
+ assert_throws_exactly(err, function() {
+ postMessage(obj, '*');
+ });
+ this.done();
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/027.html b/testing/web-platform/tests/webmessaging/without-ports/027.html
new file mode 100644
index 0000000000..36aa9446a5
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/027.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<title>Cloning objects, preserving sharing</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var obj1 = {o: 1};
+ var obj2 = {d: obj1};
+ var obj3 = {d: obj1};
+ var obj_dag = {b: obj2, c: obj3};
+
+ postMessage(obj_dag, '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data.b.d, e.data.c.d);
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/028.html b/testing/web-platform/tests/webmessaging/without-ports/028.html
new file mode 100644
index 0000000000..d51ad7d3b6
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/028.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<title>Cloning objects, preserving sharing #2</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<canvas id="a" width=30 height=30></canvas>
+<div id=log></div>
+<script>
+async_test(function() {
+ var canvas = document.getElementsByTagName("canvas")[0];
+ var context = canvas.getContext("2d");
+ var img_data = context.getImageData(0, 0, 30, 30);
+ var obj = {a: img_data, b: {c: img_data, d: 3}};
+ postMessage(obj, '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data.a, e.data.b.c);
+ this.done();
+ });
+});
+</script>
diff --git a/testing/web-platform/tests/webmessaging/without-ports/029.html b/testing/web-platform/tests/webmessaging/without-ports/029.html
new file mode 100644
index 0000000000..4b1b38f741
--- /dev/null
+++ b/testing/web-platform/tests/webmessaging/without-ports/029.html
@@ -0,0 +1,20 @@
+<!doctype html>
+<title>Check that getters don't linger after deletion wrt cloning</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id=log></div>
+<script>
+async_test(function() {
+ var obj = {};
+ obj.__defineGetter__( "a", function(){ return 2; } );
+ obj.__defineSetter__( "a", function(v){ return; } );
+ delete obj.a;
+ obj.a = 2;
+
+ postMessage(obj, '*');
+ onmessage = this.step_func(function(e) {
+ assert_equals(e.data.a, 2);
+ this.done();
+ });
+});
+</script>