Index: Source/modules/mediastream/MediaStream.cpp |
diff --git a/Source/modules/mediastream/MediaStream.cpp b/Source/modules/mediastream/MediaStream.cpp |
index bfde31b33394c5d664505278a5aa0e5211aefd1b..cee565a8e89d5820a9c9391d2f726fa39ece301d 100644 |
--- a/Source/modules/mediastream/MediaStream.cpp |
+++ b/Source/modules/mediastream/MediaStream.cpp |
@@ -55,15 +55,15 @@ static void processTrack(MediaStreamTrack* track, MediaStreamTrackVector& trackV |
trackVector.append(track); |
} |
-PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context) |
+PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* context) |
{ |
MediaStreamTrackVector audioTracks; |
MediaStreamTrackVector videoTracks; |
- return adoptRef(new MediaStream(context, audioTracks, videoTracks)); |
+ return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, audioTracks, videoTracks)); |
} |
-PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPtr<MediaStream> stream) |
+PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPtrWillBeRawPtr<MediaStream> stream) |
{ |
ASSERT(stream); |
@@ -76,10 +76,10 @@ PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPt |
for (size_t i = 0; i < stream->m_videoTracks.size(); ++i) |
processTrack(stream->m_videoTracks[i].get(), videoTracks); |
- return adoptRef(new MediaStream(context, audioTracks, videoTracks)); |
+ return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, audioTracks, videoTracks)); |
} |
-PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, const MediaStreamTrackVector& tracks) |
+PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* context, const MediaStreamTrackVector& tracks) |
{ |
MediaStreamTrackVector audioTracks; |
MediaStreamTrackVector videoTracks; |
@@ -87,12 +87,12 @@ PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, const Med |
for (size_t i = 0; i < tracks.size(); ++i) |
processTrack(tracks[i].get(), tracks[i]->kind() == "audio" ? audioTracks : videoTracks); |
- return adoptRef(new MediaStream(context, audioTracks, videoTracks)); |
+ return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, audioTracks, videoTracks)); |
} |
-PassRefPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor) |
+PassRefPtrWillBeRawPtr<MediaStream> MediaStream::create(ExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor) |
{ |
- return adoptRef(new MediaStream(context, streamDescriptor)); |
+ return adoptRefWillBeRefCountedGarbageCollected(new MediaStream(context, streamDescriptor)); |
} |
MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescriptor> streamDescriptor) |
@@ -107,16 +107,16 @@ MediaStream::MediaStream(ExecutionContext* context, PassRefPtr<MediaStreamDescri |
size_t numberOfAudioTracks = m_descriptor->numberOfAudioComponents(); |
m_audioTracks.reserveCapacity(numberOfAudioTracks); |
for (size_t i = 0; i < numberOfAudioTracks; i++) { |
- RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_descriptor->audioComponent(i)); |
- newTrack->addObserver(this); |
+ RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_descriptor->audioComponent(i)); |
+ newTrack->registerMediaStream(this); |
m_audioTracks.append(newTrack.release()); |
} |
size_t numberOfVideoTracks = m_descriptor->numberOfVideoComponents(); |
m_videoTracks.reserveCapacity(numberOfVideoTracks); |
for (size_t i = 0; i < numberOfVideoTracks; i++) { |
- RefPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_descriptor->videoComponent(i)); |
- newTrack->addObserver(this); |
+ RefPtrWillBeRawPtr<MediaStreamTrack> newTrack = MediaStreamTrack::create(context, m_descriptor->videoComponent(i)); |
+ newTrack->registerMediaStream(this); |
m_videoTracks.append(newTrack.release()); |
} |
} |
@@ -133,11 +133,11 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector |
MediaStreamTrackVector::const_iterator iter; |
for (iter = audioTracks.begin(); iter != audioTracks.end(); ++iter) { |
- (*iter)->addObserver(this); |
+ (*iter)->registerMediaStream(this); |
audioComponents.append((*iter)->component()); |
} |
for (iter = videoTracks.begin(); iter != videoTracks.end(); ++iter) { |
- (*iter)->addObserver(this); |
+ (*iter)->registerMediaStream(this); |
videoComponents.append((*iter)->component()); |
} |
@@ -151,11 +151,13 @@ MediaStream::MediaStream(ExecutionContext* context, const MediaStreamTrackVector |
MediaStream::~MediaStream() |
{ |
+#if !ENABLE(OILPAN) |
for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) |
- (*iter)->removeObserver(this); |
+ (*iter)->unregisterMediaStream(this); |
for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) |
- (*iter)->removeObserver(this); |
+ (*iter)->unregisterMediaStream(this); |
+#endif |
m_descriptor->setClient(0); |
} |
@@ -165,7 +167,7 @@ bool MediaStream::ended() const |
return m_stopped || m_descriptor->ended(); |
} |
-void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState) |
+void MediaStream::addTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState) |
{ |
if (ended()) { |
exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); |
@@ -177,7 +179,7 @@ void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState |
return; |
} |
- RefPtr<MediaStreamTrack> track = prpTrack; |
+ RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack; |
if (getTrackById(track->id())) |
return; |
@@ -190,12 +192,12 @@ void MediaStream::addTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState |
m_videoTracks.append(track); |
break; |
} |
- track->addObserver(this); |
+ track->registerMediaStream(this); |
m_descriptor->addComponent(track->component()); |
MediaStreamCenter::instance().didAddMediaStreamTrack(m_descriptor.get(), track->component()); |
} |
-void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState) |
+void MediaStream::removeTrack(PassRefPtrWillBeRawPtr<MediaStreamTrack> prpTrack, ExceptionState& exceptionState) |
{ |
if (ended()) { |
exceptionState.throwDOMException(InvalidStateError, "The MediaStream is finished."); |
@@ -207,7 +209,7 @@ void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionSt |
return; |
} |
- RefPtr<MediaStreamTrack> track = prpTrack; |
+ RefPtrWillBeRawPtr<MediaStreamTrack> track = prpTrack; |
size_t pos = kNotFound; |
switch (track->component()->source()->type()) { |
@@ -225,8 +227,7 @@ void MediaStream::removeTrack(PassRefPtr<MediaStreamTrack> prpTrack, ExceptionSt |
if (pos == kNotFound) |
return; |
- |
- track->removeObserver(this); |
+ track->unregisterMediaStream(this); |
m_descriptor->removeComponent(track->component()); |
if (!m_audioTracks.size() && !m_videoTracks.size()) |
@@ -250,15 +251,14 @@ MediaStreamTrack* MediaStream::getTrackById(String id) |
return 0; |
} |
-PassRefPtr<MediaStream> MediaStream::clone(ExecutionContext* context) |
+PassRefPtrWillBeRawPtr<MediaStream> MediaStream::clone(ExecutionContext* context) |
{ |
MediaStreamTrackVector tracks; |
for (MediaStreamTrackVector::iterator iter = m_audioTracks.begin(); iter != m_audioTracks.end(); ++iter) |
tracks.append((*iter)->clone(context)); |
for (MediaStreamTrackVector::iterator iter = m_videoTracks.begin(); iter != m_videoTracks.end(); ++iter) |
tracks.append((*iter)->clone(context)); |
- RefPtr<MediaStream> clonedStream = MediaStream::create(context, tracks); |
- return clonedStream.release(); |
+ return MediaStream::create(context, tracks); |
} |
void MediaStream::stop() |
@@ -317,7 +317,7 @@ void MediaStream::addRemoteTrack(MediaStreamComponent* component) |
if (ended()) |
return; |
- RefPtr<MediaStreamTrack> track = MediaStreamTrack::create(executionContext(), component); |
+ RefPtrWillBeRawPtr<MediaStreamTrack> track = MediaStreamTrack::create(executionContext(), component); |
switch (component->source()->type()) { |
case MediaStreamSource::TypeAudio: |
m_audioTracks.append(track); |
@@ -326,7 +326,7 @@ void MediaStream::addRemoteTrack(MediaStreamComponent* component) |
m_videoTracks.append(track); |
break; |
} |
- track->addObserver(this); |
+ track->registerMediaStream(this); |
m_descriptor->addComponent(component); |
scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::addtrack, false, false, track)); |
@@ -359,8 +359,8 @@ void MediaStream::removeRemoteTrack(MediaStreamComponent* component) |
m_descriptor->removeComponent(component); |
- RefPtr<MediaStreamTrack> track = (*tracks)[index]; |
- track->removeObserver(this); |
+ RefPtrWillBeRawPtr<MediaStreamTrack> track = (*tracks)[index]; |
+ track->unregisterMediaStream(this); |
tracks->remove(index); |
scheduleDispatchEvent(MediaStreamTrackEvent::create(EventTypeNames::removetrack, false, false, track)); |
} |
@@ -393,4 +393,11 @@ URLRegistry& MediaStream::registry() const |
return MediaStreamRegistry::registry(); |
} |
+void MediaStream::trace(Visitor* visitor) |
+{ |
+ visitor->trace(m_audioTracks); |
+ visitor->trace(m_videoTracks); |
+ visitor->trace(m_scheduledEvents); |
+} |
+ |
} // namespace WebCore |