<html>
    <head>
        <script type="text/javascript">
            if (window.testRunner && window.internals) {
                testRunner.waitUntilDone();
                internals.settings.setFrameFlattening("FullyEnabled")
            }

            function runTest()
            {
                if (window.eventSender && window.testRunner) {
                    var element = document.getElementById('targetObject');
                    var startX = element.offsetLeft + element.offsetWidth / 2;
                    var startY = element.offsetTop + element.offsetHeight / 2;
                    eventSender.mouseMoveTo(startX, startY);
                    eventSender.mouseScrollBy(0, -4);
                    setTimeout(function() {
                        testRunner.notifyDone();
                    }, 100);
                }
            }
        </script>
    </head>
    <body style="margin:0" onload="setTimeout('runTest()', 100);">
        <object id="targetObject" width="160px" height="160px" type="text/html" data="data:text/html,
            <html>
                <body style='margin:0;'>
                    <div style='width:160px;height:160px;background-color:red;'></div>
                    <div id='targetDiv' style='width:160px;height:160px;background-color:green;'></div>
                </body>
            </html>
            ">
        </object>
    </body>
</html>
