mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 07:03:29 +00:00
Contextual frameTree
Signed-off-by: Francis Bouvier <francis@lightpanda.io>
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user