PASS addIceCandidate after setRemoteDescription resolves when called with null
PASS addIceCandidate after setRemoteDescription resolves when called with undefined
ERR addTrack throws an exception if the track has already been added AssertionError
ERR addTrack throws an exception if the track has already been added via addStream AssertionError
ERR addTrack throws an exception if addStream is called with a stream containing a track already added AssertionError
ERR addTrack throws an exception if the peerconnection has been closed already AssertionError
PASS addTrack and getSenders creates a sender
PASS addTrack and getLocalStreams returns a stream with audio and video even if just an audio track was added
PASS addTrack and getLocalStreams adds another track to the same stream
PASS addTrack and getLocalStreams plays together nicely
PASS window.adapter exists
PASS window.adapter browserDetails exists
PASS window.adapter browserDetails detects a browser type
PASS window.adapter browserDetails detects a browser version
PASS establishes a connection with legacy callbacks
PASS establishes a connection with promises
PASS establishes a connection with streams in both directions
PASS establishes a connection with no explicit end-of-candidates
PASS establishes a connection and calls the video loadedmetadata
PASS establishes a connection with addTrack and all tracks of a stream
PASS establishes a connection with addTrack but only the audio track of an av stream
PASS establishes a connection with addTrack as two streams
SKIP establishes a connection with datachannel establishes a connection
PASS URL.createObjectURL shim works for audio using src=
PASS URL.createObjectURL shim works for audio using setAttribute
PASS URL.createObjectURL shim works for video using src=
PASS URL.createObjectURL shim works for video using setAttribute
PASS dtmf RTCRtpSender.dtmf exists on audio senders
PASS dtmf RTCRtpSender.dtmf does not exist on video senders
PASS dtmf inserts DTMF when using addStream
PASS dtmf inserts DTMF when using addTrack
PASS getStats returns a Promise
PASS getStats resolves the Promise with a Map(like)
PASS getUserMedia navigator.getUserMedia exists
PASS getUserMedia navigator.getUserMedia calls the callback
PASS navigator.mediaDevices exists
PASS navigator.mediaDevices is an EventTarget
PASS navigator.mediaDevices implements the devicechange event
PASS navigator.mediaDevices getUserMedia exists
PASS navigator.mediaDevices getUserMedia fulfills the promise
PASS navigator.mediaDevices enumerateDevices exists
PASS navigator.mediaDevices enumerateDevices returns an array of devices
PASS navigator.mediaDevices enumerateDevices returns some audioinput devices
PASS navigator.mediaDevices enumerateDevices returns some videoinput devices
PASS navigator.mediaDevices enumerateDevices returns some audiooutput devices
PASS MediaStream window.MediaStream exists
ERR track event RTCPeerConnection.prototype.ontrack exists AssertionError
PASS track event is called when setRemoteDescription adds a new track to an existing stream
PASS track event is called by setRemoteDescription track event
PASS track event is called by setRemoteDescription ontrack
PASS track event the event has a track
PASS track event the event has a set of streams
PASS track event the event has a receiver that is contained in the set of receivers
PASS track event the event has a transceiver that has a receiver
ERR removeTrack allows removeTrack twice timeout
ERR removeTrack throws an exception if the argument is a track, not a sender AssertionError
ERR removeTrack throws an exception if the sender does not belong to the peerconnection AssertionError
ERR removeTrack throws an exception if the peerconnection has been closed already AssertionError
ERR removeTrack after addStream for an audio/video track after removing a single track only a single sender remains timeout
ERR removeTrack after addStream for an audio/video track after removing a single track the local stream remains untouched timeout
ERR removeTrack after addStream for an audio/video track after removing all tracks no senders remain timeout
ERR removeTrack after addStream for an audio/video track after removing all tracks no local streams remain timeout
ERR removeTrack after addTrack for an audio/video track after removing a single track only a single sender remains timeout
ERR removeTrack after addTrack for an audio/video track after removing a single track the local stream remains untouched timeout
ERR removeTrack after addTrack for an audio/video track after removing all tracks no senders remain timeout
ERR removeTrack after addTrack for an audio/video track after removing all tracks no local streams remain timeout
PASS RTCIceCandidate window.RTCIceCandidate exists
PASS RTCPeerConnection window.RTCPeerConnection exists
PASS RTCPeerConnection constructor works
PASS RTCPeerConnection getSenders exists
ERR RTCPeerConnection generateCertificate is a static method AssertionError
PASS RTCPeerConnection icegatheringstatechange fires the event
PASS RTCPeerConnection icegatheringstatechange calls the event handler
PASS RTCSessionDescription window.RTCSessionDescription exists
PASS srcObject setting from another object works
PASS srcObject setter triggers loadedmetadata (audio)
PASS srcObject getter returns the stream (audio)
PASS srcObject setter triggers loadedmetadata (video)
PASS srcObject getter returns the stream (video)
