зеркало из https://github.com/mozilla/gecko-dev.git
95 строки
2.6 KiB
JavaScript
95 строки
2.6 KiB
JavaScript
// 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;
|
|
}
|