/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ // https://w3c.github.io/webrtc-pc/#interface-definition [Exposed=Window, Pref="dom.webrtc.enabled"] interface RTCPeerConnection : EventTarget { [Throws] constructor(optional RTCConfiguration configuration = {}); Promise createOffer(optional RTCOfferOptions options = {}); Promise createAnswer(optional RTCAnswerOptions options = {}); Promise setLocalDescription(RTCSessionDescriptionInit description); readonly attribute RTCSessionDescription? localDescription; // readonly attribute RTCSessionDescription? currentLocalDescription; // readonly attribute RTCSessionDescription? pendingLocalDescription; Promise setRemoteDescription(RTCSessionDescriptionInit description); readonly attribute RTCSessionDescription? remoteDescription; // readonly attribute RTCSessionDescription? currentRemoteDescription; // readonly attribute RTCSessionDescription? pendingRemoteDescription; Promise addIceCandidate(optional RTCIceCandidateInit candidate = {}); readonly attribute RTCSignalingState signalingState; readonly attribute RTCIceGatheringState iceGatheringState; readonly attribute RTCIceConnectionState iceConnectionState; // readonly attribute RTCPeerConnectionState connectionState; // readonly attribute boolean? canTrickleIceCandidates; // static sequence getDefaultIceServers(); // RTCConfiguration getConfiguration(); // void setConfiguration(RTCConfiguration configuration); void close(); attribute EventHandler onnegotiationneeded; attribute EventHandler onicecandidate; // attribute EventHandler onicecandidateerror; attribute EventHandler onsignalingstatechange; attribute EventHandler oniceconnectionstatechange; attribute EventHandler onicegatheringstatechange; // attribute EventHandler onconnectionstatechange; // removed from spec, but still shipped by browsers void addStream (MediaStream stream); }; dictionary RTCConfiguration { sequence iceServers; RTCIceTransportPolicy iceTransportPolicy = "all"; RTCBundlePolicy bundlePolicy = "balanced"; RTCRtcpMuxPolicy rtcpMuxPolicy = "require"; DOMString peerIdentity; // sequence certificates; [EnforceRange] octet iceCandidatePoolSize = 0; }; enum RTCIceTransportPolicy { "relay", "all" }; enum RTCBundlePolicy { "balanced", "max-compat", "max-bundle" }; enum RTCRtcpMuxPolicy { // At risk due to lack of implementers' interest. "negotiate", "require" }; dictionary RTCIceServer { required (DOMString or sequence) urls; DOMString username; DOMString /*(DOMString or RTCOAuthCredential)*/ credential; RTCIceCredentialType credentialType = "password"; }; enum RTCIceCredentialType { "password", "oauth" }; dictionary RTCOfferAnswerOptions { boolean voiceActivityDetection = true; }; dictionary RTCOfferOptions : RTCOfferAnswerOptions { boolean iceRestart = false; }; dictionary RTCAnswerOptions : RTCOfferAnswerOptions { }; enum RTCIceGatheringState { "new", "gathering", "complete" }; enum RTCIceConnectionState { "new", "checking", "connected", "completed", "disconnected", "failed", "closed" }; enum RTCSignalingState { "stable", "have-local-offer", "have-remote-offer", "have-local-pranswer", "have-remote-pranswer", "closed" }; partial interface RTCPeerConnection { // sequence getSenders(); // sequence getReceivers(); // sequence getTransceivers(); // RTCRtpSender addTrack(MediaStreamTrack track, // MediaStream... streams); // void removeTrack(RTCRtpSender sender); // RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) trackOrKind, // optional RTCRtpTransceiverInit init); attribute EventHandler ontrack; };