webcam-simulacrum.sjs (1552B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ 3 */ 4 5 var counter = 2; 6 var frames = ["red.gif", "blue.gif"]; 7 var timer = Cc["@mozilla.org/timer;1"]; 8 var partTimer = timer.createInstance(Ci.nsITimer); 9 10 function getFileAsInputStream(aFilename) { 11 var file = Services.dirsvc.get("CurWorkD", Ci.nsIFile); 12 13 file.append("tests"); 14 file.append("image"); 15 file.append("test"); 16 file.append("mochitest"); 17 file.append(aFilename); 18 19 var fileStream = Cc[ 20 "@mozilla.org/network/file-input-stream;1" 21 ].createInstance(Ci.nsIFileInputStream); 22 fileStream.init(file, 1, 0, false); 23 return fileStream; 24 } 25 26 function handleRequest(request, response) { 27 response.setHeader( 28 "Content-Type", 29 "multipart/x-mixed-replace;boundary=BOUNDARYOMG", 30 false 31 ); 32 response.setHeader("Cache-Control", "no-cache", false); 33 response.setStatusLine(request.httpVersion, 200, "OK"); 34 response.processAsync(); 35 response.write("--BOUNDARYOMG\r\n"); 36 while (frames.length) { 37 sendNextPart(response); 38 } 39 response.write("--BOUNDARYOMG--\r\n"); 40 response.finish(); 41 } 42 43 function sendNextPart(response) { 44 var nextPartHead = "Content-Type: image/gif\r\n\r\n"; 45 var inputStream = getFileAsInputStream(frames.shift()); 46 response.bodyOutputStream.write(nextPartHead, nextPartHead.length); 47 response.bodyOutputStream.writeFrom(inputStream, inputStream.available()); 48 inputStream.close(); 49 // Toss in the boundary, so the browser can know this part is complete 50 response.write("--BOUNDARYOMG\r\n"); 51 }