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()); |