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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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).
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.
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.
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.
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.