Skip to content

Commit c4bf37f

Browse files
Merge pull request #1212 from lightpanda-io/cdp-dom-outerhtml
cdp: DOM.getouterHTML
2 parents d3522e0 + c2827a0 commit c4bf37f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/cdp/domains/browser.zig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ pub fn processMessage(cmd: anytype) !void {
4444
grantPermissions,
4545
getWindowForTarget,
4646
setDownloadBehavior,
47+
close,
4748
}, cmd.input.action) orelse return error.UnknownMethod;
4849

4950
switch (action) {
@@ -54,6 +55,7 @@ pub fn processMessage(cmd: anytype) !void {
5455
.grantPermissions => return grantPermissions(cmd),
5556
.getWindowForTarget => return getWindowForTarget(cmd),
5657
.setDownloadBehavior => return setDownloadBehavior(cmd),
58+
.close => return cmd.sendResult(null, .{}),
5759
}
5860
}
5961

src/cdp/domains/dom.zig

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const css = @import("../../browser/dom/css.zig");
2424
const parser = @import("../../browser/netsurf.zig");
2525
const dom_node = @import("../../browser/dom/node.zig");
2626
const Element = @import("../../browser/dom/element.zig").Element;
27+
const dump = @import("../../browser/dump.zig");
2728

2829
pub fn processMessage(cmd: anytype) !void {
2930
const action = std.meta.stringToEnum(enum {
@@ -41,6 +42,7 @@ pub fn processMessage(cmd: anytype) !void {
4142
getBoxModel,
4243
requestChildNodes,
4344
getFrameOwner,
45+
getOuterHTML,
4446
}, cmd.input.action) orelse return error.UnknownMethod;
4547

4648
switch (action) {
@@ -58,6 +60,7 @@ pub fn processMessage(cmd: anytype) !void {
5860
.getBoxModel => return getBoxModel(cmd),
5961
.requestChildNodes => return requestChildNodes(cmd),
6062
.getFrameOwner => return getFrameOwner(cmd),
63+
.getOuterHTML => return getOuterHTML(cmd),
6164
}
6265
}
6366

@@ -494,6 +497,27 @@ fn getFrameOwner(cmd: anytype) !void {
494497
return cmd.sendResult(.{ .nodeId = node.id, .backendNodeId = node.id }, .{});
495498
}
496499

500+
fn getOuterHTML(cmd: anytype) !void {
501+
const params = (try cmd.params(struct {
502+
nodeId: ?Node.Id = null,
503+
backendNodeId: ?Node.Id = null,
504+
objectId: ?[]const u8 = null,
505+
includeShadowDOM: bool = false,
506+
})) orelse return error.InvalidParams;
507+
508+
if (params.includeShadowDOM) {
509+
log.warn(.cdp, "not implemented", .{ .feature = "DOM.getOuterHTML: Not implemented includeShadowDOM parameter" });
510+
}
511+
const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded;
512+
513+
const node = try getNode(cmd.arena, bc, params.nodeId, params.backendNodeId, params.objectId);
514+
515+
var aw = std.Io.Writer.Allocating.init(cmd.arena);
516+
try dump.writeNode(node._node, .{}, &aw.writer);
517+
518+
return cmd.sendResult(.{ .outerHTML = aw.written() }, .{});
519+
}
520+
497521
const testing = @import("../testing.zig");
498522

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

0 commit comments

Comments
 (0)