<body style="overflow: hidden;">
    <p>
        Test for <i><a href="rdar://problem/10098679">&lt;rdar://problem/10098679></a>
        Assertion failure in <tt>RenderLayer::paintPaginatedChildLayer()</tt></i>.
    </p>
    <p>
        The test passes if it does not cause an assertion failure or a crash.
    </p>
    <!-- specifying opacity < 1 so that the transition from having columns
         to not having columns does not cause the layer to go away -->
    <div id="target" style="-webkit-column-count:2; -webkit-column-fill:auto; column-count:2; column-fill:auto; opacity: 0.5; height: 20px;">
        <div style="position:relative;"></div>
    </div>
    <div id="widener" style="height: 10px; width: 200%;"></div>
    <script>
        function test()
        {
            document.getElementById("widener").style.removeProperty("width");
            document.getElementById("target").style.removeProperty("-webkit-column-count");
        }
 
               window.scrollBy(1, 0);

        if (window.testRunner) {
            testRunner.displayAndTrackRepaints();
            testRunner.dumpAsText();
            test();
        } else
            setTimeout(test, 500);

    </script>
</body>
