tor-browser

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

testharness-shadowrealm-audioworkletprocessor.js (1648B)


      1 /**
      2 * AudioWorkletProcessor intended for hosting a ShadowRealm and running a test
      3 * inside of that ShadowRealm.
      4 */
      5 globalThis.TestRunner = class TestRunner extends AudioWorkletProcessor {
      6  constructor() {
      7    super();
      8    this.createShadowRealmAndStartTests();
      9  }
     10 
     11  /**
     12   * Fetch adaptor function intended as a drop-in replacement for fetchAdaptor()
     13   * (see testharness-shadowrealm-outer.js), but it does not assume fetch() is
     14   * present in the realm. Instead, it relies on setupFakeFetchOverMessagePort()
     15   * having been called on the port on the other side of this.port's channel.
     16   */
     17  fetchOverPortExecutor(resource) {
     18    return (resolve, reject) => {
     19      const listener = (event) => {
     20        if (typeof event.data !== "string" || !event.data.startsWith("fetchResult::")) {
     21          return;
     22        }
     23 
     24        const result = event.data.slice("fetchResult::".length);
     25        if (result.startsWith("success::")) {
     26          resolve(result.slice("success::".length));
     27        } else {
     28          reject(result.slice("fail::".length));
     29        }
     30 
     31        this.port.removeEventListener("message", listener);
     32      }
     33      this.port.addEventListener("message", listener);
     34      this.port.start();
     35      this.port.postMessage(`fetchRequest::${resource}`);
     36    }
     37  }
     38 
     39  /**
     40   * Async method, which is patched over in
     41   * (test).any.audioworklet-shadowrealm.js; see serve.py
     42   */
     43  async createShadowRealmAndStartTests() {
     44    throw new Error("Forgot to overwrite this method!");
     45  }
     46 
     47  /** Overrides AudioWorkletProcessor.prototype.process() */
     48  process() {
     49    return false;
     50  }
     51 };
     52 registerProcessor("test-runner", TestRunner);