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 });