tor-browser

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

test_multipart_streamconv_empty.js (1789B)


      1 "use strict";
      2 
      3 function make_channel(url) {
      4  return NetUtil.newChannel({ uri: url, loadUsingSystemPrincipal: true });
      5 }
      6 
      7 add_task(async function test_empty() {
      8  let uri = "http://localhost";
      9  let httpChan = make_channel(uri);
     10 
     11  let channel = Cc["@mozilla.org/network/input-stream-channel;1"]
     12    .createInstance(Ci.nsIInputStreamChannel)
     13    .QueryInterface(Ci.nsIChannel);
     14 
     15  channel.setURI(httpChan.URI);
     16  channel.loadInfo = httpChan.loadInfo;
     17 
     18  let inputStream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
     19    Ci.nsIStringInputStream
     20  );
     21  inputStream.setUTF8Data(""); // Pass an empty string
     22 
     23  channel.contentStream = inputStream;
     24 
     25  let [status, buffer] = await new Promise(resolve => {
     26    let streamConv = Cc["@mozilla.org/streamConverters;1"].getService(
     27      Ci.nsIStreamConverterService
     28    );
     29    let multipartListener = {
     30      _buffer: "",
     31 
     32      QueryInterface: ChromeUtils.generateQI([
     33        "nsIStreamListener",
     34        "nsIRequestObserver",
     35      ]),
     36 
     37      onStartRequest() {},
     38      onDataAvailable(request, stream, offset, count) {
     39        try {
     40          this._buffer = this._buffer.concat(read_stream(stream, count));
     41          dump("BUFFEEE: " + this._buffer + "\n\n");
     42        } catch (ex) {
     43          do_throw("Error in onDataAvailable: " + ex);
     44        }
     45      },
     46 
     47      onStopRequest(request, status1) {
     48        resolve([status1, this._buffer]);
     49      },
     50    };
     51    let conv = streamConv.asyncConvertData(
     52      "multipart/mixed",
     53      "*/*",
     54      multipartListener,
     55      null
     56    );
     57 
     58    let chan = make_channel(uri);
     59    chan.asyncOpen(conv);
     60  });
     61 
     62  Assert.notEqual(
     63    status,
     64    Cr.NS_OK,
     65    "Should be an error code because content has no boundary"
     66  );
     67  Assert.equal(buffer, "", "Should have received no content");
     68 });