gecko/content/base/test/file_bug503481b_inner.html

86 lines
2.3 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<!-- Async script that isn't preloaded -->
<script async src="file_bug503481.sjs?blockOn=R&body=runFirst();"></script>
<script>
firstRan = false;
secondRan = false;
thirdRan = false;
forthRan = false;
fifthRan = false;
sixthRan = false;
function runFirst() {
firstRan = true;
}
function runThird() {
parent.is(forthRan, false, "forth should still be blocked");
unblock("T");
thirdRan = true;
}
function runForth() {
forthRan = true;
}
function runFifth() {
parent.is(sixthRan, false, "sixth should be not run before non-async fifth");
fifthRan = true;
}
function runSixth() {
parent.is(fifthRan, true, "fifth should run before async sixth");
sixthRan = true;
}
function done() {
parent.is(firstRan, true, "first should have run by onload");
parent.is(secondRan, true, "second should have run by onload");
parent.is(thirdRan, true, "third should have run by onload");
parent.is(forthRan, true, "forth should have run by onload");
parent.is(fifthRan, true, "fifth should have run by onload");
parent.is(sixthRan, true, "sixth should have run by onload");
parent.SimpleTest.finish();
}
var reqs = [];
function unblock(s) {
xhr = new XMLHttpRequest();
xhr.open("GET", "file_bug503481.sjs?unblock=" + s);
xhr.send();
reqs.push(xhr);
}
parent.is(firstRan, false, "First async script shouldn't have run");
unblock("R");
</script>
<!-- test that inline async isn't actually async -->
<script async>
secondRan = true;
</script>
<script async>
parent.is(secondRan, true, "Second script shouldn't be async");
</script>
<!-- test that setting both defer and async treats the script as async -->
<script defer async src="file_bug503481.sjs?blockOn=S&body=runThird();"></script>
<script>
parent.is(thirdRan, false, "third should not have run yet");
unblock("S");
</script>
<script src="file_bug503481.sjs?blockOn=T&body=runForth();"></script>
<!-- test that preloading an async script works -->
<script>
setTimeout(function () { unblock("U"); }, 1000);
</script>
<script src="file_bug503481.sjs?blockOn=U&body=runFifth();"></script>
<script async src="file_bug503481.sjs?blockOn=V&body=runSixth();"></script>
<script>
parent.is(fifthRan, true, "fifth should have run by now");
parent.is(sixthRan, false, "sixth should not have run yet");
unblock("V");
</script>
</head>
<body onload="done()">