|
1 const BinaryOutputStream = |
|
2 Components.Constructor("@mozilla.org/binaryoutputstream;1", |
|
3 "nsIBinaryOutputStream", |
|
4 "setOutputStream"); |
|
5 |
|
6 // this is simply a hex dump of a red square .PNG image |
|
7 const RED_SQUARE = |
|
8 [ |
|
9 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, |
|
10 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, |
|
11 0x00, 0x00, 0x00, 0x20, 0x08, 0x02, 0x00, 0x00, 0x00, 0xFC, |
|
12 0x18, 0xED, 0xA3, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, |
|
13 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0x00, 0x28, |
|
14 0x49, 0x44, 0x41, 0x54, 0x48, 0xC7, 0xED, 0xCD, 0x41, 0x0D, |
|
15 0x00, 0x00, 0x08, 0x04, 0xA0, 0xD3, 0xFE, 0x9D, 0x35, 0x85, |
|
16 0x0F, 0x37, 0x28, 0x40, 0x4D, 0x6E, 0x75, 0x04, 0x02, 0x81, |
|
17 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0xC1, 0x93, 0x60, 0x01, |
|
18 0xA3, 0xC4, 0x01, 0x3F, 0x58, 0x1D, 0xEF, 0x27, 0x00, 0x00, |
|
19 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82 |
|
20 ]; |
|
21 |
|
22 function handleRequest(request, response) |
|
23 { |
|
24 var query = {}; |
|
25 request.queryString.split('&').forEach(function (val) { |
|
26 var [name, value] = val.split('='); |
|
27 query[name] = unescape(value); |
|
28 }); |
|
29 |
|
30 response.setHeader("Cache-Control", "no-cache"); |
|
31 |
|
32 response.setStatusLine(request.httpVersion, 200, "OK"); |
|
33 response.setHeader("Content-Type", "text/plain", false); |
|
34 |
|
35 var log = getState("bug-879963-request-log") || ""; |
|
36 |
|
37 var stream = new BinaryOutputStream(response.bodyOutputStream); |
|
38 |
|
39 if (query["q"] == "init") { |
|
40 log = "init"; // initialize the log, and return a PNG image |
|
41 response.setHeader("Content-Type", "image/png", false); |
|
42 stream.writeByteArray(RED_SQUARE, RED_SQUARE.length); |
|
43 } else if (query["q"] == "image") { |
|
44 log = log + ";" + query["q"]; |
|
45 response.setHeader("Content-Type", "image/png", false); |
|
46 stream.writeByteArray(RED_SQUARE, RED_SQUARE.length); |
|
47 } else if (query["q"] == "font") { |
|
48 log = log + ";" + query["q"]; |
|
49 // we don't provide a real font; that's ok, OTS will just reject it |
|
50 response.write("Junk"); |
|
51 } else if (query["q"] == "report") { |
|
52 // don't include the actual "report" request in the log we return |
|
53 response.write(log); |
|
54 } else { |
|
55 log = log + ";" + query["q"]; |
|
56 response.setStatusLine(request.httpVersion, 404, "Not Found"); |
|
57 } |
|
58 |
|
59 setState("bug-879963-request-log", log); |
|
60 } |