tor-browser

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

test_arraybufferinputstream.html (2211B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 -->
      5 <head>
      6  <title>ArrayBuffer stream test</title>
      7  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      9 
     10 <script type="text/javascript">
     11 function detachArrayBuffer(ab)
     12 {
     13  var w = new Worker("data:application/javascript,");
     14  w.postMessage(ab, [ab]);
     15 }
     16 
     17 function test()
     18 {
     19  var ab = new ArrayBuffer(4000);
     20  var ta = new Uint8Array(ab);
     21  ta[0] = 'a'.charCodeAt(0);
     22  ta[1] = 'b'.charCodeAt(0);
     23 
     24  const Cc = SpecialPowers.Cc, Ci = SpecialPowers.Ci;
     25  var abis = Cc["@mozilla.org/io/arraybuffer-input-stream;1"]
     26               .createInstance(Ci.nsIArrayBufferInputStream);
     27 
     28  var sis = Cc["@mozilla.org/scriptableinputstream;1"]
     29              .createInstance(Ci.nsIScriptableInputStream);
     30  sis.init(abis);
     31 
     32  is(sis.read(1), "", "should read no data from an uninitialized ABIS");
     33 
     34  abis.setData(ab, 0, 256 * 1024);
     35 
     36  is(sis.read(1), "a", "should read 'a' after init");
     37 
     38  detachArrayBuffer(ab);
     39 
     40  SpecialPowers.forceGC();
     41  SpecialPowers.forceGC();
     42 
     43  try
     44  {
     45    is(sis.read(1), "b", "should read 'b' after detaching buffer");
     46  }
     47  catch (e)
     48  {
     49    ok(false, "reading from stream should have worked");
     50  }
     51 
     52  // A regression test for bug 1265076.  Previously, overflowing
     53  // the internal buffer from readSegments would cause incorrect
     54  // copying.  The constant mirrors the value in
     55  // ArrayBufferInputStream::readSegments.
     56  var size = 8192;
     57  ab = new ArrayBuffer(2 * size);
     58  ta = new Uint8Array(ab);
     59 
     60  var i;
     61  for (i = 0; i < size; ++i) {
     62    ta[i] = 'x'.charCodeAt(0);
     63  }
     64  for (i = 0; i < size; ++i) {
     65    ta[size + i] = 'y'.charCodeAt(0);
     66  }
     67 
     68  abis = Cc["@mozilla.org/io/arraybuffer-input-stream;1"]
     69           .createInstance(Ci.nsIArrayBufferInputStream);
     70  abis.setData(ab, 0, 2 * size);
     71 
     72  sis = Cc["@mozilla.org/scriptableinputstream;1"]
     73          .createInstance(Ci.nsIScriptableInputStream);
     74  sis.init(abis);
     75 
     76  var result = sis.read(2 * size);
     77  is(result, "x".repeat(size) + "y".repeat(size), "correctly read the data");
     78 }
     79 
     80 test();
     81 </script>
     82 </head>
     83 <body>
     84 <p id="display"></p>
     85 <div id="content" style="display: none"></div>
     86 <pre id="test">
     87 </pre>
     88 </body>
     89 </html>