Commit Graph
173 Commits
Author SHA1 Message Date
ldm0 bf3ed110f7 fix(cdp): preserve correlated command responses after page replacement 2026-09-27 03:10:54 +08:00
ldm0 2510929533 fix(cdp): derive page metrics from initialized layout 2026-09-27 01:43:26 +08:00
ldm0 ddbf52a668 feat(layout): initialize shared geometry on first demand 2026-09-27 01:43:26 +08:00
ldm0 5357eb6229 fix(screenshot): keep viewport fallback in page metrics
Restore zero DOM dimensions before layout publication. Keep the viewport
fallback in Page.getLayoutMetrics so clients can construct a positive clip
without changing element geometry or screenshot command semantics.

Empty clips remain invalid regardless of layout publication state. CLI
screenshot_full continues to request FullDocument directly on its first capture.

Cover cold and published clip rejection, page-metric captures with DPR and
scale, and CLI full-document output without a preceding viewport capture.
Document and test the separate cold Playwright fullPage limitation.
2026-09-27 01:43:26 +08:00
ldm0 e8f3272499 test(cdp): await child load before runImmediately isolation probe
Install the navigation through the target owner and wait for the child frame load event before registering the preload. This keeps delayed child initialization from replaying a new-document script during the top-level isolation assertion.
2026-09-26 19:14:15 +08:00
ldm0 47dde09e3e fix(cdp): expose viewport metrics before layout publication
Read live viewport and document scroll state for Page.getLayoutMetrics without forcing layout. Use published content bounds when available and the viewport otherwise.

Cover first Playwright viewport and clipped screenshots without CDP prewarming, and remove screenshot prewarming from DPR/resize and concurrent-page smoke cases. Keep element geometry and input dependent on explicit layout publication.
2026-09-26 19:14:15 +08:00
ldm0 ff782ab21a fix(navigation): admit renderer navigation that supersedes a pending load 2026-09-26 06:00:11 +08:00
ldm0 4b24590ce6 fix(layout): isolate PDF print layout from interactive snapshots 2026-09-25 10:19:22 +08:00
ldm0 179241dedd refactor(layout): publish layout only through explicit visual output
Make geometry, input and observers read the latest published layout without
cold-start or invalidation-triggered layout. Only screenshot, screencast and
PDF output can build and publish a new tree.

Connect WebDriver page screenshots to the shared output pipeline, explain how
to initialize layout in errors, and migrate fixtures to explicit publication.
Remove obsolete read policies and embedded-frame completeness metadata.
2026-09-25 10:19:22 +08:00
ldm0 2812a1de67 fix(input): consume existing snapshots for coordinate mouse input
Reject mouse input without a rendered snapshot and retain published geometry
across interaction invalidation. Mouse hit testing and native default actions
consume that snapshot without triggering layout; explicit geometry queries
and WebDriver click preparation may still demand layout.

Share geometry query dispatch and result conversion across demand and snapshot
reads, and cover cold input errors, DOM and hover changes, native defaults,
document replacement, and explicit snapshot refreshes.
2026-09-25 10:19:22 +08:00
ldm0 663a5501d7 fix(history): preserve each queued History API traversal
Coalescing consecutive History API requests discarded intermediate
same-document traversals and their events when joint traversal plans
entered the shared queue. Keep these requests in order and derive the next
index from the last queued step, while retaining Navigation API promise
reuse.

Apply top-level traversals to the page's default Window when an isolated
realm initiated the request. Add local back/forward coverage across same-
and cross-document entries, and verify every event and microtask turn in
the existing history tests and fixture.

Fixes: f8f46bf48 (fix(history): coordinate complete joint traversal plans)
2026-09-25 03:03:07 +08:00
ldm0 cb59961aa7 test(input): cover text control compatibility regressions 2026-09-25 03:03:07 +08:00
ldm0 3b24fb44f7 refactor(history): unify traversal coordination and native admission state 2026-09-25 01:55:51 +08:00
ldm0 987b09ca13 fix(history): isolate traversal info to initiating navigation 2026-09-24 02:39:25 +08:00
ldm0 7e40b17284 refactor(history): extract pure session history state machine 2026-09-24 02:39:25 +08:00
ldm0 f8f46bf488 fix(history): coordinate complete joint traversal plans 2026-09-24 02:39:25 +08:00
ldm0 1933cec74f refactor(input): centralize editing and native element clicks 2026-09-23 23:06:17 +08:00
ldm0 f0a31d85ed fix(input): dispatch InputEvent metadata for text edits
Dispatch trusted beforeinput and input events with operation-specific
inputType and data for text controls and contenteditable editing. Keep
beforeinput cancelable and report input.data after text normalization
and maxlength truncation.

Cover keyboard and CDP insertion, cancellation, deletion, and textarea
line breaks with 57 regression scenarios.
2026-09-23 23:06:17 +08:00
lanyue-llk 7bf36c9823 fix(input): preserve activation and navigation boundaries 2026-09-23 23:06:17 +08:00
ldm0 1418e3aa35 refactor(history): centralize joint session history state
Per-Window length counters cannot shrink after traversal and branching, and
leave retained sibling History objects stale. Give each traversable one
ordered history and cursor with stable step, browsing context, and Document
identities. All History getters read that state; Navigation entries remain
Document views.

Route push, replace, traversal, and pruning through the shared model. Carry
browser positions or renderer snapshots into new Documents and publish
committed mutations through the Page owner-action FIFO. Remove cached length
adjustments and DOM-order traversal guesses. Preserve srcdoc identity when
only its parent's URL changes.

Keep reset callback pushes in both renderer and browser history, and prune
discarded sibling Navigation entries when forward steps are removed.

Validation: cargo fmt --all; workspace all-targets/all-features Clippy with
warnings denied; cargo nextest run --no-fail-fast (18,501 passed, 14 skipped);
12 targeted Chromium/Moli state and length comparisons; frontend differential
1,020/1,020 matches, all 5,259 observed frames matching, with zero retries.
2026-09-23 20:39:06 +08:00
ldm0 f013d6db75 fix(history): preserve browser session length across child pushes
Seed newly committed renderer documents with the browser-owned session-history
length before author scripts run. Keep navigation, reload, and traversal from
losing prior entries that the Navigation API does not expose.

Grow joint history by newly appended entries, preserving existing parent steps
when a child pushes history and avoiding an extra step when replacing forward
history after back. Add protocol and renderer regression coverage.
2026-09-23 20:39:06 +08:00
ldm0 6d08975a69 refactor(fetch): preserve response header bytes end to end
Carry raw response header values through fetch, caches, redirects,
renderer delivery, workers, and protocol records. Convert explicitly
at WebIDL and protocol text boundaries while preserving opaque bytes.

Keep legacy CacheStorage and service worker metadata readable, and
advance the HTTP cache format for raw header values.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-23 02:02:54 +08:00
lanyue-llk bcf420f622 revert: undo split PR 640 merges (#734-#740) 2026-09-22 20:02:07 +08:00
mini llk cba79021aa fix(document): parse text responses with consistent decoding (#740)
* fix(parser): preserve text document MIME and encoding semantics

* fix(document): share literal text parsing across child document paths

* fix(document): construct projection parser with the public API
2026-09-22 19:50:42 +08:00
mini llk 011e2268f2 fix(navigation): cancel loading without retiring the active document (#738) 2026-09-22 19:49:18 +08:00
mini llk 1be735d5c5 fix(network): preserve request metadata and response evidence (#737) 2026-09-22 19:45:58 +08:00
mini llk 50a4242b2e fix(input): preserve activation and navigation boundaries (#736) 2026-09-22 19:45:14 +08:00
mini llk c5ac254058 fix(layout): refresh geometry and preserve inline fragments (#735) 2026-09-22 19:42:55 +08:00
ldm0 52fd1d0953 feat(protocol): expose resource runtime storage diagnostics
Expose the canonical resource runtime snapshot alongside the existing runtime id and memory-cache fields. Add a CDP regression that verifies disk-pool allocation and parked-image memory accounting.
2026-09-21 16:47:19 +08:00
ldm0 29283fd86a fix(network): scope CDP header overrides and preserve BiDi byte values
Restore original headers on redirect while preserving current-hop overrides
for authentication retries and keeping Network event identity intact.

Preserve raw BiDi Cookie, Set-Cookie, and extra header values through page,
navigation, and worker policies. Apply CDP's last-value behavior for duplicate
request header names.

Add coverage for header bytes, redirects, authentication, and event sequences.
2026-09-21 05:37:28 +08:00
ldm0 932a7225ac refactor(network): preserve request header bytes across interception
Carry RequestHeaders through navigation, Fetch/XHR, workers, redirects and auth,
with explicit Unicode and ByteString conversions at protocol and WebIDL boundaries.
Share the raw curl header list with WebSocket transport and decode binary response
headers without UTF-8 replacement. Keep header memory charging concrete.

Cover opaque values, UTF-8 overrides, duplicates, redirect/auth continuation and
WebSocket handshakes with byte-level regression tests.
2026-09-21 03:54:12 +08:00
kevin 3560c85f4b Use CommonMark punctuation class and retain compatibility scenarios 2026-09-20 20:50:03 +08:00
kevin 0d91807041 Keep scroll test targets below every viewport 2026-09-20 20:50:03 +08:00
ldm0 3ae44b5150 fix(cdp): preserve navigation failure context at protocol boundaries
Render generic navigation failures with their complete anyhow context chain.
Keep blocked-URL error text canonical through an explicit typed policy cause,
and cover both serialized CDP output and an intercepted blocked navigation.

Replace the offline navigation cause's free-form error text with a typed kind
and a single protocol-text mapping. Keep these policy error types internal and
document that transport failures still use NetworkFetchFailureContext.

Update the unsupported authentication regression to expect preserved context
while retaining the assertion that no retry is issued.
2026-09-20 19:27:31 +08:00
ldm0 81663c6650 refactor(navigation): preserve errors through document loading 2026-09-20 19:27:31 +08:00
ldm0 5be3c7b644 refactor(cdp): preserve typed navigation network errors 2026-09-20 19:27:31 +08:00
ldm0 846b24119a fix(cdp): commit error documents for offline Fetch continuations 2026-09-20 14:15:47 +08:00
ldm0 4ed30be874 fix(fetch): distinguish request header bytes from UTF-8 strings 2026-09-20 14:03:33 +08:00
BibekPathak 8032606abf report offline navigations as network failures, not -32000 2026-09-20 10:54:25 +08:00
BibekPathak f3ef88f6dc fix(cdp): allow loopback navigations under offline emulation 2026-09-20 10:54:25 +08:00
ldm0 0b4c7b10f6 fix(layout): refresh geometry after screen and media changes 2026-09-18 14:29:05 +08:00
ldm0 b74061eb63 test: make worker and frame error checks deterministic
Consume child-frame navigation before the Runtime.enable helper clears
collected events, avoiding an event-ordering race in the Fetch test.

Use a local connection-drop server to trigger nested worker script load
failure, removing external DNS timing from the asynchronous error-event test.
Preserve the constructor, event type, message, and filename assertions and
verify that the fixture receives the expected child script request.
2026-09-18 12:43:03 +08:00
ldm0 b89f09f781 fix(editing): preserve surrogate pairs in text control actions
Normalize native edit endpoints to complete UTF-16 scalar boundaries while preserving selection API code-unit offsets. Cover keyboard deletion, movement, shifted selections, execCommand, and boundary no-ops.

Source: 4417abe223
2026-09-18 12:19:15 +08:00
ldm0 f3c87f394d fix(fetch): bypass interception for local blob and data URLs 2026-09-16 18:54:13 +08:00
ldm0 312b0ffc6b feat(emulation): support worker user agent overrides 2026-09-15 16:54:51 +08:00
ldm0 357dda18e7 fix(editing): enforce maxlength with UTF-16 text offsets
Apply maxlength to user text insertion, preserve complete surrogate pairs,
and keep selection and replacement offsets in UTF-16 units. Cover CDP
input, execCommand insertText, and setRangeText.
Keep keyboard movement and deletion, including execCommand deletion, on
complete surrogate-pair boundaries while exposing UTF-16 offsets.

Source: 3be5eb5e37
2026-09-15 15:35:38 +08:00
ldm0 4d110bd787 fix(emulation): report unsupported worker user agent overrides 2026-09-15 14:46:31 +08:00
ldm0 8dfd1015b0 fix(emulation): reject unsupported device metrics modes 2026-09-15 14:46:31 +08:00
ldm0 17e961433e feat(emulation): apply native view scaling and capture viewport 2026-09-15 14:46:31 +08:00
ldm0 284667a01a feat(emulation): apply native screen geometry and resolution 2026-09-15 14:46:31 +08:00