| <!doctype html> |
| <meta charset=utf-8> |
| <meta name="timeout" content="long"> |
| <title>RTCPeerConnection MUST NOT support SDES</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="../RTCPeerConnection-helper.js"></script> |
| <script src="/webrtc/third_party/sdp/sdp.js"></script> |
| <script> |
| 'use strict'; |
| |
| // Test support for |
| // https://www.rfc-editor.org/rfc/rfc8826#section-4.3.1 |
| |
| const sdp = `v=0 |
| o=- 0 3 IN IP4 127.0.0.1 |
| s=- |
| t=0 0 |
| m=video 9 UDP/TLS/RTP/SAVPF 100 |
| c=IN IP4 0.0.0.0 |
| a=rtcp-mux |
| a=sendonly |
| a=mid:video |
| a=rtpmap:100 VP8/90000 |
| a=fmtp:100 max-fr=30;max-fs=3600 |
| a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:2nra27hTUb9ilyn2rEkBEQN9WOFts26F/jvofasw |
| a=ice-ufrag:ETEn |
| a=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l |
| `; |
| |
| // Negative test for Chrome legacy behavior. |
| promise_test(async t => { |
| const sdes_constraint = {'mandatory': {'DtlsSrtpKeyAgreement': false}}; |
| const pc = new RTCPeerConnection(null, sdes_constraint); |
| t.add_cleanup(() => pc.close()); |
| |
| pc.addTransceiver('audio'); |
| const offer = await pc.createOffer(); |
| assert_false(offer.sdp.includes('\na=crypto:')); |
| }, 'does not create offers with SDES'); |
| |
| promise_test(async t => { |
| const pc = new RTCPeerConnection(); |
| t.add_cleanup(() => pc.close()); |
| |
| try { |
| await pc.setRemoteDescription({type: 'offer', sdp}); |
| assert_unreached("Must not accept SDP without fingerprint"); |
| } catch (e) { |
| // TODO: which error is correct? See |
| // https://github.com/w3c/webrtc-pc/issues/2672 |
| assert_true(['OperationError', 'InvalidAccessError'].includes(e.name)); |
| } |
| }, 'rejects a remote offer that only includes SDES and no DTLS fingerprint'); |
| </script> |