mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-31 17:39:46 +00:00
CDP: implement Page.addScriptToEvaluateOnNewDocument
Replace the hardcoded stub with a working implementation that stores registered scripts and evaluates them in each new document. Changes: - Add ScriptOnNewDocument struct and storage list on BrowserContext - Store scripts with unique identifiers when addScript is called - Evaluate all registered scripts in pageNavigated, after the execution context is created but before frameNavigated/loadEventFired events are sent to the CDP client - Add removeScriptToEvaluateOnNewDocument for cleanup - Return unique identifiers per the CDP spec (was hardcoded to "1") Scripts are evaluated with error suppression (warns on failure) to avoid breaking navigation if a script has issues. This unblocks CDP clients that rely on auto-injected scripts (polyfills, monitoring, test helpers) persisting across navigations. Previously clients had to manually re-inject after every Page.navigate. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -365,6 +365,11 @@ pub fn BrowserContext(comptime CDP_T: type) type {
|
||||
inspector_session: *js.Inspector.Session,
|
||||
isolated_worlds: std.ArrayList(*IsolatedWorld),
|
||||
|
||||
// Scripts registered via Page.addScriptToEvaluateOnNewDocument.
|
||||
// Evaluated in each new document after navigation completes.
|
||||
scripts_on_new_document: std.ArrayList(ScriptOnNewDocument) = .empty,
|
||||
next_script_id: u32 = 1,
|
||||
|
||||
http_proxy_changed: bool = false,
|
||||
|
||||
// Extra headers to add to all requests.
|
||||
@@ -764,6 +769,11 @@ pub fn BrowserContext(comptime CDP_T: type) type {
|
||||
/// Clients create this to be able to create variables and run code without interfering with the
|
||||
/// normal namespace and values of the webpage. Similar to the main context we need to pretend to recreate it after
|
||||
/// a executionContextsCleared event which happens when navigating to a new page. A client can have a command be executed
|
||||
const ScriptOnNewDocument = struct {
|
||||
identifier: u32,
|
||||
source: []const u8,
|
||||
};
|
||||
|
||||
/// in the isolated world by using its Context ID or the worldName.
|
||||
/// grantUniveralAccess Indecated whether the isolated world can reference objects like the DOM or other JS Objects.
|
||||
/// An isolated world has it's own instance of globals like Window.
|
||||
|
||||
Reference in New Issue
Block a user