123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
- var timer = Components.classes["@mozilla.org/timer;1"];
- var partTimer = timer.createInstance(Components.interfaces.nsITimer);
- function getFileAsInputStream(aFilename) {
- var file = Components.classes["@mozilla.org/file/directory_service;1"]
- .getService(Components.interfaces.nsIProperties)
- .get("CurWorkD", Components.interfaces.nsIFile);
- file.append("tests");
- file.append("image");
- file.append("test");
- file.append("mochitest");
- file.append(aFilename);
- var fileStream = Components.classes['@mozilla.org/network/file-input-stream;1']
- .createInstance(Components.interfaces.nsIFileInputStream);
- fileStream.init(file, 1, 0, false);
- return fileStream;
- }
- function handleRequest(request, response)
- {
- response.setHeader("Content-Type", "image/gif", false);
- response.setHeader("Cache-Control", "no-cache", false);
- response.setStatusLine(request.httpVersion, 200, "OK");
- // We're sending data off in a delayed fashion
- response.processAsync();
- var inputStream = getFileAsInputStream("animated-gif_trailing-garbage.gif");
- var available = inputStream.available(); // = 4029 bytes
- // Send the good data at once
- response.bodyOutputStream.writeFrom(inputStream, 285);
- sendParts(inputStream, response);
- }
- function sendParts(inputStream, response) {
- // 3744 left, send in 8 chunks of 468 each
- partTimer.initWithCallback(getSendNextPart(inputStream, response), 500,
- Components.interfaces.nsITimer.TYPE_ONE_SHOT);
- }
- function getSendNextPart(inputStream, response) {
- return function () {
- response.bodyOutputStream.writeFrom(inputStream, 468);
- if (!inputStream.available()) {
- inputStream.close();
- response.finish();
- } else {
- sendParts(inputStream, response);
- }
- };
- }
|