e27ab87c7dbbb68f7eef17b7ee7e3c1c918a170b
[WebKit-https.git] / LayoutTests / fast / events / page-visibility-iframe-delete-test.html
1 <html>
2 <body onload="startTest()">
3
4 <script src="../../resources/js-test-pre.js"></script>
5
6 <script>
7
8 description("This test checks that the page visibility event propagation does not crash the browser when frames are added / deleted.");
9
10 var jsTestIsAsync = true;
11
12 var numVisibilityChanges = 0;
13 var frame1, frame2, frame3, frame4, frame5, subframe1, subFrame2, subFrame3;
14
15 var docsLoaded = 0;
16 var mainPageVisibilityChangeDone = false;
17 var frame2VisiblityChangeDone = false;
18 var finishTestDone = false;
19
20 function startTest() {
21     ++docsLoaded;
22     if (docsLoaded < 8) {
23       return;
24    }
25
26     debug("Loaded all frames.");
27
28     frame1 = document.getElementById("topFrame1");
29     frame2 = document.getElementById("topFrame2");
30     frame3 = document.getElementById("topFrame3");
31     frame4 = document.getElementById("topFrame4");
32     subFrame1 = frame3.contentDocument.getElementById("subIframe1");
33     subFrame2 = frame3.contentDocument.getElementById("subIframe2");
34
35     document.addEventListener(
36         "visibilitychange", onMainPageVisibilityChange, false);
37     frame2.contentDocument.addEventListener(
38         "visibilitychange", onFrame2VisibilityChange, false);
39     // Change the visibility of the current page to invisible.
40     if (window.testRunner) {
41         numVisibilityChanges++;
42         testRunner.setPageVisibility("hidden");
43     }
44 }
45
46 function finishTest() {
47     document.removeEventListener(
48         "visibilitychange", onMainPageVisibilityChange, false);
49     frame2.contentDocument.removeEventListener(
50         "visibilitychange", onFrame2VisibilityChange, false);
51
52     if (window.testRunner)
53         testRunner.resetPageVisibility();
54     finishJSTest();
55 }
56
57 function onMainPageVisibilityChange() {
58     if (mainPageVisibilityChangeDone && frame2VisiblityChangeDone) {
59         finishTest();
60     } else if (!mainPageVisibilityChangeDone) {
61         debug("Visibility of main document changed.");
62         // Delete frame 4.
63         document.body.removeChild(frame4);
64
65         // Delete subframe 2.
66         frame3.contentDocument.body.removeChild(subFrame2);
67
68         // Add a new frame to top level.
69         frame5 = document.createElement("iframe");
70         frame5.src = '';
71         document.body.appendChild(frame5);
72
73         // Add a new frame to frame2.
74         subFrame3 = frame2.contentDocument.createElement("iframe");
75         subFrame3.src = '';
76         frame2.contentDocument.body.appendChild(subFrame3);
77
78         mainPageVisibilityChangeDone = true;
79     }
80
81     if (mainPageVisibilityChangeDone && frame2VisiblityChangeDone) {
82         finishTest();
83     }
84 }
85
86 function onFrame2VisibilityChange() {
87     if (mainPageVisibilityChangeDone && frame2VisiblityChangeDone) {
88         finishTest();
89     } else if (!frame2VisiblityChangeDone) {
90         debug("Visibility of sub frame 2 changed.");
91
92         // Delete frame 1.
93         document.body.removeChild(frame1);
94
95         frame2VisiblityChangeDone = true;
96     }
97
98     if (mainPageVisibilityChangeDone && frame2VisiblityChangeDone) {
99         finishTest();
100     }
101 }
102
103 </script>
104
105 <script src="../../resources/js-test-post.js"></script>
106
107 <iframe id="topFrame1" onload="startTest()" ></iframe>
108 <iframe id="topFrame2" onload="startTest()" ></iframe>
109 <iframe id="topFrame3" onload="startTest()" src="resources/page-visibility-iframe-delete-test-frame.html"></iframe>
110 <iframe id="topFrame4" onload="startTest()" ></iframe>
111 </body>
112 </html>