From 96ed577a7212fbd8637ca1a4092ea16d5239efba Mon Sep 17 00:00:00 2001 From: ldm0 Date: Wed, 9 Sep 2026 08:49:13 +0800 Subject: [PATCH] fix(document): reset child input-stream readiness --- moli-core/tests/scripts/child_readiness.rs | 164 ++++++++++++++++++ .../child_documents/live_parser.rs | 11 +- 2 files changed, 170 insertions(+), 5 deletions(-) diff --git a/moli-core/tests/scripts/child_readiness.rs b/moli-core/tests/scripts/child_readiness.rs index c912ac545d..65b4528fe9 100644 --- a/moli-core/tests/scripts/child_readiness.rs +++ b/moli-core/tests/scripts/child_readiness.rs @@ -84,3 +84,167 @@ async fn child_document_readiness_keeps_initial_empty_and_detached_documents_com ); Ok(()) } + +async fn child_stream_readiness_probe(operation: &str) -> Result { + let server = FixtureServer::spawn().await?; + let browser = Browser::new(AppConfig::default())?; + let mut page = browser.fetch(&server.url("/static")).await?; + let expression = r#"(async () => { + const frame = await new Promise(resolve => { + const frame = document.createElement('iframe'); + frame.onload = () => resolve(frame); + frame.src = '/static'; + document.body.append(frame); + }); + frame.onload = null; + const doc = frame.contentDocument; + const win = frame.contentWindow; + const oldBody = doc.body; + let oldEvents = 0; + doc.onreadystatechange = () => ++oldEvents; + doc.addEventListener('readystatechange', () => ++oldEvents); + win.addEventListener('readystatechange', () => ++oldEvents, true); + oldBody.addEventListener('old-listener-probe', () => ++oldEvents); + const operation = OPERATION; + let opened = null; + if (operation === 'open' || operation === 'reopen') { + const same = doc.open() === doc; + opened = {same, readyState: doc.readyState, children: doc.childNodes.length}; + } + const markup = '

new stream