tor-browser

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

immutable-array-buffers.js (3330B)


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