@@ -109,28 +109,49 @@ const Node = struct {
109109 nodeName : []const u8 = "" ,
110110 localName : []const u8 = "" ,
111111 nodeValue : []const u8 = "" ,
112- childNodeCount : u32 ,
112+ childNodeCount : ? u32 = null ,
113113 children : ? []const Node = null ,
114114 documentURL : ? []const u8 = null ,
115115 baseURL : ? []const u8 = null ,
116116 xmlVersion : []const u8 = "" ,
117117 compatibilityMode : []const u8 = "NoQuirksMode" ,
118118 isScrollable : bool = false ,
119119
120- fn init (n : * parser.Node , id : NodeId ) ! Node {
121- const children = try parser .nodeGetChildNodes (n );
122- const ln = try parser .nodeListLength (children );
123-
120+ fn init (n : * parser.Node , nlist : * NodeList ) ! Node {
121+ const id = try nlist .set (n );
124122 return .{
125123 .nodeId = id ,
126124 .backendNodeId = id ,
127125 .nodeType = @intFromEnum (try parser .nodeType (n )),
128126 .nodeName = try parser .nodeName (n ),
129127 .localName = try parser .nodeLocalName (n ),
130128 .nodeValue = try parser .nodeValue (n ) orelse "" ,
131- .childNodeCount = ln ,
132129 };
133130 }
131+
132+ fn initChildren (
133+ self : * Node ,
134+ alloc : std.mem.Allocator ,
135+ n : * parser.Node ,
136+ nlist : * NodeList ,
137+ ) ! std. ArrayList (Node ) {
138+ const children = try parser .nodeGetChildNodes (n );
139+ const ln = try parser .nodeListLength (children );
140+ self .childNodeCount = ln ;
141+
142+ var list = try std .ArrayList (Node ).initCapacity (alloc , ln );
143+
144+ var i : u32 = 0 ;
145+ while (i < ln ) {
146+ defer i += 1 ;
147+ const child = try parser .nodeListItem (children , i ) orelse continue ;
148+ try list .append (try Node .init (child , nlist ));
149+ }
150+
151+ self .children = list .items ;
152+
153+ return list ;
154+ }
134155};
135156
136157// https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-getDocument
@@ -155,17 +176,22 @@ fn getDocument(
155176 if (page .doc == null ) return error .NoDocument ;
156177
157178 const node = parser .documentToNode (page .doc .? );
158- const id = try ctx .state .nodelist .set (node );
179+ var n = try Node .init (node , & ctx .state .nodelist );
180+ var list = try n .initChildren (alloc , node , & ctx .state .nodelist );
181+ defer list .deinit ();
159182
160183 // output
161184 const Resp = struct {
162185 root : Node ,
163186 };
164187 const resp : Resp = .{
165- .root = try Node . init ( node , id ) ,
188+ .root = n ,
166189 };
167190
168- return result (alloc , input .id , Resp , resp , input .sessionId );
191+ const res = try result (alloc , input .id , Resp , resp , input .sessionId );
192+ try ctx .send (res );
193+
194+ return "" ;
169195}
170196
171197pub const NodeSearch = struct {
0 commit comments