-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
webrtc wpt: add failing tests for SDP munging
covering both read-only RTCSessionDescription and actual SDP munging. See also w3c/webrtc-pc#2907 BUG=chromium:662898,chromium:823036 Change-Id: Iaabbd131198d18203de4fb7436e4d8c37fb9452e
- Loading branch information
1 parent
9c1d943
commit 2b8477e
Showing
1 changed file
with
88 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
<!doctype html> | ||
<meta charset=utf-8> | ||
<meta name="timeout" content="long"> | ||
<title>SDP munging is a bad idea</title> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script> | ||
'use strict'; | ||
|
||
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=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:ETEn | ||
a=ice-pwd:OtSK0WpNtpUjkY4+86js7Z/l | ||
`; | ||
const candidateString = 'candidate:1905690388 1 udp 2113937151 192.168.0.1 58041 typ host generation 0 ufrag thC8'; | ||
|
||
// See https://bugs.chromium.org/p/chromium/issues/detail?id=662898 | ||
// and https://bugs.chromium.org/p/chromium/issues/detail?id=823036 | ||
// for why neither of these is feasible to enforce. | ||
|
||
// Note that this does not restrict creating a | ||
// new RTCSessionDescription with a modified copy. | ||
test(() => { | ||
const desc = new RTCSessionDescription({ | ||
type: 'offer', | ||
sdp, | ||
}); | ||
assert_throws_js(TypeError, () => { | ||
desc.type = 'answer'; | ||
}); | ||
}, 'RTCSessionDescription.type is read-only'); | ||
|
||
test(() => { | ||
const desc = new RTCSessionDescription({ | ||
type: 'offer', | ||
sdp, | ||
}); | ||
assert_throws_js(TypeError, () => { | ||
desc.sdp += 'a=dont-modify-me\r\n'; | ||
}); | ||
}, 'RTCSessionDescription.sdp is read-only'); | ||
|
||
test(() => { | ||
const candidate = new RTCIceCandidate({ | ||
sdpMid: '0', | ||
candidate: candidateString, | ||
}); | ||
assert_throws_js(TypeError, () => { | ||
candidate.candidate += ' myattribute value'; | ||
}); | ||
}, 'RTCIceCandidate.candidate is read-only'); | ||
|
||
// https://w3c.github.io/webrtc-pc/#dom-peerconnection-setlocaldescription | ||
// If type is "offer", and sdp is not the empty string and not equal to | ||
// connection.[[LastCreatedOffer]], then return a promise rejected with a | ||
// newly created InvalidModificationError and abort these steps. | ||
promise_test(async t => { | ||
const pc = new RTCPeerConnection(); | ||
t.add_cleanup(() => pc.close()); | ||
pc.addTransceiver('audio'); | ||
const offer = await pc.createOffer(); | ||
return promise_rejects_dom(t, 'InvalidModificationError', | ||
pc.setLocalDescription({type: 'offer', sdp: offer.sdp + 'a=munging-is-not-good\r\n'})); | ||
}, 'Rejects SDP munging between createOffer and setLocalDescription'); | ||
|
||
// If type is "answer" or "pranswer", and sdp is not the empty string and not equal to | ||
// connection.[[LastCreatedAnswer]], then return a promise rejected with a | ||
// newly created InvalidModificationError and abort these steps. | ||
promise_test(async t => { | ||
const pc = new RTCPeerConnection(); | ||
t.add_cleanup(() => pc.close()); | ||
await pc.setRemoteDescription({type: 'offer', sdp}); | ||
|
||
const answer = await pc.createAnswer(); | ||
return promise_rejects_dom(t, 'InvalidModificationError', | ||
pc.setLocalDescription({type: 'answer', sdp: answer.sdp + 'a=munging-is-not-good\r\n'})); | ||
}, 'Rejects SDP munging between createAnswer and setLocalDescription'); | ||
</script> |