mirror of
https://github.com/servo/servo.git
synced 2025-10-17 08:49:21 +01:00
91 lines
2.9 KiB
HTML
91 lines
2.9 KiB
HTML
<!doctype html>
|
|
<meta charset=utf-8>
|
|
<meta name="timeout" content="long">
|
|
<title>RTCDataChannel.prototype.close</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="RTCPeerConnection-helper.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
promise_test(async t => {
|
|
let pc1 = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc1.close());
|
|
let [channel1, channel2] = await createDataChannelPair(pc1);
|
|
let closeHandler = new Promise(resolve => {
|
|
channel2.onclose = event => {
|
|
resolve();
|
|
};
|
|
});
|
|
let closingSeen = false;
|
|
channel1.onclosing = t.unreached_func();
|
|
channel2.onclosing = event => {
|
|
assert_equals(channel2.readyState, 'closing');
|
|
closingSeen = true;
|
|
}
|
|
channel2.addEventListener('error', t.unreached_func());
|
|
channel1.close();
|
|
await closeHandler;
|
|
assert_equals(channel2.readyState, 'closed');
|
|
assert_true(closingSeen, 'Closing event was seen');
|
|
}, 'Close datachannel causes onclosing and onclose to be called');
|
|
|
|
promise_test(async t => {
|
|
// This is the same test as above, but using addEventListener
|
|
// rather than the "onclose" attribute.
|
|
let pc1 = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc1.close());
|
|
let [channel1, channel2] = await createDataChannelPair(pc1);
|
|
let closeHandler = new Promise(resolve => {
|
|
channel2.addEventListener('close', event => {
|
|
resolve();
|
|
});
|
|
});
|
|
let closingSeen = false;
|
|
channel1.addEventListener('closing', t.unreached_func());
|
|
channel2.addEventListener('closing', event => {
|
|
assert_equals(channel2.readyState, 'closing');
|
|
closingSeen = true;
|
|
});
|
|
channel2.addEventListener('error', t.unreached_func());
|
|
channel1.close();
|
|
await closeHandler;
|
|
assert_equals(channel2.readyState, 'closed');
|
|
assert_true(closingSeen, 'Closing event was seen');
|
|
}, 'Close datachannel causes closing and close event to be called');
|
|
|
|
promise_test(async t => {
|
|
let pc1 = new RTCPeerConnection();
|
|
t.add_cleanup(() => pc1.close());
|
|
let [channel1, channel2] = await createDataChannelPair(pc1);
|
|
let events = [];
|
|
let error = null;
|
|
let closeHandler = new Promise(resolve => {
|
|
channel2.addEventListener('close', event => {
|
|
events.push('close');
|
|
resolve();
|
|
});
|
|
});
|
|
let errorHandler = new Promise((resolve, reject) => {
|
|
channel2.addEventListener('error', event => {
|
|
events.push('error');
|
|
try {
|
|
assert_true(event instanceof RTCErrorEvent);
|
|
error = event.error;
|
|
} catch (e) {
|
|
// Prevent test from hanging when an assert in the error handler fails.
|
|
reject('Error event wrong: ' + e);
|
|
}
|
|
resolve();
|
|
});
|
|
});
|
|
pc1.close();
|
|
await errorHandler;
|
|
await closeHandler;
|
|
// Error should fire before close.
|
|
assert_array_equals(['error', 'close'], events);
|
|
assert_true(error instanceof RTCError);
|
|
assert_equals(error.name, 'OperationError');
|
|
}, 'Close peerconnection causes close event and error to be called');
|
|
|
|
</script>
|