Index: third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp |
diff --git a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp |
index ea8d03f9ffc506bc1d8ec8a26efc96355d538c68..a45f886eae28fbd24caaf0ee857454afb5f87c8b 100644 |
--- a/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp |
+++ b/third_party/WebKit/Source/modules/mediastream/RTCDTMFSender.cpp |
@@ -51,15 +51,18 @@ |
return nullptr; |
} |
- return new RTCDTMFSender(context, track, handler.release()); |
+ RTCDTMFSender* dtmfSender = new RTCDTMFSender(context, track, handler.release()); |
+ dtmfSender->suspendIfNeeded(); |
+ return dtmfSender; |
} |
RTCDTMFSender::RTCDTMFSender(ExecutionContext* context, MediaStreamTrack* track, PassOwnPtr<WebRTCDTMFSenderHandler> handler) |
- : ContextLifecycleObserver(context) |
+ : ActiveDOMObject(context) |
, m_track(track) |
, m_duration(defaultToneDurationMs) |
, m_interToneGap(defaultInterToneGapMs) |
, m_handler(handler) |
+ , m_stopped(false) |
, m_scheduledEventTimer(this, &RTCDTMFSender::scheduledEventTimerFired) |
{ |
m_handler->setClient(this); |
@@ -130,11 +133,12 @@ |
ExecutionContext* RTCDTMFSender::executionContext() const |
{ |
- return ContextLifecycleObserver::executionContext(); |
+ return ActiveDOMObject::executionContext(); |
} |
-void RTCDTMFSender::contextDestroyed() |
+void RTCDTMFSender::stop() |
{ |
+ m_stopped = true; |
m_handler->setClient(0); |
} |
@@ -148,7 +152,7 @@ |
void RTCDTMFSender::scheduledEventTimerFired(Timer<RTCDTMFSender>*) |
{ |
- if (!executionContext()) |
+ if (m_stopped) |
return; |
WillBeHeapVector<RefPtrWillBeMember<Event>> events; |
@@ -164,7 +168,7 @@ |
visitor->trace(m_track); |
visitor->trace(m_scheduledEvents); |
RefCountedGarbageCollectedEventTargetWithInlineData<RTCDTMFSender>::trace(visitor); |
- ContextLifecycleObserver::trace(visitor); |
+ ActiveDOMObject::trace(visitor); |
} |
} // namespace blink |