fc06a969bcd04d09c0751e4d47ae5745bb2a2c3e
[WebKit-https.git] / Source / WebCore / Modules / mediastream / RTCPeerConnection.idl
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  * Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
4  * Copyright (C) 2015, 2016 Ericsson AB. All rights reserved.
5  * Copyright (C) 2017 Apple Inc. All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer
15  *    in the documentation and/or other materials provided with the
16  *    distribution.
17  * 3. Neither the name of Google Inc. nor the names of its contributors
18  *    may be used to endorse or promote products derived from this
19  *    software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33
34 [
35     Conditional=WEB_RTC,
36     EnabledAtRuntime=PeerConnection
37 ] dictionary RTCDataChannelInit {
38     boolean ordered = true;
39     // FIXME 169644: rename to maxPacketLifeTime;
40     unsigned short maxRetransmitTime;
41     unsigned short maxRetransmits;
42     USVString protocol = "";
43     boolean negotiated = false;
44     unsigned short id;
45     // FIXME 169644: missing priority
46 };
47
48 [
49     Conditional=WEB_RTC,
50     EnabledAtRuntime=PeerConnection,
51     ImplementedAs=RTCRtpTransceiverInit
52 ] dictionary RTCRtpTransceiverInit {
53     RTCRtpTransceiverDirection direction = "sendrecv";
54     // FIXME 169662: missing streams
55     // FIXME 169662: missing sendEncodings
56 };
57
58 [
59     ActiveDOMObject,
60     Conditional=WEB_RTC,
61     ConstructorCallWith=ScriptExecutionContext,
62     EnabledAtRuntime=PeerConnection,
63     ExportMacro=WEBCORE_EXPORT,
64     JSBuiltinConstructor
65 ] interface RTCPeerConnection : EventTarget {
66     // FIXME 169644: update Constructor to take optional RTCConfiguration
67     // Private initializer
68     [PrivateIdentifier, CallWith=Document, MayThrowException] void initializeWith(RTCConfiguration configuration);
69
70
71     // 4.3.2 Interface Definition
72     // JSBuiltins provide support for legacy signatures
73     [JSBuiltin] Promise<RTCSessionDescriptionInit> createOffer(optional RTCOfferOptions offerOptions);
74     [JSBuiltin] Promise<RTCSessionDescriptionInit> createAnswer(optional RTCAnswerOptions answerOptions);
75
76     // FIXME 169644: change to RTCSessionDescriptionInit
77     [JSBuiltin] Promise<void> setLocalDescription(RTCSessionDescription description);
78     // FIXME 169644: change to nullable
79     readonly attribute RTCSessionDescription localDescription;
80     // FIXME 169644: change to nullable
81     readonly attribute RTCSessionDescription currentLocalDescription;
82     // FIXME 169644: change to nullable
83     readonly attribute RTCSessionDescription pendingLocalDescription;
84
85     // FIXME 169644: change to RTCSessionDescriptionInit
86     [JSBuiltin] Promise<void> setRemoteDescription(RTCSessionDescription description);
87     // FIXME 169644: change to nullable
88     readonly attribute RTCSessionDescription remoteDescription;
89     // FIXME 169644: change to nullable
90     readonly attribute RTCSessionDescription currentRemoteDescription;
91     // FIXME 169644: change to nullable
92     readonly attribute RTCSessionDescription pendingRemoteDescription;
93
94     // FIXME 169644: update parameter to (RTCIceCandidateInit or RTCIceCandidate)
95     [JSBuiltin] Promise<void> addIceCandidate(RTCIceCandidate candidate);
96
97     readonly attribute RTCSignalingState signalingState;
98     readonly attribute RTCIceGatheringState iceGatheringState;
99     readonly attribute RTCIceConnectionState iceConnectionState;
100
101     // FIXME 169644: missing connectionState
102     // FIXME 169644: missing canTrickleIceCandidates
103     // FIXME 169644: missing defaultIceServers
104
105     RTCConfiguration getConfiguration();
106     [MayThrowException] void setConfiguration(RTCConfiguration configuration);
107     void close();
108
109     attribute EventHandler onnegotiationneeded;
110     attribute EventHandler onicecandidate;
111     // FIXME 169644: missing onicecandidateerror
112     attribute EventHandler onsignalingstatechange;
113     attribute EventHandler oniceconnectionstatechange;
114     attribute EventHandler onicegatheringstatechange;
115     // FIXME 169644: missing onconnectionstatechanged
116     // FIXME 169644: missing onfingerprintfailure
117
118     // Private API used to implement the overloaded operations above. Queued functions are called by runQueuedOperation().
119     // See RTCPeerConnectionInternals.js.
120     [PrivateIdentifier] Promise<RTCSessionDescriptionInit> queuedCreateOffer(optional RTCOfferOptions offerOptions);
121     [PrivateIdentifier] Promise<RTCSessionDescriptionInit> queuedCreateAnswer(optional RTCAnswerOptions answerOptions);
122     [PrivateIdentifier] Promise<void> queuedSetLocalDescription(RTCSessionDescription description);
123     [PrivateIdentifier] Promise<void> queuedSetRemoteDescription(RTCSessionDescription description);
124     [PrivateIdentifier] Promise<void> queuedAddIceCandidate(RTCIceCandidate candidate);
125
126
127     // 4.3.3.1 Legacy extensions supported
128     // JSBuiltin attributes above handles support of the extensions
129     // FIXME 169646: wrap legacy calls in runtime flag
130
131
132     // 4.11 Certificate management
133     // FIXME 169644: missing generateCertificate
134
135
136     // 5.1 RTCPeerConnection extensions
137     // RTP Media API extensions
138     [PrivateIdentifier, PublicIdentifier] sequence<RTCRtpSender> getSenders();
139     sequence<RTCRtpReceiver> getReceivers();
140     sequence<RTCRtpTransceiver> getTransceivers();
141
142     [PrivateIdentifier, PublicIdentifier, MayThrowException] RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams);
143     [PrivateIdentifier, PublicIdentifier, MayThrowException] void removeTrack(RTCRtpSender sender);
144
145     // FIXME 169644: convert to (MediaStreamTrack or DOMString)
146     [MayThrowException] RTCRtpTransceiver addTransceiver(MediaStreamTrack track, optional RTCRtpTransceiverInit init);
147     [MayThrowException] RTCRtpTransceiver addTransceiver(DOMString kind, optional RTCRtpTransceiverInit init);
148
149     attribute EventHandler ontrack;
150
151
152     // 6.1 Peer-to-peer data API
153     // FIXME 169644: missing sctp
154
155     // FIXME 169644: convert to USVString
156     [CallWith=ScriptExecutionContext, MayThrowException] RTCDataChannel createDataChannel([TreatNullAs=EmptyString] DOMString label, optional RTCDataChannelInit options);
157     attribute EventHandler ondatachannel;
158
159
160     // 8.2 Statistics API
161     // FIXME 169644: |selector| may go away in a future version of the spec
162     Promise<RTCStatsReport> getStats(optional MediaStreamTrack? selector = null);
163
164
165     // 9.6 Identity Provider API
166     // FIXME 169644: missing IdP
167
168
169     // Legacy MediaStream API
170     // FIXME 169646: wrap this in runtime flag
171     [JSBuiltin] sequence<MediaStream> getLocalStreams();
172     [PrivateIdentifier, PublicIdentifier] sequence<MediaStream> getRemoteStreams();
173     [JSBuiltin] MediaStream getStreamById(DOMString streamId);
174
175     [JSBuiltin] void addStream(MediaStream stream);
176     [JSBuiltin] void removeStream(MediaStream stream);
177
178     // Legacy event handler (MediaStream-based API)
179     attribute EventHandler onaddstream;
180 };