@@ -20,6 +20,7 @@ const std = @import("std");
2020const parser = @import ("netsurf" );
2121const Node = @import ("../Node.zig" );
2222const css = @import ("../../dom/css.zig" );
23+ const dom_node = @import ("../../dom/node.zig" );
2324
2425pub fn processMessage (cmd : anytype ) ! void {
2526 const action = std .meta .stringToEnum (enum {
@@ -129,99 +130,17 @@ fn resolveNode(cmd: anytype) !void {
129130 }
130131
131132 const bc = cmd .browser_context orelse return error .BrowserContextNotLoaded ;
132- const node = bc .node_registry .lookup_by_id .get (params .nodeId .? ).? ;
133-
134- // How best to do this? Create a functions that takes a functions(wrapObject), does all the switching at every level and applies the given function to the leav object?
135- const remote_object = try switch (try parser .nodeType (node ._node )) {
136- .element = > blk : {
137- const elem : * align (@alignOf (* parser .Element )) parser.Element = @alignCast (@as (* parser .Element , @ptrCast (node ._node )));
138- const tag = try parser .elementHTMLGetTagType (@as (* parser .ElementHTML , @ptrCast (elem )));
139- break :blk switch (tag ) {
140- .abbr , .acronym , .address , .article , .aside , .b , .basefont , .bdi , .bdo , .bgsound , .big , .center , .cite , .code , .dd , .details , .dfn , .dt , .em , .figcaption , .figure , .footer , .header , .hgroup , .i , .isindex , .keygen , .kbd , .main , .mark , .marquee , .menu , .menuitem , .nav , .nobr , .noframes , .noscript , .rp , .rt , .ruby , .s , .samp , .section , .small , .spacer , .strike , .strong , .sub , .summary , .sup , .tt , .u , .wbr , ._var = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .ElementHTML , @ptrCast (elem ))),
141- .a = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Anchor , @ptrCast (elem ))),
142- .applet = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Applet , @ptrCast (elem ))),
143- .area = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Area , @ptrCast (elem ))),
144- .audio = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Audio , @ptrCast (elem ))),
145- .base = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Base , @ptrCast (elem ))),
146- .body = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Body , @ptrCast (elem ))),
147- .br = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .BR , @ptrCast (elem ))),
148- .button = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Button , @ptrCast (elem ))),
149- .canvas = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Canvas , @ptrCast (elem ))),
150- .dl = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .DList , @ptrCast (elem ))),
151- .data = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Data , @ptrCast (elem ))),
152- .datalist = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .DataList , @ptrCast (elem ))),
153- .dialog = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Dialog , @ptrCast (elem ))),
154- .dir = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Directory , @ptrCast (elem ))),
155- .div = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Div , @ptrCast (elem ))),
156- .embed = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Embed , @ptrCast (elem ))),
157- .fieldset = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .FieldSet , @ptrCast (elem ))),
158- .font = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Font , @ptrCast (elem ))),
159- .form = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Form , @ptrCast (elem ))),
160- .frame = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Frame , @ptrCast (elem ))),
161- .frameset = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .FrameSet , @ptrCast (elem ))),
162- .hr = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .HR , @ptrCast (elem ))),
163- .head = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Head , @ptrCast (elem ))),
164- .h1 , .h2 , .h3 , .h4 , .h5 , .h6 = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Heading , @ptrCast (elem ))),
165- .html = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Html , @ptrCast (elem ))),
166- .iframe = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .IFrame , @ptrCast (elem ))),
167- .img = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Image , @ptrCast (elem ))),
168- .input = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Input , @ptrCast (elem ))),
169- .li = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .LI , @ptrCast (elem ))),
170- .label = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Label , @ptrCast (elem ))),
171- .legend = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Legend , @ptrCast (elem ))),
172- .link = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Link , @ptrCast (elem ))),
173- .map = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Map , @ptrCast (elem ))),
174- .meta = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Meta , @ptrCast (elem ))),
175- .meter = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Meter , @ptrCast (elem ))),
176- .ins , .del = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Mod , @ptrCast (elem ))),
177- .ol = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .OList , @ptrCast (elem ))),
178- .object = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Object , @ptrCast (elem ))),
179- .optgroup = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .OptGroup , @ptrCast (elem ))),
180- .option = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Option , @ptrCast (elem ))),
181- .output = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Output , @ptrCast (elem ))),
182- .p = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Paragraph , @ptrCast (elem ))),
183- .param = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Param , @ptrCast (elem ))),
184- .picture = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Picture , @ptrCast (elem ))),
185- .pre = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Pre , @ptrCast (elem ))),
186- .progress = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Progress , @ptrCast (elem ))),
187- .blockquote , .q = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Quote , @ptrCast (elem ))),
188- .script = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Script , @ptrCast (elem ))),
189- .select = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Select , @ptrCast (elem ))),
190- .source = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Source , @ptrCast (elem ))),
191- .span = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Span , @ptrCast (elem ))),
192- .style = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Style , @ptrCast (elem ))),
193- .table = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Table , @ptrCast (elem ))),
194- .caption = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TableCaption , @ptrCast (elem ))),
195- .th , .td = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TableCell , @ptrCast (elem ))),
196- .col , .colgroup = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TableCol , @ptrCast (elem ))),
197- .tr = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TableRow , @ptrCast (elem ))),
198- .thead , .tbody , .tfoot = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TableSection , @ptrCast (elem ))),
199- .template = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Template , @ptrCast (elem ))),
200- .textarea = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .TextArea , @ptrCast (elem ))),
201- .time = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Time , @ptrCast (elem ))),
202- .title = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Title , @ptrCast (elem ))),
203- .track = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Track , @ptrCast (elem ))),
204- .ul = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .UList , @ptrCast (elem ))),
205- .video = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Video , @ptrCast (elem ))),
206- .undef = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Unknown , @ptrCast (elem ))),
207- };
208- },
209- .comment = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Comment , @ptrCast (node ._node ))), // TODO sub types
210- .text = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Text , @ptrCast (node ._node ))),
211- .cdata_section = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .CDATASection , @ptrCast (node ._node ))),
212- .processing_instruction = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .ProcessingInstruction , @ptrCast (node ._node ))),
213- .document = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .DocumentHTML , @ptrCast (node ._node ))),
214- .document_type = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .DocumentType , @ptrCast (node ._node ))),
215- .attribute = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .Attribute , @ptrCast (node ._node ))),
216- .document_fragment = > bc .session .inspector .wrapObject (& bc .session .env , @as (* parser .DocumentFragment , @ptrCast (node ._node ))),
217- else = > @panic ("node type not handled" ),
218- };
219- defer remote_object .deinit ();
133+ const node = bc .node_registry .lookup_by_id .get (params .nodeId .? ) orelse return error .UnknownNode ;
134+
135+ // node._node is a *parder.Node we need this to be able to find its most derived type e.g. Node -> Element -> HTMLElement
136+ // So we use the Node.Union when retrieve the value from the environment
137+ const jsValue = try bc .session .env .findOrAddValue (try dom_node .Node .toInterface (node ._node ));
138+ const groupName = "AGroupName" ; // Temporary default, most likely the same as objectGroup
139+ const remoteObject = try bc .session .inspector .getRemoteObject (& bc .session .env , jsValue , groupName );
140+ defer remoteObject .deinit ();
220141
221- var arena = std .heap .ArenaAllocator .init (cmd .cdp .allocator );
222- const alloc = arena .allocator ();
223- defer arena .deinit ();
224- return cmd .sendResult (.{ .object = .{ .type = try remote_object .getType (alloc ), .subtype = try remote_object .getSubtype (alloc ), .className = try remote_object .getClassName (alloc ), .description = try remote_object .getDescription (alloc ), .objectId = try remote_object .getObjectId (alloc ) } }, .{});
142+ const arena = cmd .arena ;
143+ return cmd .sendResult (.{ .object = .{ .type = try remoteObject .getType (arena ), .subtype = try remoteObject .getSubtype (arena ), .className = try remoteObject .getClassName (arena ), .description = try remoteObject .getDescription (arena ), .objectId = try remoteObject .getObjectId (arena ) } }, .{});
225144}
226145
227146const testing = @import ("../testing.zig" );
0 commit comments