Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Unified Diff: Source/WebCore/Modules/mediastream/MediaStream.cpp

Issue 13776002: MediaStream should fire ended event when all tracks are ended (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: MediaStream should fire ended event when all tracks are ended Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WebCore/Modules/mediastream/MediaStream.cpp
diff --git a/Source/WebCore/Modules/mediastream/MediaStream.cpp b/Source/WebCore/Modules/mediastream/MediaStream.cpp
index 5c388abaf3adef1737c2da3991627241004c40e7..75c7d7fb06adc683eb6ecc1795e434b330c677d2 100644
--- a/Source/WebCore/Modules/mediastream/MediaStream.cpp
+++ b/Source/WebCore/Modules/mediastream/MediaStream.cpp
@@ -115,17 +115,23 @@ MediaStream::MediaStream(ScriptExecutionContext* context, PassRefPtr<MediaStream
size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents();
m_audioTracks.reserveCapacity(numberOfAudioTracks);
for (size_t i = 0; i < numberOfAudioTracks; i++)
- m_audioTracks.append(MediaStreamTrack::create(context, m_descriptor->audioComponent(i)));
+ m_audioTracks.append(MediaStreamTrack::create(context, m_descriptor->audioComponent(i), this));
size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents();
m_videoTracks.reserveCapacity(numberOfVideoTracks);
for (size_t i = 0; i < numberOfVideoTracks; i++)
- m_videoTracks.append(MediaStreamTrack::create(context, m_descriptor->videoComponent(i)));
+ m_videoTracks.append(MediaStreamTrack::create(context, m_descriptor->videoComponent(i), this));
}
MediaStream::~MediaStream()
{
m_descriptor->setClient(0);
+
+ for (size_t i = 0; i < m_audioTracks.size(); ++i)
+ m_audioTracks[i]->setStream(0);
+
+ for (size_t i = 0; i < m_videoTracks.size(); ++i)
+ m_videoTracks[i]->setStream(0);
}
bool MediaStream::ended() const
@@ -151,7 +157,7 @@ void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionCode&
return;
RefPtr<MediaStreamComponent> component = MediaStreamComponent::create(m_descriptor.get(), track->component()->source());
- RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(scriptExecutionContext(), component.get());
+ RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(scriptExecutionContext(), component.get(), this);
switch (component->source()->type()) {
case MediaStreamSource::TypeAudio:
@@ -264,7 +270,7 @@ void MediaStream::addRemoteTrack(MediaStreamComponent* component)
component->setStream(descriptor());
- RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionContext(), component);
+ RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(scriptExecutionContext(), component, this);
switch (component->source()->type()) {
case MediaStreamSource::TypeAudio:
m_audioTracks.append(track);
@@ -330,6 +336,18 @@ void MediaStream::scheduledEventTimerFired(Timer<MediaStream>*)
events.clear();
}
+void MediaStream::trackEndedNotification()
+{
+ for (size_t i = 0; i < m_audioTracks.size(); ++i)
+ if (!m_audioTracks[i]->ended())
+ return;
+
+ for (size_t i = 0; i < m_videoTracks.size(); ++i)
+ if (!m_videoTracks[i]->ended())
+ return;
+
+ streamEnded();
+}
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)

Powered by Google App Engine
This is Rietveld 408576698