Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / fast / dom / Document / readystate.html
blobaa8e79d503c4b3de1aee5ce446c1b1b01168e293
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
4 <script src="../../../resources/js-test.js"></script>
5 </head>
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>
12 <script>
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);
24 }, false);
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]");
31 ++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;
41 subdocument.open();
42 shouldBeEqualToString("subdocument.readyState", "loading");
43 subdocument.close();
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;
69 subdocument.open();
70 subdocument.close();
73 function allDone() {
74 shouldBe("nextExpectedState", "expectedStates.length");
75 shouldBe("nextExpectedDynamicState", "expectedDynamicStates.length");
76 shouldBeEqualToString("document.readyState", "complete");
77 finishJSTest();
79 </script>
80 </body>
81 </html>