-
Notifications
You must be signed in to change notification settings - Fork 54
/
RTCRtpParameters-transactionId.html
152 lines (123 loc) · 5.58 KB
/
RTCRtpParameters-transactionId.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
<!doctype html>
<meta charset=utf-8>
<title>RTCRtpParameters transactionId</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="dictionary-helper.js"></script>
<script src="RTCRtpParameters-helper.js"></script>
<script>
'use strict';
// Test is based on the following editor draft:
// https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
// The following helper functions are called from RTCRtpParameters-helper.js:
// doOfferAnswerExchange
// validateSenderRtpParameters
/*
5.1. RTCPeerConnection Interface Extensions
partial interface RTCPeerConnection {
RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind,
optional RTCRtpTransceiverInit init);
...
};
dictionary RTCRtpTransceiverInit {
RTCRtpTransceiverDirection direction = "sendrecv";
sequence<MediaStream> streams;
sequence<RTCRtpEncodingParameters> sendEncodings;
};
addTransceiver
2. If the dictionary argument is present, and it has a sendEncodings member,
let sendEncodings be that list of RTCRtpEncodingParameters objects, or an
empty list otherwise.
7. Create an RTCRtpSender with track, streams and sendEncodings and let
sender be the result.
5.2. RTCRtpSender Interface
interface RTCRtpSender {
Promise<void> setParameters(optional RTCRtpParameters parameters);
RTCRtpParameters getParameters();
};
dictionary RTCRtpParameters {
DOMString transactionId;
sequence<RTCRtpEncodingParameters> encodings;
sequence<RTCRtpHeaderExtensionParameters> headerExtensions;
RTCRtcpParameters rtcp;
sequence<RTCRtpCodecParameters> codecs;
RTCDegradationPreference degradationPreference;
};
getParameters
- transactionId is set to a new unique identifier, used to match this
getParameters call to a setParameters call that may occur later.
*/
/*
5.2. getParameters
- transactionId is set to a new unique identifier, used to match this
getParameters call to a setParameters call that may occur later.
*/
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const { sender } = pc.addTransceiver('audio');
await doOfferAnswerExchange(t, pc);
const param1 = sender.getParameters();
const param2 = sender.getParameters();
validateSenderRtpParameters(param1);
validateSenderRtpParameters(param2);
assert_not_equals(param1.transactionId, param2.transactionId);
}, `sender.getParameters() should return different transaction IDs for each call`);
/*
5.2. setParameters
7. If parameters.encodings.length is different from N, or if any parameter
in the parameters argument, marked as a Read-only parameter, has a value
that is different from the corresponding parameter value returned from
sender.getParameters(), abort these steps and return a promise rejected
with a newly created InvalidModificationError. Note that this also applies
to transactionId.
*/
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const { sender } = pc.addTransceiver('audio');
await doOfferAnswerExchange(t, pc);
const param = sender.getParameters();
validateSenderRtpParameters(param);
const { transactionId } = param;
param.transactionId = `${transactionId}-modified`;
return promise_rejects_dom(t, 'InvalidModificationError',
sender.setParameters(param));
}, `sender.setParameters() with transaction ID different from last getParameters() should reject with InvalidModificationError`);
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const { sender } = pc.addTransceiver('audio');
await doOfferAnswerExchange(t, pc);
const param = sender.getParameters();
validateSenderRtpParameters(param);
param.transactionId = undefined;
return promise_rejects_js(t, TypeError,
sender.setParameters(param));
}, `sender.setParameters() with transaction ID unset should reject with TypeError`);
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const { sender } = pc.addTransceiver('audio');
await doOfferAnswerExchange(t, pc);
const param = sender.getParameters();
validateSenderRtpParameters(param);
return sender.setParameters(param)
.then(() =>
promise_rejects_dom(t, 'InvalidStateError',
sender.setParameters(param)));
}, `setParameters() twice with the same parameters should reject with InvalidStateError`);
promise_test(async t => {
const pc = new RTCPeerConnection();
t.add_cleanup(() => pc.close());
const { sender } = pc.addTransceiver('audio');
await doOfferAnswerExchange(t, pc);
const param1 = sender.getParameters();
const param2 = sender.getParameters();
validateSenderRtpParameters(param1);
validateSenderRtpParameters(param2);
assert_not_equals(param1.transactionId, param2.transactionId);
return promise_rejects_dom(t, 'InvalidModificationError',
sender.setParameters(param1));
}, `setParameters() with parameters older than last getParameters() should reject with InvalidModificationError`);
</script>