| OLD | NEW |
| (Empty) |
| 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 #include "bindings/core/v8/ActiveScriptWrappable.h" | |
| 35 #include "bindings/core/v8/Dictionary.h" | |
| 36 #include "bindings/core/v8/ScriptPromise.h" | |
| 37 #include "core/dom/ActiveDOMObject.h" | |
| 38 #include "modules/EventTargetModules.h" | |
| 39 #include "modules/crypto/NormalizeAlgorithm.h" | |
| 40 #include "modules/mediastream/MediaStream.h" | |
| 41 #include "modules/mediastream/RTCIceCandidate.h" | |
| 42 #include "platform/AsyncMethodRunner.h" | |
| 43 #include "public/platform/WebMediaConstraints.h" | |
| 44 #include "public/platform/WebRTCPeerConnectionHandler.h" | |
| 45 #include "public/platform/WebRTCPeerConnectionHandlerClient.h" | |
| 46 #include <memory> | |
| 47 | |
| 48 namespace blink { | |
| 49 class ExceptionState; | |
| 50 class MediaStreamTrack; | |
| 51 class RTCAnswerOptions; | |
| 52 class RTCConfiguration; | |
| 53 class RTCDTMFSender; | |
| 54 class RTCDataChannel; | |
| 55 class RTCIceCandidateInitOrRTCIceCandidate; | |
| 56 class RTCOfferOptions; | |
| 57 class RTCPeerConnectionErrorCallback; | |
| 58 class RTCSessionDescription; | |
| 59 class RTCSessionDescriptionCallback; | |
| 60 class RTCSessionDescriptionInit; | |
| 61 class RTCStatsCallback; | |
| 62 class ScriptState; | |
| 63 class VoidCallback; | |
| 64 | |
| 65 class RTCPeerConnection final | |
| 66 : public EventTargetWithInlineData | |
| 67 , public WebRTCPeerConnectionHandlerClient | |
| 68 , public ActiveScriptWrappable | |
| 69 , public ActiveDOMObject { | |
| 70 DEFINE_WRAPPERTYPEINFO(); | |
| 71 USING_GARBAGE_COLLECTED_MIXIN(RTCPeerConnection); | |
| 72 USING_PRE_FINALIZER(RTCPeerConnection, dispose); | |
| 73 public: | |
| 74 static RTCPeerConnection* create(ExecutionContext*, const Dictionary&, const
Dictionary&, ExceptionState&); | |
| 75 ~RTCPeerConnection() override; | |
| 76 | |
| 77 ScriptPromise createOffer(ScriptState*, const RTCOfferOptions&); | |
| 78 ScriptPromise createOffer(ScriptState*, RTCSessionDescriptionCallback*, RTCP
eerConnectionErrorCallback*, const Dictionary&); | |
| 79 | |
| 80 ScriptPromise createAnswer(ScriptState*, const RTCAnswerOptions&); | |
| 81 ScriptPromise createAnswer(ScriptState*, RTCSessionDescriptionCallback*, RTC
PeerConnectionErrorCallback*, const Dictionary&); | |
| 82 | |
| 83 ScriptPromise setLocalDescription(ScriptState*, const RTCSessionDescriptionI
nit&); | |
| 84 ScriptPromise setLocalDescription(ScriptState*, const RTCSessionDescriptionI
nit&, VoidCallback*, RTCPeerConnectionErrorCallback*); | |
| 85 RTCSessionDescription* localDescription(); | |
| 86 | |
| 87 ScriptPromise setRemoteDescription(ScriptState*, const RTCSessionDescription
Init&); | |
| 88 ScriptPromise setRemoteDescription(ScriptState*, const RTCSessionDescription
Init&, VoidCallback*, RTCPeerConnectionErrorCallback*); | |
| 89 RTCSessionDescription* remoteDescription(); | |
| 90 | |
| 91 String signalingState() const; | |
| 92 | |
| 93 void updateIce(ExecutionContext*, const Dictionary& rtcConfiguration, const
Dictionary& mediaConstraints, ExceptionState&); | |
| 94 | |
| 95 // Certificate management | |
| 96 // http://w3c.github.io/webrtc-pc/#sec.cert-mgmt | |
| 97 static ScriptPromise generateCertificate(ScriptState*, const AlgorithmIdenti
fier& keygenAlgorithm, ExceptionState&); | |
| 98 | |
| 99 ScriptPromise addIceCandidate(ScriptState*, const RTCIceCandidateInitOrRTCIc
eCandidate&); | |
| 100 ScriptPromise addIceCandidate(ScriptState*, const RTCIceCandidateInitOrRTCIc
eCandidate&, VoidCallback*, RTCPeerConnectionErrorCallback*); | |
| 101 | |
| 102 String iceGatheringState() const; | |
| 103 | |
| 104 String iceConnectionState() const; | |
| 105 | |
| 106 MediaStreamVector getLocalStreams() const; | |
| 107 | |
| 108 MediaStreamVector getRemoteStreams() const; | |
| 109 | |
| 110 MediaStream* getStreamById(const String& streamId); | |
| 111 | |
| 112 void addStream(ExecutionContext*, MediaStream*, const Dictionary& mediaConst
raints, ExceptionState&); | |
| 113 | |
| 114 void removeStream(MediaStream*, ExceptionState&); | |
| 115 | |
| 116 void getStats(ExecutionContext*, RTCStatsCallback* successCallback, MediaStr
eamTrack* selector); | |
| 117 | |
| 118 RTCDataChannel* createDataChannel(String label, const Dictionary& dataChanne
lDict, ExceptionState&); | |
| 119 | |
| 120 RTCDTMFSender* createDTMFSender(MediaStreamTrack*, ExceptionState&); | |
| 121 | |
| 122 void close(ExceptionState&); | |
| 123 | |
| 124 // We allow getStats after close, but not other calls or callbacks. | |
| 125 bool shouldFireDefaultCallbacks() { return !m_closed && !m_stopped; } | |
| 126 bool shouldFireGetStatsCallback() { return !m_stopped; } | |
| 127 | |
| 128 DEFINE_ATTRIBUTE_EVENT_LISTENER(negotiationneeded); | |
| 129 DEFINE_ATTRIBUTE_EVENT_LISTENER(icecandidate); | |
| 130 DEFINE_ATTRIBUTE_EVENT_LISTENER(signalingstatechange); | |
| 131 DEFINE_ATTRIBUTE_EVENT_LISTENER(addstream); | |
| 132 DEFINE_ATTRIBUTE_EVENT_LISTENER(removestream); | |
| 133 DEFINE_ATTRIBUTE_EVENT_LISTENER(iceconnectionstatechange); | |
| 134 DEFINE_ATTRIBUTE_EVENT_LISTENER(datachannel); | |
| 135 | |
| 136 // WebRTCPeerConnectionHandlerClient | |
| 137 void negotiationNeeded() override; | |
| 138 void didGenerateICECandidate(const WebRTCICECandidate&) override; | |
| 139 void didChangeSignalingState(SignalingState) override; | |
| 140 void didChangeICEGatheringState(ICEGatheringState) override; | |
| 141 void didChangeICEConnectionState(ICEConnectionState) override; | |
| 142 void didAddRemoteStream(const WebMediaStream&) override; | |
| 143 void didRemoveRemoteStream(const WebMediaStream&) override; | |
| 144 void didAddRemoteDataChannel(WebRTCDataChannelHandler*) override; | |
| 145 void releasePeerConnectionHandler() override; | |
| 146 void closePeerConnection() override; | |
| 147 | |
| 148 // EventTarget | |
| 149 const AtomicString& interfaceName() const override; | |
| 150 ExecutionContext* getExecutionContext() const override; | |
| 151 | |
| 152 // ActiveDOMObject | |
| 153 void suspend() override; | |
| 154 void resume() override; | |
| 155 void stop() override; | |
| 156 | |
| 157 // ActiveScriptWrappable | |
| 158 // We keep the this object alive until either stopped or closed. | |
| 159 bool hasPendingActivity() const final | |
| 160 { | |
| 161 return !m_closed && !m_stopped; | |
| 162 } | |
| 163 | |
| 164 DECLARE_VIRTUAL_TRACE(); | |
| 165 | |
| 166 private: | |
| 167 typedef Function<bool()> BoolFunction; | |
| 168 class EventWrapper : public GarbageCollectedFinalized<EventWrapper> { | |
| 169 public: | |
| 170 EventWrapper(Event*, std::unique_ptr<BoolFunction>); | |
| 171 // Returns true if |m_setupFunction| returns true or it is null. | |
| 172 // |m_event| will only be fired if setup() returns true; | |
| 173 bool setup(); | |
| 174 | |
| 175 DECLARE_TRACE(); | |
| 176 | |
| 177 Member<Event> m_event; | |
| 178 | |
| 179 private: | |
| 180 std::unique_ptr<BoolFunction> m_setupFunction; | |
| 181 }; | |
| 182 | |
| 183 RTCPeerConnection(ExecutionContext*, RTCConfiguration*, WebMediaConstraints,
ExceptionState&); | |
| 184 void dispose(); | |
| 185 | |
| 186 void scheduleDispatchEvent(Event*); | |
| 187 void scheduleDispatchEvent(Event*, std::unique_ptr<BoolFunction>); | |
| 188 void dispatchScheduledEvent(); | |
| 189 bool hasLocalStreamWithTrackId(const String& trackId); | |
| 190 | |
| 191 void changeSignalingState(WebRTCPeerConnectionHandlerClient::SignalingState)
; | |
| 192 void changeIceGatheringState(WebRTCPeerConnectionHandlerClient::ICEGathering
State); | |
| 193 // Changes the state immediately; does not fire an event. | |
| 194 // Returns true if the state was changed. | |
| 195 bool setIceConnectionState(WebRTCPeerConnectionHandlerClient::ICEConnectionS
tate); | |
| 196 // Changes the state asynchronously and fires an event immediately after cha
nging the state. | |
| 197 void changeIceConnectionState(WebRTCPeerConnectionHandlerClient::ICEConnecti
onState); | |
| 198 | |
| 199 void closeInternal(); | |
| 200 | |
| 201 SignalingState m_signalingState; | |
| 202 ICEGatheringState m_iceGatheringState; | |
| 203 ICEConnectionState m_iceConnectionState; | |
| 204 | |
| 205 MediaStreamVector m_localStreams; | |
| 206 MediaStreamVector m_remoteStreams; | |
| 207 | |
| 208 std::unique_ptr<WebRTCPeerConnectionHandler> m_peerHandler; | |
| 209 | |
| 210 Member<AsyncMethodRunner<RTCPeerConnection>> m_dispatchScheduledEventRunner; | |
| 211 HeapVector<Member<EventWrapper>> m_scheduledEvents; | |
| 212 | |
| 213 bool m_stopped; | |
| 214 bool m_closed; | |
| 215 }; | |
| 216 | |
| 217 } // namespace blink | |
| 218 | |
| 219 #endif // RTCPeerConnection_h | |
| OLD | NEW |