chromium/third_party/blink/web_tests/fast/dom/element-bounding-client-rect-relative-to-viewport.html

<!DOCTYPE html>
<script src="../../resources/js-test.js"></script>
<style>
    #spacer {
        width: 1000px;
        height: 1000px;
    }
    #target {
        width: 100px;
        height: 100px;
        position: absolute;
        left: 200px;
        top: 200px;
        background-color: green;
        z-index: -1;
    }
    body {
        margin: 0px;
    }
</style>
<script>
    var rect;
    var rectAfterScaleAndScroll;
    var layoutXScroll = 20;
    var layoutYScroll = 30;
    var xPos = 200;
    var yPos = 200;
    var visualXScroll = 40;
    var visualYScroll = 50;
    var expectedX = xPos - layoutXScroll;
    var expectedY = yPos - layoutYScroll;

    onload = function() {
        description("This test ensures that getBoundingClientRect remains relative to the layout viewport under page scale.");

        var target = document.getElementById('target');
        rect = target.getBoundingClientRect();

        shouldBe('rect.left', 'xPos');
        shouldBe('rect.top', 'yPos');

        if (window.internals) {
            window.scrollTo(layoutXScroll, layoutYScroll);

            internals.setPageScaleFactor(2.0);
            internals.setVisualViewportOffset(visualXScroll, visualYScroll);
        }

        debug(' ');
        debug('===getBoundingClientRect===');
        debug(' ');
        rectAfterScaleAndScroll = target.getBoundingClientRect();

        shouldBe('rectAfterScaleAndScroll.left', 'expectedX');
        shouldBe('rectAfterScaleAndScroll.top', 'expectedY');
        shouldBe('rectAfterScaleAndScroll.width', 'rect.width');
        shouldBe('rectAfterScaleAndScroll.height', 'rect.height');

        rectAfterScaleAndScroll = target.getClientRects()[0];
        debug(' ');
        debug('===getClientRects===');
        debug(' ');

        shouldBe('rectAfterScaleAndScroll.left', 'expectedX');
        shouldBe('rectAfterScaleAndScroll.top', 'expectedY');
        shouldBe('rectAfterScaleAndScroll.width', 'rect.width');
        shouldBe('rectAfterScaleAndScroll.height', 'rect.height');
    }
</script>
<div id="target"></div>
<div id="spacer"></div>