<html>
    <head>
        <title>Bug 25313 : Missing scrollbars in GMail</title>
        <script>
            if (window.testRunner)
                testRunner.dumpAsText();

            function inject()
            {
                var content = '<html><head><style>' +
                    'html,body { margin: 0; overflow: hidden; height: 100%; width: 100% } ' +
                    'html.scroll { overflow-x: auto; overflow-y: scroll; } ' +
                    '</style><body><div id="offender" style="height: 900px;"></div></body></html>';
                var injectee = document.getElementById("injectee");
                var doc = injectee.contentDocument;
                // inject an iframe
                doc.open();
                doc.write(content);
                doc.close();
                doc.getElementsByTagName("html")[0].className = "scroll";
                // tickle FrameView::updateScrollbars()
                doc.getElementById("offender").scrollIntoView(false);
                // trigger resize
                injectee.style.width = "400px";
                // measure to see if there is a scrollbar. Pass if there is.
                document.getElementById("test").innerHTML = doc.body.offsetWidth < 400 ? "TEST PASSED" : "TEST FAILED";
            }
        </script>
    </head>
    <body>
        <p>
            Tests <kbd>FrameView</kbd>'s behavior when only one of the scrollbars is made <kbd>ScrollbarAlwaysOn</kbd> dynamically.
            The correct behavior is not to remove this scrollbar, which is what this test checks for.
        </p>
        <div id="test">
             <iframe style="height:100%" id="injectee" onload="inject()">
        </div>
    </body>
</html>
