mirror of
https://github.com/HeyPuter/firefox.git
synced 2026-11-13 20:14:57 -10:00
While we are walking up the frame tree during for calculating the frame bounds, there are cases that we reach to the top viewport frame. Thus when we walk up the frame tree to invoke ScrollToShowRect for each scroll container, we fail the check introduced in bug 1943865. Just like we did in bug 1943865, this commit has also two tests, one is a web platform test, the other is a mochitest. But unlike bug 1943865, the mochitest in this commit doesn't use zoomToFocusedInput since zoomToFocusedInput ends up calling another PresShell::ScrollFrameIntoView call via Selection::ScrollIntoView [1], which wallpapers this bug, i.e the mochitest will get pass without this proper fix. [1] https://searchfox.org/mozilla-central/rev/cb46268bc26b0cd9e91e625aa92aaa5a6f047b9d/dom/base/Selection.cpp#3654 Differential Revision: https://phabricator.services.mozilla.com/D240407
68 lines
2.0 KiB
HTML
68 lines
2.0 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/resources/testdriver.js"></script>
|
|
<script src="/resources/testdriver-actions.js"></script>
|
|
<script src="/resources/testdriver-vendor.js"></script>
|
|
<script src="support/action-utils.js"></script>
|
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1951021">
|
|
<link rel="help" href="https://drafts.csswg.org/cssom-view/#perform-a-scroll">
|
|
<style>
|
|
body {
|
|
margin: 0px;
|
|
padding: 0px;
|
|
}
|
|
#container {
|
|
position: fixed;
|
|
width: 100%;
|
|
height: 100%;
|
|
top: 0px;
|
|
left: 0px;
|
|
}
|
|
#banner {
|
|
position: fixed;
|
|
bottom: 0px;
|
|
left: 0px;
|
|
right: 0px;
|
|
background-color: blue;
|
|
}
|
|
</style>
|
|
<div id="anchor"></div>
|
|
<div id="container">
|
|
<aside id="banner"></aside>
|
|
</div>
|
|
<script>
|
|
promise_test(async t => {
|
|
assert_equals(window.scrollY, 0);
|
|
assert_equals(visualViewport.scale, 1.0);
|
|
assert_equals(visualViewport.pageTop, 0);
|
|
|
|
// Pinch zoom in this document.
|
|
await pinch_zoom_action();
|
|
|
|
assert_greater_than(visualViewport.scale, 1.0);
|
|
|
|
// Suppose that the pinch zoom-in gesture at the center of the document did
|
|
// move the visual viewport offset.
|
|
assert_greater_than(visualViewport.pageTop, 0);
|
|
|
|
// Move to zero offset of the visual viewport.
|
|
let scrollPromise =
|
|
new Promise(resolve => visualViewport.addEventListener("scroll", resolve));
|
|
document.querySelector('#anchor').scrollIntoView({ behavior: "instant" });
|
|
await scrollPromise;
|
|
|
|
assert_equals(visualViewport.pageTop, 0);
|
|
|
|
// Now trigger a scrollIntoView call to an element inside nested position:fixed elements.
|
|
scrollPromise =
|
|
new Promise(resolve => visualViewport.addEventListener("scroll", resolve));
|
|
document.querySelector("#banner").scrollIntoView({ behavior: "instant" });
|
|
await scrollPromise;
|
|
|
|
assert_greater_than(visualViewport.pageTop, 0);
|
|
}, "Element.scrollIntoView scrolls visually to an element in nested position: fixed elements");
|
|
</script>
|