diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-15 03:34:42 +0000 |
commit | da4c7e7ed675c3bf405668739c3012d140856109 (patch) | |
tree | cdd868dba063fecba609a1d819de271f0d51b23e /testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html | |
parent | Adding upstream version 125.0.3. (diff) | |
download | firefox-da4c7e7ed675c3bf405668739c3012d140856109.tar.xz firefox-da4c7e7ed675c3bf405668739c3012d140856109.zip |
Adding upstream version 126.0.upstream/126.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html')
-rw-r--r-- | testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html b/testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html new file mode 100644 index 0000000000..1bcc96790d --- /dev/null +++ b/testing/web-platform/tests/webrtc/RTCDataChannel-send-close.html @@ -0,0 +1,123 @@ +<!doctype html> +<meta charset=utf-8> +<meta name="timeout" content="long"> +<title>RTCDataChannel.prototype.send</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="RTCPeerConnection-helper.js"></script> +<script> +'use strict'; + +const largeString = " ".repeat(64 * 1024); +const largeArrayBuffer = new TextEncoder("utf-8").encode(largeString); +const largeBlob = new Blob([" ".repeat(64 * 1024)]); + +for (const options of [{}, {negotiated: true, id: 0}]) { + const mode = `${options.negotiated? "Negotiated d" : "D"}atachannel`; + + promise_test(async t => { + let [channel1, channel2] = await createDataChannelPair(t, options); + let receivedSize = 0, sentSize = 0; + + channel2.binaryType = 'arraybuffer'; + channel2.onmessage = e => { + if (typeof e.data === 'string') + receivedSize += e.data.length; + else + receivedSize += e.data.byteLength; + } + + let closePromiseResolve; + let closePromise = new Promise((resolve, reject) => { + closePromiseResolve = resolve; + }); + channel2.onclose = e => { + closePromiseResolve(); + } + + try { + while(true) { + channel1.send(largeString); + sentSize += largeString.length; + } + } catch(error) { + assert_true(error instanceof DOMException); + assert_equals(error.name, 'OperationError'); + } + channel1.close(); + + await closePromise; + assert_equals(receivedSize, sentSize, 'All the pending sent messages are received after calling close()'); + }, `${mode} should be able to send and receive all string messages on close`); + + promise_test(async t => { + let [channel1, channel2] = await createDataChannelPair(t, options); + let receivedSize = 0, sentSize = 0; + + channel2.binaryType = 'arraybuffer'; + channel2.onmessage = e => { + if (typeof e.data === 'string') + receivedSize += e.data.length; + else + receivedSize += e.data.byteLength; + } + + let closePromiseResolve; + let closePromise = new Promise((resolve, reject) => { + closePromiseResolve = resolve; + }); + channel2.onclose = e => { + closePromiseResolve(); + } + + try { + while(true) { + channel1.send(largeArrayBuffer); + sentSize += largeArrayBuffer.length; + } + } catch(error) { + assert_true(error instanceof DOMException); + assert_equals(error.name, 'OperationError'); + } + channel1.close(); + + await closePromise; + assert_equals(receivedSize, sentSize, 'All the pending sent messages are received after calling close()'); + }, `${mode} should be able to send and receive all arraybuffer messages on close`); + + promise_test(async t => { + let [channel1, channel2] = await createDataChannelPair(t, options); + let receivedSize = 0, sentSize = 0; + + channel2.binaryType = 'arraybuffer'; + channel2.onmessage = e => { + if (typeof e.data === 'string') + receivedSize += e.data.length; + else + receivedSize += e.data.byteLength; + } + + let closePromiseResolve; + let closePromise = new Promise((resolve, reject) => { + closePromiseResolve = resolve; + }); + channel2.onclose = e => { + closePromiseResolve(); + } + + try { + while(true) { + channel1.send(largeBlob); + sentSize += largeBlob.size; + } + } catch(error) { + assert_true(error instanceof DOMException); + assert_equals(error.name, 'OperationError'); + } + channel1.close(); + + await closePromise; + assert_equals(receivedSize, sentSize, 'All the pending sent messages are received after calling close()'); + }, `${mode} should be able to send and receive all blob messages on close`); +} +</script> |