From 03abf7751aead3d42f5a4e2207567dd3012cee96 Mon Sep 17 00:00:00 2001 From: Martin Robinson Date: Fri, 13 Sep 2024 05:52:17 +0200 Subject: [PATCH] compositor: Do not allow script to scroll past maximum scroll node offsets (#33428) Signed-off-by: Martin Robinson --- components/shared/webrender/display_list.rs | 11 ++++++++++- .../sticky-content.html.ini | 2 -- 2 files changed, 10 insertions(+), 3 deletions(-) delete mode 100644 tests/wpt/meta/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/sticky-content.html.ini diff --git a/components/shared/webrender/display_list.rs b/components/shared/webrender/display_list.rs index e66c3bf8227..635c4fba0f0 100644 --- a/components/shared/webrender/display_list.rs +++ b/components/shared/webrender/display_list.rs @@ -91,7 +91,16 @@ impl ScrollTreeNode { pub fn set_offset(&mut self, new_offset: LayoutVector2D) -> bool { match self.scroll_info { Some(ref mut info) => { - info.offset = new_offset; + let scrollable_width = info.scrollable_size.width; + let scrollable_height = info.scrollable_size.height; + + if scrollable_width > 0. { + info.offset.x = (new_offset.x).min(0.0).max(-scrollable_width); + } + + if scrollable_height > 0. { + info.offset.y = (new_offset.y).min(0.0).max(-scrollable_height); + } true }, _ => false, diff --git a/tests/wpt/meta/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/sticky-content.html.ini b/tests/wpt/meta/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/sticky-content.html.ini deleted file mode 100644 index b391e504aa3..00000000000 --- a/tests/wpt/meta/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/sticky-content.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[sticky-content.html] - expected: FAIL