Commit Graph
720 Commits
Author SHA1 Message Date
ldm0 feabdf3db1 perf(curl): reuse receive storage after would-block 2026-09-10 16:11:47 +08:00
ldm0 5e3ad7a72d fix(websocket): coalesce pending pong responses 2026-09-10 16:02:56 +08:00
ldm0 bf170ad2f1 fix(websocket): close command admission before terminal delivery 2026-09-10 15:55:48 +08:00
ldm0 1fdf63fa2b fix(websocket): schedule native I/O by readiness 2026-09-10 15:05:35 +08:00
ldm0 05c50396b3 refactor(websocket): encapsulate native session lifecycle 2026-09-10 15:05:34 +08:00
ldm0 5d99eb4ce8 fix(import-maps): enforce parser inline CSP
Source-commit: 7ddb9b78ed
2026-09-10 14:49:41 +08:00
ldm0 9944bfc31f fix(svg): map special presentation attributes
Source-commit: 7f01394606
2026-09-10 14:45:56 +08:00
ldm0 fa30d1b468 fix(location): make prototype immutable
Source-commit: d1896cbb3f
2026-09-10 14:44:37 +08:00
ldm0 b88999b91e fix(modules): decode fetched source as UTF-8
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Apply UTF-8 decoding directly to the baseline module fetch path without including import-map integrity changes.

Source commits:
- bffc90964d

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 14:39:04 +08:00
ldm0 2fa5cff3ce refactor(websocket): remove unused CONNECT header assembly
Write proxy header values directly into the native request and delete the
unused CONNECT string and append_proxy_connect_header helper. Native
request configuration already validates these fields before connecting.

Move rejection coverage to the native configuration entry point, covering
CR, LF and NUL in User-Agent and Proxy-Authorization. Check User-Agent on
the actual CONNECT request while retaining proxy credential isolation and
WSS tunnel coverage.

Validation: 96 package tests passed all 3 iterations; cargo fmt --all,
strict workspace/all-targets/all-features Clippy and full nextest passed
(17322 passed, 13 skipped).
2026-09-10 14:37:03 +08:00
ldm0 30c079edc1 fix(websocket): exit silently when synthetic producers disappear
Dropping the last connection handle can close its command channel before
task cancellation is observed. The synthetic loop could then publish an
unsolicited abnormal Close after the client had gone away.

Exit silently when command producers disappear, matching the native
session. Keep explicit client close, peer close and failure events intact.
Add a deterministic regression for channel closure before task abortion;
it reproduced the extra Close(1006) before this fix.

Validation: original lifecycle test and deterministic regression passed
all 50 stress iterations; 96 package tests passed all 3 iterations.
Formatting, strict workspace/all-targets/all-features Clippy and full
nextest passed (17322 passed, 13 skipped).
2026-09-10 14:37:03 +08:00
ldm0 31bb71c430 refactor(websocket): rely on native frame validation
Remove FrameProgress and message_kind from the browser assembler. Use
libcurl's validated chunk metadata and normalized continuation types,
checking frame and message memory limits before buffering each new frame.
Keep payload assembly, UTF-8 and Close content validation in the browser
layer.

Document the native Chunk contract and cover 31 invalid framing cases,
chunk boundaries, continuation types, empty frames and interleaved control
frames through the real transport. Strengthen browser regressions for
partial-message failure, UTF-8, Close contents and exact size limits.

Verify that a declared final frame which exceeds the message budget fails
while the bytes received are still within that budget, without waiting
for the rest of the frame payload.

Validation: cargo fmt --all; strict workspace/all-targets/all-features
Clippy; full nextest (17321 passed, 13 skipped). The 564 related tests
passed all 3 stress iterations; the strengthened message-budget boundary
test passed all 10 iterations.
2026-09-10 14:37:03 +08:00
ldm0 10b242f855 refactor(websocket): keep a single native frame in flight
Replace unused data/control send queues, admission semaphores and public
receipts with send_frame(). The browser session owns scheduling; a single
pending frame preserves partial writes and completes independently of
receive backpressure.

Reject overlapping submissions and retain submitted frames if their
waiting futures are dropped. Cover slot reuse, cancellation, transport
failure, partial writes and sends with a full receive queue.

Update curl-rust to 608f08d, which bounds native receive prefetch and fixes
the browser receive-backpressure regression exposed during validation.

Validation: cargo fmt --all; strict workspace/all-targets/all-features
Clippy; full nextest (17318 passed, 13 skipped). The unchanged browser
receive-backpressure test passed 40 stress iterations, and 561 related
tests passed all 3 stress iterations.
2026-09-10 14:37:03 +08:00
ldm0 11da0d4720 refactor(websocket): unify message send completion events
Publish one SendCompleted per outgoing message, including empty messages.
Use it for browser byte accounting, stream write settlement and CDP records,
preserving the selected Page task's microtask completion boundary.

Remember writes rejected by native admission before peer Close delivery so
WebSocketStream.closed rejects with the actual close information. Cover that
ordering deterministically and preserve the interrupted write's error identity.

Validation: cargo fmt --all; cargo clippy --workspace --all-targets
--all-features -- -D warnings; cargo nextest run --no-fail-fast. The two close
regressions also pass 30 stress iterations, and all 242 WebSocket-related tests
pass three iterations.
2026-09-10 14:37:03 +08:00
ldm0 af1c22df45 refactor(websocket): prepare native handshake inputs and results 2026-09-10 14:37:03 +08:00
ldm0 add886da12 refactor(websocket): expose connection and interception capabilities 2026-09-10 14:37:03 +08:00
ldm0 33108fcffd refactor(websocket): separate native send admission and completion 2026-09-10 14:37:03 +08:00
ldm0 0c116aa350 fix(websocket): decouple send progress from event delivery 2026-09-10 14:37:03 +08:00
ldm0 94889f12b9 fix(websocket): drain queued data before starting close timeout 2026-09-10 14:37:03 +08:00
ldm0 82fa486192 chore(websocket): remove obsolete Clippy allowance 2026-09-10 14:37:03 +08:00
ldm0 7ed1ce8a93 feat(websocket): inherit browser TLS credentials 2026-09-10 14:37:03 +08:00
ldm0 6832d179d9 refactor(curl): share TLS certificate configuration 2026-09-10 14:37:03 +08:00
ldm0 c252a3367d fix(websocket): retain HTTP/1.0 upgrade connections 2026-09-10 14:37:03 +08:00
ldm0 49848795c4 test(websocket): cover browser lifecycle and transport backpressure 2026-09-10 14:37:03 +08:00
ldm0 391742c14b feat(websocket): use native curl transport 2026-09-10 14:37:03 +08:00
ldm0 7bc35983c1 feat(curl): add persistent websocket session runtime 2026-09-10 14:37:03 +08:00
ldm0 c1c936b338 refactor(websocket): separate handshake validation and event delivery 2026-09-10 14:37:03 +08:00
ldm0 e0e6451747 refactor(websocket): encapsulate connection commands and cancellation 2026-09-10 14:37:03 +08:00
ldm0 661526a6bd build: use lexmount curl-rust fork 2026-09-10 14:37:03 +08:00
ldm0 14949fd862 fix(dom): include CDATA in child text content
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Register the child text content regression module without including later script test modules.
Include the XML document fixture route used by the CDATA regression so this branch does not depend on the separate XML input-stream changes.

Source commits:
- 7f587e1251
- ae3a3f1096

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 05:50:52 +08:00
ldm0 826590cdf5 fix(performance): implement User Timing boundaries and PerformanceMark
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Include the lazy Performance/PerformanceTiming materialization and Window detection changes from a7f48edb0; Worker installation and observer refactors from that commit are outside this Window User Timing topic.

Source commits:
- 808f514caa
- 04f253fda2
- a7f48edb07

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 05:49:31 +08:00
ldm0 640d37f6ed fix(geometry): complete DOMRect construction and factories
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Source commits:
- 3d4e98da5a
- 6414934242
- a4af7f3d7c

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 05:48:08 +08:00
ldm0 9c338eedf5 fix(events): suppress reentrant rejectionhandled events
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Source commits:
- 3fd12f80b7

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 05:46:08 +08:00
ldm0 23a488be68 fix(domparser): preserve XML content types
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Append only the XML content-type regression to the baseline test module.
Use empty XML to exercise the existing parser-error-document path; the original undeclared-prefix input requires a separate namespace parser fix. Content-type and error-document assertions are retained.

Source commits:
- c8eed633ac

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 05:45:51 +08:00
ldm0 e194c2add8 refactor(html): centralize input type states
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Source commits:
- 05e2cd5350

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 04:05:23 +08:00
ldm0 19eacf16b3 fix(xhr): resolve open URLs with credentials
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Append only the XHR open credential regression to the baseline test module.

Source commits:
- 5cbd824f60

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 03:51:44 +08:00
ldm0 db559629b6 feat(webrtc): implement RTCSessionDescription data model
Extract an independently mergeable topic from wpt-misc-fix at
a70a96f9d1.

Source commits:
- 293755c9f7

Validation:
- cargo fmt --all
- cargo clippy --workspace --all-targets --all-features -- -D warnings
- cargo nextest run --no-fail-fast
2026-09-10 03:47:27 +08:00
ldm0 b32b27073f fix(trusted-types): gate DOMParser source input 2026-09-09 20:01:02 +08:00
ldm0 114508118a fix(fetch): honor credentials mode for TLS client identities 2026-09-09 19:44:04 +08:00
SpringCorel 1b1969624d feat: support custom TLS certificates 2026-09-09 19:44:04 +08:00
ldm0 17e8fa5cf9 refactor(html): extract window features parser 2026-09-09 17:58:17 +08:00
ldm0 e16cde5767 chore(release): update version to 1.1.5 2026-09-09 17:57:37 +08:00
ldm0 a70a96f9d1 fix(cdp): synchronize Navigator emulation through native state 2026-09-09 05:02:43 +08:00
ldm0 0ef12dab97 fix(cdp): limit Runtime stack capture depth v1.1.4 2026-09-09 04:44:25 +08:00
ldm0 8a353fa2aa fix(time): use default DOM clock resolution 2026-09-09 04:34:29 +08:00
ldm0 ecbbf350ed test(cdp): guard target teardown resource lifetimes
Add a managed-process target-lifecycle smoke group covering 1792 close cycles across Target.closeTarget, Page.close, detach-then-close, and explicit-context disposal. Synchronize on exact target and load events, preserve a live peer, and navigate over HTTP after each phase.

Enforce fixed Linux FD, poll-driver, and thread budgets after warmup, persist batch samples on failure, and report unsupported external/non-Linux sampling explicitly. Include group-selection and resource-contract tests.
2026-09-09 04:32:43 +08:00
ldm0 8b13f372d8 fix(style): reject stale sibling topology during deferred invalidation
Check retained child-list relations when draining structural mutation batches. Fall back to lazy source-scope invalidation when removed nodes or old neighbors have moved, covering both old and new scopes without mixing historical and live sibling links.

Keep safe insertion batches precise, defer disconnected child-list effects consistently, and cover reorder, reinsert, moved-neighbor, relative-selector, and cross-shadow regressions.
2026-09-09 04:32:04 +08:00
ldm0 c0d916ae8e fix(console): avoid extra page code during log capture 2026-09-09 04:07:35 +08:00
ldm0 22facd581d fix(navigator): expose readonly plugin collection lengths 2026-09-09 04:06:29 +08:00
ldm0 ff384a8126 feat(gamepad): expose policy-aware empty gamepad enumeration 2026-09-09 04:05:39 +08:00