Skip to content

Commit 2a9bab3

Browse files
Merge pull request #450 from lightpanda-io/cdp-playwright
cdp: improve playwright support
2 parents 708abb0 + 6ca1e6c commit 2a9bab3

File tree

3 files changed

+101
-11
lines changed

3 files changed

+101
-11
lines changed

src/cdp/page.zig

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,3 +262,37 @@ fn navigate(cmd: anytype) !void {
262262
.frameId = bc.frame_id,
263263
}, .{ .session_id = session_id });
264264
}
265+
266+
const testing = @import("testing.zig");
267+
test "cdp.page: getFrameTree" {
268+
var ctx = testing.context();
269+
defer ctx.deinit();
270+
271+
{
272+
try testing.expectError(error.BrowserContextNotLoaded, ctx.processMessage(.{ .id = 10, .method = "Page.getFrameTree", .params = .{ .targetId = "X" } }));
273+
try ctx.expectSentError(-31998, "BrowserContextNotLoaded", .{ .id = 10 });
274+
}
275+
276+
const bc = try ctx.loadBrowserContext(.{ .id = "BID-9" });
277+
{
278+
try ctx.processMessage(.{ .id = 11, .method = "Page.getFrameTree" });
279+
try ctx.expectSentResult(.{
280+
.frameTree = .{
281+
.frame = .{
282+
.id = bc.frame_id,
283+
.loaderId = bc.loader_id,
284+
.url = bc.url,
285+
.domainAndRegistry = "",
286+
.securityOrigin = bc.security_origin,
287+
.mimeType = "text/html",
288+
.adFrameStatus = .{
289+
.adFrameType = "none",
290+
},
291+
.secureContextType = bc.secure_context_type,
292+
.crossOriginIsolatedContextType = "NotIsolated",
293+
.gatedAPIFeatures = [_][]const u8{},
294+
},
295+
},
296+
}, .{ .id = 11 });
297+
}
298+
}

src/cdp/runtime.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ fn sendInspector(cmd: anytype, action: anytype) !void {
5656
}
5757
}
5858

59+
// the result to return is handled directly by the inspector.
5960
bc.session.callInspector(cmd.input.json);
6061
}
6162

src/cdp/target.zig

Lines changed: 66 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -231,21 +231,25 @@ fn getTargetInfo(cmd: anytype) !void {
231231
}
232232

233233
return cmd.sendResult(.{
234-
.targetId = target_id,
235-
.type = "page",
236-
.title = "",
237-
.url = "",
238-
.attached = true,
239-
.canAccessOpener = false,
234+
.targetInfo = .{
235+
.targetId = target_id,
236+
.type = "page",
237+
.title = "",
238+
.url = "",
239+
.attached = true,
240+
.canAccessOpener = false,
241+
},
240242
}, .{ .include_session_id = false });
241243
}
242244

243245
return cmd.sendResult(.{
244-
.type = "browser",
245-
.title = "",
246-
.url = "",
247-
.attached = true,
248-
.canAccessOpener = false,
246+
.targetInfo = .{
247+
.type = "browser",
248+
.title = "",
249+
.url = "",
250+
.attached = true,
251+
.canAccessOpener = false,
252+
},
249253
}, .{ .include_session_id = false });
250254
}
251255

@@ -548,3 +552,54 @@ test "cdp.target: attachToTarget" {
548552
try ctx.expectSentEvent("Target.attachedToTarget", .{ .sessionId = session_id, .targetInfo = .{ .url = "chrome://newtab/", .title = "about:blank", .attached = true, .type = "page", .canAccessOpener = false, .browserContextId = "BID-9", .targetId = bc.target_id.? } }, .{});
549553
}
550554
}
555+
556+
test "cdp.target: getTargetInfo" {
557+
var ctx = testing.context();
558+
defer ctx.deinit();
559+
560+
{
561+
try ctx.processMessage(.{ .id = 9, .method = "Target.getTargetInfo" });
562+
try ctx.expectSentResult(.{
563+
.targetInfo = .{
564+
.type = "browser",
565+
.title = "",
566+
.url = "",
567+
.attached = true,
568+
.canAccessOpener = false,
569+
},
570+
}, .{ .id = 9 });
571+
}
572+
573+
{
574+
try testing.expectError(error.BrowserContextNotLoaded, ctx.processMessage(.{ .id = 10, .method = "Target.getTargetInfo", .params = .{ .targetId = "X" } }));
575+
try ctx.expectSentError(-31998, "BrowserContextNotLoaded", .{ .id = 10 });
576+
}
577+
578+
const bc = try ctx.loadBrowserContext(.{ .id = "BID-9" });
579+
{
580+
try testing.expectError(error.TargetNotLoaded, ctx.processMessage(.{ .id = 10, .method = "Target.getTargetInfo", .params = .{ .targetId = "TID-8" } }));
581+
try ctx.expectSentError(-31998, "TargetNotLoaded", .{ .id = 10 });
582+
}
583+
584+
// pretend we createdTarget first
585+
_ = try bc.session.createPage();
586+
bc.target_id = "TID-A";
587+
{
588+
try testing.expectError(error.UnknownTargetId, ctx.processMessage(.{ .id = 10, .method = "Target.getTargetInfo", .params = .{ .targetId = "TID-8" } }));
589+
try ctx.expectSentError(-31998, "UnknownTargetId", .{ .id = 10 });
590+
}
591+
592+
{
593+
try ctx.processMessage(.{ .id = 11, .method = "Target.getTargetInfo", .params = .{ .targetId = "TID-A" } });
594+
try ctx.expectSentResult(.{
595+
.targetInfo = .{
596+
.targetId = "TID-A",
597+
.type = "page",
598+
.title = "",
599+
.url = "",
600+
.attached = true,
601+
.canAccessOpener = false,
602+
},
603+
}, .{ .id = 11 });
604+
}
605+
}

0 commit comments

Comments
 (0)