Purge all uses of PassRefPtr in WebCore/Modules
[WebKit-https.git] / Source / WebCore / Modules / mediastream / RTCDTMFSender.h
1 /*
2  * Copyright (C) 2013 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  * 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 GOOGLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef RTCDTMFSender_h
27 #define RTCDTMFSender_h
28
29 #if ENABLE(WEB_RTC)
30
31 #include "ActiveDOMObject.h"
32 #include "EventTarget.h"
33 #include "RTCDTMFSenderHandlerClient.h"
34 #include "ScriptWrappable.h"
35 #include "Timer.h"
36 #include <wtf/RefCounted.h>
37
38 namespace WebCore {
39
40 class MediaStreamTrack;
41 class RTCPeerConnectionHandler;
42 class RTCDTMFSenderHandler;
43
44 class RTCDTMFSender final : public RefCounted<RTCDTMFSender>, public EventTargetWithInlineData, public RTCDTMFSenderHandlerClient, public ActiveDOMObject {
45 public:
46     static RefPtr<RTCDTMFSender> create(ScriptExecutionContext*, RTCPeerConnectionHandler*, RefPtr<MediaStreamTrack>&&, ExceptionCode&);
47     ~RTCDTMFSender();
48
49     bool canInsertDTMF() const;
50     MediaStreamTrack* track() const;
51     String toneBuffer() const;
52     long duration() const { return m_duration; }
53     long interToneGap() const { return m_interToneGap; }
54
55     void insertDTMF(const String& tones, Optional<int> duration, Optional<int> interToneGap, ExceptionCode&);
56
57     // EventTarget
58     EventTargetInterface eventTargetInterface() const override { return RTCDTMFSenderEventTargetInterfaceType; }
59     ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
60
61     using RefCounted<RTCDTMFSender>::ref;
62     using RefCounted<RTCDTMFSender>::deref;
63
64 private:
65     RTCDTMFSender(ScriptExecutionContext*, RefPtr<MediaStreamTrack>&&, std::unique_ptr<RTCDTMFSenderHandler>);
66
67     // ActiveDOMObject
68     void stop() override;
69     const char* activeDOMObjectName() const override;
70     bool canSuspendForDocumentSuspension() const override;
71
72     void scheduleDispatchEvent(Ref<Event>&&);
73     void scheduledEventTimerFired();
74
75     // EventTarget
76     void refEventTarget() override { ref(); }
77     void derefEventTarget() override { deref(); }
78
79     // RTCDTMFSenderHandlerClient
80     void didPlayTone(const String&) override;
81
82     RefPtr<MediaStreamTrack> m_track;
83     long m_duration;
84     long m_interToneGap;
85
86     std::unique_ptr<RTCDTMFSenderHandler> m_handler;
87
88     bool m_stopped;
89
90     Timer m_scheduledEventTimer;
91     Vector<Ref<Event>> m_scheduledEvents;
92 };
93
94 } // namespace WebCore
95
96 #endif // ENABLE(WEB_RTC)
97
98 #endif // RTCDTMFSender_h