| <!DOCTYPE html> |
| <!-- |
| Copyright 2023 The Cobalt Authors. All Rights Reserved. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| <!-- |
| Tests postMessage() for workers. |
| --> |
| |
| <html> |
| <head> |
| <title>Cobalt Worker postMessage() Test</title> |
| <script src='black_box_js_test_utils.js'></script> |
| </head> |
| <body> |
| <script> |
| const timeoutId = window.setTimeout(notReached, 10000); |
| window.sharedArrayBufferFromWorker = null; |
| window.sharedArrayBufferFromWorkerView = null; |
| window.sharedArrayBufferFromWindow = new SharedArrayBuffer(4); |
| window.sharedArrayBufferFromWindowView = new Uint8Array(window.sharedArrayBufferFromWindow); |
| const worker = new Worker('worker_post_message_test.js'); |
| worker.addEventListener('message', event => { |
| if (event.data === 'ready') { |
| const arrayBuffer = new ArrayBuffer(3); |
| const arrayBufferView = new Uint8Array(arrayBuffer); |
| arrayBufferView[0] = 4; |
| arrayBufferView[1] = 5; |
| arrayBufferView[2] = 6; |
| worker.postMessage({ |
| type: 'check-data', |
| data: { |
| number: 1, |
| array: [2, 3], |
| string: 'abc', |
| arrayBuffer, |
| sharedArrayBuffer: sharedArrayBufferFromWindow, |
| }, |
| }); |
| return; |
| } |
| if (event.data.type === 'check-data') { |
| const data = event.data.data; |
| assertEqual(1, data.number); |
| assertEqual(2, data.array.length); |
| assertEqual(2, data.array[0]); |
| assertEqual(3, data.array[1]); |
| assertEqual('abc', data.string); |
| assertEqual(3, data.arrayBuffer.byteLength); |
| const arrayBufferView = new Uint8Array(data.arrayBuffer); |
| assertEqual(4, arrayBufferView[0]); |
| assertEqual(5, arrayBufferView[1]); |
| assertEqual(6, arrayBufferView[2]); |
| assertEqual(5, data.sharedArrayBuffer.byteLength); |
| window.sharedArrayBufferFromWorker = data.sharedArrayBuffer; |
| window.sharedArrayBufferFromWorkerView = new Uint8Array(window.sharedArrayBufferFromWorker); |
| worker.postMessage({ |
| type: 'update-shared-array-buffers', |
| index: 1, |
| value: 42, |
| }); |
| return; |
| } |
| if (event.data.type === 'update-shared-array-buffers-done') { |
| assertEqual(42, window.sharedArrayBufferFromWindowView[1]); |
| assertEqual(42, window.sharedArrayBufferFromWorkerView[1]); |
| window.sharedArrayBufferFromWindowView[0] = 47; |
| window.sharedArrayBufferFromWorkerView[0] = 47; |
| worker.postMessage({ |
| type: 'check-shared-array-buffers', |
| index: 0, |
| value: 47, |
| }) |
| return; |
| } |
| if (event.data.type === 'check-shared-array-buffers-done') { |
| clearTimeout(timeoutId); |
| onEndTest(); |
| return; |
| } |
| console.log(JSON.stringify(event.data)); |
| notReached(); |
| }); |
| |
| setupFinished(); |
| </script> |
| </body> |
| </html> |