mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-19 01:22:54 +00:00
Implement transfer logic for ArrayBuffer and ResizableArrayBuffer. Change TransferDataHolder data type to Vector<u32> to reuse existing serialization infrastructure. Fix 5 WPT tests in `window-postmessage.window.html` that relates to transport. Fix `LibWeb/Text/input/Worker/Worker-postMessage-transfer.html`. The latter is currently ignored due to flakiness, no rebaseline is needed. During serialization with transfer, initialize memory with known index and initialize Serializer at position that dependent on the memory. This is mandatory to make ArrayBuffer transport to work. It also happens to fix 4 WPT tests, that are related to curcular references during serialization.
31 lines
1.1 KiB
HTML
31 lines
1.1 KiB
HTML
<script src="../include.js"></script>
|
|
<script>
|
|
asyncTest((done) => {
|
|
const workerScript = `
|
|
self.onmessage = function(evt) {
|
|
const receivedBuffer = evt.data;
|
|
self.postMessage(receivedBuffer, [receivedBuffer]);
|
|
};
|
|
`;
|
|
|
|
const blob = new Blob([workerScript], { type: 'application/javascript' });
|
|
const workerScriptURL = URL.createObjectURL(blob);
|
|
const worker = new Worker(workerScriptURL);
|
|
|
|
worker.onmessage = function(evt) {
|
|
const bufTransferredBackFromWorker = evt.data;
|
|
const decoder = new TextDecoder();
|
|
|
|
println('Message received from worker: ' + decoder.decode(bufTransferredBackFromWorker));
|
|
done();
|
|
};
|
|
|
|
const encoder = new TextEncoder();
|
|
const message = encoder.encode("Hello, world");
|
|
const myBuf = message.buffer;
|
|
|
|
println('Buffer length before transfer: ' + myBuf.byteLength);
|
|
worker.postMessage(myBuf, [myBuf]);
|
|
println('Buffer length after transfer: ' + myBuf.byteLength);
|
|
});
|
|
</script>
|