bug1180105.sjs (1880B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ 3 */ 4 5 var counter = 100; 6 var timer = Cc["@mozilla.org/timer;1"]; 7 var partTimer = timer.createInstance(Ci.nsITimer); 8 9 function getFileAsInputStream(aFilename) { 10 var file = Services.dirsvc.get("CurWorkD", Ci.nsIFile); 11 12 file.append("tests"); 13 file.append("image"); 14 file.append("test"); 15 file.append("mochitest"); 16 file.append(aFilename); 17 18 var fileStream = Cc[ 19 "@mozilla.org/network/file-input-stream;1" 20 ].createInstance(Ci.nsIFileInputStream); 21 fileStream.init(file, 1, 0, false); 22 return fileStream; 23 } 24 25 function handleRequest(request, response) { 26 response.setHeader( 27 "Content-Type", 28 "multipart/x-mixed-replace;boundary=BOUNDARYOMG", 29 false 30 ); 31 response.setHeader("Cache-Control", "no-cache", false); 32 response.setStatusLine(request.httpVersion, 200, "OK"); 33 // We're sending parts off in a delayed fashion, to let the tests occur. 34 response.processAsync(); 35 response.write("--BOUNDARYOMG\r\n"); 36 sendParts(response); 37 } 38 39 function sendParts(response) { 40 if (counter-- == 0) { 41 sendClose(response); 42 setSharedState("all-parts-done", "1"); 43 return; 44 } 45 sendNextPart(response); 46 partTimer.initWithCallback( 47 function () { 48 sendParts(response); 49 }, 50 1, 51 Ci.nsITimer.TYPE_ONE_SHOT 52 ); 53 } 54 55 function sendClose(response) { 56 response.write("--BOUNDARYOMG--\r\n"); 57 response.finish(); 58 } 59 60 function sendNextPart(response) { 61 var nextPartHead = "Content-Type: image/jpeg\r\n\r\n"; 62 var inputStream = getFileAsInputStream("damon.jpg"); 63 response.bodyOutputStream.write(nextPartHead, nextPartHead.length); 64 response.bodyOutputStream.writeFrom(inputStream, inputStream.available()); 65 inputStream.close(); 66 // Toss in the boundary, so the browser can know this part is complete 67 response.write("--BOUNDARYOMG\r\n"); 68 }