#pragma once
#if ENABLE(WEB_RTC_DTMF)
#include "ActiveDOMObject.h"
#include "EventTarget.h"
#include "ExceptionOr.h"
#include "ScriptWrappable.h"
#include "Timer.h"
namespace WebCore {
class MediaStreamTrack;
class RTCDTMFSender final : public RefCounted<RTCDTMFSender>, public EventTargetWithInlineData, public ActiveDOMObject {
public:
virtual ~RTCDTMFSender();
bool canInsertDTMF() const;
MediaStreamTrack* track() const;
String toneBuffer() const;
int duration() const { return m_duration; }
int interToneGap() const { return m_interToneGap; }
ExceptionOr<void> insertDTMF(const String& tones, std::optional<int> duration, std::optional<int> interToneGap);
using RefCounted::ref;
using RefCounted::deref;
private:
RTCDTMFSender(ScriptExecutionContext&, RefPtr<MediaStreamTrack>&&);
void stop() final;
const char* activeDOMObjectName() const final;
bool canSuspendForDocumentSuspension() const final;
EventTargetInterface eventTargetInterface() const final { return RTCDTMFSenderEventTargetInterfaceType; }
ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
void refEventTarget() final { ref(); }
void derefEventTarget() final { deref(); }
void didPlayTone(const String&);
void scheduleDispatchEvent(Ref<Event>&&);
void scheduledEventTimerFired();
RefPtr<MediaStreamTrack> m_track;
int m_duration;
int m_interToneGap;
bool m_stopped;
Timer m_scheduledEventTimer;
Vector<Ref<Event>> m_scheduledEvents;
};
}
#endif // ENABLE(WEB_RTC)