<html>
    <script>
        function startTest() {
            if (window.testRunner) {
                testRunner.waitUntilDone();
                testRunner.setBackingScaleFactor(2, finishTest);
            }
        }
        
        function finishTest() {
            setTimeout(function() { testRunner.notifyDone(); }, 0);
        }
        </script>
    </head>
    <body onload="startTest();">
        <div>This test passes if the resize corner icon appears high-resolution in HiDPI.</div>
        <textarea style="resize:both;"></textarea>
    </body>
</html>
