| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../resources/js-test.js"></script> |
| </head> |
| <body> |
| <script> |
| description("Sends ArrayBuffers through MessagePorts."); |
| window.jsTestIsAsync = true; |
| |
| function test(data, postMessage, checkResult) { |
| return new Promise(function (resolve) { |
| const channel = new MessageChannel(); |
| |
| channel.port1.onmessage = event => { |
| if (!event.data) |
| debug("message data null!"); |
| postMessage(event.data, event.target); |
| }; |
| |
| channel.port2.onmessage = event => { |
| checkResult(event.data); |
| resolve(); |
| }; |
| |
| postMessage(data, channel.port2); |
| }); |
| } |
| |
| function testEmptyArray(buf) { |
| const array = new Float64Array(buf); |
| if (!array.length) |
| testPassed(`successfully transferred array of length 0`); |
| else |
| testFailed(`${array} should be a Float64Array of length 0`); |
| } |
| |
| const array = new Float64Array([Math.PI]); |
| const emptyArray = new Float64Array(); |
| const emptyArray2 = new Float64Array(); |
| |
| test( |
| { buf: [array.buffer, emptyArray.buffer] }, |
| (data, port) => port.postMessage({ buf: data.buf }, data.buf), |
| data => { |
| const array = new Float64Array(data.buf[0]); |
| if (array[0] === Math.PI) |
| testPassed(`array[0] contains ${Math.PI}`); |
| else |
| testFailed(`${array[0]} should be ${Math.PI}`); |
| |
| testEmptyArray(data.buf[1]); |
| } |
| ).then(() => |
| test( |
| { buf: emptyArray2.buffer }, |
| (data, port) => port.postMessage({ buf: data.buf }, [data.buf]), |
| data => testEmptyArray(data.buf) |
| ), |
| ).then(finishJSTest); |
| </script> |
| </body> |
| </html> |