37 lines
1.3 KiB
JavaScript
37 lines
1.3 KiB
JavaScript
// 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`);
|
|
}
|