@@ -216,17 +216,22 @@ pub const HTMLDocument = struct {
216216 pub fn _elementFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! ? * parser.Element {
217217 const ix : i32 = @intFromFloat (@floor (x ));
218218 const iy : i32 = @intFromFloat (@floor (y ));
219- return state .renderer .getElementAtPosition (ix , iy ) orelse return null ;
219+ const element = state .renderer .getElementAtPosition (ix , iy ) orelse return null ;
220+ // TODO if pointer-events set to none the underlying element should be returned (parser.documentGetDocumentElement(self.document);?)
221+ return element ;
220222 }
221223
222- pub fn _elementsFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! []* parser.Element { // empty array or optional array?
224+ pub fn _elementsFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! []* parser.Element {
223225 const ix : i32 = @intFromFloat (@floor (x ));
224226 const iy : i32 = @intFromFloat (@floor (y ));
225- const element = state .renderer .getElementAtPosition (ix , iy ) orelse return &.{}; // Or should we return the window element instead of empty -> parser.documentGetDocumentElement(self);
227+ const element = state .renderer .getElementAtPosition (ix , iy ) orelse return &.{};
228+ // TODO if pointer-events set to none the underlying element should be returned (parser.documentGetDocumentElement(self.document);?)
229+
226230 // We need to return either 0 or 1 item, so we cannot fix the size to [1]*parser.Element
227231 // Converting the pointer to a slice []parser.Element is not supported by our framework.
228232 // So instead we just need to allocate the pointer to create a slice of 1.
229- const heap_ptr = try state .arena .create (@TypeOf (element ));
233+ const heap_ptr = try state .call_arena .create (@TypeOf (element ));
234+ heap_ptr .* = element ;
230235 return heap_ptr [0.. 1];
231236 }
232237};
@@ -286,11 +291,11 @@ test "Browser.HTML.Document" {
286291 try runner .testCases (&.{
287292 .{ "document.elementFromPoint(0.5, 0.5)" , "null" },
288293 .{ "document.elementsFromPoint(0.5, 0.5)" , "" },
289- .{ "document.createElement('div').getClientRects()" , "[object Object]" },
294+ .{ "document.createElement('div').getClientRects()" , null },
290295 .{ "document.elementFromPoint(0.5, 0.5)" , "[object HTMLDivElement]" },
291- .{ "let elems = document.elementsFromPoint(0.5, 0.5)" , "undefined" },
296+ .{ "let elems = document.elementsFromPoint(0.5, 0.5)" , null },
292297 .{ "elems.length" , "1" },
293- .{ "elems[0]" , "[object Element ]" }, // TBD why is this not: HTMLDivElement?
298+ .{ "elems[0]" , "[object HTMLDivElement ]" },
294299 }, .{});
295300
296301 try runner .testCases (&.{
0 commit comments