From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- .../WebCore/Modules/mediastream/RTCDTMFSender.cpp | 105 ++++++++------------- 1 file changed, 39 insertions(+), 66 deletions(-) (limited to 'Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp') diff --git a/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp b/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp index 3167d9275..08eae7b70 100644 --- a/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp +++ b/Source/WebCore/Modules/mediastream/RTCDTMFSender.cpp @@ -24,50 +24,31 @@ */ #include "config.h" - -#if ENABLE(MEDIA_STREAM) - #include "RTCDTMFSender.h" -#include "ExceptionCode.h" +#if ENABLE(WEB_RTC) + #include "MediaStreamTrack.h" #include "RTCDTMFSenderHandler.h" #include "RTCDTMFToneChangeEvent.h" -#include "RTCPeerConnectionHandler.h" #include "ScriptExecutionContext.h" namespace WebCore { -static const long minToneDurationMs = 70; +static const long minToneDurationMs = 40; static const long defaultToneDurationMs = 100; static const long maxToneDurationMs = 6000; -static const long minInterToneGapMs = 50; -static const long defaultInterToneGapMs = 50; - -PassRefPtr RTCDTMFSender::create(ScriptExecutionContext* context, RTCPeerConnectionHandler* peerConnectionHandler, PassRefPtr prpTrack, ExceptionCode& ec) -{ - RefPtr track = prpTrack; - std::unique_ptr handler = peerConnectionHandler->createDTMFSender(track->source()); - if (!handler) { - ec = NOT_SUPPORTED_ERR; - return nullptr; - } - - RefPtr dtmfSender = adoptRef(new RTCDTMFSender(context, track, std::move(handler))); - dtmfSender->suspendIfNeeded(); - return dtmfSender.release(); -} +static const long minInterToneGapMs = 30; +static const long defaultInterToneGapMs = 70; -RTCDTMFSender::RTCDTMFSender(ScriptExecutionContext* context, PassRefPtr track, std::unique_ptr handler) - : ActiveDOMObject(context) - , m_track(track) +RTCDTMFSender::RTCDTMFSender(ScriptExecutionContext& context, RefPtr&& track) + : ActiveDOMObject(&context) + , m_track(WTFMove(track)) , m_duration(defaultToneDurationMs) , m_interToneGap(defaultInterToneGapMs) - , m_handler(std::move(handler)) , m_stopped(false) - , m_scheduledEventTimer(this, &RTCDTMFSender::scheduledEventTimerFired) + , m_scheduledEventTimer(*this, &RTCDTMFSender::scheduledEventTimerFired) { - m_handler->setClient(this); } RTCDTMFSender::~RTCDTMFSender() @@ -76,7 +57,7 @@ RTCDTMFSender::~RTCDTMFSender() bool RTCDTMFSender::canInsertDTMF() const { - return m_handler->canInsertDTMF(); + return false; } MediaStreamTrack* RTCDTMFSender::track() const @@ -86,41 +67,24 @@ MediaStreamTrack* RTCDTMFSender::track() const String RTCDTMFSender::toneBuffer() const { - return m_handler->currentToneBuffer(); + return { }; } -void RTCDTMFSender::insertDTMF(const String& tones, ExceptionCode& ec) +ExceptionOr RTCDTMFSender::insertDTMF(const String&, std::optional duration, std::optional interToneGap) { - insertDTMF(tones, defaultToneDurationMs, defaultInterToneGapMs, ec); -} + if (!canInsertDTMF()) + return Exception { NOT_SUPPORTED_ERR }; -void RTCDTMFSender::insertDTMF(const String& tones, long duration, ExceptionCode& ec) -{ - insertDTMF(tones, duration, defaultInterToneGapMs, ec); -} + if (duration && (duration.value() > maxToneDurationMs || duration.value() < minToneDurationMs)) + return Exception { SYNTAX_ERR }; -void RTCDTMFSender::insertDTMF(const String& tones, long duration, long interToneGap, ExceptionCode& ec) -{ - if (!canInsertDTMF()) { - ec = NOT_SUPPORTED_ERR; - return; - } + if (interToneGap && interToneGap.value() < minInterToneGapMs) + return Exception { SYNTAX_ERR }; - if (duration > maxToneDurationMs || duration < minToneDurationMs) { - ec = SYNTAX_ERR; - return; - } - - if (interToneGap < minInterToneGapMs) { - ec = SYNTAX_ERR; - return; - } + m_duration = duration.value_or(defaultToneDurationMs); + m_interToneGap = interToneGap.value_or(defaultInterToneGapMs); - m_duration = duration; - m_interToneGap = interToneGap; - - if (!m_handler->insertDTMF(tones, m_duration, m_interToneGap)) - ec = SYNTAX_ERR; + return Exception { SYNTAX_ERR }; } void RTCDTMFSender::didPlayTone(const String& tone) @@ -131,30 +95,39 @@ void RTCDTMFSender::didPlayTone(const String& tone) void RTCDTMFSender::stop() { m_stopped = true; - m_handler->setClient(0); } -void RTCDTMFSender::scheduleDispatchEvent(PassRefPtr event) +const char* RTCDTMFSender::activeDOMObjectName() const +{ + return "RTCDTMFSender"; +} + +bool RTCDTMFSender::canSuspendForDocumentSuspension() const +{ + // FIXME: We should try and do better here. + return false; +} + +void RTCDTMFSender::scheduleDispatchEvent(Ref&& event) { - m_scheduledEvents.append(event); + m_scheduledEvents.append(WTFMove(event)); if (!m_scheduledEventTimer.isActive()) m_scheduledEventTimer.startOneShot(0); } -void RTCDTMFSender::scheduledEventTimerFired(Timer*) +void RTCDTMFSender::scheduledEventTimerFired() { if (m_stopped) return; - Vector> events; + Vector> events; events.swap(m_scheduledEvents); - Vector>::iterator it = events.begin(); - for (; it != events.end(); ++it) - dispatchEvent((*it).release()); + for (auto& event : events) + dispatchEvent(event); } } // namespace WebCore -#endif // ENABLE(MEDIA_STREAM) +#endif // ENABLE(WEB_RTC) -- cgit v1.2.1