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