tor-browser

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

test-incrementer.js (2433B)


      1 "use strict";
      2 
      3 self.getViewValue = (view, index) => {
      4  if(view instanceof DataView) {
      5    return view.getInt8(index);
      6  }
      7  return view[index];
      8 };
      9 
     10 self.setViewValue = (view, index, value) => {
     11  if(view instanceof DataView) {
     12    view.setInt8(index, value);
     13  } else {
     14    view[index] = value;
     15  }
     16 };
     17 
     18 self.maybeBigInt = (view, value) => {
     19  if (view.constructor.name === "BigInt64Array" || view.constructor.name === "BigUint64Array") {
     20    return BigInt(value);
     21  }
     22  return value;
     23 };
     24 
     25 self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin, type = "Int32Array") => {
     26  return new Promise(resolve => {
     27    const sab = new SharedArrayBuffer(8);
     28    const view = new self[type](sab);
     29    setViewValue(view, 0, maybeBigInt(view, 1));
     30 
     31    whereToListen.onmessage = t.step_func(({ data }) => {
     32      switch (data.message) {
     33        case "initial payload received": {
     34          assert_equals(data.value, maybeBigInt(view, 1), `The ${whereToSendLabel} must see the same value in the SharedArrayBuffer`);
     35          break;
     36        }
     37 
     38        case "changed to 2": {
     39          assert_equals(getViewValue(view, 0), maybeBigInt(view, 2), `The ${whereToListenLabel} must see changes made in the ${whereToSendLabel}`);
     40 
     41          setViewValue(view, 0, maybeBigInt(view, 3));
     42          whereToSend.postMessage({ message: "changed to 3" }, origin);
     43 
     44          break;
     45        }
     46 
     47        case "changed to 3 received": {
     48          assert_equals(data.value, maybeBigInt(view, 3), `The ${whereToSendLabel} must see changes made in the ${whereToListenLabel}`);
     49          resolve();
     50          break;
     51        }
     52      }
     53    });
     54 
     55    whereToSend.postMessage({ message: "initial payload", view }, origin);
     56  });
     57 };
     58 
     59 self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => {
     60  let view;
     61  whereToListen.onmessage = ({ data }) => {
     62    switch (data.message) {
     63      case "initial payload": {
     64        view = data.view;
     65        whereToSendBackTo.postMessage({ message: "initial payload received", value: getViewValue(view, 0) }, origin);
     66 
     67        setViewValue(view, 0, maybeBigInt(view, 2));
     68        whereToSendBackTo.postMessage({ message: "changed to 2" }, origin);
     69 
     70        break;
     71      }
     72 
     73      case "changed to 3": {
     74        whereToSendBackTo.postMessage({ message: "changed to 3 received", value: getViewValue(view, 0) }, origin);
     75 
     76        break;
     77      }
     78    }
     79  };
     80 };