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