<html>
<head>
    <link rel="stylesheet" href="resources/default.css">
    <style>
        table { top: 0px; left: 0px; border-spacing: 50px; position: absolute; }
        td { background: green; padding: 0px; border-style: none; border: 0px; }
        td.fixed { position: fixed; left: 50px; top: 100px; }
    </style>
    <script>
        if (window.testRunner)
            testRunner.waitUntilDone();
        function runTest()
        {
            document.getElementById('moveMe').className = "fixed";
            if (window.testRunner)
                testRunner.notifyDone();
        }
    </script>
</head>
<body style="height:2000px;" onload="setTimeout(runTest, 0);">
    <!-- Repaint test for https://bugs.webkit.org/show_bug.cgi?id=64650: RenderLayer fixed position logic needs more basic testing -->
    <!-- You should see no red on this page. -->
    <table>
        <tr><td></td><td></td></tr>
        <tr><td class="red"></td><td id="moveMe"></td></tr>
    <script>
        window.scrollTo(0, 100);
    </script>
</body>
</html>
