summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/encoding/streams/invalid-realm.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/encoding/streams/invalid-realm.window.js')
-rw-r--r--testing/web-platform/tests/encoding/streams/invalid-realm.window.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/testing/web-platform/tests/encoding/streams/invalid-realm.window.js b/testing/web-platform/tests/encoding/streams/invalid-realm.window.js
new file mode 100644
index 0000000000..beaec42641
--- /dev/null
+++ b/testing/web-platform/tests/encoding/streams/invalid-realm.window.js
@@ -0,0 +1,37 @@
+// Text*Stream should still work even if the realm is detached.
+
+// Adds an iframe to the document and returns it.
+function addIframe() {
+ const iframe = document.createElement('iframe');
+ document.body.appendChild(iframe);
+ return iframe;
+}
+
+promise_test(async t => {
+ const iframe = addIframe();
+ const stream = new iframe.contentWindow.TextDecoderStream();
+ const readPromise = stream.readable.getReader().read();
+ const writer = stream.writable.getWriter();
+ await writer.ready;
+ iframe.remove();
+ return Promise.all([writer.write(new Uint8Array([65])),readPromise]);
+}, 'TextDecoderStream: write in detached realm should succeed');
+
+promise_test(async t => {
+ const iframe = addIframe();
+ const stream = new iframe.contentWindow.TextEncoderStream();
+ const readPromise = stream.readable.getReader().read();
+ const writer = stream.writable.getWriter();
+ await writer.ready;
+ iframe.remove();
+ return Promise.all([writer.write('A'), readPromise]);
+}, 'TextEncoderStream: write in detached realm should succeed');
+
+for (const type of ['TextEncoderStream', 'TextDecoderStream']) {
+ promise_test(async t => {
+ const iframe = addIframe();
+ const stream = new iframe.contentWindow[type]();
+ iframe.remove();
+ return stream.writable.close();
+ }, `${type}: close in detached realm should succeed`);
+}