68 lines
1.7 KiB
HTML
68 lines
1.7 KiB
HTML
<body>
|
|
<div id="result"></div>
|
|
<div style="position: relative; height: 200px; overflow: auto;">
|
|
<div id="target" style="height: 75%; background-color: red;"></div>
|
|
</div>
|
|
<script>
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
}
|
|
|
|
window.onload = function () {
|
|
// Force a layout with offsetHeight, and then start toggling overflow.
|
|
target.offsetHeight;
|
|
toggleOverflow();
|
|
}
|
|
|
|
var callCount = 0;
|
|
var recursionDepth = 0;
|
|
|
|
var target = document.getElementById("target");
|
|
var result = document.getElementById("result");
|
|
|
|
function pass()
|
|
{
|
|
result.innerHTML = "PASS";
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
function fail()
|
|
{
|
|
result.innerHTML = "FAIL";
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
}
|
|
|
|
function toggleOverflow()
|
|
{
|
|
++recursionDepth;
|
|
++callCount;
|
|
|
|
// The code change associated with this test will cause this function to start
|
|
// firing asynchronously.
|
|
if (recursionDepth > 2) {
|
|
fail();
|
|
return;
|
|
}
|
|
|
|
// If we have made it this far without a recursionDepth of 2 or greater, then we
|
|
// can say that the test passed.
|
|
if (callCount > 8) {
|
|
pass();
|
|
return;
|
|
}
|
|
|
|
if (target.style.height === "75%")
|
|
target.style.height = "200%";
|
|
else
|
|
target.style.height = "75%";
|
|
target.offsetHeight;
|
|
|
|
--recursionDepth;
|
|
}
|
|
target.parentNode.addEventListener("overflowchanged", toggleOverflow);
|
|
</script>
|
|
</body>
|