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

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: 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..95161cb0ba5e0fb7be9301d88b13ac9ed9500356 100644
--- a/Source/WebCore/Modules/mediastream/MediaStream.cpp
+++ b/Source/WebCore/Modules/mediastream/MediaStream.cpp
@@ -115,12 +115,12 @@ 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()
@@ -151,7 +151,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 +264,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 +330,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].get()->ended())
abarth-chromium 2013/04/08 06:24:21 There's no need to call "get()" here. operator->
+ return;
+
+ for (size_t i = 0; i < m_videoTracks.size(); ++i)
+ if (!m_videoTracks[i].get()->ended())
+ return;
+
+ streamEnded();
+}
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)

Powered by Google App Engine
This is Rietveld 408576698