Accept text/json for JSON modules and use one is_json_mime classifier across
modules, documents, JSONPath, and resource inspection. Remove the module and
document aliases and recognize the seven registered application font types.
Use Fetch MIME extraction over the complete Content-Type header list for
script/style checks, workers, WebAssembly, ORB, and JSONPath. Derive classic
script charsets from the same MIME record, including charset inheritance and
resets when the MIME essence changes, while preserving BOM and fallback order.
Cover valid and invalid MIME types, header ordering, combined fields, quoted
commas, nosniff, and charset selection with regression tests.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 19,005 passed, 16 skipped
- Focused WPT: Moli passes 9 cases / 261 subtests, including the three JSON
regressions and all 31 script Content-Type extraction checks.
Normalize an empty Target.createTarget URL to about:blank before constructing the renderer command so initial target metadata and navigation state agree. Regression coverage exercises default and browser-context target creation.
Validation: all branch checks passed. Summary [ 115.491s] 18922 tests run: 18922 passed (9 slow), 16 skipped
Keep network XML response bytes intact through the existing raw-body renderer
path. Decode both network and external XML bodies with the shared response
decoder, then install the selected encoding before document bootstrap.
Remove the obsolete ready-body capture variant used by the old XML path.
Cover matching main-document and iframe text, namespaces, and characterSet for
Atom, RSS, and text/*+xml responses with Windows-1252 headers, XML declarations,
and UTF-16LE/BE BOMs. Exercise the external input as single-byte chunks and
verify that BOMs override a conflicting transport charset.
Validation:
- Before the fix, the network regression returned caf� / UTF-8 instead of
café / windows-1252.
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- Six focused XML tests passed.
- NEXTEST_TEST_THREADS=8 cargo nextest run --no-fail-fast:
18,954 passed, 16 skipped.
Keep valid inherited text encodings ahead of heuristic detection while
preserving BOM, transport charset, and JSON default precedence. Share the
response decoder between streaming main documents, asynchronous child
loads, data URLs, and blocking child snapshots.
Classify navigation XML MIME types independently of DOMParser's allowlist,
including +xml subtypes in parser routing and text exclusions. Add
regressions for inherited UTF-8, literal encoding declarations, XML
namespaces, and DOMParser rejection of navigation-only XML types.
Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- NEXTEST_TEST_THREADS=8 cargo nextest run --no-fail-fast
18,952 passed, 16 skipped. Two existing timing tests failed under the
default concurrency, then passed individually and in the full run above.
Keep request identity and cancellation in Fetch while read tasks exclusively own response data. Match completions to the registered read instead of reinserting transfers or replying to navigations from I/O completion.
Retire superseded reads immediately, drain reads on Fetch disable, and preserve typed read errors. Cover delayed successes, failures, request reuse, cancellation, and debugger-paused supersession.
Enable Network before setting blocked URLs so the parser script is intercepted instead of depending on an external DNS or request failure. Wait through the scheduler and assert the exact script request fails with ERR_BLOCKED_BY_CLIENT while subsequent parsing continues.
An earlier full-suite run exposed the timeout. Validation after the fix: 20 exact-test stress iterations and three iterations of the 20-test blocked_urls module, all passing with flaky results treated as failures; cargo fmt --all; full workspace all-target all-feature Clippy with -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped).
Centralize navigation dependency decisions for readiness probing and snapshot draining. Replacement actions can reach the owner that cancels the pending request even when earlier observations wait for that load, while exact owner authorization remains mandatory.
Keep retirement admission policy beside publication ownership. Extend coverage for stale owners, cancellation, reused frontend ids, duplicate terminals, and late results without reviving retired notifications or remote objects. The new queue regression fails before the scheduler fix.
Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped on the final change set).
Only the current navigation can suspend renderer output; older jobs retain cleanup ownership without blocking the active document.
Retire target-owned request, auth and response interceptions on supersession, cancel streaming transports and reject stale body-read completion. Cover paused debuggers, overlapping navigations, target isolation and once-only terminal replies.
Move old-document debugger termination into renderer preparation scopes instead of tracking protocol navigation IDs in DevTools. Reject superseded response jobs using exact navigation tokens and cancellation authority, and retire their renderer-channel suspension independently.
Cover response interception and supersession while paused, repeated pauses, and prepare commit/cancellation/drop cleanup. Verified cargo fmt --all, workspace all-targets all-features clippy with warnings denied, 18444 nextest tests, and 20 stress iterations of 127 focused tests.
Track provisional loads by navigation ID on the existing renderer target and explicitly finish debugger policy on commit or cancellation. Return the pause-loop exit reason and terminate paused old-document execution through V8 Inspector.
Defer intercepted-response document creation until continuation, removing the eager prepared-document paths. Preserve committed documents for aborted navigations and cover repeated pauses, multiple sessions, interception and supersession.
Validated cargo fmt --all, strict workspace clippy, and cargo nextest run --no-fail-fast: 18,429 passed, 13 skipped. New regressions also passed 20 stress iterations and three confirmed debugger-paused ippure navigation probes.
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.
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.
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.
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.
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.
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)
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.
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.
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.
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
* 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