Make some things that return never-null pointers return references instead.
[WebKit-https.git] / Source / WebCore / Modules / mediastream / RTCPeerConnection.h
1 /*
2  * Copyright (C) 2012 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer
12  *    in the documentation and/or other materials provided with the
13  *    distribution.
14  * 3. Neither the name of Google Inc. nor the names of its contributors
15  *    may be used to endorse or promote products derived from this
16  *    software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef RTCPeerConnection_h
32 #define RTCPeerConnection_h
33
34 #if ENABLE(MEDIA_STREAM)
35
36 #include "ActiveDOMObject.h"
37 #include "Dictionary.h"
38 #include "EventTarget.h"
39 #include "ExceptionBase.h"
40 #include "MediaStream.h"
41 #include "RTCIceCandidate.h"
42 #include "RTCPeerConnectionHandler.h"
43 #include "RTCPeerConnectionHandlerClient.h"
44 #include "Timer.h"
45 #include <wtf/RefCounted.h>
46
47 namespace WebCore {
48
49 class MediaConstraints;
50 class MediaStreamTrack;
51 class RTCConfiguration;
52 class RTCDTMFSender;
53 class RTCDataChannel;
54 class RTCErrorCallback;
55 class RTCSessionDescription;
56 class RTCSessionDescriptionCallback;
57 class RTCStatsCallback;
58 class VoidCallback;
59
60 class RTCPeerConnection : public RefCounted<RTCPeerConnection>, public RTCPeerConnectionHandlerClient, public EventTarget, public ActiveDOMObject {
61 public:
62     static PassRefPtr<RTCPeerConnection> create(ScriptExecutionContext*, const Dictionary& rtcConfiguration, const Dictionary& mediaConstraints, ExceptionCode&);
63     ~RTCPeerConnection();
64
65     void createOffer(PassRefPtr<RTCSessionDescriptionCallback>, PassRefPtr<RTCErrorCallback>, const Dictionary& mediaConstraints, ExceptionCode&);
66
67     void createAnswer(PassRefPtr<RTCSessionDescriptionCallback>, PassRefPtr<RTCErrorCallback>, const Dictionary& mediaConstraints, ExceptionCode&);
68
69     void setLocalDescription(PassRefPtr<RTCSessionDescription>, PassRefPtr<VoidCallback>, PassRefPtr<RTCErrorCallback>, ExceptionCode&);
70     PassRefPtr<RTCSessionDescription> localDescription(ExceptionCode&);
71
72     void setRemoteDescription(PassRefPtr<RTCSessionDescription>, PassRefPtr<VoidCallback>, PassRefPtr<RTCErrorCallback>, ExceptionCode&);
73     PassRefPtr<RTCSessionDescription> remoteDescription(ExceptionCode&);
74
75     String signalingState() const;
76
77     void updateIce(const Dictionary& rtcConfiguration, const Dictionary& mediaConstraints, ExceptionCode&);
78
79     void addIceCandidate(RTCIceCandidate*, ExceptionCode&);
80
81     String iceGatheringState() const;
82
83     String iceConnectionState() const;
84
85     MediaStreamVector getLocalStreams() const;
86
87     MediaStreamVector getRemoteStreams() const;
88
89     MediaStream* getStreamById(const String& streamId);
90
91     void addStream(PassRefPtr<MediaStream>, const Dictionary& mediaConstraints, ExceptionCode&);
92
93     void removeStream(PassRefPtr<MediaStream>, ExceptionCode&);
94
95     void getStats(PassRefPtr<RTCStatsCallback> successCallback, PassRefPtr<MediaStreamTrack> selector);
96
97     PassRefPtr<RTCDataChannel> createDataChannel(String label, const Dictionary& dataChannelDict, ExceptionCode&);
98
99     PassRefPtr<RTCDTMFSender> createDTMFSender(PassRefPtr<MediaStreamTrack>, ExceptionCode&);
100
101     void close(ExceptionCode&);
102
103     DEFINE_ATTRIBUTE_EVENT_LISTENER(negotiationneeded);
104     DEFINE_ATTRIBUTE_EVENT_LISTENER(icecandidate);
105     DEFINE_ATTRIBUTE_EVENT_LISTENER(signalingstatechange);
106     DEFINE_ATTRIBUTE_EVENT_LISTENER(addstream);
107     DEFINE_ATTRIBUTE_EVENT_LISTENER(removestream);
108     DEFINE_ATTRIBUTE_EVENT_LISTENER(iceconnectionstatechange);
109     DEFINE_ATTRIBUTE_EVENT_LISTENER(datachannel);
110
111     // RTCPeerConnectionHandlerClient
112     virtual void negotiationNeeded() OVERRIDE;
113     virtual void didGenerateIceCandidate(PassRefPtr<RTCIceCandidateDescriptor>) OVERRIDE;
114     virtual void didChangeSignalingState(SignalingState) OVERRIDE;
115     virtual void didChangeIceGatheringState(IceGatheringState) OVERRIDE;
116     virtual void didChangeIceConnectionState(IceConnectionState) OVERRIDE;
117     virtual void didAddRemoteStream(PassRefPtr<MediaStreamDescriptor>) OVERRIDE;
118     virtual void didRemoveRemoteStream(MediaStreamDescriptor*) OVERRIDE;
119     virtual void didAddRemoteDataChannel(PassOwnPtr<RTCDataChannelHandler>) OVERRIDE;
120
121     // EventTarget
122     virtual const AtomicString& interfaceName() const OVERRIDE;
123     virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE;
124
125     // ActiveDOMObject
126     virtual void stop() OVERRIDE;
127
128     using RefCounted<RTCPeerConnection>::ref;
129     using RefCounted<RTCPeerConnection>::deref;
130
131 private:
132     RTCPeerConnection(ScriptExecutionContext*, PassRefPtr<RTCConfiguration>, PassRefPtr<MediaConstraints>, ExceptionCode&);
133
134     static PassRefPtr<RTCConfiguration> parseConfiguration(const Dictionary& configuration, ExceptionCode&);
135     void scheduleDispatchEvent(PassRefPtr<Event>);
136     void scheduledEventTimerFired(Timer<RTCPeerConnection>*);
137     bool hasLocalStreamWithTrackId(const String& trackId);
138
139     // EventTarget implementation.
140     virtual EventTargetData* eventTargetData() OVERRIDE;
141     virtual EventTargetData& ensureEventTargetData() OVERRIDE;
142     virtual void refEventTarget() OVERRIDE { ref(); }
143     virtual void derefEventTarget() OVERRIDE { deref(); }
144     EventTargetData m_eventTargetData;
145
146     void changeSignalingState(SignalingState);
147     void changeIceGatheringState(IceGatheringState);
148     void changeIceConnectionState(IceConnectionState);
149
150     SignalingState m_signalingState;
151     IceGatheringState m_iceGatheringState;
152     IceConnectionState m_iceConnectionState;
153
154     MediaStreamVector m_localStreams;
155     MediaStreamVector m_remoteStreams;
156
157     Vector<RefPtr<RTCDataChannel> > m_dataChannels;
158
159     OwnPtr<RTCPeerConnectionHandler> m_peerHandler;
160
161     Timer<RTCPeerConnection> m_scheduledEventTimer;
162     Vector<RefPtr<Event> > m_scheduledEvents;
163
164     bool m_stopped;
165 };
166
167 } // namespace WebCore
168
169 #endif // ENABLE(MEDIA_STREAM)
170
171 #endif // RTCPeerConnection_h