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
// -----
@@ -240,3 +248,4 @@ pub fn getContent(
pub const SessionID = "9559320D92474062597D9875C664CAC0";
pub const URLBase = "chrome://newtab/";
pub const FrameID = "90D14BBD8AED408A0467AC93100BCDBE";
pub const LoaderID = "CFC8BED824DD2FD56CF1EF33C965C79C";

View File

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

View File

@@ -178,13 +178,20 @@ fn createTarget(
_ = try getParams(alloc, Params, 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
const attached = AttachToTarget{
.sessionId = ContextSessionID,
.targetInfo = .{
.targetId = TargetID,
.targetId = ctx.state.frameID,
.title = "",
.url = "about:blank",
.url = ctx.state.url,
.browserContextId = ContextID,
},
.waitingForDebugger = true,

View File

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