Commit Graph
1326 Commits
Author SHA1 Message Date
ldm0 e5ac01642f fix(wpt): serve service worker import and update fixtures
Model service worker script redirects, versioned imports and update response sequences, including file-based and installation updates. Preserve request methods, cache metadata, raw script bytes and per-resource state shared across fixture origins.

(cherry picked from commit 5d0ddf013b)
2026-09-29 19:03:23 +08:00
ldm0 3ef21f694e fix(wpt): serve service worker registration error fixtures
Consolidate #621 with its fixture-resource initialization correction. Preserve remote-context handler selection from main.
2026-09-29 19:03:23 +08:00
ldm0 862bd53e87 fix(wpt): serve XHR response header fixtures
Model xhr/resources/headers.py with its duplicate, empty, cookie and non-ASCII response headers. Include HEAD behavior and precise fixture discovery regression coverage.

(cherry picked from commit 8557f41b0c)
2026-09-29 19:03:23 +08:00
ldm0 883f3f0c8d fix(wpt): serve XHR PUT and wildcard preflight fixtures
Consolidate #622, including its fixture-resource test correction, alongside the XHR network-error handlers.
2026-09-29 19:03:23 +08:00
ldm0 e11344f65c fix(wpt): model XHR network error fixtures
Serve malformed chunk framing and the upstream infinite redirect loop instead of Python source. Preserve raw partial body delivery, origin and query parameters, HEAD semantics, and exact fixture discovery.

Source: 0de7826105
(cherry picked from commit 0f4acf2725)
2026-09-29 19:03:23 +08:00
ldm0 967c9de888 fix(wpt): keep loopback host templates tied to the primary domain
Consolidate #552 and #938 on top of the IDNA and nested-domain support already in main. Preserve the requesting host for location templates and use web-platform.localhost in the cross-engine runner.
2026-09-29 19:03:23 +08:00
ldm0 e391d0924f fix(wpt): parse fixture response pipes like wptserve
Tokenize pipe commands with wptserve escape, argument, and repeated-query rules. Return HTTP errors for malformed pipes and preserve ordered header operations without response header injection.

Source: 232701464d
(cherry picked from commit 90258a7da8)
2026-09-29 19:03:23 +08:00
ldm0 fcfc477212 fix(cdp): normalize empty target creation URLs
Normalize an empty Target.createTarget URL to about:blank before constructing the renderer command so initial target metadata and navigation state agree. Regression coverage exercises default and browser-context target creation.

Validation: all branch checks passed. Summary [ 115.491s] 18922 tests run: 18922 passed (9 slow), 16 skipped
2026-09-29 18:25:21 +08:00
ldm0 10ccdc2064 fix(modules): share JSON and CSS response MIME validation 2026-09-29 18:11:53 +08:00
ldm0 fa6daec422 feat(webrtc): implement ICE and data channel event constructors
Expose RTCPeerConnectionIceEvent and RTCDataChannelEvent with native Event inheritance, dictionary conversion, branded payload validation and readonly attributes. Tests cover conversion order, exceptions, cross-realm values, subclassing, reinitialization and Window-only exposure.

Validation: all branch checks passed. Summary [ 104.941s] 18927 tests run: 18927 passed (9 slow), 16 skipped
2026-09-29 18:10:22 +08:00
ldm0 a7beb2e816 fix(html): reflect link and meta metadata attributes
Expose link.rev, link.type and meta.scheme through the existing native DOMString reflection infrastructure. Regression coverage includes live and windowless documents, owner-prototype descriptors, valid non-ASCII and astral Unicode, attribute mutations and receiver validation before value conversion.

Validation: all branch checks passed. Summary [ 191.579s] 18922 tests run: 18922 passed (3 slow), 16 skipped
2026-09-29 18:09:26 +08:00
ldm0 14cc9792ef fix(encoding): exclude HTML meta from XML encoding selection
Give document decoding explicit HTML, XML, and text declaration policies.
XML ignores HTML meta elements, retains BOM and transport charset precedence,
and selects an initial XML declaration or UTF-16 signature before its UTF-8
default. Keep partial declarations and signatures buffered across chunks.

Cover conflicting meta declarations with and without an XML declaration,
including main documents, iframes, and external raw input. Adapt seven
Chromium XML/XHTML navigation scenarios and three decoder boundary tests
from Chromium a03603fe9af6230a12f1b2fb2c18a7d003a0d937; source paths are
recorded next to the tests. These include KOI8-R script inheritance, CP1251
XML, BOM-less UTF-16, supplementary Unicode characters, and BOM boundaries.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- XML and Chromium regression tests passed.
- NEXTEST_TEST_THREADS=8 cargo nextest run --no-fail-fast:
  18,980 passed, 16 skipped.
2026-09-29 18:01:12 +08:00
ldm0 83a78cf6e3 fix(document): decode main XML responses before parsing
Keep network XML response bytes intact through the existing raw-body renderer
path. Decode both network and external XML bodies with the shared response
decoder, then install the selected encoding before document bootstrap.
Remove the obsolete ready-body capture variant used by the old XML path.

Cover matching main-document and iframe text, namespaces, and characterSet for
Atom, RSS, and text/*+xml responses with Windows-1252 headers, XML declarations,
and UTF-16LE/BE BOMs. Exercise the external input as single-byte chunks and
verify that BOMs override a conflicting transport charset.

Validation:
- Before the fix, the network regression returned caf� / UTF-8 instead of
  café / windows-1252.
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- Six focused XML tests passed.
- NEXTEST_TEST_THREADS=8 cargo nextest run --no-fail-fast:
  18,954 passed, 16 skipped.
2026-09-29 18:01:12 +08:00
ldm0 a3af75845d fix(document): preserve inherited encoding and XML MIME routing
Keep valid inherited text encodings ahead of heuristic detection while
preserving BOM, transport charset, and JSON default precedence. Share the
response decoder between streaming main documents, asynchronous child
loads, data URLs, and blocking child snapshots.

Classify navigation XML MIME types independently of DOMParser's allowlist,
including +xml subtypes in parser routing and text exclusions. Add
regressions for inherited UTF-8, literal encoding declarations, XML
namespaces, and DOMParser rejection of navigation-only XML types.

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- NEXTEST_TEST_THREADS=8 cargo nextest run --no-fail-fast
  18,952 passed, 16 skipped. Two existing timing tests failed under the
  default concurrency, then passed individually and in the full run above.
2026-09-29 18:01:12 +08:00
lanyue-llk 6f46f21142 fix(document): construct projection parser with the public API 2026-09-29 18:01:12 +08:00
lanyue-llk 345ba4cbc4 fix(document): share literal text parsing across child document paths 2026-09-29 18:01:12 +08:00
lanyue-llk 9d236a20ef fix(parser): preserve text document MIME and encoding semantics 2026-09-29 18:01:12 +08:00
ldm0 a9830ab24b fix(csp): reject nonnonceable script elements
Apply the shared script nonceability check to parser scripts, buffered preloads and runtime script preparation. Suspicious script attribute names and values must not authorize execution merely because a nonce matches. Includes parser, preload and dynamic-preparation regressions.

The attribute checks follow the [CSP3 nonceability algorithm](https://www.w3.org/TR/CSP3/#is-element-nonceable), including case-insensitive `<link`, `<script` and `<style` matches and parser duplicate attributes.

Validation: all branch checks passed. Summary [ 115.690s] 18925 tests run: 18925 passed (9 slow), 16 skipped
2026-09-29 16:27:50 +08:00
ldm0 b8fb80345e perf(fonts): skip pristine style materialization without sources
Avoid materializing a document style world during font reconciliation when no font state, style state or active author stylesheet exists. Keep document and connected shadow-root adopted sheets observable, and retain reconciliation after any state has been published. Tests cover the lazy path and shadow adopted-sheet sources.

Validation: all branch checks passed. Summary [ 104.769s] 18923 tests run: 18923 passed (9 slow), 16 skipped
2026-09-29 16:22:43 +08:00
ldm0 bec8387729 fix(popups): require a fragment for same-document navigation
Gate both popup same-document fast paths on GET, a non-null target fragment and non-reload navigation. Repeated fragmentless GET submissions now load a new document through the normal navigation path.

Exercise two GET and POST submissions for each popup target with no-store responses, checking actual requests and document replacement. Verified the GET regression fails before the fix.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18945 passed, 16 skipped).
2026-09-29 15:23:17 +08:00
ldm0 d732fcd8c0 fix(forms): keep popup submissions in their browsing context
Share the native document browsing-context check with visibility getters. Route popup self, parent and top submissions through popup navigation, preserving POST requests and fetching again for same-URL POSTs.

Cover real GET/POST requests, borrowed submit methods, repeated POST, navigation cancellation and closed popup documents. Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18945 passed, 16 skipped).
2026-09-29 15:23:17 +08:00
ldm0 c2972bb991 refactor(forms): share bindings across native and detached wrappers 2026-09-29 15:23:17 +08:00
ldm0 c12e9f8416 perf(forms): resolve named items from indexed candidates 2026-09-29 15:23:17 +08:00
ldm0 c3adec0054 fix(forms): preserve image sources in live named lists
Carry the selected control or image query into RadioNodeList descriptors
and reuse the same matching helpers when resolving live collections.
Retained image lists keep their filter when matching controls are added,
and retained control lists never switch to image fallback.

Cover image membership, descriptor access, name changes, tree order,
removal, and adoption while preserving form.elements control filtering.
2026-09-29 15:23:17 +08:00
ldm0 144a344e0f fix(forms): honor own properties in named access
Replace the native-member name allowlist with real own-property checks
using the incoming V8 name. Keep definition restrictions separate from
named-property visibility so Reflect.defineProperty returns false while
Object.defineProperty throws for supported names.

Cover own data and accessor properties across parsed, detached, adopted,
and child-document forms, including collisions with prototype members.
2026-09-29 15:23:17 +08:00
ldm0 da07e9723c fix(trusted-types): report eval violations in report-only mode
Apply Trusted Types conversion and violation reporting to report-only eval and Function sinks while allowing unconverted sources when enforcement is absent. Preserve default-policy exceptions and the existing rejection of transformed code-generation sources. Includes report-only execution and queued violation regressions.

Validation: all branch checks passed. Summary [ 132.995s] 18922 tests run: 18922 passed (9 slow), 16 skipped
2026-09-29 12:16:49 +08:00
ldm0 20746549c8 fix(wpt): expand IDNA and nested host templates
Expand WPT domain and host templates for configured Unicode labels, nested subdomains and alternate hosts using IDNA output. Leave unknown template keys and non-template response bytes unchanged. Tests exercise response bodies, headers and one-pass request substitutions.

Validation: all branch checks passed. Ran 324 tests in 125.691s; OK
2026-09-29 12:05:40 +08:00
ldm0 6108e3eda5 fix(wpt): support remote context executors and dispatcher queues
Support remote-context executor pages and dispatcher queues, including atomic FIFO messages, request-header forwarding, CORS and response pipes. The branch includes the minimal shared response/body helpers it needs and does not depend on the iframe-stash branch. Tests cover wire behavior, concurrent queue operations and case selection.

Validation: all branch checks passed. Ran 336 tests in 134.129s; OK
2026-09-29 11:23:31 +08:00
lanyue-llk 468729e7de fix(forms): preserve live and detached named property semantics 2026-09-29 07:54:26 +08:00
ldm0 3c7557ee2d feat(xpath): expose compiled expressions with context document evaluation
Expose XPathExpression and implement Document/XPathEvaluator.createExpression with a retained native XPath AST. Compilation resolves namespaces once; repeated evaluation reads the current context document, including detached and cross-realm documents.

Share context-document evaluation with Document.evaluate and invalidate detached-document iterators after native mutations. Regression coverage checks receiver/argument ordering, namespace resolution, document mutations, repeated evaluation, garbage collection, and isolate teardown.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 104.560s] 18907 tests run: 18907 passed (9 slow), 16 skipped
2026-09-29 07:31:28 +08:00
ldm0 a553acc7e4 feat(window): expose legacy navigator alias and External objects
Expose clientInformation as a replaceable alias of the associated Navigator, plus a per-Window External object with the legacy no-op methods. Retained getters use native associations after public properties are shadowed.

Regression coverage checks top-level windows, iframe realms, lightweight popups, detachment, object identity, property descriptors, native receiver brands, and replaceable properties.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 105.145s] 18906 tests run: 18906 passed (9 slow), 16 skipped
2026-09-29 07:27:06 +08:00
ldm0 826c8e3957 feat(events): implement animation transition and blob payloads
Implement AnimationEvent, TransitionEvent, and BlobEvent constructors and their read-only payload attributes using native Event state and shared Web IDL receiver validation. Preserve dictionary conversion order, DOMString UTF-16 code units, finite-double validation, and the required native Blob member.

Regression coverage checks descriptors, payload values, dispatch, subclassing, cross-realm constructors/getters, invalid receivers, and conversion exceptions.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 144.022s] 18905 tests run: 18905 passed (9 slow, 4 flaky), 16 skipped
2026-09-29 07:26:29 +08:00
ldm0 0c33cce924 feat(cssom): expose native starting-style grouping rules
Expose CSSStartingStyleRule as a native CSSGroupingRule and preserve its child rules through insertion, deletion, and subtree detachment. Grouping accessors and methods use the existing native receiver checks.

Regression coverage checks grouping-rule identity, retained detached descendants, invalid receivers, and constructor lookup.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 103.953s] 18906 tests run: 18906 passed (9 slow), 16 skipped
2026-09-29 07:25:56 +08:00
ldm0 f06370a4b7 feat(cssom): expose native font palette value rules
Expose CSSFontPaletteValuesRule with native parsing and read-only name, fontFamily, basePalette, and overrideColors descriptors. Attached rules read Stylo state; removed rules retain their descriptors through the existing native snapshot parser.

Regression coverage checks valid/invalid insertion, serialization, rule removal, native receiver brands, cross-realm access, and intrinsic constructor lookup.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 104.120s] 18906 tests run: 18906 passed (9 slow), 16 skipped
2026-09-29 07:25:05 +08:00
ldm0 646c4a0690 fix(cssom): validate font feature rule and map receivers
Enable the shared native-brand receiver checks on CSSFontFeatureValuesRule attributes and CSSFontFeatureValuesMap operations. Invalid receivers now throw the callee realm TypeError before argument conversion.

Regression coverage includes genuine cross-realm objects, forged and author/revoked Proxy receivers, conversion ordering, retained rules/maps after removal, and native objects with changed JavaScript prototypes.

Validation: fmt, strict workspace clippy, full nextest. Summary [ 107.439s] 18906 tests run: 18906 passed (9 slow), 16 skipped
2026-09-29 07:23:34 +08:00
ldm0 3e2b9d09a4 ci: remove explicit Nextest job timeout 2026-09-29 06:08:43 +08:00
lanyue-llk 0da1cdc82d test(worker): bound slow XHR fixture shutdown 2026-09-29 06:08:43 +08:00
lanyue-llk 0bc7e0ba6d fix(ci): bound Nextest job duration 2026-09-29 06:08:43 +08:00
lanyue-llk fab8b791ae fix(ci): preserve closed PR cancellation command in YAML 2026-09-29 06:08:43 +08:00
lanyue-llk 08ab072a3b fix(reliability): harden diagnostics and test infrastructure 2026-09-29 06:08:43 +08:00
ldm0 c577f54e32 fix(html): reflect null body colors as empty strings 2026-09-29 04:53:15 +08:00
ldm0 82e4533ae1 fix(wpt): honor common redirect CORS opt-in
Require enable-cors and a nonempty Origin before exposing CORS response headers from common/redirect.py. Preserve the first status and Location values, handle extension methods, and respond without waiting for unused uploads or adding a Content-Length header.

Validation: 580 Python tests passed with 32 workers; 1296 HTTP responses matched official wptserve for status, body, and 15 response fields. New regression tests fail on the unmodified main baseline.

Source-commit: 99b528aece
2026-09-29 03:16:12 +08:00
ldm0 4424bc245f fix(fetch): reuse MIME extraction for body Blob results 2026-09-29 03:15:11 +08:00
ldm0 b406682586 refactor(fetch): centralize referrer policy parsing 2026-09-29 03:11:09 +08:00
ldm0 6e82924b02 fix(file-api): use the shared illegal FileList constructor 2026-09-29 03:09:34 +08:00
ldm0 91a4480b8a fix(protocol): retain navigation ownership during response body reads
Keep request identity and cancellation in Fetch while read tasks exclusively own response data. Match completions to the registered read instead of reinserting transfers or replying to navigations from I/O completion.

Retire superseded reads immediately, drain reads on Fetch disable, and preserve typed read errors. Cover delayed successes, failures, request reuse, cancellation, and debugger-paused supersession.
2026-09-29 02:50:43 +08:00
ldm0 b406d462a5 test(network): activate blocked URL policy in parser script fixture
Enable Network before setting blocked URLs so the parser script is intercepted instead of depending on an external DNS or request failure. Wait through the scheduler and assert the exact script request fails with ERR_BLOCKED_BY_CLIENT while subsequent parsing continues.

An earlier full-suite run exposed the timeout. Validation after the fix: 20 exact-test stress iterations and three iterations of the 20-test blocked_urls module, all passing with flaky results treated as failures; cargo fmt --all; full workspace all-target all-feature Clippy with -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped).
2026-09-29 02:36:54 +08:00
ldm0 cccf567b5b perf(css): defer font projections until collections are exposed
Carry owner refresh intent through CSS synchronization and prepare font projections only after finding an existing FontFaceSet in its creation realm. Native CSS updates continue normally and held collections update without rereading document.fonts.

A test-only counter verifies 64 unobserved stylesheet mutations prepare no font projections, first observation prepares current state once, and later mutations and removals update held collections.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped on the final change set).
2026-09-29 02:36:54 +08:00
ldm0 3289d5b4c3 fix(scheduler): let replacement navigation pass load-blocked work
Centralize navigation dependency decisions for readiness probing and snapshot draining. Replacement actions can reach the owner that cancels the pending request even when earlier observations wait for that load, while exact owner authorization remains mandatory.

Keep retirement admission policy beside publication ownership. Extend coverage for stale owners, cancellation, reused frontend ids, duplicate terminals, and late results without reviving retired notifications or remote objects. The new queue regression fails before the scheduler fix.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped on the final change set).
2026-09-29 02:36:54 +08:00
ldm0 7b42fa6440 perf(layout): share source lookup within geometry batches
Build an operation-local source lookup for batches of rectangle queries and use it in the renderer Range path. Keep tiny batches on direct lookup and retain renderer-specific metric and viewport handling.

Compare batch results for missing sources, display contents, inline continuations, and text ranges. A 516-query fixture reduces box visits from 33024 to 64 without retaining an index.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets --all-features -- -D warnings; cargo nextest run --no-fail-fast (18833 passed, 16 skipped on the final change set).
2026-09-29 02:36:54 +08:00