forked from mirrors/gecko-dev
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
42 lines
1.3 KiB
HTML
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>
|