A target="_blank" attachment link downloads from a transient new tab, so
the clicked target never receives Page.downloadWillBegin and bsk download
timed out. Instead of matching the anchor href against every browser
download, accept the URL of a webNavigation navigation target whose source
is the clicked tab and that appears after the mouse press, and match it only
against download candidates observed after the press.
The dispatch point reuses clickResolvedTarget's existing markSent hook, so
the click pipeline and the exact-target CDP path keep their behavior.
Separate snapshot decoding from optional geometry so DOM, AX, form state and
identity checks finish before measuring the root viewport. Retain captured
content with explicit geometry gaps after that measurement times out, without
issuing projection or hover reads behind the gate. Keep post-layout identity
validation on successful reads and reject attachment changes and cancellation.
Clarify that navigation does not reset pending reads. Preserve the existing
RPC reason while exposing the command, deadline/blocked phase and process.
Validation: 2200 extension tests passed (108 skipped); 126 focused regression
tests, TypeScript, changed-file Biome checks and production build passed.
Keep timed-out commands gated until Chrome settles them, including auto-attach configuration. Scope frame-tree deadlines to observation so navigation retains its caller budget, and give snapshot/AX captures a separate deadline.
Omit known unavailable iframe subtrees without rerouting them to the root session. Preserve viewing-only screenshots after post-capture identity verification when optional geometry times out.
Validation: 2191 extension tests passed (108 skipped); TypeScript, changed-file Biome checks, and production extension build passed.
A read deadline ends the caller's wait but not the command in Chrome. Until
that command settles, further DOMSnapshot, accessibility, layout and frame
reads on the same tab are refused immediately instead of queueing behind it
and spending another deadline each. The fence clears when the stuck command
settles or the tab detaches; Target.setAutoAttach is answered by the browser
process and does not participate.
Observation errors caused by a renderer read timeout carry
data.reason = "renderer_read_timeout" so gateways can distinguish an
unresponsive page from other CDP failures. The late rejection of a timed-out
read is verified not to surface as an unhandled rejection.
A timed-out Target.setAutoAttach on a child target left the session attached
in Chrome but dropped it from frame discovery, so the iframe vanished from the
frame graph until the next reattach. Keep the session on timeout and retry
the configuration from getFrameGraph, bounded by the same drain as newly
attached targets.
getFrameGraph also swallowed timed-out child Page.getFrameTree,
DOM.getFrameOwner and root Target.setAutoAttach reads and returned a partial
graph, after which the coordinator queued DOMSnapshot behind the stuck reads.
Propagate CdpReadTimeoutError from these paths; ordinary navigation failures
are still tolerated.
Renderer reads issued through chrome.debugger cannot be cancelled. When a
background tab stops answering, DOMSnapshot, accessibility, layout and frame
reads hang until the daemon transport deadline, and the observation fallback
keeps issuing further reads against the same stuck page.
- Route CDP commands through a 10 s read deadline for snapshot, accessibility,
layout, frame-tree, frame-owner and auto-attach reads. A timed-out read
raises CdpReadTimeoutError; the late Chrome reply is ignored and logged.
Mutations, screenshots, evaluation and user-requested waits are not bounded.
- Add isCaptureTerminalError for the capture pipeline so a read timeout stops
AX/geometry fallback like an abort does, while isAbortError stays strict and
tool handlers keep reporting the timeout as cdp_failed rather than cancelled.
- Configure Target.setAutoAttach once per debugger session instead of on every
observation; reapply after detach and retry after a failed configuration.
Reset preserved popup overlays after session teardown and hide them when observed control is released on tab detachment. Keep overlay notifications best-effort so unresponsive pages cannot delay cleanup.
Cover local and remote stop, disconnect cleanup, tab activation ordering, unavailable content scripts, and unaffected tabs.
Preserve both session-start reservation cleanup and debugging finalization in the dispatcher. Add browser naming messages for the seven locales now supported on main.
Reserve an idle browser across label persistence and reconnect. Track session starts from request receipt and reject overlapping starts before allocating windows.
Cover pending starts, save and reconnect waits, failed updates, and cancellation cleanup.