Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE HTML>↩
<html>↩
<head>↩
<title>Bug 1280692 - sendBeacon() should follow 30x redirect</title>↩
<!-- Including SimpleTest.js so we can use waitForExplicitFinish !-->
<script 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">↩
/* Description of the test:↩
* We do perform a non simple sendBeacon request which should not use CORS and should follow↩
* a 30x cross origin redirect, which is allowed by the spec.↩
*/
SimpleTest.waitForExplicitFinish();↩
SpecialPowers.pushPrefEnv({'set': [["beacon.enabled", true]]}, runTest);↩
var intervalID = null;↩
function queryIfRedirectSucceeded() {↩
clearInterval(intervalID);↩
var xhr = new XMLHttpRequest();↩
xhr.open("GET", "beacon-redirect-handler.sjs?verifyRedirectDidSucceed", true);↩
xhr.onload = function() {↩
is(xhr.responseText, "green", "SendBeacon should follow cross origin redirects!");↩
SimpleTest.finish();↩
};↩
xhr.onerror = function() {↩
ok(false, "xhr request returned error");↩
SimpleTest.finish();↩
};↩
xhr.send();↩
}↩
function runTest() {↩
var data = new Uint8Array([0,1,2,3]);↩
navigator.sendBeacon(BEACON_URL, data);↩
// we have to make sure the channel did follow the redirect hence↩
// we have to wait for 4 seconds before we can query the result.↩
intervalID = setInterval(queryIfRedirectSucceeded, 4000);↩
}↩
</script>↩
</pre>↩
</body>↩
</html>↩