<head>
    <style>
        html, body { margin:0; overflow: hidden; }
    </style>
    <script src="../../resources/js-test.js"></script>
</head>

<div>This tests that a usually overflow: hidden viewport should be scrollable when scaled. Otherwise, you can't get to content
    you would have been able to get to had you not been zoomed it.</div>
<div id="console"></div>

<div style='font-size:40px; height: 1000px;'>
</div>

<script>
    (function() {
        if (!window.testRunner) {
            debug("This test only works in the test runner.");
            return;
        }
        
        jsTestIsAsync = true;

        // Force a layout.
        document.body.offsetLeft;

        if (window.internals)
            window.internals.setPageScaleFactor(2, 0, 0);

        // Note that with CSSOMViewScrollingAPI enabled, the HTML body is potentially scrollable.
        // Hence document.scrollingElement is null and we can't use document.body.scrollTop to
        // retrieve the vertical scroll offset of the viewport.
        // See https://drafts.csswg.org/cssom-view/#potentially-scrollable,
        // https://drafts.csswg.org/cssom-view/#dom-document-scrollingelement
        // and https://drafts.csswg.org/cssom-view/#dom-element-scrolltop
        shouldBe("window.scrollY", "0");

        document.body.onscroll = function() {
            shouldBe("window.scrollY", "100");
            finishJSTest();
        }

        if (window.eventSender) {
            eventSender.mouseMoveTo(100, 100);
            eventSender.mouseScrollBy(0, -5);
        }
    })();
</script>
