| // 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`); |
| } |