Coverage Report is based on the following editor draft:
https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html
4.3.1.6 Set the RTCSessionSessionDescription
[Trivial]
1. Let p be a new promise.
[Trivial]
2. In parallel, start the process to apply description as described in [JSEP]
(section 5.5. and section 5.6.).
[Trivial]
1. If the process to apply description fails for any reason, then user agent
MUST queue a task that runs the following steps:
[Untestable]
1. If connection's [[IsClosed]] slot is true, then abort these steps.
[Untestable]
2. If elements of the SDP were modified, then reject p with a newly created
InvalidModificationError and abort these steps.
[RTCPeerConnection-setLocalDescription-answer]
[RTCPeerConnection-setRemoteDescription-offer]
[RTCPeerConnection-setRemoteDescription-answer]
3. If the description's type is invalid for the current signaling state of
connection as described in [JSEP] (section 5.5. and section 5.6.), then
reject p with a newly created InvalidStateError and abort these steps.
[RTCPeerConnection-setRemoteDescription-offer]
4. If the content of description is not valid SDP syntax, then reject p
with an RTCError (with errorDetail set to "sdp-syntax-error" and the
sdpLineNumber attribute set to the line number in the SDP where the
syntax error was detected) and abort these steps.
[Untestable]
5. If the content of description is invalid, then reject p with a newly
created InvalidAccessError and abort these steps.
[Untestable]
6. For all other errors, for example if description cannot be applied at
the media layer, reject p with a newly created OperationError.
[Trivial]
2. If description is applied successfully, the user agent MUST queue a task
that runs the following steps:
[Untestable]
1. If connection's [[isClosed]] slot is true, then abort these steps.
[RTCPeerConnection-setLocalDescription]
2. If description is set as a local description, then run one of the
following steps:
[RTCPeerConnection-setLocalDescription-offer]
- If description is of type "offer", set connection.pendingLocalDescription
to description and signaling state to have-local-offer.
[RTCPeerConnection-setLocalDescription-answer]
- If description is of type "answer", then this completes an offer answer
negotiation.
Set connection's currentLocalDescription to description and
currentRemoteDescription to the value of pendingRemoteDescription.
Set both pendingRemoteDescription and pendingLocalDescription to null.
Finally set connection's signaling state to stable
[RTCPeerConnection-setLocalDescription-rollback]
- If description is of type "rollback", then this is a rollback. Set
connection.pendingLocalDescription to null and signaling state to stable.
[RTCPeerConnection-setLocalDescription-pranswer]
- If description is of type "pranswer", then set
connection.pendingLocalDescription to description and signaling state to
have-local-pranswer.
[RTCPeerConnection-setRemoteDescription]
3. Otherwise, if description is set as a remote description, then run one of the
following steps:
[RTCPeerConnection-setRemoteDescription-offer]
- If description is of type "offer", set connection.pendingRemoteDescription
attribute to description and signaling state to have-remote-offer.
[RTCPeerConnection-setRemoteDescription-answer]
- If description is of type "answer", then this completes an offer answer
negotiation.
Set connection's currentRemoteDescription to description and
currentLocalDescription to the value of pendingLocalDescription.
Set both pendingRemoteDescription and pendingLocalDescription to null.
Finally setconnection's signaling state to stable
[RTCPeerConnection-setRemoteDescription-rollback]
- If description is of type "rollback", then this is a rollback.
Set connection.pendingRemoteDescription to null and signaling state to stable.
[RTCPeerConnection-setRemoteDescription-rollback]
- If description is of type "pranswer", then set
connection.pendingRemoteDescription to description and signaling state
to have-remote-pranswer.
[RTCPeerConnection-setLocalDescription]
[RTCPeerConnection-setRemoteDescription]
4. If connection's signaling state changed above, fire a simple event named
signalingstatechange at connection.
[TODO]
5. If description is of type "answer", and it initiates the closure of an existing
SCTP association, as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value
of connection's [[sctpTransport]] internal slot to null.
[RTCSctpTransport]
6. If description is of type "answer" or "pranswer", then run the following steps:
[RTCSctpTransport]
1. If description initiates the establishment of a new SCTP association,
as defined in [SCTP-SDP], Sections 10.3 and 10.4, set the value of connection's
[[sctpTransport]] internal slot to a newly created RTCSctpTransport.
[TODO]
2. If description negotiates the DTLS role of the SCTP transport, and there is an
RTCDataChannel with a null id, then generate an ID according to
[RTCWEB-DATA-PROTOCOL].
[Untestable]
If no available ID could be generated, then run the following steps:
[Untestable]
1. Let channel be the RTCDataChannel object for which an ID could not be
generated.
[Untestable]
2. Set channel's readyState attribute to closed.
[Untestable]
3. Fire an event named error with a ResourceInUse exception at channel.
[Untestable]
4. Fire a simple event named close at channel.
[TODO RTCPeerConnection-setDescription-transceiver]
7. If description is set as a local description, then run the following steps for
each media description in description that is not yet associated with an
RTCRtpTransceiver object:
[TODO RTCPeerConnection-setDescription-transceiver]
1. Let transceiver be the RTCRtpTransceiver used to create the media
description.
[TODO RTCPeerConnection-setDescription-transceiver]
2. Set transceiver's mid value to the mid of the corresponding media
description.
[RTCPeerConnection-ontrack]
8. If description is set as a remote description, then run the following steps
for each media description in description:
[TODO RTCPeerConnection-setDescription-transceiver]
1. As described by [JSEP] (section 5.9.), attempt to find an existing
RTCRtpTransceiver object, transceiver, to represent the media description.
[RTCPeerConnection-ontrack]
2. If no suitable transceiver is found (transceiver is unset), run the following
steps:
[RTCPeerConnection-ontrack]
1. Create an RTCRtpSender, sender, from the media description.
[RTCPeerConnection-ontrack]
2. Create an RTCRtpReceiver, receiver, from the media description.
[RTCPeerConnection-ontrack]
3. Create an RTCRtpTransceiver with sender, receiver and direction, and let
transceiver be the result.
[RTCPeerConnection-ontrack]
3. Set transceiver's mid value to the mid of the corresponding media description.
If the media description has no MID, and transceiver's mid is unset, generate
a random value as described in [JSEP] (section 5.9.).
[RTCPeerConnection-ontrack]
4. If the direction of the media description is sendrecv or sendonly, and
transceiver.receiver.track has not yet been fired in a track event, process
the remote track for the media description, given transceiver.
[TODO RTCPeerConnection-setDescription-transceiver]
5. If the media description is rejected, and transceiver is not already stopped,
stop the RTCRtpTransceiver transceiver.
[TODO RTCPeerConnection-setDescription-transceiver]
9. If description is of type "rollback", then run the following steps:
[TODO RTCPeerConnection-setDescription-transceiver]
1. If the mid value of an RTCRtpTransceiver was set to a non-null value by
the RTCSessionDescription that is being rolled back, set the mid value
of that transceiver to null, as described by [JSEP] (section 4.1.8.2.).
[TODO RTCPeerConnection-setDescription-transceiver]
2. If an RTCRtpTransceiver was created by applying the RTCSessionDescription
that is being rolled back, and a track has not been attached to it via
addTrack, remove that transceiver from connection's set of transceivers,
as described by [JSEP] (section 4.1.8.2.).
[TODO RTCPeerConnection-setDescription-transceiver]
3. Restore the value of connection's [[SctpTransport]] internal slot to its
value at the last stable signaling state.
[RTCPeerConnection-onnegotiationneeded]
10. If connection's signaling state is now stable, update the negotiation-needed
flag. If connection's [[NegotiationNeeded]] slot was true both before and after
this update, queue a task that runs the following steps:
[Untestable]
1. If connection's [[IsClosed]] slot is true, abort these steps.
[RTCPeerConnection-onnegotiationneeded]
2. If connection's [[NegotiationNeeded]] slot is false, abort these steps.
[RTCPeerConnection-onnegotiationneeded]
3. Fire a simple event named negotiationneeded at connection.
[Trivial]
11. Resolve p with undefined.
[Trivial]
3. Return p.
Coverage Report
Tested 35
Not Tested 15
Untestable 8
Total 58