Source code

Revision control

Copy as Markdown

Other Tools

/*
* TestSever customized specifically for the needs of:
* Bug 1280692 - navigator.sendBeacon() should not send origin header
*/
function handleRequest(request, response) {
response.setHeader("Cache-Control", "no-cache", false);
response.setHeader("Content-Type", "text/plain", false);
// case XHR-REQUEST: the xhr-request tries to query the
// stored header from the beacon request.
if (request.queryString == "queryheader") {
var header = getState("originHeader");
// if the beacon already stored the header - return.
if (header) {
response.write(header);
setState("originHeader", "");
return;
}
// otherwise wait for the beacon request
response.processAsync();
setObjectState("xhr-response", response);
return;
}
// case BEACON-REQUEST: get the beacon header and
// store the header on the server.
var header = "reset";
try {
header = request.getHeader("origin");
} catch (e) {
header = "no-header";
}
setState("originHeader", header);
// if there is an xhr-request waiting, return the header now.
getObjectState("xhr-response", function (xhrResponse) {
if (!xhrResponse) {
return;
}
setState("originHeader", "");
xhrResponse.write(header);
xhrResponse.finish();
});
}