| // META: global=window,worker,jsshell |
| 'use strict'; |
| |
| promise_test(async t => { |
| const rs = new ReadableStream({ |
| pull: t.unreached_func('pull() should not be called'), |
| type: 'bytes' |
| }); |
| |
| const reader = rs.getReader({ mode: 'byob' }); |
| const memory = new WebAssembly.Memory({ initial: 1 }); |
| const view = new Uint8Array(memory.buffer, 0, 1); |
| await promise_rejects_js(t, TypeError, reader.read(view)); |
| }, 'ReadableStream with byte source: read() with a non-transferable buffer'); |
| |
| test(t => { |
| let controller; |
| const rs = new ReadableStream({ |
| start(c) { |
| controller = c; |
| }, |
| pull: t.unreached_func('pull() should not be called'), |
| type: 'bytes' |
| }); |
| |
| const memory = new WebAssembly.Memory({ initial: 1 }); |
| const view = new Uint8Array(memory.buffer, 0, 1); |
| assert_throws_js(TypeError, () => controller.enqueue(view)); |
| }, 'ReadableStream with byte source: enqueue() with a non-transferable buffer'); |
| |
| promise_test(async t => { |
| let byobRequest; |
| let resolvePullCalledPromise; |
| const pullCalledPromise = new Promise(resolve => { |
| resolvePullCalledPromise = resolve; |
| }); |
| const rs = new ReadableStream({ |
| pull(controller) { |
| byobRequest = controller.byobRequest; |
| resolvePullCalledPromise(); |
| }, |
| type: 'bytes' |
| }); |
| |
| const memory = new WebAssembly.Memory({ initial: 1 }); |
| // Make sure the backing buffers of both views have the same length |
| const byobView = new Uint8Array(new ArrayBuffer(memory.buffer.byteLength), 0, 1); |
| const newView = new Uint8Array(memory.buffer, byobView.byteOffset, byobView.byteLength); |
| |
| const reader = rs.getReader({ mode: 'byob' }); |
| reader.read(byobView).then( |
| t.unreached_func('read() should not resolve'), |
| t.unreached_func('read() should not reject') |
| ); |
| await pullCalledPromise; |
| |
| assert_throws_js(TypeError, () => byobRequest.respondWithNewView(newView)); |
| }, 'ReadableStream with byte source: respondWithNewView() with a non-transferable buffer'); |