Chromium Code Reviews| Index: Source/modules/mediastream/MediaStream.cpp |
| diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp |
| index 7d5caddfc43eeb992c04365b18a6fafb8fda69d2..e62f9de2023942f095aca3c134168dfec9caf49a 100644 |
| --- a/Source/modules/mediastream/MediaStream.cpp |
| +++ b/Source/modules/mediastream/MediaStream.cpp |
| @@ -117,6 +117,9 @@ MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri |
| newTrack->registerMediaStream(this); |
| m_videoTracks.append(newTrack); |
| } |
| + |
| + if (emptyOrOnlyEndedTracks()) |
| + m_descriptor->setEnded(); |
| } |
| MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector& audioTracks, const MediaStreamTrackVector& videoTracks) |
| @@ -143,6 +146,8 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector |
| m_audioTracks = audioTracks; |
| m_videoTracks = videoTracks; |
| + if (emptyOrOnlyEndedTracks()) |
| + m_descriptor->setEnded(); |
| } |
| MediaStream::~MediaStream() |
| @@ -150,6 +155,20 @@ MediaStream::~MediaStream() |
| m_descriptor->setClient(0); |
| } |
| +bool MediaStream::emptyOrOnlyEndedTracks() |
| +{ |
| + if (!m_audioTracks.size() && !m_videoTracks.size()) { |
| + return true; |
| + } |
| + for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != |
|
perkj_chrome
2015/01/07 14:12:17
?
|
| + if (!iter->get()->ended()) |
| + return false; |
| + for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != |
| + if (!iter->get()->ended()) |
| + return false; |
| + return true; |
| +} |
| + |
| bool MediaStream::ended() const |
| { |
| return m_stopped || m_descriptor->ended(); |
| @@ -224,7 +243,7 @@ void MediaStream::removeTrack(MediaStreamTrack* track, ExceptionState& exception |
| track->unregisterMediaStream(this); |
| m_descriptor->removeComponent(track->component()); |
| - if (!m_audioTracks.size() && !m_videoTracks.size()) |
| + if (emptyOrOnlyEndedTracks()) |
| m_descriptor->setEnded(); |
| MediaStreamCenter::instance().didRemoveMediaStreamTrack(m_descriptor.get(), track->component()); |