<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
<style>
    body {
        height: 2000px;
        width: 2000px;
    }
</style>
</head>
<body>
<script>
    var jsTestIsAsync = true;

    description("Tests that history.scrollRestoration works for same-document navigations");

    if (window.testRunner)
        testRunner.clearBackForwardList();

    shouldBeTrue("'scrollRestoration' in history");
    
    // Can't create history entries inside the onload handler.
    window.setTimeout(testAutoScrollRestoration, 0);

    function testAutoScrollRestoration()
    {
        history.scrollRestoration = 'auto';
        shouldBeEqualToString('history.scrollRestoration', 'auto');

        window.scrollTo(123, 456);
        history.pushState(null, '', '#1');
        window.scrollTo(0, 0);
        history.back();
        
        window.setTimeout(function () {
            shouldBe('window.scrollX', '123');
            shouldBe('window.scrollY', '456');

            testManualScrollRestoration();
        }, 0);
    }

    function testManualScrollRestoration()
    {
        history.scrollRestoration = 'manual';
        shouldBeEqualToString('history.scrollRestoration', 'manual');

        window.scrollTo(234, 567);
        history.pushState(null, '', '#2');
        window.scrollTo(333, 555);
        history.back();
        
        window.setTimeout(function() {
            shouldBe('window.scrollX', '333');
            shouldBe('window.scrollY', '555');
            window.scrollTo(0, 0);
            finishJSTest();
        }, 0);
    }

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
