mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 15:13:28 +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
|
// 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";
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user