summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js')
-rw-r--r--testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js b/testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js
new file mode 100644
index 0000000000..78c244b262
--- /dev/null
+++ b/testing/web-platform/tests/websockets/send-many-64K-messages-with-backpressure.any.js
@@ -0,0 +1,49 @@
+// 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');