tor-browser

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

resizable-array-buffers.js (3815B)


      1 const scopes = [
      2  "SameProcess",
      3  "DifferentProcess",
      4  "DifferentProcessForIndexedDB",
      5 ];
      6 
      7 function testInt32Array(scope) {
      8  var length = 4;
      9  var byteLength = length * Int32Array.BYTES_PER_ELEMENT;
     10  var maxByteLength = 2 * byteLength;
     11 
     12  var ab = new ArrayBuffer(byteLength, {maxByteLength});
     13  assertEq(ab.resizable, true);
     14  assertEq(ab.byteLength, byteLength);
     15  assertEq(ab.maxByteLength, maxByteLength);
     16 
     17  var ta1 = new Int32Array(ab);
     18  assertEq(ta1.byteLength, byteLength);
     19  ta1.set([1, 87654321, -123]);
     20  assertEq(ta1.toString(), "1,87654321,-123,0");
     21 
     22  var clonebuf = serialize(ta1, undefined, {scope});
     23  var ta2 = deserialize(clonebuf);
     24  assertEq(ta2 instanceof Int32Array, true);
     25  assertEq(ta2.byteLength, byteLength);
     26  assertEq(ta2.toString(), "1,87654321,-123,0");
     27  assertEq(ta2.buffer.resizable, true);
     28  assertEq(ta2.buffer.byteLength, byteLength);
     29  assertEq(ta2.buffer.maxByteLength, maxByteLength);
     30 
     31  ta2.buffer.resize(maxByteLength);
     32  assertEq(ta2.byteLength, maxByteLength);
     33 }
     34 scopes.forEach(testInt32Array);
     35 
     36 function testFloat64Array(scope) {
     37  var length = 4;
     38  var byteLength = length * Float64Array.BYTES_PER_ELEMENT;
     39  var maxByteLength = 2 * byteLength;
     40 
     41  var ab = new ArrayBuffer(byteLength, {maxByteLength});
     42  assertEq(ab.resizable, true);
     43  assertEq(ab.byteLength, byteLength);
     44  assertEq(ab.maxByteLength, maxByteLength);
     45 
     46  var ta1 = new Float64Array(ab);
     47  assertEq(ta1.byteLength, byteLength);
     48  ta1.set([NaN, 3.14, 0, 0]);
     49  assertEq(ta1.toString(), "NaN,3.14,0,0");
     50 
     51  var clonebuf = serialize(ta1, undefined, {scope});
     52  var ta2 = deserialize(clonebuf);
     53  assertEq(ta2 instanceof Float64Array, true);
     54  assertEq(ta2.byteLength, byteLength);
     55  assertEq(ta2.toString(), "NaN,3.14,0,0");
     56  assertEq(ta2.buffer.resizable, true);
     57  assertEq(ta2.buffer.byteLength, byteLength);
     58  assertEq(ta2.buffer.maxByteLength, maxByteLength);
     59 
     60  ta2.buffer.resize(maxByteLength);
     61  assertEq(ta2.byteLength, maxByteLength);
     62 }
     63 scopes.forEach(testFloat64Array);
     64 
     65 function testDataView(scope) {
     66  var length = 4;
     67  var byteLength = length * Uint8Array.BYTES_PER_ELEMENT;
     68  var maxByteLength = 2 * byteLength;
     69 
     70  var ab = new ArrayBuffer(byteLength, {maxByteLength});
     71  assertEq(ab.resizable, true);
     72  assertEq(ab.byteLength, byteLength);
     73  assertEq(ab.maxByteLength, maxByteLength);
     74 
     75  var ta = new Uint8Array(ab);
     76  ta.set([5, 0, 255]);
     77  assertEq(ta.toString(), "5,0,255,0");
     78  var dv1 = new DataView(ab);
     79  assertEq(dv1.byteLength, byteLength);
     80 
     81  var clonebuf = serialize(dv1, undefined, {scope});
     82  var dv2 = deserialize(clonebuf);
     83  assertEq(dv2 instanceof DataView, true);
     84  assertEq(dv2.byteLength, byteLength);
     85  assertEq(new Uint8Array(dv2.buffer).toString(), "5,0,255,0");
     86  assertEq(dv2.buffer.resizable, true);
     87  assertEq(dv2.buffer.byteLength, byteLength);
     88  assertEq(dv2.buffer.maxByteLength, maxByteLength);
     89 
     90  dv2.buffer.resize(maxByteLength);
     91  assertEq(dv2.byteLength, maxByteLength);
     92 }
     93 scopes.forEach(testDataView);
     94 
     95 function testArrayBuffer(scope) {
     96  var length = 4;
     97  var byteLength = length * Uint8Array.BYTES_PER_ELEMENT;
     98  var maxByteLength = 2 * byteLength;
     99 
    100  var ab = new ArrayBuffer(byteLength, {maxByteLength});
    101  assertEq(ab.resizable, true);
    102  assertEq(ab.byteLength, byteLength);
    103  assertEq(ab.maxByteLength, maxByteLength);
    104 
    105  var ta = new Uint8Array(ab);
    106  ta.set([33, 44, 55, 66]);
    107  assertEq(ta.toString(), "33,44,55,66");
    108 
    109  var clonebuf = serialize(ab, undefined, {scope});
    110  var ab2 = deserialize(clonebuf);
    111  assertEq(ab2 instanceof ArrayBuffer, true);
    112  assertEq(new Uint8Array(ab2).toString(), "33,44,55,66");
    113  assertEq(ab2.resizable, true);
    114  assertEq(ab2.byteLength, byteLength);
    115  assertEq(ab2.maxByteLength, maxByteLength);
    116 
    117  ab2.resize(maxByteLength);
    118  assertEq(ab2.byteLength, maxByteLength);
    119 }
    120 scopes.forEach(testArrayBuffer);