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