// Handle counting loads for bug 704320. const SHARED_KEY = "bug704320_counter"; const DEFAULT_STATE = { css: { count: 0, referrers: [] }, img: { count: 0, referrers: [] }, js: { count: 0, referrers: [] }, }; const TYPE_MAP = { css: "text/css", js: "application/javascript", img: "image/png", html: "text/html", }; // Writes an image to the response function WriteOutImage(response) { 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("blue.png"); var fileStream = Components.classes[ "@mozilla.org/network/file-input-stream;1" ].createInstance(Components.interfaces.nsIFileInputStream); fileStream.init(file, 1, 0, false); response.bodyOutputStream.writeFrom(fileStream, fileStream.available()); } function handleRequest(request, response) { var query = {}; request.queryString.split("&").forEach(function (val) { var [name, value] = val.split("="); query[name] = unescape(value); }); var referrerLevel = "none"; if (request.hasHeader("Referer")) { let referrer = request.getHeader("Referer"); if (referrer.indexOf("bug704320") > 0) { referrerLevel = "full"; } else if (referrer == "http://mochi.test:8888/") { referrerLevel = "origin"; } } var state = getSharedState(SHARED_KEY); if (state === "") { state = DEFAULT_STATE; } else { state = JSON.parse(state); } response.setStatusLine(request.httpVersion, 200, "OK"); //avoid confusing cache behaviors response.setHeader("Cache-Control", "no-cache", false); if ("reset" in query) { //reset server state setSharedState(SHARED_KEY, JSON.stringify(DEFAULT_STATE)); //serve any CSS that we want to use. response.write(""); return; } if ("results" in query) { response.setHeader("Content-Type", "text/javascript", false); response.write(JSON.stringify(state)); return; } if ("type" in query) { state[query.type].count++; response.setHeader("Content-Type", TYPE_MAP[query.type], false); if (state[query.type].referrers.indexOf(referrerLevel) < 0) { state[query.type].referrers.push(referrerLevel); } if (query.type == "img") { WriteOutImage(response); } } if ("content" in query) { response.write(unescape(query.content)); } setSharedState(SHARED_KEY, JSON.stringify(state)); return; }