1 <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML//EN">
4 <script src=
"../../../resources/js-test.js"></script>
6 <body onload=
"allDone()">
7 Tests that the document's readyState is set properly at various phases during load.
8 <div id=
"console"></div>
9 <script defer
src=
"data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');shouldBeTrue('readyStateChangeFired');"></script>
10 <script src=
"data:text/javascript,shouldBeEqualToString('document.readyState', 'loading');"></script>
11 <iframe src=
"does-not-exist.html"></iframe>
13 var jsTestIsAsync
= true;
15 shouldBe("document.onreadystatechange", "null");
16 shouldBeEqualToString("document.readyState", "loading");
18 document
.addEventListener("DOMContentLoaded", function() {
19 shouldBeEqualToString("document.readyState", "interactive");
21 var el
= document
.createElement('script');
22 el
.src
= "data:text/javascript,shouldBeEqualToString('document.readyState', 'interactive');";
23 document
.getElementsByTagName('head')[0].appendChild(el
);
26 var expectedStates
= ["interactive", "complete"];
27 var nextExpectedState
= 0;
28 var readyStateChangeFired
= false;
29 document
.onreadystatechange = function(event
) {
30 shouldBe("event.target.readyState", "expectedStates[nextExpectedState]");
32 readyStateChangeFired
= true;
35 function readyStateShouldNotChange(event
) {
36 testFailed("should not have been notified of subdocument state change to " + event
.target
.readyState
);
39 var subdocument
= document
.getElementsByTagName('iframe')[0].contentDocument
;
40 subdocument
.onreadystatechange
= readyStateShouldNotChange
;
42 shouldBeEqualToString("subdocument.readyState", "loading");
44 shouldBeEqualToString("subdocument.readyState", "complete");
46 var htmlDocument
= document
.implementation
.createHTMLDocument();
47 shouldBeEqualToString("htmlDocument.readyState", "loading");
49 var expectedDynamicStates
= ["interactive", "complete"];
50 var nextExpectedDynamicState
= 0;
51 var dynamicIframe
= document
.createElement('iframe');
52 dynamicIframe
.setAttribute("src", "about:blank");
53 dynamicIframe
.setAttribute("onload", "parent.dynamicIframeLoaded()");
54 subdocument
.body
.appendChild(dynamicIframe
);
55 function dynamicIframeLoaded() {
56 shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
57 dynamicIframe
.contentDocument
.onreadystatechange
= readyStateShouldNotChange
;
58 dynamicIframe
.contentDocument
.open();
59 shouldBe("dynamicIframe.contentDocument.onreadystatechange", "null");
60 shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "loading");
61 dynamicIframe
.contentDocument
.onreadystatechange = function() {
62 shouldBe("dynamicIframe.contentDocument.readyState", "expectedDynamicStates[nextExpectedDynamicState]");
63 ++nextExpectedDynamicState
;
65 dynamicIframe
.contentDocument
.close();
66 shouldBeEqualToString("dynamicIframe.contentDocument.readyState", "complete");
68 dynamicIframe
.contentDocument
.onreadystatechange
= readyStateShouldNotChange
;
74 shouldBe("nextExpectedState", "expectedStates.length");
75 shouldBe("nextExpectedDynamicState", "expectedDynamicStates.length");
76 shouldBeEqualToString("document.readyState", "complete");