blob: 6ca637b44c8964eac8515bbbb8adb360d5294dfc [file] [edit]
<!doctype html><!-- webkit-test-runner [ WebRTCRemoteVideoFrameEnabled=true ] -->
<html>
<head>
<meta charset="utf-8">
<title>Testing basic video exchange from offerer to receiver</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
</head>
<body>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
function buildMaliciousOffer(nLayers) {
const rids = [];
for (let i = 0; i < nLayers; i++) rids.push('r' + i);
const ridLines = rids.map(r => `a=rid:${r} recv`).join('\r\n');
const simLayers = rids.map((r, i) => (i === nLayers - 1 ? r : '~' + r)).join(';');
return [
'v=0',
'o=- 1 2 IN IP4 127.0.0.1',
's=-',
't=0 0',
'a=group:BUNDLE 0',
'a=extmap-allow-mixed',
'a=msid-semantic: WMS',
'm=video 9 UDP/TLS/RTP/SAVPF 96',
'c=IN IP4 0.0.0.0',
'a=rtcp:9 IN IP4 0.0.0.0',
'a=ice-ufrag:aaaa',
'a=ice-pwd:bbbbbbbbbbbbbbbbbbbbbb',
'a=ice-options:trickle',
'a=fingerprint:sha-256 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF',
'a=setup:actpass',
'a=mid:0',
'a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid',
'a=extmap:2 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id',
'a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id',
'a=sendrecv',
'a=rtcp-mux',
'a=rtcp-rsize',
'a=rtpmap:96 VP8/90000',
'a=rtcp-fb:96 nack',
'a=rtcp-fb:96 nack pli',
'a=rtcp-fb:96 ccm fir',
ridLines,
`a=simulcast:recv ${simLayers}`,
''
].join('\r\n');
}
promise_test(async t => {
const pc = new RTCPeerConnection();
const malOffer = buildMaliciousOffer(4);
await pc.setRemoteDescription({ type: 'offer', sdp: malOffer });
const context = canvas.getContext('2d');
context.fillStyle = `green`;
setInterval(() => {
context.fillRect(0, 0, canvas.width, canvas.height);
}, 30);
const localStream = canvas.captureStream(30);
pc.addTrack(localStream.getVideoTracks()[0], localStream);
const answer = await pc.createAnswer();
await pc.setLocalDescription(answer);
}, "Trim simulcast encodings when using receive encodings for send encodings");
</script>
</body>