blob: edc2b7abde91fbb8546a7b68a01eae973cd11094 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test.js"></script>
<script>
description("This test checks that the page visibility event propagation does not crash the browser when frames are added / deleted.");
jsTestIsAsync = true;
let visibilityChangeEventCount = 0;
onload = function() {
debug("Loaded all frames.");
frame1 = document.getElementById("topFrame1");
frame2 = document.getElementById("topFrame2");
frame3 = document.getElementById("topFrame3");
frame4 = document.getElementById("topFrame4");
subFrame1 = frame3.contentDocument.getElementById("subIframe1");
subFrame2 = frame3.contentDocument.getElementById("subIframe2");
document.addEventListener("visibilitychange", onMainPageVisibilityChange);
frame2.contentDocument.addEventListener("visibilitychange", onFrame2VisibilityChange);
// Change the visibility of the current page to invisible.
if (window.testRunner)
testRunner.setPageVisibility("hidden");
}
function onMainPageVisibilityChange()
{
++visibilityChangeEventCount;
debug("Received visibilitychange event");
// Delete frame 4.
frame4.remove();
// Delete subframe 2.
frame3.contentDocument.body.removeChild(subFrame2);
// Add a new frame to top level.
frame5 = document.createElement("iframe");
document.body.appendChild(frame5);
// Add a new frame to frame2.
subFrame3 = frame2.contentDocument.createElement("iframe");
frame2.contentDocument.body.appendChild(subFrame3);
if (visibilityChangeEventCount == 2)
finishJSTest();
}
function onFrame2VisibilityChange()
{
++visibilityChangeEventCount;
debug("Received visibilitychange event");
// Delete frame 1.
frame1.remove();
if (visibilityChangeEventCount == 2)
finishJSTest();
}
</script>
<iframe id="topFrame1"></iframe>
<iframe id="topFrame2"></iframe>
<iframe id="topFrame3" src="resources/page-visibility-iframe-delete-test-frame.html"></iframe>
<iframe id="topFrame4"></iframe>
</body>
</html>