summaryrefslogtreecommitdiffstats
path: root/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs
blob: f6d70fa8a5d3bab9bdc5366d8bc456e36bb88cde (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
 * 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();
  });
}