<html>
    <head>
        <script src="../../../resources/ui-helper.js"></script>
        <script type="text/javascript">
            window.jsTestIsAsync = true;
            if (window.testRunner && window.internals) {
                testRunner.waitUntilDone();
                internals.settings.setFrameFlattening("FullyEnabled")
            }

            async 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);
                    await UIHelper.waitForTargetScrollAnimationToSettle(element);
                    testRunner.notifyDone();
                }
            }
        </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>
