<!DOCTYPE html>
<style>
    body {
        height: 2000px;
        width: 2000px;
    }
    #frame {
        height: 500px;
        width: 200px;
    }
</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script>
    var pageScaleFactor = 2;
    var scrollbarThicknessInCSSPixels;

    function frameViewport() {
        var frame = document.getElementById("frame");
        return frame.contentWindow.visualViewport;
    }

    var test = async_test('Verify viewport dimensions for iframe.');

    var doAfterZooming = test.step_func(function() {
        // The page scale on the root frame shouldn't affect the viewport/scale
        // values in the iframe.
        var frame = document.getElementById("frame");
        frame.contentWindow.scrollTo(10, 15);
        assert_equals(frameViewport().width, 200 - scrollbarThicknessInCSSPixels, "width");
        assert_equals(frameViewport().height, 500 - scrollbarThicknessInCSSPixels, "height");
        assert_equals(frameViewport().pageLeft, 10, "pageLeft");
        assert_equals(frameViewport().pageTop, 15, "pageTop");
        assert_equals(frameViewport().offsetLeft, 0, "offsetLeft");
        assert_equals(frameViewport().offsetTop, 0, "offsetTop");
        assert_equals(frameViewport().scale, 1, "scale");

        test.done();
    });

    function getUIScript() {
        return `(function() {
            uiController.zoomToScale(${pageScaleFactor}, function() {
                uiController.uiScriptComplete(uiController.zoomScale);
            });
        })();`;
    }

    window.onload = function() {
        scrollbarThicknessInCSSPixels = window.innerWidth - document.documentElement.clientWidth;
        testRunner.runUIScript(getUIScript(), function(zoomScale) {
            doAfterZooming();
        });
    };
</script>
<iframe id="frame" srcdoc="
<style>
  body {
    width: 2000px;
    height: 2000px;
  }
</style>
"></iframe>
