michael@0: const BinaryOutputStream = michael@0: Components.Constructor("@mozilla.org/binaryoutputstream;1", michael@0: "nsIBinaryOutputStream", michael@0: "setOutputStream"); michael@0: michael@0: // this is simply a hex dump of a red square .PNG image michael@0: const RED_SQUARE = michael@0: [ michael@0: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, michael@0: 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, michael@0: 0x00, 0x00, 0x00, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0xFC, michael@0: 0x18, 0xED, 0xA3, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, michael@0: 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0x00, 0x28, michael@0: 0x49, 0x44, 0x41, 0x54, 0x48, 0xC7, 0xED, 0xCD, 0x41, 0x0D, michael@0: 0x00, 0x00, 0x08, 0x04, 0xA0, 0xD3, 0xFE, 0x9D, 0x35, 0x85, michael@0: 0x0F, 0x37, 0x28, 0x40, 0x4D, 0x6E, 0x75, 0x04, 0x02, 0x81, michael@0: 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0xC1, 0x93, 0x60, 0x01, michael@0: 0xA3, 0xC4, 0x01, 0x3F, 0x58, 0x1D, 0xEF, 0x27, 0x00, 0x00, michael@0: 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 michael@0: ]; michael@0: michael@0: function handleRequest(request, response) michael@0: { michael@0: var query = {}; michael@0: request.queryString.split('&').forEach(function (val) { michael@0: var [name, value] = val.split('='); michael@0: query[name] = unescape(value); michael@0: }); michael@0: michael@0: response.setHeader("Cache-Control", "no-cache"); michael@0: michael@0: response.setStatusLine(request.httpVersion, 200, "OK"); michael@0: response.setHeader("Content-Type", "text/plain", false); michael@0: michael@0: var log = getState("bug-879963-request-log") || ""; michael@0: michael@0: var stream = new BinaryOutputStream(response.bodyOutputStream); michael@0: michael@0: if (query["q"] == "init") { michael@0: log = "init"; // initialize the log, and return a PNG image michael@0: response.setHeader("Content-Type", "image/png", false); michael@0: stream.writeByteArray(RED_SQUARE, RED_SQUARE.length); michael@0: } else if (query["q"] == "image") { michael@0: log = log + ";" + query["q"]; michael@0: response.setHeader("Content-Type", "image/png", false); michael@0: stream.writeByteArray(RED_SQUARE, RED_SQUARE.length); michael@0: } else if (query["q"] == "font") { michael@0: log = log + ";" + query["q"]; michael@0: // we don't provide a real font; that's ok, OTS will just reject it michael@0: response.write("Junk"); michael@0: } else if (query["q"] == "report") { michael@0: // don't include the actual "report" request in the log we return michael@0: response.write(log); michael@0: } else { michael@0: log = log + ";" + query["q"]; michael@0: response.setStatusLine(request.httpVersion, 404, "Not Found"); michael@0: } michael@0: michael@0: setState("bug-879963-request-log", log); michael@0: }