Skip to content

Commit

Permalink
Introduce GetWebExposedScrollOffsets for scrollingAPIs
Browse files Browse the repository at this point in the history
We have encountered the issue where simply changing zoom levels
can lead to unexpected scrolling on our sample page.
This is due to updating of truncated scroll offset [1]
when FractionalScrollOffset is disabled, which led to a loss of
fractional precision, resulting in a 1px discrepancy
at the webAPI level.

To ensure compatibility with web standards while preserving the
integrity of scroll offsets, this commit introduces GetWebExposedScrollOffsets
for scrollingAPIs (e.g. Element.scrollTop, Element.scrollLeft,
window.scrollX, window.scrollY).
Also by enabling FractionalScrollOffsets, we can address
underlying issue of scroll offset truncation.

[1] https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/scroll/scrollable_area.cc;drc=43e12b162c85779c8350871dac4b319cc1874f16;l=671

Bug: 326122314

Change-Id: I070be67b0e73d925738d556ff0626e6a1119ff00
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5348560
Commit-Queue: Minju Kim <mkim@igalia.com>
Reviewed-by: David Bokan <bokan@chromium.org>
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Reviewed-by: Steve Kobes <skobes@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1288468}
  • Loading branch information
Minju-kim-igalia authored and chromium-wpt-export-bot committed Apr 17, 2024
1 parent b8a81e1 commit 228b075
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions css/css-viewport/zoom/scroll-top-test-with-zoom.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!doctype html>
<title>Scroll Top Test with Zoom</title>
<link rel="help" href="https://drafts.csswg.org/css-viewport/#zoom-property">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#container {
width: 200px;
height: 100px;
border: solid thick;
overflow: auto;
}
</style>
<div id="container">
<div style="width: 100px; height: 2000px"></div>
</div>

<script>
var container = document.getElementById('container');
container.scrollTop = 77;
test(function() {
assert_equals(container.scrollTop, 77, "Initial scrollTop should be 77");
}, "Initial scrollTop with no zoom");

document.body.style.zoom = 1.2;
test(function() {
assert_approx_equals(container.scrollTop, 77, 0.99, "scrollTop should remain consistent within 1 px after zooming in");
}, "scrollTop after increasing zoom level");

document.body.style.zoom = 1;
test(function() {
assert_equals(container.scrollTop, 77, "scrollTop should remain consistent after resetting zoom");
}, "scrollTop after resetting zoom");
done();
</script>

0 comments on commit 228b075

Please sign in to comment.