Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.serviceworker.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.shadowrealm-in-dedicatedworker.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.shadowrealm-in-shadowrealm.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.shadowrealm-in-sharedworker.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.shadowrealm-in-window.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.sharedworker.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.any.worker.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.https.any.shadowrealm-in-audioworklet.html - WPT Dashboard Interop Dashboard
- /streams/readable-byte-streams/enqueue-with-detached-buffer.https.any.shadowrealm-in-serviceworker.html - WPT Dashboard Interop Dashboard
// META: global=window,worker,shadowrealm
promise_test(async t => {
const error = new Error('cannot proceed');
const rs = new ReadableStream({
type: 'bytes',
pull: t.step_func((controller) => {
const buffer = controller.byobRequest.view.buffer;
// Detach the buffer.
structuredClone(buffer, { transfer: [buffer] });
// Try to enqueue with a new buffer.
assert_throws_js(TypeError, () => controller.enqueue(new Uint8Array([42])));
// If we got here the test passed.
controller.error(error);
})
});
const reader = rs.getReader({ mode: 'byob' });
await promise_rejects_exactly(t, error, reader.read(new Uint8Array(1)));
}, 'enqueue after detaching byobRequest.view.buffer should throw');