@@ -229,17 +229,22 @@ pub const HTMLDocument = struct {
229229 pub fn _elementFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! ? * parser.Element {
230230 const ix : i32 = @intFromFloat (@floor (x ));
231231 const iy : i32 = @intFromFloat (@floor (y ));
232- return state .renderer .getElementAtPosition (ix , iy ) orelse return null ;
232+ const element = state .renderer .getElementAtPosition (ix , iy ) orelse return null ;
233+ // TODO if pointer-events set to none the underlying element should be returned (parser.documentGetDocumentElement(self.document);?)
234+ return element ;
233235 }
234236
235- pub fn _elementsFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! []* parser.Element { // empty array or optional array?
237+ pub fn _elementsFromPoint (_ : * parser.DocumentHTML , x : f32 , y : f32 , state : * SessionState ) ! []* parser.Element {
236238 const ix : i32 = @intFromFloat (@floor (x ));
237239 const iy : i32 = @intFromFloat (@floor (y ));
238- const element = state .renderer .getElementAtPosition (ix , iy ) orelse return &.{}; // Or should we return the window element instead of empty -> parser.documentGetDocumentElement(self);
240+ const element = state .renderer .getElementAtPosition (ix , iy ) orelse return &.{};
241+ // TODO if pointer-events set to none the underlying element should be returned (parser.documentGetDocumentElement(self.document);?)
242+
239243 // We need to return either 0 or 1 item, so we cannot fix the size to [1]*parser.Element
240244 // Converting the pointer to a slice []parser.Element is not supported by our framework.
241245 // So instead we just need to allocate the pointer to create a slice of 1.
242- const heap_ptr = try state .arena .create (@TypeOf (element ));
246+ const heap_ptr = try state .call_arena .create (@TypeOf (element ));
247+ heap_ptr .* = element ;
243248 return heap_ptr [0.. 1];
244249 }
245250
@@ -315,11 +320,11 @@ test "Browser.HTML.Document" {
315320 try runner .testCases (&.{
316321 .{ "document.elementFromPoint(0.5, 0.5)" , "null" },
317322 .{ "document.elementsFromPoint(0.5, 0.5)" , "" },
318- .{ "document.createElement('div').getClientRects()" , "[object Object]" },
323+ .{ "document.createElement('div').getClientRects()" , null },
319324 .{ "document.elementFromPoint(0.5, 0.5)" , "[object HTMLDivElement]" },
320- .{ "let elems = document.elementsFromPoint(0.5, 0.5)" , "undefined" },
325+ .{ "let elems = document.elementsFromPoint(0.5, 0.5)" , null },
321326 .{ "elems.length" , "1" },
322- .{ "elems[0]" , "[object Element ]" }, // TBD why is this not: HTMLDivElement?
327+ .{ "elems[0]" , "[object HTMLDivElement ]" },
323328 }, .{});
324329
325330 try runner .testCases (&.{
0 commit comments