Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!doctype html>
<meta charset=utf-8>
<title>rtpHeaderEncryptionPolicy</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/webrtc/third_party/sdp/sdp.js"></script>
<script>
const session = `v=0
o=- 0 3 IN IP4 127.0.0.1
s=-
t=0 0
a=fingerprint:sha-256 A7:24:72:CA:6E:02:55:39:BA:66:DF:6E:CC:4C:D8:B0:1A:BF:1A:56:65:7D:F4:03:AD:7E:77:43:2A:29:EC:93
a=ice-ufrag:6HHHdzzeIhkE0CKj
a=ice-pwd:XYDGVpfvklQIEnZ6YnyLsAew
a=cryptex
`;
const sdp = session + `m=video 1 RTP/SAVPF 100
c=IN IP4 0.0.0.0
a=rtcp-mux
a=mid:video
a=rtpmap:100 VP8/90000
a=setup:actpass
m=audio 1 RTP/SAVPF 100
c=IN IP4 0.0.0.0
a=rtcp-mux
a=mid:audio
a=rtpmap:100 opus/48000/2
a=setup:actpass
`;
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const config = pc.getConfiguration();
assert_equals(config.rtpHeaderEncryptionPolicy, 'negotiate');
}, 'rtpHeaderEncryptionPolicy defaults to "negotiate"');
promise_test(async t => {
const pc = new RTCPeerConnection({rtpHeaderEncryptionPolicy: 'require'});
t.add_cleanup(() => pc.close());
const config = pc.getConfiguration();
assert_equals(config.rtpHeaderEncryptionPolicy, 'require');
}, 'rtpHeaderEncryptionPolicy is returned by getConfiguration');
promise_test(async t => {
const pc = new RTCPeerConnection({rtpHeaderEncryptionPolicy: 'require'});
t.add_cleanup(() => pc.close());
return promise_rejects_dom(t, 'InvalidAccessError', pc.setRemoteDescription({type: 'offer', sdp: sdp.replace('cryptex', 'nocryptex')}));
}, 'rtpHeaderEncryptionPolicy "require" fails if cryptex is not negotiated');
promise_test(async t => {
const pc = new RTCPeerConnection({rtpHeaderEncryptionPolicy: 'require'});
t.add_cleanup(() => pc.close());
await pc.setRemoteDescription({type: 'offer', sdp: session + `m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=sctp-port:5000
a=max-message-size:262144
a=mid:0
`});
await pc.setLocalDescription();
}, 'rtpHeaderEncryptionPolicy "require" does not require datachannels to have a cryptex line');;
</script>