| Index: Source/modules/mediastream/MediaStreamTrack.cpp
|
| diff --git a/Source/modules/mediastream/MediaStreamTrack.cpp b/Source/modules/mediastream/MediaStreamTrack.cpp
|
| index 1140f823e370884df190b22bdafc7e295a17c517..6da6ad73fb871dfed46120899783e00ec23d4968 100644
|
| --- a/Source/modules/mediastream/MediaStreamTrack.cpp
|
| +++ b/Source/modules/mediastream/MediaStreamTrack.cpp
|
| @@ -47,6 +47,7 @@ PassRefPtr<MediaStreamTrack> MediaStreamTrack::create(ExecutionContext* context,
|
|
|
| MediaStreamTrack::MediaStreamTrack(ExecutionContext* context, MediaStreamComponent* component)
|
| : ActiveDOMObject(context)
|
| + , m_readyState(MediaStreamSource::ReadyStateLive)
|
| , m_isIteratingObservers(false)
|
| , m_stopped(false)
|
| , m_component(component)
|
| @@ -93,20 +94,21 @@ bool MediaStreamTrack::enabled() const
|
|
|
| void MediaStreamTrack::setEnabled(bool enabled)
|
| {
|
| - if (m_stopped || enabled == m_component->enabled())
|
| + if (enabled == m_component->enabled())
|
| return;
|
|
|
| m_component->setEnabled(enabled);
|
|
|
| - MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_component.get());
|
| + if (!ended())
|
| + MediaStreamCenter::instance().didSetMediaStreamTrackEnabled(m_component.get());
|
| }
|
|
|
| String MediaStreamTrack::readyState() const
|
| {
|
| - if (m_stopped)
|
| + if (ended())
|
| return "ended";
|
|
|
| - switch (m_component->source()->readyState()) {
|
| + switch (m_readyState) {
|
| case MediaStreamSource::ReadyStateLive:
|
| return "live";
|
| case MediaStreamSource::ReadyStateMuted:
|
| @@ -131,7 +133,10 @@ void MediaStreamTrack::stopTrack(ExceptionState& exceptionState)
|
| if (ended())
|
| return;
|
|
|
| + m_readyState = MediaStreamSource::ReadyStateEnded;
|
| MediaStreamCenter::instance().didStopMediaStreamTrack(component());
|
| + dispatchEvent(Event::create(EventTypeNames::ended));
|
| + propagateTrackEnded();
|
| }
|
|
|
| PassRefPtr<MediaStreamTrack> MediaStreamTrack::clone(ExecutionContext* context)
|
| @@ -144,15 +149,16 @@ PassRefPtr<MediaStreamTrack> MediaStreamTrack::clone(ExecutionContext* context)
|
|
|
| bool MediaStreamTrack::ended() const
|
| {
|
| - return m_stopped || (m_component->source()->readyState() == MediaStreamSource::ReadyStateEnded);
|
| + return m_stopped || (m_readyState == MediaStreamSource::ReadyStateEnded);
|
| }
|
|
|
| void MediaStreamTrack::sourceChangedState()
|
| {
|
| - if (m_stopped)
|
| + if (ended())
|
| return;
|
|
|
| - switch (m_component->source()->readyState()) {
|
| + m_readyState = m_component->source()->readyState();
|
| + switch (m_readyState) {
|
| case MediaStreamSource::ReadyStateLive:
|
| dispatchEvent(Event::create(EventTypeNames::unmute));
|
| break;
|
|
|