Contextual frameTree

Signed-off-by: Francis Bouvier <francis@lightpanda.io>
This commit is contained in:
Francis Bouvier
2024-04-18 20:54:30 +02:00
parent 508741c367
commit fc1b3d5397
4 changed files with 42 additions and 14 deletions

View File

@@ -71,6 +71,14 @@ pub fn do(
}; };
} }
pub const State = struct {
frameID: []const u8 = FrameID,
url: []const u8 = URLBase,
securityOrigin: []const u8 = URLBase,
secureContextType: []const u8 = "Secure", // TODO: enum
loaderID: []const u8 = LoaderID,
};
// Utils // Utils
// ----- // -----
@@ -240,3 +248,4 @@ pub fn getContent(
pub const SessionID = "9559320D92474062597D9875C664CAC0"; pub const SessionID = "9559320D92474062597D9875C664CAC0";
pub const URLBase = "chrome://newtab/"; pub const URLBase = "chrome://newtab/";
pub const FrameID = "90D14BBD8AED408A0467AC93100BCDBE"; pub const FrameID = "90D14BBD8AED408A0467AC93100BCDBE";
pub const LoaderID = "CFC8BED824DD2FD56CF1EF33C965C79C";

View File

@@ -41,35 +41,44 @@ fn enable(
return result(alloc, id, null, null, sessionID); return result(alloc, id, null, null, sessionID);
} }
const LoaderID = "CFC8BED824DD2FD56CF1EF33C965C79C";
fn getFrameTree( fn getFrameTree(
alloc: std.mem.Allocator, alloc: std.mem.Allocator,
id: u64, id: u64,
scanner: *std.json.Scanner, scanner: *std.json.Scanner,
_: *Ctx, ctx: *Ctx,
) ![]const u8 { ) ![]const u8 {
const sessionID = try cdp.getSessionID(scanner); const sessionID = try cdp.getSessionID(scanner);
const FrameTree = struct { const FrameTree = struct {
frameTree: struct { frameTree: struct {
frame: struct { frame: struct {
id: []const u8 = cdp.FrameID, id: []const u8,
loaderId: []const u8 = LoaderID, loaderId: []const u8,
url: []const u8 = cdp.URLBase, url: []const u8,
domainAndRegistry: []const u8 = "", domainAndRegistry: []const u8 = "",
securityOrigin: []const u8 = cdp.URLBase, securityOrigin: []const u8,
mimeType: []const u8 = "mimeType", mimeType: []const u8 = "text/html",
adFrameStatus: struct { adFrameStatus: struct {
adFrameType: []const u8 = "none", adFrameType: []const u8 = "none",
} = .{}, } = .{},
secureContextType: []const u8 = "Secure", secureContextType: []const u8,
crossOriginIsolatedContextType: []const u8 = "NotIsolated", crossOriginIsolatedContextType: []const u8 = "NotIsolated",
gatedAPIFeatures: [][]const u8 = &[0][]const u8{}, gatedAPIFeatures: [][]const u8 = &[0][]const u8{},
} = .{}, },
} = .{}, },
childFrames: ?[]@This() = null, childFrames: ?[]@This() = null,
}; };
return result(alloc, id, FrameTree, FrameTree{}, sessionID); const frameTree = FrameTree{
.frameTree = .{
.frame = .{
.id = ctx.state.frameID,
.url = ctx.state.url,
.securityOrigin = ctx.state.securityOrigin,
.secureContextType = ctx.state.secureContextType,
.loaderId = ctx.state.loaderID,
},
},
};
return result(alloc, id, FrameTree, frameTree, sessionID);
} }
fn setLifecycleEventsEnabled( fn setLifecycleEventsEnabled(

View File

@@ -178,13 +178,20 @@ fn createTarget(
_ = try getParams(alloc, Params, scanner); _ = try getParams(alloc, Params, scanner);
const sessionID = try cdp.getSessionID(scanner); const sessionID = try cdp.getSessionID(scanner);
// change CDP state
ctx.state.frameID = TargetID;
ctx.state.url = "about:blank";
ctx.state.securityOrigin = "://";
ctx.state.secureContextType = "InsecureScheme";
ctx.state.loaderID = "DD4A76F842AA389647D702B4D805F49A";
// send attachToTarget event // send attachToTarget event
const attached = AttachToTarget{ const attached = AttachToTarget{
.sessionId = ContextSessionID, .sessionId = ContextSessionID,
.targetInfo = .{ .targetInfo = .{
.targetId = TargetID, .targetId = ctx.state.frameID,
.title = "", .title = "",
.url = "about:blank", .url = ctx.state.url,
.browserContextId = ContextID, .browserContextId = ContextID,
}, },
.waitingForDebugger = true, .waitingForDebugger = true,

View File

@@ -25,6 +25,9 @@ pub const Cmd = struct {
buf: []u8, // only for read operations buf: []u8, // only for read operations
err: ?Error = null, err: ?Error = null,
// CDP
state: cdp.State = .{},
// JS fields // JS fields
js_env: *public.Env, js_env: *public.Env,
try_catch: public.TryCatch, try_catch: public.TryCatch,