chromium/third_party/blink/web_tests/external/wpt/service-workers/service-worker/resources/postmessage-dictionary-transferables-worker.js

var messageHandler = function(port, e) {
    var text_decoder = new TextDecoder;
    port.postMessage({
      content: text_decoder.decode(e.data),
      byteLength: e.data.byteLength
    });

    // Send back the array buffer via Client.postMessage.
    port.postMessage(e.data, {transfer: [e.data.buffer]});

    port.postMessage({
      content: text_decoder.decode(e.data),
      byteLength: e.data.byteLength
    });
};

self.addEventListener('message', e => {
    if (e.ports[0]) {
      // Wait for messages sent via MessagePort.
      e.ports[0].onmessage = messageHandler.bind(null, e.ports[0]);
      return;
    }
    messageHandler(e.source, e);
  });