@@ -20,6 +20,7 @@ const std = @import("std");
20
20
const parser = @import ("netsurf" );
21
21
const Node = @import ("../Node.zig" );
22
22
const css = @import ("../../dom/css.zig" );
23
+ const dom_node = @import ("../../dom/node.zig" );
23
24
24
25
pub fn processMessage (cmd : anytype ) ! void {
25
26
const action = std .meta .stringToEnum (enum {
@@ -129,99 +130,17 @@ fn resolveNode(cmd: anytype) !void {
129
130
}
130
131
131
132
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 ();
220
141
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 ) } }, .{});
225
144
}
226
145
227
146
const testing = @import ("../testing.zig" );
0 commit comments