<!DOCTYPE html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>

<p id="description"></p>

<div style="border: 1px solid #000; height: 5000px;">5000-pixel box</div>

<iframe id="frame" srcdoc="<body> 
    <style>button { border: 0; }</style> 
    <div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div> 
    <div id='container' style='height: 100px; overflow: scroll'> 
        <div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div> 
        <button id='target'>Target</button> 
        <div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div> 
    </div> 
    <div style='border: 1px solid #000; height: 5000px;'>5000-pixel box</div> 
</body>"></iframe>

<div style="border: 1px solid #000; height: 5000px;">5000-pixel box</div>

<div id="console"></div>

<script>
description("Tests that scrolling to move an element to a specific point successfully scrolls both an iframe and a div with overflow.");

window.jsTestIsAsync = true;

function runTest() {
    window.frame = document.getElementById("frame");
    window.frameWindow = frame.contentWindow;
    window.frameDoc = frameWindow.document;
    window.container = frameDoc.getElementById("container");
    window.target = frameDoc.getElementById("target");

    var targetAccessibleObject;
    if (window.accessibilityController) {
        target.focus();
        targetAccessibleObject = accessibilityController.focusedElement;
    }

    // Reset the initial scroll position (since calling focus() can scroll the page too).
    window.scrollTo(0, 0);
    frameWindow.scrollTo(0, 0);
    container.scrollTop = 0;
    shouldBeZero("window.pageYOffset");
    shouldBeZero("frameWindow.pageYOffset");
    shouldBeZero("container.scrollTop");

    // Scroll to various locations and check.
    if (window.accessibilityController)
        targetAccessibleObject.scrollToGlobalPoint(0, 0);
    shouldBeZero("target.getBoundingClientRect().top");
    if (window.accessibilityController)
        targetAccessibleObject.scrollToGlobalPoint(0, 300);
    shouldBe("target.getBoundingClientRect().top", "300");
    if (window.accessibilityController)
        targetAccessibleObject.scrollToGlobalPoint(0, 3000);
    shouldBe("target.getBoundingClientRect().top", "3000");

    finishJSTest();
}

window.addEventListener("load", function() {
    setTimeout(runTest, 0);
}, false);

</script>

</body>
</html>
