From 4e892b8b67581c75b0471773762d76eb31f6cac6 Mon Sep 17 00:00:00 2001 From: zac Date: Mon, 8 Sep 2025 21:39:52 +1000 Subject: [PATCH] LibWeb: Prevent StackingContext from hit testing when not visible It exits if not visible, then hit tests children, then hit tests itself if it's `visible_for_hit_testing()`. --- Libraries/LibWeb/Painting/StackingContext.cpp | 3 ++ .../Text/expected/hit_testing/visibility.txt | 6 ++++ .../Text/input/hit_testing/visibility.html | 28 +++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 Tests/LibWeb/Text/expected/hit_testing/visibility.txt create mode 100644 Tests/LibWeb/Text/input/hit_testing/visibility.html diff --git a/Libraries/LibWeb/Painting/StackingContext.cpp b/Libraries/LibWeb/Painting/StackingContext.cpp index ff064714f10..9fcaeaee0e1 100644 --- a/Libraries/LibWeb/Painting/StackingContext.cpp +++ b/Libraries/LibWeb/Painting/StackingContext.cpp @@ -388,6 +388,9 @@ void StackingContext::paint(DisplayListRecordingContext& context) const TraversalDecision StackingContext::hit_test(CSSPixelPoint position, HitTestType type, Function const& callback) const { + if (paintable_box().computed_values().visibility() != CSS::Visibility::Visible) + return TraversalDecision::Continue; + auto const inverse_transform = affine_transform_matrix().inverse().value_or({}); auto const transform_origin = paintable_box().transform_origin(); // NOTE: This CSSPixels -> Float -> CSSPixels conversion is because we can't AffineTransform::map() a CSSPixelPoint. diff --git a/Tests/LibWeb/Text/expected/hit_testing/visibility.txt b/Tests/LibWeb/Text/expected/hit_testing/visibility.txt new file mode 100644 index 00000000000..b1dd488a18f --- /dev/null +++ b/Tests/LibWeb/Text/expected/hit_testing/visibility.txt @@ -0,0 +1,6 @@ +
+ +--- +
+ +--- diff --git a/Tests/LibWeb/Text/input/hit_testing/visibility.html b/Tests/LibWeb/Text/input/hit_testing/visibility.html new file mode 100644 index 00000000000..5073dc0bd68 --- /dev/null +++ b/Tests/LibWeb/Text/input/hit_testing/visibility.html @@ -0,0 +1,28 @@ + + + +
+ + + + + +
+ + + + + +