tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

script-metadata-transform-worker.js (1477B)


      1 onrtctransform = (event) => {
      2    const transformer = event.transformer;
      3 
      4    transformer.reader = transformer.readable.getReader();
      5    transformer.writer = transformer.writable.getWriter();
      6 
      7    async function waitForDetachAndPostMetadata(frame) {
      8        while (true) {
      9            if (frame.data.byteLength == 0) {
     10                // frame.data has been detached! Verify metadata is still there.
     11                self.postMessage({
     12                  name: `${transformer.options.name} after write`,
     13                  timestamp: frame.timestamp, type: frame.type,
     14                  metadata: frame.getMetadata()
     15                });
     16                return;
     17            }
     18            await new Promise(r => setTimeout(r, 100));
     19        }
     20    }
     21 
     22    let isFirstFrame = true;
     23    function process(transformer)
     24    {
     25        transformer.reader.read().then(chunk => {
     26            if (chunk.done)
     27                return;
     28 
     29            if (isFirstFrame) {
     30                isFirstFrame = false;
     31                self.postMessage({
     32                  name: transformer.options.name,
     33                  timestamp: chunk.value.timestamp,
     34                  type: chunk.value.type,
     35                  metadata: chunk.value.getMetadata()
     36                });
     37                waitForDetachAndPostMetadata(chunk.value);
     38            }
     39            transformer.writer.write(chunk.value);
     40            process(transformer);
     41        });
     42    }
     43    process(transformer);
     44 };
     45 self.postMessage("registered");