From 8e315e551aa1b1f67efdb85e97da54bf37b28a83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Wed, 25 Mar 2026 09:30:06 +0900 Subject: [PATCH] forms: extract form node registration logic --- src/browser/forms.zig | 13 +++++++++++++ src/cdp/domains/lp.zig | 10 +--------- src/mcp/tools.zig | 14 ++++---------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/browser/forms.zig b/src/browser/forms.zig index adb0ba2b..38f9f682 100644 --- a/src/browser/forms.zig +++ b/src/browser/forms.zig @@ -141,6 +141,19 @@ pub const FormInfo = struct { } }; +/// Populate backendNodeId on each form and its fields by registering +/// their nodes in the given registry. Works with both CDP and MCP registries. +pub fn registerNodes(forms_data: []FormInfo, registry: anytype) !void { + for (forms_data) |*form| { + const form_registered = try registry.register(form.node); + form.backendNodeId = form_registered.id; + for (form.fields) |*field| { + const field_registered = try registry.register(field.node); + field.backendNodeId = field_registered.id; + } + } +} + /// Collect all forms and their fields under `root`. /// Uses Form.getElements() to include fields outside the
that /// reference it via the form="id" attribute, matching browser behavior. diff --git a/src/cdp/domains/lp.zig b/src/cdp/domains/lp.zig index 43b1b47b..60dedda7 100644 --- a/src/cdp/domains/lp.zig +++ b/src/cdp/domains/lp.zig @@ -174,15 +174,7 @@ fn detectForms(cmd: anytype) !void { page, ); - // Register form and field nodes for backendNodeId references - for (forms_data) |*form| { - const registered = try bc.node_registry.register(form.node); - form.backendNodeId = registered.id; - for (form.fields) |*field| { - const field_registered = try bc.node_registry.register(field.node); - field.backendNodeId = field_registered.id; - } - } + try lp.forms.registerNodes(forms_data, &bc.node_registry); return cmd.sendResult(.{ .forms = forms_data, diff --git a/src/mcp/tools.zig b/src/mcp/tools.zig index 93b4cc7f..0734b367 100644 --- a/src/mcp/tools.zig +++ b/src/mcp/tools.zig @@ -471,16 +471,10 @@ fn handleDetectForms(server: *Server, arena: std.mem.Allocator, id: std.json.Val return server.sendError(id, .InternalError, "Failed to collect forms"); }; - // Register form and field nodes for backendNodeId references - for (forms_data) |*form| { - const form_registered = try server.node_registry.register(form.node); - form.backendNodeId = form_registered.id; - - for (form.fields) |*field| { - const field_registered = try server.node_registry.register(field.node); - field.backendNodeId = field_registered.id; - } - } + lp.forms.registerNodes(forms_data, &server.node_registry) catch |err| { + log.err(.mcp, "form node registration failed", .{ .err = err }); + return server.sendError(id, .InternalError, "Failed to register form nodes"); + }; var aw: std.Io.Writer.Allocating = .init(arena); try std.json.Stringify.value(forms_data, .{}, &aw.writer);