diff options
Diffstat (limited to 'dom/tests/mochitest/beacon/test_beaconOriginHeader.html')
-rw-r--r-- | dom/tests/mochitest/beacon/test_beaconOriginHeader.html | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/dom/tests/mochitest/beacon/test_beaconOriginHeader.html b/dom/tests/mochitest/beacon/test_beaconOriginHeader.html new file mode 100644 index 000000000..4594b7a8b --- /dev/null +++ b/dom/tests/mochitest/beacon/test_beaconOriginHeader.html @@ -0,0 +1,67 @@ +<!DOCTYPE HTML> +<html> +<head> + <title>Bug 1280692 - navigator.sendBeacon() should not send origin header</title> + <!-- Including SimpleTest.js so we can use waitForExplicitFinish !--> + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> +</head> +<body> + <p id="display"></p> + <div id="content" style="visibility: hidden"> + <iframe style="width:100%;" id="testframe"></iframe> + </div> + +<script class="testbody" type="text/javascript"> + +SimpleTest.waitForExplicitFinish(); + +const BEACON_URL = "http://example.com/tests/dom/tests/mochitest/beacon/beacon-originheader-handler.sjs"; +// no origin header should be sent with sendBeacon request; +// server returns any origin-header or 'no-header' if there is no header sent. +const ORIGIN_HEADER = "no-header"; + +/* Description of the test: + * We call sendBeacon() cross origin and make sure that the + * origin header is actually *not* set in the request. + * + * Since sendBeacon() does not expect any response, we are storing any + * header on the server (*.sjs) and use an XMLHttpRequest to actually + * retrieve the potentially set header back from the server. We assert + * that the header is indeed *not* sent with the request. Since sendBeacon() + * and also the XMLHttpRequest() are performed in an asynchronous fashion, + * there is no guarantee that the sendBeacon() is actually executed before + * the XMLHttpRequest(). + * Hence the xhr-response might be processed asynchronously. + */ + +SpecialPowers.pushPrefEnv({'set': [["beacon.enabled", true]]}, runTest); + +function queryHeaderFromServer() { + var xhr = new XMLHttpRequest(); + xhr.open("GET", "beacon-originheader-handler.sjs?queryheader", true); + xhr.onload = function() { + is(xhr.responseText, ORIGIN_HEADER, "SendBeacon should not send origin header"); + SimpleTest.finish(); + }; + xhr.onerror = function() { + ok(false, "xhr request returned error"); + SimpleTest.finish(); + }; + xhr.send(); +} + +function runTest() { + // generate data and send beacon + var formData = new FormData(); + formData.append('name', 'value'); + navigator.sendBeacon(BEACON_URL, formData); + + // start quering the result from the server + queryHeaderFromServer(); +} + +</script> +</pre> +</body> +</html> |