Skip to content

Commit 0306fef

Browse files
committed
fix unset heap_ptr
1 parent 46a06a4 commit 0306fef

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/browser/html/document.zig

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)