Skip to content

Commit af8b947

Browse files
committed
describeNode
1 parent f034065 commit af8b947

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

src/cdp/domains/dom.zig

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub fn processMessage(cmd: anytype) !void {
3030
getSearchResults,
3131
discardSearchResults,
3232
resolveNode,
33+
describeNode,
3334
}, cmd.input.action) orelse return error.UnknownMethod;
3435

3536
switch (action) {
@@ -39,6 +40,7 @@ pub fn processMessage(cmd: anytype) !void {
3940
.getSearchResults => return getSearchResults(cmd),
4041
.discardSearchResults => return discardSearchResults(cmd),
4142
.resolveNode => return resolveNode(cmd),
43+
.describeNode => return describeNode(cmd),
4244
}
4345
}
4446

@@ -148,6 +150,37 @@ fn resolveNode(cmd: anytype) !void {
148150
} }, .{});
149151
}
150152

153+
fn describeNode(cmd: anytype) !void {
154+
const params = (try cmd.params(struct {
155+
nodeId: ?Node.Id = null,
156+
backendNodeId: ?Node.Id = null,
157+
objectId: ?[]const u8 = null,
158+
depth: ?u32 = null,
159+
pierce: ?bool = null,
160+
})) orelse return error.InvalidParams;
161+
if (params.backendNodeId != null or params.depth != null or params.pierce != null) {
162+
return error.NotYetImplementedParams;
163+
}
164+
165+
const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded;
166+
167+
if (params.nodeId != null) {
168+
const node = bc.node_registry.lookup_by_id.get(params.nodeId.?) orelse return error.NodeNotFound;
169+
return cmd.sendResult(.{ .root = bc.nodeWriter(node, .{}) }, .{});
170+
} else if (params.objectId != null) {
171+
const jsValue = try bc.session.inspector.getValueByObjectId(cmd.arena, params.objectId.?);
172+
const entry = jsValue.externalEntry().?;
173+
const sub_type = entry.sub_type.?;
174+
175+
if (!std.mem.eql(u8, sub_type[0..std.mem.len(sub_type)], "node")) {
176+
return error.ObjectIdIsNotANode;
177+
}
178+
const node = try bc.node_registry.register(@ptrCast(entry.ptr));
179+
return cmd.sendResult(.{ .root = bc.nodeWriter(node, .{}) }, .{});
180+
}
181+
return error.MissingParams;
182+
}
183+
151184
const testing = @import("../testing.zig");
152185

153186
test "cdp.dom: getSearchResults unknown search id" {

0 commit comments

Comments
 (0)