// META: global=window,worker // META: script=constants.sub.js // META: timeout=long // META: variant=?default // META: variant=?wss // META: variant=?wpt_flags=h2 // This is a repro for Chromium bug https://crbug.com/1286909. It will timeout // if the bug is present. // With 0.1 second server-side delay per message, sending 50 messages will take // around 5 seconds. const MESSAGES_TO_SEND = 50; // 65536 is the magic number that triggers the bug, as it precisely fills the // mojo pipe. const MESSAGE_SIZE = 65536; promise_test(async t => { const message = new Uint8Array(MESSAGE_SIZE); const ws = new WebSocket(SCHEME_DOMAIN_PORT + '/receive-many-with-backpressure'); let opened = false; ws.onopen = t.step_func(() => { opened = true; for (let i = 0; i < MESSAGES_TO_SEND; i++) { ws.send(message); } }); let responsesReceived = 0; ws.onmessage = t.step_func(({data}) => { assert_equals(data, String(MESSAGE_SIZE), 'size must match'); if (++responsesReceived == MESSAGES_TO_SEND) { ws.close(); } }); let resolvePromise; const promise = new Promise(resolve => { resolvePromise = resolve; }); ws.onclose = t.step_func(({wasClean}) => { assert_true(opened, 'connection should have been opened'); assert_true(wasClean, 'close should be clean'); resolvePromise(); }); return promise; }, `sending ${MESSAGES_TO_SEND} messages of size ${MESSAGE_SIZE} with ` + 'backpressure applied should not hang');