beacon-originheader-handler.sjs (1295B)
1 /* 2 * TestSever customized specifically for the needs of: 3 * Bug 1280692 - navigator.sendBeacon() should not send origin header 4 */ 5 6 function handleRequest(request, response) { 7 response.setHeader("Cache-Control", "no-cache", false); 8 response.setHeader("Content-Type", "text/plain", false); 9 10 // case XHR-REQUEST: the xhr-request tries to query the 11 // stored header from the beacon request. 12 if (request.queryString == "queryheader") { 13 var header = getState("originHeader"); 14 // if the beacon already stored the header - return. 15 if (header) { 16 response.write(header); 17 setState("originHeader", ""); 18 return; 19 } 20 // otherwise wait for the beacon request 21 response.processAsync(); 22 setObjectState("xhr-response", response); 23 return; 24 } 25 26 // case BEACON-REQUEST: get the beacon header and 27 // store the header on the server. 28 var header = "reset"; 29 try { 30 header = request.getHeader("origin"); 31 } catch (e) { 32 header = "no-header"; 33 } 34 setState("originHeader", header); 35 36 // if there is an xhr-request waiting, return the header now. 37 getObjectState("xhr-response", function (xhrResponse) { 38 if (!xhrResponse) { 39 return; 40 } 41 setState("originHeader", ""); 42 xhrResponse.write(header); 43 xhrResponse.finish(); 44 }); 45 }