<!DOCTYPE html> <!-- webkit-test-runner [ AsyncOverflowScrollingEnabled=true ] -->
<head>
<style>
.outer {
    position: relative;
    margin: 100px;
    height: 400px;
    width: 200px;
    border: 1px solid blue;
}

#inner {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;

    overflow-x: hidden;
    overflow-y: auto;    
}

.big {
    height: 2000px;
}
</style>

<script src="../../resources/js-test-pre.js"></script>
<script>

function decreaseContentSize()
{
    var content = document.getElementById('content');
    content.classList.remove("big");
    internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();

    var divTarget = document.getElementById('inner');
    var divScrollPos = divTarget.scrollTop;
    if (divScrollPos == 0)
        testPassed("Re-sizing the content of the scrolled div correctly set a new scroll position.");
    else
        testFailed("Re-sizing the content of the scrolled div failed to correctly set a new scroll position. ");

    testRunner.notifyDone();
}

function scrollTest()
{
    var startPosX = 150;
    var startPosY = 150;
    eventSender.mouseMoveTo(startPosX, startPosY);
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
    eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');

    setTimeout(decreaseContentSize, 100);
}

function setUp() {
    if (window.eventSender) {
        testRunner.dumpAsText();
        testRunner.waitUntilDone();

        setTimeout(scrollTest, 0);
    }
}
</script>
</head>

<body onload="setUp();">

<div class="outer">
    <div id="inner">
        <div id="content" class="big">This test should be run in the test harness.</div>
    </div>
</div>
</body>
</html>

