Commit Graph
2051 Commits
Author SHA1 Message Date
ldm0 143e72ec4d fix(layout): retain normal grid stretching for native form controls
Map native controls to compressible replaced leaves without the image-only replaced flag. Cover checkbox, radio and range normal alignment at 50 by 50 pixels.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (20283 passed, 18 skipped). Release v3 and five browser regression rounds. Full WPT recorded separately.
2026-10-19 04:52:47 +08:00
ldm0 0232344406 fix(xml): report malformed attributes while preserving namespace parsing
Check strict lexical XML errors before xml5ever tree construction. Cover six malformed attribute/name forms both alone and in a valid XHTML prologue, plus distinct xml:lang/lang namespaces.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (20283 passed, 18 skipped). Release v3 and five browser regression rounds. Full WPT recorded separately.
2026-10-19 04:52:47 +08:00
ldm0 81c9bd1abd fix(layout): integrate ratio and orthogonal grid regression fixes 2026-10-19 04:52:47 +08:00
ldm0 5976146db3 fix(layout): retain grid track areas for positioned descendants 2026-10-19 04:52:47 +08:00
ldm0 281a920d89 feat(layout): update Taffy and Stylo forks with current Blitz adapters
Move Taffy to 0.15 and Stylo to 0.22 using fixed fork revisions, with the
matching stylo_taffy adapter. Upgrade cssparser and the production HTML/XML
parsers while preserving the vendored XML behavior.

Adapt sizing inputs, baselines, grid positions, overflow and out-of-flow
ownership. Preserve font-stretch CSSOM compatibility and intrinsic sizing
through nested atomic inline probes.

Validation: root cargo fmt --all; strict workspace/all-target/all-feature
Clippy; Nextest 20280 passed, 18 skipped; Release build; five browser
regression rounds; RTL and nested intrinsic Chromium geometry controls.
Full WPT Cross is recorded separately with its Cases refresh.
2026-10-19 04:52:47 +08:00
ldm0 35229b702c chore(wpt): refresh cases after Taffy fork rebase
Record the complete Release/CDP run of all 13631 cases against WPT
db95fafd1fcef8428805e41eb5705d444e8c67ce: 9748 pass, 3594 fail,
254 timeout, 25 harness-stalled, 9 error and 1 crash, with no missing
cases. The pass count increases by six and the original ten WPT
regressions remain passing.

Retest all 26 worsened statuses on both frozen Release binaries for
three rounds each. No newly stable regression was reproduced; retain
the full-run classifications here instead of substituting retest passes.
2026-10-19 04:52:47 +08:00
ldm0 d95b40495e chore(deps): update Taffy fork after compatible upstream rebase
Replay the 43 Moli patches onto upstream 2e4dbc55 while preserving the
0.13 interfaces consumed by Moli and stylo_taffy. Include the upstream
grid loop bounds, definiteness tracking and flex wrapping fixes.

Keep the intrinsic sizing regression fixes and repair the existing RTL
scrollbar inset and wrapped-column baseline failures. Pin the published
fork at 3c19aa124ebcef6320a4e84e141be19f4af659c3.

Validation: cargo fmt --all; strict workspace Clippy; full Nextest
(20279 passed, 18 skipped, NEXTEST_TEST_THREADS=16); Release build;
Taffy native tests (5898 passed, 4 ignored); full WPT Cross plus old/new
three-round retests of all 26 worsened case statuses.
2026-10-19 04:52:47 +08:00
ldm0 3c65e7cf65 chore(wpt): refresh cases after MOL regression fixes
Record the complete13,631-case CDP run against Releasecb22b5217d6, SHA25632b5f4211e4d26a2193446c5d771d41c21216f12dbe78ed041f0bf0503a0e269. Results:9742pass,3619fail,236timeout,25harness-stalled,8error,1crash; no missing cases. Matrix, engine results, journal and sorted disjoint case lists agree.

Six gained passes include four layout cases. The four lost passes were checked with frozen-before andfixed binaries, three rounds each: the ancestor iframe case fails in both with varying subtests; Trusted Types navigation variants pass or stall intermittently. Preserve the actual full-run statuses. All ten regressions from the previous fix series still pass in this full run.
2026-10-19 04:52:47 +08:00
ldm0 8ab5696ccc fix(layout): include percentage padding in flex content sizing
Resolve percentage padding against the flex containing block while measuring a content flex basis. This keeps the text content width intact before line breaking. The browser regression covers three container widths, four padding percentages and both box-sizing modes.

MOL-467: Taffy 02c4920e93348e20cb197667a366e0a15e91db39. Browser before/after probes retained.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast: 20279 passed,18 skipped.
2026-10-19 04:52:47 +08:00
ldm0 d4016168b2 fix(layout): apply inline-block intrinsic maximum widths
Constrain auto-width inline-blocks by max-width:min-content while preserving intrinsic minimums, minimum precedence and automatic growth. Pin the separate Taffy sizing fixes, including the block-root auto-fill control.

MOL-466: Taffy a34a7a82e5144b311b2fcb34feeb8412db9d0117. Browser before/after probes retained.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast: 20278 passed,18 skipped.
2026-10-19 04:52:47 +08:00
ldm0 3b602b4240 fix(layout): honor intrinsic minima in grid tracks and rows
Pin the separate Taffy71617899 and4a618c7b fixes: resolve authored intrinsic item minima for auto-track contributions and before fixing the width used to measure row height. A smaller preferred width must not hide the minimum in either path.

MOL-465: browser regression covers min-content/max-content with auto,0px and50px preferred widths, track positions and row heights. The two pre-fix failures were next-column x40 instead of60 and row height60 instead of20. The Webfont grid nontermination control still completes.

cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast:20277 passed,18 skipped. Initial partial-fix failure logs retained.
2026-10-19 04:52:47 +08:00
ldm0 163941940d fix(layout): terminate fractional grid track growth
Pin Taffy5453d6cd, whose remaining-growth subtraction uses the same rounded base-plus-increase value as its growability predicate. This prevents a zero-growth iteration from repeating forever.

MOL-464: the new bounded CLI test fails after10s before the pin and passes afterward. The nested grid, percentage margin and Webfont reproducer also completes in0.17s; this trigger hangs in both1.1.17 and1.1.18.

cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast: 20276 passed,18 skipped. A disk-full compilation attempt is retained separately; the successful full retry passes.
2026-10-19 04:52:47 +08:00
ldm0 5b0527fefd chore(wpt): refresh cases after regression fixes
Validate Release f47e9a70b4 (moli 1.1.18) against WPT db95fafd1fc,
all 13,631 cases, CDP mode with 50 parallel workers.

pass=9740 fail=3620 timeout=239 harness-stalled=22 error=9 crash=1.
All 10 original lost passes now pass and also passed 30 targeted rounds each.
Compared with be79279c94: 18 gained passes, 3 lost passes, net+15.
The 3 new timeouts passed 5 fresh runs and 3 predecessor replays in both
original and current Release. Preserve their full-run timeout status.
An initial duplicate Worker pressure burst still flaked; retain that evidence.
Subsequent pressure controls passed 150/150 on each Release.

Verified exact coverage, binary hash, no aborted workers, and matching
matrix, engine, journal and sorted disjoint Cases lists.
2026-10-19 04:51:48 +08:00
ldm0 2fbc805e32 fix(html): start child meta refresh after owner load delivery
Capture refresh candidates during parsing and load callbacks as document-owned
pending work, then arm their timers only after the iframe owner load callback
finishes. DOM readyState complete alone does not establish that load callbacks
have run, so immediate mutation timers could change a fragment before the first
iframe load observed the original URL.

Use FrameOwnerStore's exact-document load progress to admit timer activation.
Keep pending candidates when meta elements move, preserve active deadlines for
identical candidates, and cancel both pending and armed work on retirement.

Add a Browser integration test that reproduces the premature fragment change,
and a Page task-executor ordering control. WPT same-document-refresh.html passes
with bec88e11cf and fails with6faf8d3fed2 before this fix.

Fixes: 6faf8d3fed (fix(html): schedule refresh mutations in loaded child documents)

Validation:
- 15 related child refresh and Browser integration tests pass
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-10-19 04:51:48 +08:00
ldm0 0e34b9e2ac fix(html): schedule refresh mutations in loaded child documents
Route native meta insertion and attribute mutation candidates by their owning
document, instead of limiting mutation refresh handling to the top document.
Loaded child documents now register adopted or inserted refresh elements using
their own URL, sandbox policy and exact document timer owner. Ignore shadow-tree
candidates and retain the existing deadline for identical refresh candidates.

Use the active runtime borrow directly while registering child timers and create
the native callback in the child Window realm. Initial load capture remains the
fallback for child documents that are still loading.

Add deterministic source-first/source-last sandbox adoption tests and post-load
insertion and shadow-tree controls. The old frozen Release also reproduces the
related allow-scripts-flag-changing-1 WPT flake (7 pass/3 timeout in10 rounds);
the new source-last adoption and post-load insertion tests fail before this fix.

Validation:
- 13 related child meta refresh tests pass
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-10-19 04:51:48 +08:00
ldm0 6d1bc4e689 fix(html): retain meta refresh inserted by load callbacks
Keep the pre-load registration that preserves refreshes across meta adoption,
and also scan after owner load callbacks when no refresh is armed. This retains
support for callbacks that insert a new refresh without canceling the original
document's refresh when its element was moved or removed.

Add deterministic Window-load and iframe-load insertion tests. Both fail before
this fix, and the full Release WPT probe also exposed dynamic-append.html timing
out at 7e79f9c154a; that incomplete validation was stopped before Cases refresh.

Fixes: 7e79f9c154 (fix(html): arm child meta refresh before load callbacks)

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-10-19 04:51:48 +08:00
ldm0 1136e8708a fix(html): arm child meta refresh before load callbacks
Register the child document refresh before dispatching Window and owner-element
load callbacks. A callback can adopt the meta element into another iframe;
rescanning afterward lost the original refresh depending on frame load order.
The existing exact-document timer owner and navigation cancellation still apply.

Add deterministic source-first and destination-first iframe tests, including
adoption into an already loaded sandboxed document. The source-last case fails
before this change while the destination-last control passes. The old ordering
is present at least as far back as the earliest visible Public preview commit
27b5135cb6, rather than a newly introduced feature change.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-10-19 04:51:48 +08:00
ldm0 43d10a6c07 chore(wpt): refresh 1.1.18 full release case statuses
Record the all-profile CDP run of Moli 1.1.18 at e0df01a2cd against
WPT db95fafd1f with 50 workers. All 13,631 cases ran once:
9,725 pass, 3,629 fail, 240 timeout, 28 harness-stalled, 8 error and 1 crash.

Preserve the original full-run outcomes. Compared with the prior snapshot,
25 cases gained pass and 10 lost pass, for a net gain of 15. Focused
retests reproduce six lost passes consistently and identify four flaky
cases, including a Worker error test sensitive to concurrent load.

Validate exact matrix agreement, sorted disjoint lists, complete coverage,
and git diff --check.
2026-10-19 04:51:35 +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
ldm0 515fe0c484 perf(layout): embed numeric cache slots in layout boxes
Replace the dense box-to-cache index vector with a one-based Option<NonZeroU32> slot in existing LayoutBox padding. Keep compact cache storage and preserve cache ownership through box compaction, growth, and invalidation.
2026-10-18 20:01:57 +08:00
ldm0 946ecbd01f fix(performance): keep worker performance cache private
Store and retrieve the Worker performance singleton through a V8 private slot, so author reflection cannot discover the internal cache and a same-named property cannot replace it. Keep PerformanceEntry.id, which is defined by the current Performance Timeline draft and local WPT IDL.

Regression verifies hidden cache, author-property spoofing, singleton identity and entry IDs. cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast: 20275 passed, 18 skipped. Browser CLI Worker timing and Window/Worker reflection probes pass.
2026-10-18 20:00:14 +08:00
ldm0 a46e4678b4 fix(url): create query objects with intrinsic bindings 2026-10-18 19:57:57 +08:00