From 263dab0bdfd0233c2ab5eacfc99035f34760afa2 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 13 Nov 2025 18:29:13 +0100 Subject: [PATCH 1/2] cdp: add DOM.getOuterHTML --- src/cdp/domains/dom.zig | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/cdp/domains/dom.zig b/src/cdp/domains/dom.zig index 3bf894c8..9ef03819 100644 --- a/src/cdp/domains/dom.zig +++ b/src/cdp/domains/dom.zig @@ -24,6 +24,7 @@ const css = @import("../../browser/dom/css.zig"); const parser = @import("../../browser/netsurf.zig"); const dom_node = @import("../../browser/dom/node.zig"); const Element = @import("../../browser/dom/element.zig").Element; +const dump = @import("../../browser/dump.zig"); pub fn processMessage(cmd: anytype) !void { const action = std.meta.stringToEnum(enum { @@ -41,6 +42,7 @@ pub fn processMessage(cmd: anytype) !void { getBoxModel, requestChildNodes, getFrameOwner, + getOuterHTML, }, cmd.input.action) orelse return error.UnknownMethod; switch (action) { @@ -58,6 +60,7 @@ pub fn processMessage(cmd: anytype) !void { .getBoxModel => return getBoxModel(cmd), .requestChildNodes => return requestChildNodes(cmd), .getFrameOwner => return getFrameOwner(cmd), + .getOuterHTML => return getOuterHTML(cmd), } } @@ -494,6 +497,27 @@ fn getFrameOwner(cmd: anytype) !void { return cmd.sendResult(.{ .nodeId = node.id, .backendNodeId = node.id }, .{}); } +fn getOuterHTML(cmd: anytype) !void { + const params = (try cmd.params(struct { + nodeId: ?Node.Id = null, + backendNodeId: ?Node.Id = null, + objectId: ?[]const u8 = null, + includeShadowDOM: bool = false, + })) orelse return error.InvalidParams; + + if (params.includeShadowDOM) { + log.warn(.cdp, "not implemented", .{ .feature = "DOM.getOuterHTML: Not implemented includeShadowDOM parameter" }); + } + const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded; + + const node = try getNode(cmd.arena, bc, params.nodeId, params.backendNodeId, params.objectId); + + var aw = std.Io.Writer.Allocating.init(cmd.arena); + try dump.writeNode(node._node, .{}, &aw.writer); + + return cmd.sendResult(.{ .outerHTML = aw.written() }, .{}); +} + const testing = @import("../testing.zig"); test "cdp.dom: getSearchResults unknown search id" { From c2827a0f16454231e4fd2164b891828d97b8e0f4 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 13 Nov 2025 18:29:38 +0100 Subject: [PATCH 2/2] cdp: add browser.Close but ignore it --- src/cdp/domains/browser.zig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cdp/domains/browser.zig b/src/cdp/domains/browser.zig index f86feefe..6a4f7b42 100644 --- a/src/cdp/domains/browser.zig +++ b/src/cdp/domains/browser.zig @@ -44,6 +44,7 @@ pub fn processMessage(cmd: anytype) !void { grantPermissions, getWindowForTarget, setDownloadBehavior, + close, }, cmd.input.action) orelse return error.UnknownMethod; switch (action) { @@ -54,6 +55,7 @@ pub fn processMessage(cmd: anytype) !void { .grantPermissions => return grantPermissions(cmd), .getWindowForTarget => return getWindowForTarget(cmd), .setDownloadBehavior => return setDownloadBehavior(cmd), + .close => return cmd.sendResult(null, .{}), } }