#ifndef RTCDTMFSender_h
#define RTCDTMFSender_h
#include "bindings/v8/ScriptWrappable.h"
#include "core/dom/ActiveDOMObject.h"
#include "core/events/EventTarget.h"
#include "platform/Timer.h"
#include "public/platform/WebRTCDTMFSenderHandlerClient.h"
#include "wtf/RefCounted.h"
namespace blink {
class WebRTCDTMFSenderHandler;
class WebRTCPeerConnectionHandler;
}
namespace WebCore {
class ExceptionState;
class MediaStreamTrack;
class RTCDTMFSender FINAL : public RefCounted<RTCDTMFSender>, public ScriptWrappable, public EventTargetWithInlineData, public blink::WebRTCDTMFSenderHandlerClient, public ActiveDOMObject {
REFCOUNTED_EVENT_TARGET(RTCDTMFSender);
public:
static PassRefPtr<RTCDTMFSender> create(ExecutionContext*, blink::WebRTCPeerConnectionHandler*, PassRefPtr<MediaStreamTrack>, ExceptionState&);
virtual ~RTCDTMFSender();
bool canInsertDTMF() const;
MediaStreamTrack* track() const;
String toneBuffer() const;
long duration() const { return m_duration; }
long interToneGap() const { return m_interToneGap; }
void insertDTMF(const String& tones, ExceptionState&);
void insertDTMF(const String& tones, long duration, ExceptionState&);
void insertDTMF(const String& tones, long duration, long interToneGap, ExceptionState&);
DEFINE_ATTRIBUTE_EVENT_LISTENER(tonechange);
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual ExecutionContext* executionContext() const OVERRIDE;
virtual void stop() OVERRIDE;
private:
RTCDTMFSender(ExecutionContext*, PassRefPtr<MediaStreamTrack>, PassOwnPtr<blink::WebRTCDTMFSenderHandler>);
void scheduleDispatchEvent(PassRefPtrWillBeRawPtr<Event>);
void scheduledEventTimerFired(Timer<RTCDTMFSender>*);
virtual void didPlayTone(const blink::WebString&) OVERRIDE;
RefPtr<MediaStreamTrack> m_track;
long m_duration;
long m_interToneGap;
OwnPtr<blink::WebRTCDTMFSenderHandler> m_handler;
bool m_stopped;
Timer<RTCDTMFSender> m_scheduledEventTimer;
WillBePersistentHeapVector<RefPtrWillBeMember<Event> > m_scheduledEvents;
};
}
#endif