blob: a417d66d9aaeda3cf551a981aac05a0732d183e2 [file] [log] [blame]
Blink WPT Bot99dac722020-01-02 21:14:501<!doctype html>
2<meta charset=utf-8>
3<meta name="timeout" content="long">
4<title>RTCDataChannel.prototype.close</title>
5<script src="/resources/testharness.js"></script>
6<script src="/resources/testharnessreport.js"></script>
7<script src="RTCPeerConnection-helper.js"></script>
8<script>
9'use strict';
10
11promise_test(async t => {
12 let pc1 = new RTCPeerConnection();
13 t.add_cleanup(() => pc1.close());
14 let [channel1, channel2] = await createDataChannelPair(pc1);
Harald Alvestrand87107b42020-01-17 00:42:1215 let closeHandler = new Promise(resolve => {
Blink WPT Bot99dac722020-01-02 21:14:5016 channel2.onclose = event => {
17 resolve();
18 };
19 });
Harald Alvestrand87107b42020-01-17 00:42:1220 let closingSeen = false;
21 channel1.onclosing = t.unreached_func();
22 channel2.onclosing = event => {
23 assert_equals(channel2.readyState, 'closing');
24 closingSeen = true;
25 }
Blink WPT Bot99dac722020-01-02 21:14:5026 channel2.addEventListener('error', t.unreached_func());
27 channel1.close();
Harald Alvestrand87107b42020-01-17 00:42:1228 await closeHandler;
29 assert_equals(channel2.readyState, 'closed');
30 assert_true(closingSeen, 'Closing event was seen');
31}, 'Close datachannel causes onclosing and onclose to be called');
Blink WPT Bot99dac722020-01-02 21:14:5032
33promise_test(async t => {
34 // This is the same test as above, but using addEventListener
35 // rather than the "onclose" attribute.
36 let pc1 = new RTCPeerConnection();
37 t.add_cleanup(() => pc1.close());
38 let [channel1, channel2] = await createDataChannelPair(pc1);
Harald Alvestrand87107b42020-01-17 00:42:1239 let closeHandler = new Promise(resolve => {
Blink WPT Bot99dac722020-01-02 21:14:5040 channel2.addEventListener('close', event => {
41 resolve();
42 });
43 });
Harald Alvestrand87107b42020-01-17 00:42:1244 let closingSeen = false;
45 channel1.addEventListener('closing', t.unreached_func());
46 channel2.addEventListener('closing', event => {
47 assert_equals(channel2.readyState, 'closing');
48 closingSeen = true;
49 });
Blink WPT Bot99dac722020-01-02 21:14:5050 channel2.addEventListener('error', t.unreached_func());
51 channel1.close();
Harald Alvestrand87107b42020-01-17 00:42:1252 await closeHandler;
53 assert_equals(channel2.readyState, 'closed');
54 assert_true(closingSeen, 'Closing event was seen');
55}, 'Close datachannel causes closing and close event to be called');
Blink WPT Bot99dac722020-01-02 21:14:5056
57promise_test(async t => {
58 let pc1 = new RTCPeerConnection();
59 t.add_cleanup(() => pc1.close());
60 let [channel1, channel2] = await createDataChannelPair(pc1);
Harald Alvestrand6f78ab12020-01-02 21:24:0861 let events = [];
62 let error = null;
Harald Alvestrand87107b42020-01-17 00:42:1263 let closeHandler = new Promise(resolve => {
Blink WPT Bot99dac722020-01-02 21:14:5064 channel2.addEventListener('close', event => {
Harald Alvestrand6f78ab12020-01-02 21:24:0865 events.push('close');
66 resolve();
67 });
68 });
Harald Alvestrand87107b42020-01-17 00:42:1269 let errorHandler = new Promise((resolve, reject) => {
Harald Alvestrand6f78ab12020-01-02 21:24:0870 channel2.addEventListener('error', event => {
71 events.push('error');
72 try {
73 assert_true(event instanceof RTCErrorEvent);
74 error = event.error;
75 } catch (e) {
76 // Prevent test from hanging when an assert in the error handler fails.
77 reject('Error event wrong: ' + e);
78 }
Blink WPT Bot99dac722020-01-02 21:14:5079 resolve();
80 });
81 });
82 pc1.close();
Harald Alvestrand87107b42020-01-17 00:42:1283 await errorHandler;
84 await closeHandler;
Harald Alvestrand6f78ab12020-01-02 21:24:0885 // Error should fire before close.
86 assert_array_equals(['error', 'close'], events);
87 assert_true(error instanceof RTCError);
88 assert_equals(error.name, 'OperationError');
89}, 'Close peerconnection causes close event and error to be called');
Blink WPT Bot99dac722020-01-02 21:14:5090
91</script>