fune/testing/web-platform/tests/css/css-scroll-anchoring/infinite-scroll-event.tentative.html
Hiroyuki Ikezoe 6cf6f73da0 Bug 1833758 - Add a pref not to reset max consecutive adjustment count during running APZ async scroll. r=emilio
With this pref we can avoid bug 1561450 without disabling any scroll adjustments
in scroll event handlers because in the specific case of the bug the scroll
adjustment in question is zero length such as

```
  element.style.display = "block";
  element.offsetTop // flush layout
  element.style.display = "none";
```

so it can be caught by our existing consecutive adjustment heuristic. Thus with
the default layout.css.scroll-anchoring.max-consecutive-adjustments value, as of
now it's 10, the case of bug 1561450 will stop firing scroll events after
5 (= 10/2) additional scroll event observations.

Differential Revision: https://phabricator.services.mozilla.com/D178898
2023-05-29 22:40:16 +00:00

42 lines
1.3 KiB
HTML

<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1561450">
<link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers">
<style>
body { margin: 0 }
.content {
height: 45vh;
background: lightblue;
}
</style>
<div class="content"></div>
<div id="hidden" style="display: none; height: 200px"></div>
<div class="content"></div>
<div class="content"></div>
<div class="content"></div>
<script>
let count = 0;
const t = async_test("Scroll adjustments don't keep happening with 0-length adjustments triggered by a single scroll operation");
onscroll = t.step_func(function() {
++count;
hidden.style.display = "block";
hidden.offsetTop;
hidden.style.display = "none";
let currentCount = count;
requestAnimationFrame(t.step_func(function() {
requestAnimationFrame(t.step_func(function() {
if (currentCount == count) {
t.done();
}
}));
}));
});
window.onload = t.step_func(function() {
window.scrollTo(0, document.documentElement.scrollHeight);
window.scrollBy(0, -200);
});
</script>