blob: e3c491cac306e5c49c4859f16cb34e1054684128 [file] [log] [blame]
<html>
<head>
<title>Complex positioned movement test</title>
<style>
.block {
position: absolute;
left:0;
top:0;
width: 100px;
height: 100px;
background-color: green;
}
</style>
</head>
<div style="position:relative">
<div class="block" id="outer">
<div class="block" id="inner">
</div>
</div>
</div>
<!--PASS if you don't crash<br>
and green block is shifted.
-->
<script>
// Update layout.
document.body.offsetLeft;
// First do something to dirty the outer block indirectly. Adding a child will result
// in the following flag states:
// inner - posChildNeedsLayout, normalChildNeedsLayout
// outer - simplifiedNormalFlowLayout
document.getElementById('inner').innerHTML = "<div class='block' id='problem' style='overflow:hidden'></div>";
// Next, move the outer block. This will set the needsPositionedMovementLayout flag along with the
// other two flags that got set.
document.getElementById('outer').style.left = '300px';
// Now update layout. If we incorrectly try to do only a positioned movement layout, then the
// inner block is now left with its two flags set.
document.body.offsetLeft;
// Now let's do something to make inner's child the layout root.
document.getElementById('problem').innerHTML = "Some text.";
// Now that the problem child has become the layout root, let's destroy it and watch things go horribly wrong.
document.getElementById('problem').style.display = 'none';
// Final layout to trigger the crash
document.body.offsetLeft;
</script>