diff --git a/moli-core/tests/scripts.rs b/moli-core/tests/scripts.rs index ddc1c5812c..dbb5472078 100644 --- a/moli-core/tests/scripts.rs +++ b/moli-core/tests/scripts.rs @@ -6728,6 +6728,9 @@ mod document_write_errors; #[path = "scripts/child_markup_insertion.rs"] mod child_markup_insertion; +#[path = "scripts/child_input_stream_readiness.rs"] +mod child_input_stream_readiness; + #[path = "scripts/document_close.rs"] mod document_close; diff --git a/moli-core/tests/scripts/child_input_stream_readiness.rs b/moli-core/tests/scripts/child_input_stream_readiness.rs new file mode 100644 index 0000000000..7a8841d2b2 --- /dev/null +++ b/moli-core/tests/scripts/child_input_stream_readiness.rs @@ -0,0 +1,126 @@ +use super::*; + +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