gecko/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs

42 lines
1.2 KiB
JavaScript

/*
* TestSever customized specifically for the needs of:
* Bug 1080987 - navigator.sendBeacon() needs to sent 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 = request.getHeader("origin");
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();
});
}