| <!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> |