Files
sousa-gecko/testing/web-platform/tests/webrtc-extensions/RTCConfiguration-rtpHeaderEncryptionPolicy.html
T
Philipp Hancke 7b30ce1e04 Bug 2046316 [wpt PR 60510] - webrtc: implement cryptex and header extension encryption policy, a=testonly
Automatic update from web-platform-tests
webrtc: implement cryptex and header extension encryption policy

the policy is described in
  https://w3c.github.io/webrtc-extensions/#rtp-header-extension-encryption
and allows controlling whether cryptex header extension encryption
is negotiated via SDP (the default) or required (i.e. must be negotiated)

Chromestatus entry:
  https://chromestatus.com/feature/5177732519559168

I2S: pending potential spec changes outlined in https://github.com/w3c/webrtc-extensions/issues/47#issuecomment-4554321288

webrtc change:
  https://webrtc-review.googlesource.com/c/src/+/451800

Bug: webrtc:455813732
Change-Id: I185905bcc01306030f45d9212ddf2cc8f75cf211
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7602452
Reviewed-by: Johannes Kron <kron@chromium.org>
Reviewed-by: Harald Alvestrand <hta@chromium.org>
Reviewed-by: Guido Urdaneta <guidou@chromium.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Reviewed-by: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1644549}

--

wpt-commits: 3730dead8dcca52cd225a42abbbf6cbf55e80b29
wpt-pr: 60510
2026-06-12 15:22:57 +00:00

62 lines
2.1 KiB
HTML

<!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>