chromium/third_party/blink/web_tests/fast/layout/common-ancestor-relayout-boundary.html

<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<style>
/* Make all divs relayout boundaries. */
div {
    width: 100px;
    height: 100px;
    overflow: hidden;
    position: relative;
}
</style>
<div id="relayout-common-ancestor"><div><div></div></div><div><div></div></div></div>
<script>
function dirtyLayout()
{
    var container = document.getElementById('relayout-common-ancestor');
    for (var i = 0; i < container.childNodes.length; ++i) {
        var child = container.childNodes[i].firstChild;
        child.style.width = "99px";
        // Force a style recalc that doesn't force a layout so that the
        // needsLayout count is incremented.
        getComputedStyle(child).color;
    }
}

document.documentElement.offsetTop;

// Pass quiet=true here so that the added nodes from the shouldBe don't
// mess up the needsLayoutCount on line 45.
if (window.internals)
    shouldBe("internals.needsLayoutCount()", "0", true);

dirtyLayout();

// The tree appears as following, with the starred nodes dirty:
//       div [relayout-common-ancestor]
//      /   \
//   *div  *div
//    /      /
// *div   *div
if (window.internals)
    shouldBe("internals.needsLayoutCount()", "4");

document.documentElement.offsetTop;

if (window.internals)
    shouldBe("internals.needsLayoutCount()", "0");
</script>