Skip to Content
Foxbridge CDP ProxyEvent Translation

Event Translation

Foxbridge subscribes to Juggler events and translates them to CDP events that Puppeteer and other clients expect.

Juggler EventCDP Events Emitted
Page.navigationCommittedPage.lifecycleEvent(init) → Page.lifecycleEvent(commit) → Page.frameNavigated
Page.eventFired(load)Page.loadEventFired → Page.lifecycleEvent(load) → Page.frameStoppedLoading
Page.eventFired(DOMContentLoaded)Page.domContentEventFired → Page.lifecycleEvent(DOMContentLoaded)

Events are emitted in Chrome’s exact ordering — Puppeteer relies on this for page.waitForNavigation().

Target Events

Juggler EventCDP Events
Browser.attachedToTargetTarget.attachedToTarget (tab) → Target.attachedToTarget (page, deferred)
Browser.detachedFromTargetTarget.targetDestroyed (page) → Target.targetDestroyed (tab)

Foxbridge uses a dual session model: each Juggler page target gets two CDP sessions — a “tab” session and a “page” session. This matches Chrome’s internal protocol structure that Puppeteer expects. The page attachment is deferred until setAutoAttach is called on the tab session.

Execution Context Events

Juggler EventCDP Event
Runtime.executionContextCreatedRuntime.executionContextCreated (numeric ID allocated)
Runtime.executionContextDestroyedRuntime.executionContextDestroyed (reverse lookup + cleanup)
Runtime.executionContextsClearedRuntime.executionContextsCleared

CDP uses numeric context IDs; Juggler uses strings. Foxbridge maintains a bidirectional map (ctxMap) that allocates monotonically increasing numeric IDs and maps them to Juggler string IDs.

Console Events

Juggler EventCDP Event
Runtime.consoleRuntime.consoleAPICalled

Dialog Events

Juggler EventCDP Event
Page.dialogOpenedPage.javascriptDialogOpening
Page.dialogClosedPage.javascriptDialogClosed

Network Events

Juggler EventCDP Event
Network.requestWillBeSentNetwork.requestWillBeSent
Network.responseReceivedNetwork.responseReceived
Network.requestFinishedNetwork.loadingFinished
Network.requestFailedNetwork.loadingFailed
Browser.requestInterceptedFetch.requestPaused

Frame Events

Juggler EventCDP Event
Page.frameAttachedPage.frameAttached (stores main frame ID)
Page.frameDetachedPage.frameDetached
Last updated on