From e8b77cd890f7348c7875f596595c0095a94e4f86 Mon Sep 17 00:00:00 2001
From: FAIpang <73394302+FAIpang@users.noreply.github.com>
Date: Thu, 20 Aug 2026 12:28:26 +0800
Subject: [PATCH 1/2] webapi: reject elementFromPoint outside viewport
Add viewport bounds check to elementFromPoint function.
---
src/browser/webapi/Document.zig | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/browser/webapi/Document.zig b/src/browser/webapi/Document.zig
index a90c7d14aa..64e1f6d6b6 100644
--- a/src/browser/webapi/Document.zig
+++ b/src/browser/webapi/Document.zig
@@ -875,6 +875,16 @@ pub fn moveBefore(self: *Document, node: js.Value, child: js.Value, frame: *Fram
}
pub fn elementFromPoint(self: *Document, x: f64, y: f64, frame: *Frame) !?*Element {
+ // CSSOM View requires the public hit-test APIs to reject coordinates
+ // outside the viewport before walking the document. Keep this check here
+ // so elementFromVerticalPoint can continue using document coordinates.
+ const viewport = frame._page.getViewport();
+ const width: f64 = @floatFromInt(viewport.width);
+ const height: f64 = @floatFromInt(viewport.height);
+ if (x < 0 or y < 0 or x > width or y > height) {
+ return null;
+ }
+
return self.elementFromPointImpl(x, y, false, frame);
}
From 90017785893b0f9fd2c95ada7779ba31d0ec0069 Mon Sep 17 00:00:00 2001
From: FAIpang <73394302+FAIpang@users.noreply.github.com>
Date: Thu, 20 Aug 2026 12:31:23 +0800
Subject: [PATCH 2/2] test: cover elementFromPoint viewport bounds
---
.../tests/document/element_from_point.html | 40 +++++++++++++++----
1 file changed, 32 insertions(+), 8 deletions(-)
diff --git a/src/browser/tests/document/element_from_point.html b/src/browser/tests/document/element_from_point.html
index 0ee07debaf..7fde15421b 100644
--- a/src/browser/tests/document/element_from_point.html
+++ b/src/browser/tests/document/element_from_point.html
@@ -68,9 +68,24 @@
@@ -209,11 +224,20 @@