diff options
Diffstat (limited to 'testing/web-platform/tests/websockets/multi-globals')
6 files changed, 96 insertions, 0 deletions
diff --git a/testing/web-platform/tests/websockets/multi-globals/message-received.html b/testing/web-platform/tests/websockets/multi-globals/message-received.html new file mode 100644 index 0000000000..704b1e357b --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/message-received.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<title>"A WebSocket message has been received", with multiple globals in play</title> +<link rel="help" href="https://html.spec.whatwg.org/multipage/comms.html#feedback-from-the-protocol"> +<link rel="author" title="Domenic Denicola" href="mailto:d@domenic.me"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<!-- This is the entry global --> + +<iframe src="support/incumbent.sub.html"></iframe> + +<script> +"use strict"; +setup({ explicit_done: true }); + +window.onload = function() { + async_test(function(t) { + frames[0].setupWebSocket("arraybuffer", t.step_func_done(function(relevantWindow, event) { + assert_equals(event.constructor, relevantWindow.MessageEvent); + assert_equals(event.data.constructor, relevantWindow.ArrayBuffer); + })); + }, "ArrayBuffer should be created in the relevant realm of the WebSocket"); + + async_test(function(t) { + frames[0].setupWebSocket("blob", t.step_func_done(function(relevantWindow, event) { + assert_equals(event.constructor, relevantWindow.MessageEvent); + assert_equals(event.data.constructor, relevantWindow.Blob); + })); + }, "Blob should be created in the relevant realm of the WebSocket"); + + done(); +}; +</script> diff --git a/testing/web-platform/tests/websockets/multi-globals/support/incumbent.sub.html b/testing/web-platform/tests/websockets/multi-globals/support/incumbent.sub.html new file mode 100644 index 0000000000..a138b70235 --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/support/incumbent.sub.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<title>Incumbent page used as a test helper</title> + +<iframe src="relevant.html" id="r"></iframe> + +<script> +"use strict"; + +const relevant = document.querySelector("#r").contentWindow; + +window.setupWebSocket = (binaryType, fn) => { + const wsocket = new relevant.WebSocket("ws://{{host}}:{{ports[ws][0]}}/echo"); + + wsocket.addEventListener("open", () => { + wsocket.binaryType = binaryType; + wsocket.send(new ArrayBuffer(15)); + }); + + wsocket.addEventListener("message", ev => { + fn(relevant, ev); + }); +}; + +</script> diff --git a/testing/web-platform/tests/websockets/multi-globals/support/relevant.html b/testing/web-platform/tests/websockets/multi-globals/support/relevant.html new file mode 100644 index 0000000000..44f42eda49 --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/support/relevant.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<title>Relevant page used as a test helper</title> diff --git a/testing/web-platform/tests/websockets/multi-globals/url-parsing/current/current.html b/testing/web-platform/tests/websockets/multi-globals/url-parsing/current/current.html new file mode 100644 index 0000000000..82a48d4099 --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/url-parsing/current/current.html @@ -0,0 +1,2 @@ +<!DOCTYPE html> +<title>Current page used as a test helper</title> diff --git a/testing/web-platform/tests/websockets/multi-globals/url-parsing/incumbent/incumbent.html b/testing/web-platform/tests/websockets/multi-globals/url-parsing/incumbent/incumbent.html new file mode 100644 index 0000000000..2c5572b774 --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/url-parsing/incumbent/incumbent.html @@ -0,0 +1,13 @@ +<!DOCTYPE html> +<title>Incumbent page used as a test helper</title> + +<iframe src="../current/current.html" id="current"></iframe> + +<script> + const current = document.querySelector("#current").contentWindow; + + window.hello = () => { + window.ws = new current.WebSocket('foo'); + ws.close(); + }; +</script> diff --git a/testing/web-platform/tests/websockets/multi-globals/url-parsing/url-parsing.html b/testing/web-platform/tests/websockets/multi-globals/url-parsing/url-parsing.html new file mode 100644 index 0000000000..21ef6cd3a9 --- /dev/null +++ b/testing/web-platform/tests/websockets/multi-globals/url-parsing/url-parsing.html @@ -0,0 +1,22 @@ +<!DOCTYPE html> +<title>Multiple globals for base URL in WebSocket constructor</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<!-- This is the entry global --> + +<iframe src="incumbent/incumbent.html"></iframe> + +<script> +async_test((t) => { + onload = t.step_func_done(() => { + frames[0].hello(); + // Inside constructors, "this's relevant settings object" === "current settings object", + // because of how "this" is constructed. + // https://github.com/whatwg/websockets/issues/46 + const expectedUrl = new URL('current/foo', location.href); + expectedUrl.protocol = 'ws:'; + assert_equals(frames[0].ws.url, expectedUrl.href); + }); +}); +</script> |