| Blink WPT Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 1 | <!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 |  | 
|  | 11 | promise_test(async t => { | 
|  | 12 | let pc1 = new RTCPeerConnection(); | 
|  | 13 | t.add_cleanup(() => pc1.close()); | 
|  | 14 | let [channel1, channel2] = await createDataChannelPair(pc1); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 15 | let closeHandler = new Promise(resolve => { | 
| Blink WPT Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 16 | channel2.onclose = event => { | 
|  | 17 | resolve(); | 
|  | 18 | }; | 
|  | 19 | }); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 20 | 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 26 | channel2.addEventListener('error', t.unreached_func()); | 
|  | 27 | channel1.close(); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 28 | 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 32 |  | 
|  | 33 | promise_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 Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 39 | let closeHandler = new Promise(resolve => { | 
| Blink WPT Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 40 | channel2.addEventListener('close', event => { | 
|  | 41 | resolve(); | 
|  | 42 | }); | 
|  | 43 | }); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 44 | 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 50 | channel2.addEventListener('error', t.unreached_func()); | 
|  | 51 | channel1.close(); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 52 | 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 56 |  | 
|  | 57 | promise_test(async t => { | 
|  | 58 | let pc1 = new RTCPeerConnection(); | 
|  | 59 | t.add_cleanup(() => pc1.close()); | 
|  | 60 | let [channel1, channel2] = await createDataChannelPair(pc1); | 
| Harald Alvestrand | 6f78ab1 | 2020-01-02 21:24:08 | [diff] [blame] | 61 | let events = []; | 
|  | 62 | let error = null; | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 63 | let closeHandler = new Promise(resolve => { | 
| Blink WPT Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 64 | channel2.addEventListener('close', event => { | 
| Harald Alvestrand | 6f78ab1 | 2020-01-02 21:24:08 | [diff] [blame] | 65 | events.push('close'); | 
|  | 66 | resolve(); | 
|  | 67 | }); | 
|  | 68 | }); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 69 | let errorHandler = new Promise((resolve, reject) => { | 
| Harald Alvestrand | 6f78ab1 | 2020-01-02 21:24:08 | [diff] [blame] | 70 | 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 79 | resolve(); | 
|  | 80 | }); | 
|  | 81 | }); | 
|  | 82 | pc1.close(); | 
| Harald Alvestrand | 87107b4 | 2020-01-17 00:42:12 | [diff] [blame] | 83 | await errorHandler; | 
|  | 84 | await closeHandler; | 
| Harald Alvestrand | 6f78ab1 | 2020-01-02 21:24:08 | [diff] [blame] | 85 | // 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 Bot | 99dac72 | 2020-01-02 21:14:50 | [diff] [blame] | 90 |  | 
|  | 91 | </script> |