<!doctype html>
<head>
    <script>
    if (window.testRunner) {
        testRunner.dumpAsText(false);
        testRunner.waitUntilDone();
    }
    function runRepaintTest()
    {
        if (window.internals)
            internals.startTrackingRepaints();

        var target = document.getElementById("target");
        getSelection().setBaseAndExtent(target, 0, target.nextSibling, 0);

        setTimeout(function() {
            if (window.internals) {
                document.querySelector('#repaints').innerHTML = window.internals.repaintRectsAsText();
                internals.stopTrackingRepaints();
            }

            if (window.testRunner)
                testRunner.notifyDone();
        }, 0);
    }
    </script>
    <style>
        body { margin: 0px; }
        #target::selection { background-color: green; }
    </style>
</head>
<body onload="runRepaintTest()">
    <div style="position: absolute; margin-right: 200px;">
        <div>Bug <a href="http://webkit.org/b/111000">111000</a>: Selection gaps don't repaint correctly with transforms</div>
        <div>This tests that absolute elements that get flipped are invalidated correctly.  The box will be competely green if the selected area was invalidated correctly.</div>
    </div>
    <div style="-webkit-writing-mode: vertical-rl">
        <div id="target" style="background-color: red; width: 100px; height: 100px; position: absolute;"><br/></div><br/>
    </div>
    <div id="repaints"></div>
</body>
