<html>
    <head>
        <style>
            body {
                height: 10000px;
            }
            #bottom-bar {
                position: fixed;
                height: 120px;
                width: 100%;
                background-color: green;
                bottom: 0;
                left: 0;
            }
            /* This fixed element does not cover the entire width and should be ignored. */
            #ignored-right {
                position: fixed;
                width: 20px;
                height: 5000px;
                background-color: red;
                right: 0;
                top: 0;
            }
            /* This fixed element does not cover an edge and should be ignored. */
            #ignored-center {
                position: fixed;
                width: 100%;
                height: 150px;
                background-color: red;
                left: 0;
                top: 50%;
            }
        </style>
        <script src="../resources/js-test-pre.js"></script>
    </head>
    <body>
        <div id="bottom-bar"></div>
        <div id="ignored-right"></div>
        <div id="ignored-center"></div>
        <script>
            description("Test that scrolling backward by page excludes the area taken by fixed element covering the full width.");

            jsTestIsAsync = true;

            var failTimeoutId;
            function test() {
                if (window.eventSender) {
                    // Force the first layout to avoid the suppressed scrollbar cases.
                    scratch = document.documentElement.offsetWidth;
                    scrollBy(0, 1000);

                    // Avoid special cases for being "onload".
                    setTimeout(function() {
                        eventSender.keyDown(' ', ['shiftKey']);
                    } , 0);

                    failTimeoutId = setTimeout(function() {
                        testFailed("The scrollview failed to scroll in response to the event.");
                        debug("window.scrollY = " + window.scrollY + " excepted value around " + (1000 - (window.innerHeight - 120)));
                        finishJSTest();
                    }, 1000);
                }
            }

            window.addEventListener("scroll", function() {
                if (window.scrollY == 1000 - (window.innerHeight - 120)) {
                    testPassed("Scrolled to " + window.scrollY);
                    clearTimeout(failTimeoutId);
                    finishJSTest();
                }
            })
            window.addEventListener("load", test);
        </script>
        <script src="../resources/js-test-post.js"></script>
    </body>
</html>
