Commit Graph
2054 Commits
Author SHA1 Message Date
ldm0 e4684e8f98 fix(dom): validate Range DocumentType contents before mutation 2026-10-20 05:22:03 +08:00
ldm0 8433ac01e2 fix(messaging): validate MessagePort state in author transfer order 2026-10-20 05:21:33 +08:00
ldm0 ebae4ca6ca test(cdp): handle split byte counters and EventSource cancellation
Aggregate Fetch dataReceived byte counters after completion instead of
requiring both counters to be positive in the first event. Preserve event
ordering and reject invalid lengths or missing positive totals.

Accept either committed EOF or an explicit ERR_ABORTED cancellation after an
EventSource message handler closes its connection. Keep request correlation,
resource classification, event order, and exactly one terminal checked.

Report failed scenario details when a smoke worker exits without a top-level
traceback. Cover the observed Chromium traces and invalid alternatives with
unit regressions, and document the real Chromium/Moli calibration.

Validation: 64 Python harness tests; release build; all 52 smoke groups on
both pinned Chromium and Moli release; network and browser-semantics repeated
20 times per engine (40/40 worker runs each).
2026-10-20 05:11:21 +08:00
ldm0 458f3c9951 fix(rendering): avoid stylesheet reparsing during animation scans
Reuse native Stylo keyframe rules and one style observation per synchronous document scan. Preserve fresh validation for reentrant event listeners and add regression coverage. Refs #1698.
2026-10-20 03:58:09 +08:00
ldm0 2eefd9690c fix(image): decode raster bodies served with XML MIME types 2026-10-20 03:50:08 +08:00
ldm0 a017801943 ci: isolate Chromium crash tests from host core handlers 2026-10-20 03:06:51 +08:00
ldm0 007f9b88e3 ci: disable core dumps during Chromium crash smoke 2026-10-20 03:06:51 +08:00
ldm0 926785f45a test(cdp): gate every smoke group on real Chromium 2026-10-20 03:06:51 +08:00
ldm0 727fe39cc5 test(cdp): expect Base64 for intercepted text response bodies 2026-10-20 03:06:51 +08:00
ldm0 1bfa5ce0cb fix(cdp): match Chromium intercepted response body encoding 2026-10-20 03:06:51 +08:00
ldm0 5399724fb0 fix(csp): enforce image policies for the owning document
Use the image element's document policy and violation recipient across realm
boundaries. Check CSP before reusing shared decoded images, and resolve meta
policy reporting groups against the owner's Reporting-Endpoints.

Cover cross-realm callers, response/meta policy isolation, report-only, bypass,
warm cache reuse, and reporting group isolation. Promote two passing WPT files.

Validation: cargo fmt --all; workspace clippy with all targets/features and
-D warnings; full nextest (18,364 passed, 13 skipped); 9 focused CSP tests.
20 WPT cases improved from 38/68 to 61/68 subtests. Two VT subtests now fail
like Chromium and remain recorded as failures; no WPT expectations changed.
2026-10-19 22:37:12 +08:00
ldm0 2843cde2c4 fix(images): load valid images from HTTP error responses
Use MIME and image bytes to determine decode eligibility instead of
requiring an HTTP 2xx status. Keep upstream request security checks and
origin cleanliness unchanged.

Cover valid raster and SVG bodies at error statuses and rejection of
empty or malformed image data through the shared parkable image path.
2026-10-19 14:32:11 +08:00
ldm0 6d495c1ade fix(file-api): stop Blob.slice at the first conversion error 2026-10-19 14:27:07 +08:00
ldm0 e41e51102e feat(webidl): add clamped long long conversion and derive support 2026-10-19 14:27:07 +08:00
ldm0 0186fc460c fix(speech): read payloads through registered native event proxies
Resolve the validated native event target before reading speech payload
slots. Keep interface-valued utterance identity unchanged and reject
author-created, revoked, and forged proxy receivers without traps.

Retain the speech conversion matrix and native-proxy regression while
using the complete speech implementation already merged in main.
2026-10-19 12:03:56 +08:00
ldm0 d75c82c30a perf(fetch): share immutable request bodies with Bytes 2026-10-19 11:22:56 +08:00
ldm0 b165771974 refactor(webidl): derive dictionary output and backing state 2026-10-19 10:54:54 +08:00
ldm0 258bb29ba2 fix(fetch): preserve worker continuation upload bytes 2026-10-19 05:27:10 +08:00
ldm0 dbeb411f4e fix(fetch): preserve intercepted binary request bodies 2026-10-19 05:27:10 +08:00
ldm0 fa960b2fc1 refactor(webidl): derive dictionary snapshots for RTC configuration 2026-10-19 05:26:21 +08:00
ldm0 b6a1e93e89 refactor(fetch): clarify transport redirects and cancellation 2026-10-19 05:24:53 +08:00
ldm0 45f3211939 fix(media): dispatch canplaythrough after canplay 2026-10-19 04:24:23 +08:00
ldm0 7458b20a02 fix(encoding): preserve UTF-16 boundaries in encoder streams 2026-10-19 03:55:08 +08:00
ldm0 1275fb7016 chore(deps): upgrade curl bindings and bundle libcurl 8.23
Pin the fork rebased onto upstream curl-rust 0.4.51, including the native
pre-request API and libcurl 8.23 with the upstream connect-only eviction fix.
Enable the upstream apple-sectrust feature explicitly in moli-curl.

Keep Moli proxy endpoints explicit while adapting transport comparisons to
libcurl's implicit HTTP port and hostname validation. Update form wire
request assertions to preserve the empty query already in navigation URLs.

Validated workspace formatting, warnings-as-errors Clippy, and all 20,342
nextest cases (18 skipped). The curl fork passed Linux/macOS/Windows CI.
2026-10-19 03:53:12 +08:00
ldm0 012bd10983 refactor(fetch): use curl-rust pre-request callbacks
Pin curl and curl-sys to the native callback API from curl-rust#1 and replace
the handwritten callback registration with Handler::prereq / Easy2::prereq.
Keep each collector's captured timing token and re-enable the callback after
reset; the dependency owns userdata lifetime and C panic handling.
2026-10-19 03:00:24 +08:00
ldm0 4c92f8049c perf(fetch): observe request start without verbose
Record request start with CURLOPT_PREREQFUNCTION using the handler already
owned by Easy2. Reinstall the callback on each attempt and read the
collector's writer token across moves, reset and progress reselection.

Enable verbose only for requested header observations or proxy CONNECT
diagnostics. Cover keepalive GET/HEAD/POST reuse, callback ownership,
HTTP/2 multiplexing and gated proxy tunnels.
2026-10-19 03:00:24 +08:00
ldm0 de2a56a39c perf(fetch): compact declared body lengths with NonZeroUsize
Keep zero-length completion local to header processing and retain only
positive body-length targets in the HTML and raw streaming collectors.
Preserve HTML redirect eligibility before committing an empty response.

On the same x86_64 dev build, the field shrinks from 16 to 8 bytes,
HTML collectors from 2752 to 2744 bytes, and raw collectors from 2728
to 2720 bytes. The enclosing transfer handler also shrinks by 8 bytes.

Cover accepted empty responses, unknown lengths and followed empty redirects
without changing their completion/cancellation behavior.
2026-10-19 03:00:24 +08:00
ldm0 0cf1cc09a9 fix(fetch): recover HTML response channels for cached redirects
Redirects and retries retain start/body senders in the reused easy handle.
Return those channels to the HTML job before publishing a final cache hit,
and use the retained easy when an attempt fails before reconfiguration.

Cover network-to-cache redirects with discarded interim/body observations,
and preserve the original error instead of reporting a closed start channel.
2026-10-19 03:00:24 +08:00
ldm0 bb1cf493c6 perf(fetch): record response body presence once per transfer
Latch the first body observation in the transfer handler and reset it whenever
the easy handle is reused. Record nonempty writes before declared completion,
while retaining progress-based detection for compressed empty payloads.

Avoid repeated timing locks without skipping cancellation checks.
2026-10-19 03:00:24 +08:00
ldm0 85df60cc74 perf(fetch): share transfer progress state in one allocation
Keep cancellation arbitration and timing in one Arc<ResponseProgressState>.
This removes one allocation per progress generation and one reference-count
update per clone, reducing the writer token from 16 to 8 bytes on x86_64.
Preserve transfer isolation and the existing atomic completion/cancel protocol.
2026-10-19 03:00:24 +08:00
ldm0 5fc2edc671 fix(fetch): classify 101 as final in response timing
Reuse the existing interim status predicate in buffered, HTML and raw
collectors so Switching Protocols starts the final response timeline.
Cover 101 alone and after 103 across all collectors, plus HTML header completion.
2026-10-19 03:00:24 +08:00
ldm0 703765dcd7 fix(fetch): record native terminal timing for HTML streams
Record response end before publishing native success or failure, including
cancellation, header-only responses and declared identity body completion.
Keep cache availability separate from the end of the cached body reader.

Cover delayed consumers, chunked bodies, empty responses, truncated transfers,
cancellation, cache hits and encoded Content-Length comparison boundaries.

Observe delivered body bytes before publishing declared completion.
2026-10-19 03:00:24 +08:00
ldm0 87efd22bc6 fix(fetch): isolate HTML timing for each transfer attempt
Select a fresh ResponseProgress for every HTML attempt and pass that exact
writer token to the collector, matching raw streaming. Redirects and retries
must not retain observations from a discarded hop.

Add a gated loopback 103 -> 302 with body -> 200 without body regression.
2026-10-19 03:00:24 +08:00
ldm0 70ed225165 fix(performance): preserve UTF-16 entry name identity 2026-10-19 01:05:00 +08:00
ldm0 0f0bedce86 fix(performance): convert measure arguments in Web IDL order 2026-10-19 01:04:15 +08:00
ldm0 0ef10319a3 fix(performance): share native clock state with user timing 2026-10-19 01:03:05 +08:00
ldm0 8c5ed2c7f5 fix(encoding): initialize decoder streams through native endpoints 2026-10-18 23:34:06 +08:00
ldm0 41d392cdc5 fix(encoding): validate decoder stream chunks with Web IDL 2026-10-18 23:30:19 +08:00
ldm0 029d2d0889 feat(fetch): observe native request and interim response timing 2026-10-18 23:20:44 +08:00
ldm0 a8def2344e feat(fetch): preserve native response timing observations 2026-10-18 23:20:44 +08:00
Donough Liu 536fa76aee fix(navigation): guard fragment routing and stale facade targets (#1701)
Require an actual target fragment for same-document Location navigation and keep history traversal comparisons separate. Reject saved cross-origin facade Locations when their frame identity has retired, preventing navigation of reinserted iframes.

Includes regression coverage for plain/fragmented URLs, event flags, history traversal, and current/retired facades.

Validated with cargo fmt, workspace Clippy (-D warnings), and full Nextest: 20,306 passed, 18 skipped; no retries.
2026-10-18 23:18:57 +08:00
ldm0 83d33a5c13 fix(navigation): preserve foreign child navigation semantics
Route cross-origin child Location writes through browsing-context navigation
commands to preserve push history and origin-filtered entries. Retain the
current main branch realm synchronization and receiver checks.

Cover foreign Location writes, named-target links/window.open, activation
type, and history filtering. Ported from 880e91a251.

Fixes: 67283068e3
2026-10-18 22:39:40 +08:00
ldm0 f4d607efa9 fix(encoding): use standard label parsing for text decoders 2026-10-18 21:52:03 +08:00
ldm0 1be4b6c441 fix(performance): align observer types with Event Timing exposure
Advertising PerformanceEventTiming without event and first-input observer
types makes supported-types-consistent-with-self.html fail. Include both
Window entry types in sorted order while preserving Worker exposure.
Cover parent and child Windows on secure and insecure origins and update
exact-list expectations.

Verify the introducing boundary: 3cf565afe0 passes the upstream case,
while its child 3dece8ce4c fails with the same assertion as the full run.

Fixes: 3dece8ce4c ("feat(performance): expose the remaining timing interface objects")

Validation: cargo fmt --all; cargo clippy --workspace --all-targets
--all-features -- -D warnings; cargo nextest run --no-fail-fast
(20,261 passed, 18 skipped).
2026-10-18 21:29:58 +08:00
ldm0 b35056ac82 fix(wpt): absorb parallel fixture connection bursts
The inherited listen backlog of five makes concurrent browser connections
wait for TCP retries before fixture handlers run. Match wptserve's backlog
of 2000 for every IPv4/IPv6 origin without changing test timeouts.

Add real socket tests that queue a complete 50-worker burst before the
accept loop starts. Both address families time out before this change and
connect successfully afterward.

With the same frozen release binary, Worker error stress changes from
86/100 passes to 150/150 after changing only the backlog. Script-order
and worker XHR timing cases each pass all 30 additional trials.

Validation: 81 Python tests across connection backlog, fixture resources,
fixture responses and runner orchestration; git diff --check.
2026-10-18 20:13:58 +08:00
ldm0 e9c090568f feat(streams): consume async sequences with ReadableStream.from 2026-10-18 20:13:24 +08:00
ldm0 6a53f6d345 test(cli): reserve the connection-refused fixture port 2026-10-18 20:13:24 +08:00
ldm0 496bc5c848 fix(fetch): revalidate disk cache for request control headers 2026-10-18 20:11:53 +08:00
ldm0 80618fce6c fix(encoding): snapshot decoder input after options conversion 2026-10-18 20:03:00 +08:00
ldm0 a46e654706 perf(layout): bound initial numeric cache reservation
Reserve at most four existing boxes on the first store and grow with actual cache demand. Avoid the full-tree candidate scan and cover sparse stores in both flattened and ordinary block trees.
2026-10-18 20:01:57 +08:00