Problem seems to be that MessageWithMessagePorts::{encode,decode} don't handle the transferred array buffers, only the serialization and MessagePorts. Test case: <!doctype html> <script src=/resources/testharness.js> </script> <script> promise_test(async t => { let reg = await navigator.serviceWorker.register("/tmp/sw.js"); const ab = new ArrayBuffer(8); let sw = reg.installing || reg.waiting || reg.active; sw.postMessage(ab, [ab]); await new Promise((res, rej) => { navigator.serviceWorker.onmessage = e => rej(e.data); }); }) </script> self.addEventListener('message', function(event) { event.source.postMessage(`${event.data}`); })
<rdar://problem/37825426>