Commit Graph
1848 Commits
Author SHA1 Message Date
ldm0 b1d06cde76 fix(domparser): retain HTML document parse modes 2026-10-12 17:08:29 +08:00
ldm0 5b32e8f7ad fix(dom): serialize outerHTML by document mode 2026-10-12 17:05:39 +08:00
ldm0 da7a9b254b fix(svg): enforce float distance conversion and empty-path errors 2026-10-12 16:06:01 +08:00
ldm0 d9928760ed fix(webidl): isolate internal descriptor records from prototype pollution 2026-10-12 14:59:03 +08:00
ldm0 06866c9474 feat(webidl): derive EnforceRange unsigned short conversion 2026-10-12 14:57:52 +08:00
ldm0 f11e3ecb3f feat(webauthn): parse JSON credential options with native WebIDL conversion 2026-10-12 14:50:23 +08:00
ldm0 dcf8cb94ee feat(webidl): support lossless DOMString16 in derive bindings 2026-10-12 14:45:32 +08:00
ldm0 99c24fd8de fix(fetch): retain referrer selection across redirect hops
Retain the referrer selected for each completed hop before applying the redirect response policy. A later permissive policy cannot restore an omitted referrer or stripped path. Apply this to buffered, HTML streaming, raw streaming and cached redirects, with native HTTP regressions for policy changes, manual redirects and request identity preservation.
2026-10-12 04:51:02 +08:00
ldm0 9eebd22408 fix(layout): paint option labels in native select listboxes 2026-10-12 04:11:39 +08:00
ldm0 46eb3fe889 feat(webidl): derive octet arguments with modulo-256 conversion
Add the shared WebIDL octet converter and derive support for explicit octet and inferred u8 fields. Convert through JavaScript numeric coercion and modulo arithmetic. Regressions cover negative/fractional/large values, nonfinite numbers, thrown conversion identity, argument sequence order, dictionaries, and unsupported primitives. MIDI bindings are separate.
2026-10-12 03:51:53 +08:00
ldm0 53111bf02f feat(webidl): write BufferSource rows without changing padding
Extracted from wpt-misc-fix.

Source-commit: 4fb35a340e
2026-10-12 02:14:09 +08:00
ldm0 417946cc5f fix(iframe): centralize document load delivery 2026-10-12 02:11:34 +08:00
ldm0 5d2295c86c refactor(browser): preserve typed permission and download errors 2026-10-12 02:11:12 +08:00
ldm0 e0301f124e feat(webidl): derive sequences of dictionary values
Extracted from wpt-misc-fix.

Source-commit: 4fb35a340e
2026-10-12 01:11:02 +08:00
ldm0 4c31485151 fix(url): preserve file URL hosts and leading path segments
Vendor rust-url 2.5.8 with narrowly documented file-URL parsing fixes. Preserve leading empty path segments, retain non-local hosts while normalizing Windows drive letters, and apply the same rules to relative resolution and pathname setters. Include licensing, the upstream fixtures, native URL regressions, and JavaScript URL property regressions.
2026-10-12 01:07:26 +08:00
ldm0 9e73581c00 test(svg): use the shared default-context fixture
Keep native filter, marker and geometry receiver fixtures compatible with
the WindowRealmRuntime migration without reaching into VM storage fields.
2026-10-12 01:06:51 +08:00
ldm0 c9a6888250 fix(svg): validate geometry accessors with native brands
Build on the shared SVG animated-length getter ownership fix to validate geometry and graphics receivers through native brands. Keep producer-realm identity for cold borrowed getters and registered native proxies; reject forged and author-proxy receivers without invoking traps. Cover live, windowless and foreign-document geometry attributes, transforms and path lengths.
2026-10-12 01:06:51 +08:00
ldm0 3fc2e28f7d fix(svg): brand filter and marker getters and retain owner identity
Validate SVGFilterElement and SVGMarkerElement getters through generated native receiver brands. Canonicalize registered native proxies before caching animated length, enumeration, and angle tear-offs, and create those values in the owner realm. Regression matrices cover forged and author proxy receivers, borrowed getters, windowless documents, and registered native proxy identity.
2026-10-12 01:06:51 +08:00
ldm0 8ca9986eec feat(webidl): derive wrapping signed long long conversion
Extracted from wpt-misc-fix.

Source-commit: 4fb35a340e
2026-10-12 01:03:50 +08:00
ldm0 60c0a7ffcb fix(cssom): validate keyframe receivers and preserve mutation errors
Extracted from wpt-misc-fix.

Source-commit: f57431be78
Source-commit: 8b8655fd27
2026-10-12 01:03:35 +08:00
ldm0 2187555959 fix(runtime): defer child-frame evaluation through the Inspector owner
Extracted from wpt-misc-fix.

Source-commit: 2ff2732b61
2026-10-12 01:02:29 +08:00
ldm0 3b982427c4 refactor(webaudio): derive AudioNode graph argument validation
Use typed WebIdlArgs for destinations and port numbers, leaving receiver
validation in the shared AudioNode declaration. Complete disconnect
argument conversion before checking graph state or removing edges.
2026-10-12 00:42:02 +08:00
ldm0 d7c8967f1d fix(browser): preserve permission replies when page owners retire
Extracted from wpt-misc-fix.

Source-commit: b34d515d88
2026-10-12 00:26:31 +08:00
ldm0 fa6ffcdbf3 fix(layout): apply 2D transforms written with 3D functions 2026-10-12 00:23:23 +08:00
ldm0 5980e3caf9 fix(runtime): preserve typed fetch timeout for late inner results
Extracted from wpt-misc-fix.

Source-commit: 9e5e78ebef
2026-10-12 00:22:42 +08:00
ldm0 2d2b21d38e refactor(worker): box dedicated worker message payloads
Extracted from wpt-misc-fix.

Source-commit: 4a11f15f9c
2026-10-12 00:21:23 +08:00
ldm0 147bd6035c chore(wpt): refresh verified parent browsing-context cases
Move choose-_parent-001/002/004 to passed after receiver-based target
resolution. Each passed five isolated release runs on this main-based
branch. Refresh only these three cases and preserve all other recorded
outcomes; this is not a new full-suite run.
2026-10-12 00:20:39 +08:00
ldm0 edaa12ed89 fix(window): resolve parent targets from the receiver
Resolve window.open _parent/_top targets from its receiver Window instead
of re-reading the ambient dispatch scope. Recognize child receivers on
these target paths, including borrowed Window.open methods. Preserve the
entered Window fallback for other receivers and the existing dispatch
scope used by element/form navigation.

Cover nested receivers, mixed-case _parent targets, borrowed methods, and
empty/nonempty URLs. Fix choose-_parent-001/002/004 without depending on
other popup or storage fixes.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast: 19,937 passed, 17 skipped
- release WPT: each affected case passed five isolated attempts
- nearby cases: 10 pass, 5 timeout; the five timeouts match the checked-in
  case statuses at the main base, with no new failing classifications
2026-10-12 00:20:39 +08:00
ldm0 fdda8a460d fix(events): preserve rejection event object identity
Extracted from wpt-misc-fix.

Source-commit: 658efaec07
2026-10-12 00:13:33 +08:00
ldm0 8b08758bd1 fix(streams): mark internal rejections handled without author catch hooks
Extracted from wpt-misc-fix.

Source-commit: a6bb958b1f
2026-10-11 23:01:10 +08:00
ldm0 cfc97efe51 fix(fetch): preserve received HTTP status text
Carry received HTTP reason phrases from the parser through buffered and streaming responses, disk and memory caches, page responses, Fetch, and XHR. Preserve custom and empty HTTP/1 phrases and report empty text for HTTP/2 and HTTP/3. Synthesized responses retain canonical fallback. Regressions cover whitespace, non-ASCII bytes, and cache round trips.
2026-10-11 21:19:08 +08:00
ldm0 e806cfbeb3 fix(iframe): dispatch one initial load for adopted frames
Validation on this branch: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings.
Nextest and WPT reruns omitted at the user's request.

Includes the ablation-confirmed cleanup from e5491f4b65.
2026-10-11 21:06:50 +08:00
ldm0 876de3b64a fix(window): queue initial javascript URLs on the target page
Validation on this branch: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings.
Nextest and WPT reruns omitted at the user's request.
2026-10-11 21:06:06 +08:00
ldm0 09bcbd0566 fix(window): avoid replaying completed auxiliary document lifecycle
Validation on this branch: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings.
Nextest and WPT reruns omitted at the user's request.
2026-10-11 21:04:27 +08:00
ldm0 72b47ba1ca fix(worker): omit the error value when reporting nested worker failures
Propagate an unhandled nested worker exception to the parent worker with ErrorEvent.error set to null, as required by omitError reporting. Update the existing end-to-end parent onerror regression to inspect the null value while retaining filename, line, column, and message checks.
2026-10-11 21:02:13 +08:00
ldm0 9e66b13ac1 fix(cssom): derive computed-style arguments and handle disconnected elements
Convert getComputedStyle Element and nullable pseudo-element arguments through the shared WebIDL derive path in main, iframe and popup windows. Preserve conversion exception identity and prevent pseudo-element conversion for invalid element receivers. Regression fixtures cover cross-realm genuine elements, author proxies and thrown coercions. Retain current window receiver and scrolling infrastructure. Determine expected intrinsics from the actual binding function realm while retaining main, iframe and legacy popup document coverage. Treat disconnected child-frame and popup targets as empty before consulting cached context state. Retained style objects update across connection and removal; the 318-assertion matrix keeps all original conversion checks.
2026-10-11 20:52:08 +08:00
ldm0 bc67a47970 fix(dom): preserve DOMImplementation argument and result realms
Validate DOMImplementation native receivers before argument conversion, and convert createDocument qualifiedName before its nullable DocumentType argument. Allocate factory results in the owner Document relevant realm after conversion, preserving the callee realm for conversion errors. Cross-realm regressions cover genuine and forged doctypes, author proxies, conversion order, and factory result ownership.
2026-10-11 20:48:51 +08:00
ldm0 fd80eb23f4 fix(dom): expose the native SVG document root
Return Document.rootElement from the current native document element only when it is an SVG-namespaced svg root. Retain wrapper identity in the Document owner realm without reading author-overridable properties. Regressions cover root replacement/removal, adoption, cloning, namespace/case distinctions, cross-realm access and registered native Document Proxies.
2026-10-11 20:47:43 +08:00
ldm0 9c45bdc81c feat(speech): construct native synthesis events with validated payloads 2026-10-11 19:53:16 +08:00
ldm0 98a342af73 feat(encoding): add a native streaming XHR response decoder
Add an incremental XHR text/document decoder that distinguishes text, XML and HTML response kinds. BOM precedence, transport charset, XML declarations and HTML sniffing retain state across arbitrary chunk boundaries. Native unit tests cover all split points and truncated input. This PR adds the decoder API; switching every XHR producer to it is separate work.
2026-10-11 18:03:06 +08:00
ldm0 9616d01ab1 fix(cookies): handle Unicode expiration dates without panicking v1.1.16 2026-10-11 17:44:26 +08:00
ldm0 6e70b3f1cf perf(accessibility): keep uncommon AX fields out of line
Group ignored reasons, values and nonempty properties behind one optional box. Use nonzero backend IDs and serialize fixed role/name kinds on demand, reducing the common AX node from 296 to 96 bytes while preserving payload shape and field order.

Add reproducible CLI and native construction benchmarks. Generated 40000-row text dumps use 382.6 to 341.5 MiB peak RSS; 200000-row text dumps use 1753.5 to 1612.8 MiB. Record the roughly 5.5 percent native construction cost for dense ignored nodes alongside the memory gains.

Validation: cargo fmt --all; workspace clippy with all targets/features and warnings denied; cargo nextest run --no-fail-fast (19890 passed, 17 skipped). All 188 formal benchmark samples match their corresponding before/after outputs.
2026-10-11 17:37:40 +08:00
ldm0 1404fa344b perf(accessibility): avoid JSON intermediates in semantic dumps
Large semantic dumps retain a JSON object graph with allocated field names
and string node references for every AX node before formatting the output.

Build compact typed nodes with numeric references and pass them directly
from the renderer to the CLI. Keep one AX traversal for both typed nodes
and CDP payloads, converting protocol nodes individually as they are built.
Preserve omitted/empty fields, field insertion order, list markers, and
frame-root attachment order. Render text iteratively and trim in place.

Add compatibility coverage and a standalone benchmark that stages both
executables on the same filesystem, alternates runs, records peak RSS and
wall time, and rejects changes to dump output bytes.

Against main at 5f5e1fff3 on a generated 40,000-row list (three interleaved
runs, medians):
- semantic_tree_text: 718.42 -> 390.96 MiB; 2.919 -> 2.204 s.
- semantic_tree: 815.71 -> 483.81 MiB; 2.484 -> 2.369 s.
- markdown control: 95.52 -> 95.59 MiB; 0.895 -> 0.913 s.

A generated 200,000-row list also completes with identical bytes (one run):
- semantic_tree_text: 3473.02 -> 1775.07 MiB; 13.245 -> 10.015 s.
- semantic_tree: 3803.45 -> 2137.26 MiB; 12.626 -> 10.397 s.

JSON/text comparisons also match the baseline on a mixed fixture containing
hidden/ignored nodes, form values, list markers, shadow DOM, and child frames.
These generated fixtures are independent of the external MOL-269 evidence.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast (19,885 passed, 17 skipped)
- cargo build --release -p moli

Refs: MOL-269
2026-10-11 17:37:40 +08:00
ldm0 fd2ed360cc fix(accessibility): preserve NBSP in accessible names 2026-10-11 17:34:34 +08:00
ldm0 1b05e14af2 fix(dom): honor computed content visibility in innerText
Use computed style facts for content-visibility locks instead of reading
inline declarations. Hidden-until-found and stylesheet-hidden contents
stay out of innerText until revealed or overridden by the CSS cascade.

Remove the obsolete inline-only readers and cover hidden-until-found,
boolean hidden, synchronous reveal, and important stylesheet overrides.

Fixes MOL-113.
2026-10-11 17:33:50 +08:00
ldm0 4b8dc0f320 feat(webidl): retain native BufferSource identity through conversion
Add borrowed AllowShared BufferSource conversion for algorithms that copy after dictionaries are converted, including native range writes and atomic shared-memory byte access. Reject resizable/growable storage and author proxies using native identity, including detached resizable buffers and views. Tests cover late snapshots, bounded writes, surrounding bytes, detachment and native resizable flags. Individual API migrations are separate.
2026-10-11 09:16:23 +08:00
ldm0 e422739933 feat(reporting): expose the native ReportBody interface object 2026-10-11 09:14:44 +08:00
ldm0 77f70f6e30 chore(wpt): refresh full release case status lists
Refresh all-profile WPT Cross lists from Moli 1.1.16 release at 23c6bb5754
against WPT db95fafd1f, using CDP with 50 workers. Each of 13,631 cases
ran once: 9,674 pass, 3,656 fail, 253 timeout, 37 harness-stalled,
10 error and 1 crash. Pass count rises by 86 (132 gained, 46 lost).

Review all 46 lost passes against the previous snapshot's binary:
41 stable version regressions, 2 existing flaky cases, 1 existing runner
readiness race and 2 cases failing in both versions. Preserve original
full-run outcomes in the lists. Validate exact report agreement, sorted
disjoint coverage and no missing cases; git diff --cached --check passes.
2026-10-11 09:12:27 +08:00
ldm0 7f0c43968f fix(window): share inherited document.domain across related pages
Validation on this branch: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings.
Nextest and WPT reruns omitted at the user's request.
2026-10-11 09:01:44 +08:00
ldm0 744e050af8 feat(locks): expose secure Lock and LockManager interfaces 2026-10-11 09:00:08 +08:00