8560053dd4266101376a725d5590dd1f160acbb1
[WebKit-https.git] / Source / WebCore / Modules / mediastream / libwebrtc / LibWebRTCPeerConnectionBackend.h
1 /*
2  * Copyright (C) 2017 Apple Inc.
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  * 1.  Redistributions of source code must retain the above copyright
8  *     notice, this list of conditions and the following disclaimer.
9  * 2.  Redistributions in binary form must reproduce the above copyright
10  *     notice, this list of conditions and the following disclaimer in the
11  *     documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24
25 #pragma once
26
27 #if USE(LIBWEBRTC)
28
29 #include "PeerConnectionBackend.h"
30 #include <wtf/HashMap.h>
31
32 namespace webrtc {
33 class IceCandidateInterface;
34 }
35
36 namespace WebCore {
37
38 class LibWebRTCMediaEndpoint;
39 class RTCRtpReceiver;
40 class RTCSessionDescription;
41 class RTCStatsReport;
42 class RealtimeOutgoingAudioSource;
43 class RealtimeOutgoingVideoSource;
44
45 class LibWebRTCPeerConnectionBackend final : public PeerConnectionBackend {
46 public:
47     explicit LibWebRTCPeerConnectionBackend(RTCPeerConnection&);
48     ~LibWebRTCPeerConnectionBackend();
49
50 private:
51     void doCreateOffer(RTCOfferOptions&&) final;
52     void doCreateAnswer(RTCAnswerOptions&&) final;
53     void doSetLocalDescription(RTCSessionDescription&) final;
54     void doSetRemoteDescription(RTCSessionDescription&) final;
55     void doAddIceCandidate(RTCIceCandidate&) final;
56     void doStop() final;
57     std::unique_ptr<RTCDataChannelHandler> createDataChannelHandler(const String&, const RTCDataChannelInit&) final;
58     void setConfiguration(MediaEndpointConfiguration&&) final;
59     void getStats(MediaStreamTrack*, Ref<DeferredPromise>&&) final;
60     Ref<RTCRtpReceiver> createReceiver(const String& transceiverMid, const String& trackKind, const String& trackId) final;
61
62     RefPtr<RTCSessionDescription> localDescription() const final;
63     RefPtr<RTCSessionDescription> currentLocalDescription() const final;
64     RefPtr<RTCSessionDescription> pendingLocalDescription() const final;
65
66     RefPtr<RTCSessionDescription> remoteDescription() const final;
67     RefPtr<RTCSessionDescription> currentRemoteDescription() const final;
68     RefPtr<RTCSessionDescription> pendingRemoteDescription() const final;
69
70     void notifyAddedTrack(RTCRtpSender&) final;
71     // FIXME: API to implement for real
72     Vector<RefPtr<MediaStream>> getRemoteStreams() const final { return { }; }
73     void replaceTrack(RTCRtpSender&, Ref<MediaStreamTrack>&&, DOMPromise<void>&&) final { }
74
75     void emulatePlatformEvent(const String&) final { }
76
77     friend LibWebRTCMediaEndpoint;
78     RTCPeerConnection& connection() { return m_peerConnection; }
79     void addAudioSource(Ref<RealtimeOutgoingAudioSource>&&);
80     void addVideoSource(Ref<RealtimeOutgoingVideoSource>&&);
81
82     void getStatsSucceeded(const DeferredPromise&, Ref<RTCStatsReport>&&);
83     void getStatsFailed(const DeferredPromise&, Exception&&);
84
85 private:
86     Ref<LibWebRTCMediaEndpoint> m_endpoint;
87     bool m_isLocalDescriptionSet { false };
88     bool m_isRemoteDescriptionSet { false };
89
90     Vector<std::unique_ptr<webrtc::IceCandidateInterface>> m_pendingCandidates;
91     Vector<Ref<RealtimeOutgoingAudioSource>> m_audioSources;
92     Vector<Ref<RealtimeOutgoingVideoSource>> m_videoSources;
93     HashMap<const DeferredPromise*, Ref<DeferredPromise>> m_statsPromises;
94 };
95
96 } // namespace WebCore
97
98 #endif // USE(LIBWEBRTC)