83 lines
3.4 KiB
HTML
83 lines
3.4 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<script src="../../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body onload="allDone()">
|
|
Tests that the document's readyState is set properly at various phases during load.
|
|
<div id="console"></div>
|
|
<script defer src="data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');shouldBeTrue('readyStateChangeFired');"></script>
|
|
<script src="data:text/javascript,shouldBeEqualToString('document.readyState', 'loading');"></script>
|
|
<iframe src="does-not-exist.html"></iframe>
|
|
<script>
|
|
var jsTestIsAsync = true;
|
|
|
|
shouldBe("document.onreadystatechange", "null");
|
|
shouldBeEqualToString("document.readyState", "loading");
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
shouldBeEqualToString("document.readyState", "interactive");
|
|
|
|
var el = document.createElement('script');
|
|
el.src = "data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');";
|
|
document.getElementsByTagName('head')[0].appendChild(el);
|
|
}, false);
|
|
|
|
var expectedStates = ["interactive", "complete"];
|
|
var nextExpectedState = 0;
|
|
var readyStateChangeFired = false;
|
|
document.onreadystatechange = function(event) {
|
|
shouldBe("event.target.readyState", "expectedStates[nextExpectedState]");
|
|
++nextExpectedState;
|
|
readyStateChangeFired = true;
|
|
}
|
|
|
|
function readyStateShouldNotChange(event) {
|
|
testFailed("should not have been notified of subdocument state change to " + event.target.readyState);
|
|
}
|
|
|
|
var subdocument = document.getElementsByTagName('iframe')[0].contentDocument;
|
|
subdocument.onreadystatechange = readyStateShouldNotChange;
|
|
subdocument.open();
|
|
shouldBeEqualToString("subdocument.readyState", "loading");
|
|
subdocument.close();
|
|
shouldBeEqualToString("subdocument.readyState", "complete");
|
|
|
|
var htmlDocument = document.implementation.createHTMLDocument();
|
|
shouldBeEqualToString("htmlDocument.readyState", "loading");
|
|
|
|
var expectedDynamicStates = ["interactive", "complete"];
|
|
var nextExpectedDynamicState = 0;
|
|
var dynamicIframe = document.createElement('iframe');
|
|
dynamicIframe.setAttribute("src", "about:blank");
|
|
dynamicIframe.setAttribute("onload", "parent.dynamicIframeLoaded()");
|
|
subdocument.body.appendChild(dynamicIframe);
|
|
function dynamicIframeLoaded() {
|
|
shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
|
|
dynamicIframe.contentDocument.onreadystatechange = readyStateShouldNotChange;
|
|
dynamicIframe.contentDocument.open();
|
|
shouldBe("dynamicIframe.contentDocument.onreadystatechange", "null");
|
|
shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "loading");
|
|
dynamicIframe.contentDocument.onreadystatechange = function() {
|
|
shouldBe("dynamicIframe.contentDocument.readyState", "expectedDynamicStates[nextExpectedDynamicState]");
|
|
++nextExpectedDynamicState;
|
|
}
|
|
dynamicIframe.contentDocument.close();
|
|
shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
|
|
|
|
dynamicIframe.contentDocument.onreadystatechange = readyStateShouldNotChange;
|
|
subdocument.open();
|
|
subdocument.close();
|
|
}
|
|
|
|
function allDone() {
|
|
shouldBe("nextExpectedState", "expectedStates.length");
|
|
shouldBe("nextExpectedDynamicState", "expectedDynamicStates.length");
|
|
shouldBeEqualToString("document.readyState", "complete");
|
|
finishJSTest();
|
|
}
|
|
</script>
|
|
<script src="../../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|