Commit Graph
1168 Commits
Author SHA1 Message Date
ldm0 d3f2ec498c fix(script): keep parser async work runnable after EOF
Async scripts still fetching at parser EOF previously entered a queue
behind DOMContentLoaded, allowing a slow defer script to block a ready
async script or its error event. Transfer remaining async work to the
exact Document runtime producer and publish each task when its source
completes, retaining its load-delay lease.

Preserve observed async completion order across parser handoff. Add gated
success, failure, and out-of-order completion tests, and update the WPT
ledger for execution-timing/085.html.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 17,879 passed, 13 skipped
- 270 WPT cases: 257 to 258 passes, no case or subtest regressions
2026-09-14 16:27:27 +08:00
ldm0 a4b974547a fix(html): queue child load delivery through the DOM source
Queue iframe load delivery alongside other DOM tasks and include current
child lifecycle owners in the existing lifecycle scheduling preference.
This keeps initial load ahead of module timers that replace the document.

Cover inline, imported, external, and top-level-await modules using parent
and child timers. Check adopted-image events against the shared DOM FIFO.
Update the WPT ledgers for the three repaired delayed module-write cases.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 17,875 passed, 13 skipped
- 270 WPT cases: 254 to 257 passes, no case or subtest regressions
2026-09-14 16:27:27 +08:00
ldm0 b566682720 fix(html): queue document lifecycle transitions on the DOM source
Admit DOMContentLoaded and main Window load after their parser/defer and load
prerequisites so earlier DOM tasks keep their FIFO positions. Keep interactive
readiness at parser stop, preserve child realm prerequisites, and return a load
boundary to its driver if an earlier DOM callback adds a new load delay.

Queue parser-owned external import-map errors during preparation, including
child and document.write parsers, so later dynamic errors cannot overtake them.
Cover ordering, replacement and load-delay behavior in main and child documents.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 17,871 passed, 13 skipped
- 270 WPT cases: 254 pass, 10 fail, 5 timeout, 1 error; one new pass and
  no case-status or passing-subtest-count regressions
2026-09-14 16:27:27 +08:00
ldm0 42818372b7 fix(canvas): settle ImageBitmap promises through bitmap tasks
Reject Web IDL conversion errors through the returned Promise and decode
raster Blobs from their bytes on the blocking pool. Deliver results through
a dedicated bitmap task source bound to the exact Page and Window realm.

Retain canvas, ImageData and ImageBitmap pixel snapshots for crop, resize,
flip and alpha processing. Clear pixels on close and reject closed sources
in drawImage. Read HTML canvas dimensions from native attributes.

Cover Promise timing, pixels, intrinsic prototypes, child realm retirement,
document.open and real navigation identity collisions with Page task tests.
2026-09-14 16:27:27 +08:00
ldm0 2f639883dc fix(script): queue dynamic preparation errors at insertion 2026-09-14 16:27:26 +08:00
ldm0 88d82f8e62 fix(script): queue Window promise rejection notifications as DOM tasks
Promise rejection events were dispatched during microtask checkpoints or
synchronously when a late handler was attached. Queue both events on the
shared DOM-manipulation source, snapshot each realm's notification batch
at the checkpoint, and recheck handlers immediately before notification.

Keep V8 payloads in the originating Host, authorize exact Document owners
through the Page dispatcher, and restore the registered Window realm for
each event. Retire stale payloads and clear retained handles at teardown.

Exercise FIFO order across checkpoints, late handling, realm routing, and
Document replacement through the production selected-task harness. Update
existing notification fixtures and assert that suppressed rejections leave
no notification task queued.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- 254 related WPT cases: all 240 previously passing cases remain passing
- promise-rejection-events.html: 40/43 subtests pass, up from 33/43
- cargo nextest run --no-fail-fast: 17,849 passed, 13 skipped
2026-09-14 16:27:26 +08:00
ldm0 3369c014c1 test(wpt): refresh empty SVG script source result
Move execution-timing/137.html from failed to passed. The unmodified
branch baseline, the 245-case script regression run, and the final
focused rerun all pass this empty xlink:href case.
2026-09-14 16:27:26 +08:00
ldm0 41580ffd7a fix(parser): checkpoint microtasks before preparing parser scripts
Yield live HTML script preparation to the document owner after releasing
parser borrows. Prepare from the current DOM after the guarded microtask
checkpoint, and abandon stale handoffs when that checkpoint replaces the
document. Apply the boundary to main documents, child documents, and
document.write; preserve eager parsing when no runtime owner is installed.

Admit parser async classic scripts after preparation and keep nested
script cleanup from draining microtasks while an outer script is running.
Add main/child integration coverage and update the two repaired WPT cases.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 17,846 passed, 13 skipped
- 245 related WPT cases: all 231 previously passing cases remain passing
- Final CLI build: both repaired WPT cases pass on the validated sources
2026-09-14 16:27:26 +08:00
ldm0 2506ce2b35 fix(script): checkpoint microtasks during event callback cleanup
Perform HTML script cleanup between event callbacks when the execution-context stack becomes empty, retaining currentTarget, passive state, and window.event through the checkpoint. Preserve script execution scopes during exception reporting, use the same callback boundary for Worker.onerror, and guard the complete microtask checkpoint against reentrancy.

Remove deferred window.event restoration. Update callback-order assertions and asynchronous fixtures to wait for the final event they inspect, while retaining scheduler, document-owner, and follow-up checks. Add Window, child Window, and Worker coverage for nested dispatch, listener removal in microtasks, and script versus callback exceptions.

Callback exception ordering follows Web IDL cleanup before rethrow; the local Chromium probe reports the error before that checkpoint.

WPT: 3 additional passes in the script-element microtask tests; the other 492 cases retain identical statuses and subtest results. Update the corresponding passed/failed case lists.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17,843 passed, 13 skipped). Fresh CLI build SHA-256 matches the binary used for the 495-case WPT comparison.
2026-09-14 16:14:49 +08:00
ldm0 ce82f5351d fix(events): preserve native dispatch state and listener lifetime
Set and clear child Window event dispatch fields, and clear Worker propagation flags after native delivery. Remove once listeners before invocation and skip listeners removed by an earlier callback, including during synchronous nested dispatch.

Add Window, child Window, and Worker regression probes for active event state, redispatch after stopImmediatePropagation, and once/listener removal during nested dispatch.
2026-09-14 16:14:49 +08:00
ldm0 45d349d33f fix(script): retain child parser state during script cleanup
Run classic script microtasks before restoring currentScript or releasing child parser nesting. Defer nested checkpoints to the outer script and wait for exception reporting before running reactions.

Cover inline and external scripts, syntax and runtime errors, document.open/write insertion points, and nested execution. Record the repaired synchronous-script bailout WPT.
2026-09-14 16:14:49 +08:00
ldm0 3c420a7696 fix(document): ignore destructive writes during module execution
Track nested ignore-destructive-writes counters per Document across module evaluation and its cleanup checkpoint. Preserve explicit input streams, cross-realm Document identity, and writes from later tasks or pending top-level await continuations.

Validate root and child module behavior with five regression tests. The 149-case dynamic-markup WPT run gains four passes with unchanged remaining outcomes; update their recorded case status. cargo fmt, workspace all-feature clippy, and all 17835 nextest tests pass.
2026-09-14 16:14:49 +08:00
ldm0 70c7be7595 fix(dom): include CDATA in child text content 2026-09-14 16:14:49 +08:00
ldm0 d8610700bc fix(document): reject XML child input-stream operations
Validate native Document type before parser and navigation bailouts, and preserve argument conversion before write and writeln state checks. Cover XML MIME types, side effects, exception realms, parser scripts, unload callbacks, and custom-element constructor ordering.
2026-09-14 16:14:49 +08:00
ldm0 e8be07fb23 fix(document): reset child input-stream readiness 2026-09-14 16:14:49 +08:00
ldm0 d2283a52a4 fix(document): initialize child navigation readiness 2026-09-14 16:14:49 +08:00
ldm0 628e2c6b02 fix(scripts): restore child parser insertion point on fetch errors 2026-09-14 16:14:49 +08:00
ldm0 173541f8c7 fix(scripts): queue parser preparation error events
Distinguish empty or invalid external script URLs from internal parser preparation failures. Queue trusted element errors on the shared DOM-manipulation source for root, document.write, and child parser paths without reporting spurious Window exceptions.

Retain exact Document ownership, listener checkpoints, and already-started state. Cover stale tasks and reused PageVm-local ids, and record the two WPT cases verified in CLI and CDP modes.
2026-09-14 16:14:49 +08:00
ldm0 95aac9681a fix(csp): avoid external URL checks for inline module roots 2026-09-14 16:14:48 +08:00
ldm0 c3af454e4d fix(trusted-types): align WebIDL interfaces and global accessors 2026-09-14 16:14:48 +08:00
ldm0 879cc31834 fix(csp): validate Trusted Types directive name tokens
Discard non-ASCII directives independently before duplicate lookup and retain exact ASCII whitespace boundaries. Match literal Trusted Types allowlist entries only when they satisfy tt-policy-name, while preserving arbitrary policy names without CSP or under a wildcard.

Add exhaustive ASCII token tests, directive parsing regressions, and enforce/report-only delivery coverage. Validated with fmt, full-workspace Clippy and all 17,735 nextest tests. The 219-case Trusted Types suite gains one passing case and five passing subtests in both CLI and CDP, with all other semantic results unchanged.
2026-09-14 16:14:48 +08:00
ldm0 d4b8947ca9 fix(webapi): adapt Trusted Types and worker security bindings
Identify Trusted Types through shared native interface identities and
validate imported Worker script responses through the complete-head API.
Preserve the initiating origin, mode, credentials and security policy.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets
--all-features -- -D warnings; cargo nextest run --no-fail-fast
(18011 passed, 13 skipped).
2026-09-14 16:04:24 +08:00
ldm0 caa24833e9 fix(trusted-types): use node document policies for attribute sinks
Select attribute sink requirements, default policies, and report owners from the element's current node document while preserving the operation's exception realm. Avoid retrying native Attr mutations after conversion throws, and preserve native Attr namespace metadata and canonical cache identity.

Validated with cargo fmt, full-workspace Clippy, and all 17,730 nextest tests. The 219-case Trusted Types suite gains three passing cases and 36 passing subtests in both CLI and CDP, with no other semantic changes; all 13 DOM attribute/adoption regression cases remain passing.
2026-09-14 15:46:16 +08:00
ldm0 7f82c7f2ac fix(trusted-types): report every violated CSP policy
Report each enforced and report-only Trusted Types policy independently, preserving per-policy endpoints and source locations. Queue worker TT and WebSocket CSP reports without synchronous reentry or overtaking earlier reports.

Honor report-only Trusted Types requirements for worker importScripts and string timers. Cover duplicate policies, default-policy conversion, trusted values, asynchronous delivery, and cross-directive ordering.

Validation: cargo fmt --all; workspace clippy with all targets/features and -D warnings; full nextest (17726 passed, 13 skipped). All 219 Trusted Types WPT cases compared in CLI and CDP: 191 to 195 passed, 9 additional passing subtests, no regressions. Promote the four verified cases in the baseline lists.
2026-09-14 15:46:11 +08:00
ldm0 2af67276d4 fix(workers): preserve imported script origins and no-cors boundaries
Keep worker settings URLs stable while imported classic scripts retain their own dynamic-import base, request URL and muted-error metadata. Allow classic no-cors imports without relaxing module CORS or response security policies.

Preserve CSP source locations and pre-redirect URLs through worker callbacks and report serialization. Add regression coverage for redirects, CSP/CORP/COEP, opaque errors, rejection reporting and nested imports.

Validation: cargo fmt --all; full workspace clippy with warnings denied; nextest 17699 passed, 13 skipped. Before/after CLI and CDP comparisons cover 707 cases without losing an originally passing case. Promote only the worker importScripts base-URL WPT. Both smoke baselines are 42/43, with Puppeteer blocked by the same missing local puppeteer-core dependency.
2026-09-14 15:46:11 +08:00
ldm0 443bc6d316 test(wpt): serve dynamic import redirects without CORS headers 2026-09-14 15:46:11 +08:00
ldm0 ee561e8b20 fix(modules): bind synthetic text sources to their owning records
Resolve JSON and CSS evaluation data by exact module identity in the compiling realm, with weak context entries owned by compiled records. Remove the main-Document source lookup that broke child imports.

Cover static and deferred dynamic child imports, realm-local caches, parse errors, identity collisions and record disposal. Mark both JSON/CSS cross-origin WPT cases passing after CLI/CDP verification.
2026-09-14 15:46:11 +08:00
ldm0 8a1f39d33c fix(scripts): enforce client-origin CORS before script execution
Bind script loads and cache entries to the document client origin, authorize redirects before following them, and preserve redirect origin taint across Window and Worker Fetch/XHR validation and response filtering.

Check dynamic script CSP before transport, cover real HTTP and lifecycle regressions, and refresh the one newly passing WPT case after fixed-binary CLI/CDP comparisons.
2026-09-14 15:46:10 +08:00
ldm0 f6944b3d5a fix(webapi): reconcile replayed FileList binding and regressions
Use the shared FileList interface identity in the replayed input setter.
Remove the duplicate XHR URL and credentials regression while retaining
one complete copy, and format the newly replayed WebRTC import.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets
--all-features -- -D warnings; cargo nextest run --no-fail-fast
(17971 passed, 13 skipped).
2026-09-14 15:23:19 +08:00
ldm0 59eef217f9 fix(timers): preserve the initiating script nonce for string handlers 2026-09-14 15:06:20 +08:00
ldm0 152f25bf6c fix(modules): preserve source locations through exception reporting
Carry inline document URLs and parser offsets into V8, and report retained exception locations without reading author properties. Keep import.meta tied to the preparation-time resolution base and pass the actual document URL to child parsers.

Add seven regressions and mark evaluation-error-5.html passing after fixed-binary CLI/CDP comparisons. Full fmt, workspace Clippy, and nextest checks pass.
2026-09-14 15:06:20 +08:00
ldm0 5593412947 fix(modules): report child script exceptions in their owning Window
Route child parse, link, and evaluation failures to the exact current Window while retaining the original exception value, including deferred top-level await rejection. Keep fetch failures on script.error, restrict load events to external modules, and avoid a second load on deferred rejection.

Reuse body-only error dispatch and preserve selected-task checkpoints, parser order, and stale-owner guards. Add six end-to-end regressions and update two old syntax-error fixtures to require Window.error followed by external script load.

Validation: cargo fmt --all; full workspace all-targets all-features Clippy with warnings denied; full nextest 17659 passed, 13 skipped. Fixed-binary CLI and CDP each run the same 166 WPT cases: 139 to 140 passed, with no other case regressions and two additional crossorigin subtests passing. Move only module/errorhandling.html into the passed list. CDP smoke: 42/43 groups; Puppeteer cannot start because node is absent.
2026-09-14 15:06:20 +08:00
ldm0 c7a0406295 fix(modules): preserve original exceptions through error reporting 2026-09-14 15:06:20 +08:00
ldm0 82dbef8f85 fix(modules): retain parse and static request exception identity
Carry realm-owned exception tokens through the module tree, preserve V8 compile exceptions, and cache static dependency validation failures without caching direct import resolution or network errors. Keep values GC-traced and isolated across WindowProxy reuse.

Add identity, shared-dependency, realm, GC, and pending-sibling regressions. Validated with fmt, full workspace Clippy, 17647 nextest passes, and a matched 148-case CLI/CDP WPT slice. The target now passes 11/11 subtests; smoke is 42/43 with the baseline missing-node Puppeteer failure.
2026-09-14 15:06:20 +08:00
ldm0 bf38aca5f4 test(wpt): refresh full baseline after URL and navigation fixes
Refresh the complete all-profile baseline at source
8ad5424480 and WPT
db95fafd1fcef8428805e41eb5705d444e8c67ce.

Run CDP with 50 workers at 800x600 DPR 1:
12,631 cases; 8,991 pass, 3,315 fail, 265 timeout,
54 harness-stalled and 6 error. The case universe and exact fixed
schedule match the previous complete baseline.

Preserve the exact full-run classifications. Rerun all 25 status
changes twice and compare them with the prior full-baseline binary.
Ten pass gains stay passing and fail on the old binary. Of seven
full-run pass losses, four pass both reruns, one fluctuates, and two
also fail on the old binary with the same failure names.
Net pass gain nine is not a count of independently fixed cases.

Artifacts: target/wpt-full-8ad542448-20260908-AI8lGi
Binary SHA256: 1e6918fd6fc754f6aa5bebcd4582e904ecf113ae97165723c9b1b350225fc0bc
2026-09-14 15:06:20 +08:00
ldm0 699bef7428 fix(url): preserve intrinsic identity through the legacy Window alias
Expose webkitURL through the existing lazy Window-only alias registry so it shares the realm URL constructor and retains independent writable/configurable global bindings.

Make URL.parse construct through the realm intrinsic registry instead of reading the mutable public URL property. This prevents replaced constructors, getters, deletion, and argument-conversion side effects from changing the factory result or the realm of its prototype.

Add five Window regressions for laziness, descriptors, independent rebinding/deletion, named properties, argument-conversion side effects, and retained cross-realm constructors. Extend Dedicated/Shared/Service Worker checks to verify the alias is absent and parsing ignores a replaced public URL binding.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17637 passed, 13 skipped). All 27 targeted regressions pass.

CLI and CDP agree on all 54 fixed comparison cases: 51 to 52 passing cases, 7858 to 7859 passing subtests, no new failures. URL idlharness Window is now fully passing; the original 50-case URL/Location selection is 49/50, with only the existing srcdoc scrolling failure. The additional Web Audio historical failures are unchanged.

CDP smoke: 42/43 groups pass. Puppeteer cannot start because node is absent, also reproduced with the before binary. Artifacts: target/wpt-url-alias-20260908-ikStj8. Release SHA256: 1e6918fd6fc754f6aa5bebcd4582e904ecf113ae97165723c9b1b350225fc0bc.

References: https://webidl.spec.whatwg.org/#LegacyWindowAlias and https://url.spec.whatwg.org/#dom-url-parse.
2026-09-14 15:06:20 +08:00
ldm0 223f93ccbc fix(url): align hierarchical and opaque path encoding
Encode carets in hierarchical paths and encode only the final opaque-path space before query or fragment delimiters. Preserve the encoded path across suffix mutations and remove the obsolete parser trimming and V8 query-removal workaround.

Add five shared-parser and three VM regressions covering constructors, setters, URLSearchParams, DOM links, and cross-realm behavior. Synchronize 11 stale vendored WPT expected records with pinned current WPT data; inputs, the WPT driver, and the remaining expected-failure entry are unchanged.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17632 passed, 13 skipped). Vendored all-features unit tests, WPT driver, and 67 doctests pass.

On the same 50 URL/Location WPT cases, CLI and CDP both improve from 42 to 48 passing cases and from 7036 to 7085 passing subtests (+49), with no new failures. The two remaining failures are the existing webkitURL alias and srcdoc scrolling cases. Move the verified non-file anchor case to passed.

CDP smoke: 42/43 groups pass. Puppeteer cannot run because node is absent, reproduced with the before binary.

Artifacts: target/wpt-url-encoding-20260908-AP6CI1. WPT revision: db95fafd1fcef8428805e41eb5705d444e8c67ce. Release SHA256: f132f0afe7f49d627ed9b5d397b1d5b71d80432180b08b1d076aa67637efdd65.
2026-09-14 15:06:20 +08:00
ldm0 6a41ddc1af fix(url): keep hierarchical paths distinct from authorities
Apply scheme-specific slash handling to relative URL resolution: consume all special authority slashes, but retain non-special backslashes as path data.

Share serialization-only path prefix adjustment across parsing and path mutation, preserve logical paths when adding or removing authorities, and keep host metadata and query/fragment offsets consistent. Distinguish empty authorities from missing hosts in pathname setters and remove the redundant Web API workaround.

Add seven parser/mutation regressions and two cross-realm URL/DOM regressions. Remove only the seven upstream expected failures proven fixed; retain the original WPT data.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17,624 passed, 13 skipped); upstream all-features unit/WPT/doctests.

Focused CLI/CDP WPT agree across 50 cases: 48 additional passing subtests, no new failures. CDP smoke passes 42/43 groups; Puppeteer cannot start because node is missing, unchanged from baseline.
2026-09-14 15:06:19 +08:00
ldm0 d53b725499 fix(url): preserve file URL hosts and path segments
Vendor the existing url 2.5.8 release and align file parsing with WHATWG host inheritance, drive-letter handling, and empty path segments. Keep the dependency version and resource access policy unchanged.

Retain upstream test data and licenses, remove 39 fixed expected failures, and add parser, DOM/URL, and URL-policy regressions. Document the patch and pinned upstream revision in MOLI-PATCHES.md.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17,615 passed, 13 skipped); upstream all-features unit/WPT/doctests.

CLI and CDP WPT agree across 50 cases: 132 additional passing subtests, no new failures, and the file anchor case now passes 138/138. CDP smoke passes 42/43 groups; Puppeteer cannot start because node is missing, unchanged from baseline.
2026-09-14 15:06:19 +08:00
ldm0 46f2e6a2bc fix(url): align component setters with web parsing semantics
Use Web API component parsing for URL objects and HTML hyperlinks, preserving omitted ports and partial host updates, rejecting hostname port injection, and handling port digit prefixes, parser controls, and opaque paths.

Convert setter inputs before resolving the current URL so href, base URL, and adoption side effects are preserved. Keep normal hyperlink href mutations after parser rejection. Share guards for rust-url edge cases and correct the local url-basic fixture to preserve omitted ports.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17608 passed, 13 skipped). Across 50 targeted WPT cases, CLI and CDP agree: 39 to 41 passing cases and 372 additional passing subtests, with no new failing subtests. CDP smoke: 42/43 groups passed; Puppeteer could not run because node is absent. Existing underlying URL parser failures remain.
2026-09-14 15:06:19 +08:00
ldm0 d917a1d406 fix(url): preserve query and fragment delimiter semantics
Use the existing url::quirks Web API getters and setters for URL and hyperlink query/fragment components, including Location.search. Empty components read as empty strings without removing href delimiters; setters strip only one leading delimiter so the remaining payload survives.

Cover URL construction and parse results, connected and detached a/area elements in main, child and constructed documents, live URLSearchParams updates, and Location reads after document URL changes.

Validation: cargo fmt --all; full workspace clippy with warnings denied; nextest 17597 passed, 13 skipped. Targeted tests 23/23 passed. CLI and CDP runs of 38 WPT cases both gain 55 passing subtests with no newly failing cases. CDP smoke remains 42/43; Puppeteer cannot start because node is missing.
2026-09-14 15:06:19 +08:00
ldm0 dc5a1d9628 fix(file-input): use native FileList identity and payloads
Accept genuine FileLists across realms and prototype changes, reject spoofed interface values, and validate input receivers before the HTML setter steps. Read selected File metadata from private storage instead of script-visible properties.

Share native input-file access with FormData serialization so overridden input.files, FileList.length, and File metadata getters cannot change the submitted files. Preserve assigned FileList and File identity and create fresh lists in the input realm.

Validation: cargo fmt --all; workspace all-target/all-feature clippy with -D warnings; full nextest 17588 passed, 13 skipped; 87 focused tests passed including four new regressions. The same 17 related WPT cases and 236 subtests pass before and after.

Full CDP smoke: 41/43 groups pass. Upload and file-chooser scenarios now pass; dom-input reaches a separate select_option(ElementHandle) timeout reproduced on both parent and patched binaries. Puppeteer cannot start because node is absent. Artifacts: target/wpt-filelist-input-20260908-ASNKxA/.
2026-09-14 15:06:19 +08:00
ldm0 603480d2ef fix(history): preserve queued same-document traversal steps
Queue each History back/forward/go delta as its own authorized traversal task and resolve the destination when that task runs. Keep the committed traversal position separate from synchronous history mutations, and use the canonical Window history for isolated-world calls. Preserve Navigation API result-bearing traversal behavior.

Cover consecutive and opposite deltas, initially out-of-range requests, synchronous pushState, canceled and reentrant traversals, child documents, and isolated worlds. Update old coalescing assertions and wait for actual browser-owned history commits in protocol tests.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17584 passed, 13 skipped). Overlapping navigation WPT improves from 16/22 to 18/22, with both new cases passing all 8 subtests. Navigation API comparison preserves all 385 previously passing cases out of 432.

CDP smoke: 41/43 passed. The dom-input FileList upload failure reproduces on the parent binary; puppeteer could not start because Node is missing locally. Artifacts: target/wpt-history-traversal-20260908-lcpQpn/{before,confirmed,navigation-after,cdp,cdp-before}.
2026-09-14 15:06:19 +08:00
ldm0 7ddcdc8355 fix(navigation): defer child Location commits and honor window.stop
Prepare pending child history seeds without mutating the active Location, history state, or NavigationHistoryEntry. Preserve initiator URLs and reserved service worker clients when queuing the deferred commit.

Cancel pending child navigation tasks and invalidate in-flight response ownership without clearing another window navigation. Preserve cross-document history traversals and reject incompatible Window.stop receivers.

Add regression coverage for five navigation entry points, retained document/history identity, sibling and parent isolation, late responses, resumed navigation, and traversal. Align integration assertions with committed URLs and test meta refresh through a real network load.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (17581 passed, 13 skipped). The 22 overlapping-navigation WPT cases improve from 12 to 16 passes with no lost passes; seven focused cases pass again. Move the four reproducibly fixed cases from failed to passed.

An earlier full nextest run hit one empty-output assertion in cli_meta_refresh_shutdown_exits_without_renderer_abort; retained its log. Independent old/new binary probes did not reproduce it, and the complete rerun passed without changing or skipping that test. Artifacts: target/wpt-window-stop-20260908-XbyH6Q.

Additional paired release validation: all 385 previously passing Navigation API cases remain passing out of 432. Two existing incomplete cases exchange timeout/harness-stalled classification; all other statuses, subtest counts and failure names are unchanged. Release SHA256: 11d9e1bf1faa64b07538c5f7ed93e7d04a6761d10d4d591433480a614df8a293.
2026-09-14 15:06:19 +08:00
ldm0 483eb62b64 test(wpt): refresh full baseline after web API fixes
Run the complete all profile in CDP mode with 50 workers at 800x600 DPR 1. Source: 3ca9eda2e71b96e98915a392b878eab72a30ef86; WPT: db95fafd1fcef8428805e41eb5705d444e8c67ce.

12,631 cases: 8,982 pass, 3,324 fail, 265 timeout, 54 harness-stalled, 6 error. The case set and fixed run schedule match the previous all-profile baseline.

Preserve exact full-run classifications. Re-ran all 33 pass-status changes twice: 17 newly passing cases stayed passing; 8 formerly passing cases failed all three runs. Other differences include reproducible run-scope/timing sensitivity, so the net gain of 7 is not a count of newly fixed tests.

Artifacts: target/wpt-full-3ca9eda2e-20260908-NMJR82/{report-all,drift-a,drift-b}. Binary SHA256: a5cf5593bbaff4bb22d42f96ca5c2a3c3aa55d91a96249a2a9a95fa12a8330c0. The legacy version probe uses an unsupported subcommand; the binary was separately verified with --version as moli 1.1.3.
2026-09-14 15:06:19 +08:00
ldm0 f709ccd460 feat(webrtc): implement ICE and data channel event constructors 2026-09-14 15:06:19 +08:00
ldm0 7e16719a8d fix(clipboard): align clipboard event interfaces 2026-09-14 15:06:19 +08:00
ldm0 62dd5e1c5d fix(inner-text): refresh layout during parser scripts 2026-09-14 15:06:19 +08:00
ldm0 a5232dce9e fix(xhr): resolve open URLs with credentials 2026-09-14 15:06:19 +08:00
ldm0 2f94fd7992 fix(service-worker): validate registration URL arguments 2026-09-14 15:06:19 +08:00