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