blob: cf27356b4e1369bfe34af722ad52b6fe278b7035 [file] [log] [blame]
<!DOCTYPE html>
<script src="../../../../../resources/testharness.js"></script>
<script src="../../../../../resources/testharnessreport.js"></script>
<script src="../../../../../resources/gesture-util.js"></script>
<div style="margin: 0px 0; width: 100px; height: 1000px; background-color: blue;"></div>
<script>
var EPSILON = 0.001;
var t = async_test("Scrolling with a scaled visual viewport");
// This test verifies scrolling of the page while pinch-zoomed in. We ensure
// that the scrolls target the correct (visual/layout) viewport and that
// bubbling between the two works correctly.
window.onload = t.step_func(async function() {
await waitForCompositorCommit();
await pinchBy(2, 400, 599, SPEED_INSTANT, GestureSourceType.TOUCHPAD_INPUT);
await waitForCompositorCommit();
assert_approx_equals(window.visualViewport.scale, 2.0, EPSILON);
assert_approx_equals(window.visualViewport.offsetLeft, 200, EPSILON);
assert_approx_equals(window.visualViewport.offsetTop, 300, EPSILON);
// We're already within |EPSILON| of the desired offset, but we'll set it
// here to avoid rounding issues later in the test.
window.internals.setVisualViewportOffset(200, 300);
await waitForCompositorCommit();
// Scroll down, this will affect only the layout viewport.
await smoothScroll(2, 400, 300, GestureSourceType.TOUCHPAD_INPUT, "down", SPEED_INSTANT);
await waitForCompositorCommit();
assert_equals(window.scrollY, 1);
// Scroll right, this will affect only the visual viewport.
await smoothScroll(2, 400, 300, GestureSourceType.TOUCHPAD_INPUT, "right", SPEED_INSTANT);
await waitForCompositorCommit();
assert_equals(window.visualViewport.offsetLeft, 201);
// Move the visual viewport up by a pixel so that the next gesture will
// bubble.
window.internals.setVisualViewportOffset(201, 299);
await waitForCompositorCommit();
// Scroll back diagonally. This will affect both viewports by bubbling from
// the visual to the layout.
await smoothScroll(4, 400, 300, GestureSourceType.TOUCHPAD_INPUT, "downleft", SPEED_INSTANT);
await waitForCompositorCommit();
assert_equals(window.scrollY, 2);
assert_equals(window.visualViewport.offsetTop, 300);
assert_equals(window.visualViewport.offsetLeft, 199);
t.done();
});
</script>