Index: trunk/Source/platform/mediastream/MediaStreamSource.cpp |
=================================================================== |
--- trunk/Source/platform/mediastream/MediaStreamSource.cpp (revision 181729) |
+++ trunk/Source/platform/mediastream/MediaStreamSource.cpp (working copy) |
@@ -34,38 +34,11 @@ |
namespace blink { |
-// The disposer pattern actually makes the deletion of the extra data happen |
-// earlier and not later. The disposer makes sure that the extra data is |
-// destructed in weak processing which is run before sweeping and therefore |
-// all the objects are still alive and can be touched. |
-// |
-// FIXME: Oilpan: This disposer pattern is duplicated in a lot of places. |
-// We should create a good abstraction class for this and remove the code duplication. |
-class MediaStreamSourceDisposer { |
-public: |
- explicit MediaStreamSourceDisposer(MediaStreamSource& source) : m_source(source) { } |
- ~MediaStreamSourceDisposer() |
- { |
- m_source.dispose(); |
- } |
- |
-private: |
- MediaStreamSource& m_source; |
-}; |
- |
-typedef HeapHashMap<WeakMember<MediaStreamSource>, OwnPtr<MediaStreamSourceDisposer> > SourceDisposers; |
- |
-static SourceDisposers& sourceDisposers() |
+PassRefPtr<MediaStreamSource> MediaStreamSource::create(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer) |
{ |
- DEFINE_STATIC_LOCAL(Persistent<SourceDisposers>, disposers, (new SourceDisposers)); |
- return *disposers; |
+ return adoptRef(new MediaStreamSource(id, type, name, readyState, requiresConsumer)); |
} |
-MediaStreamSource* MediaStreamSource::create(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer) |
-{ |
- return new MediaStreamSource(id, type, name, readyState, requiresConsumer); |
-} |
- |
MediaStreamSource::MediaStreamSource(const String& id, Type type, const String& name, ReadyState readyState, bool requiresConsumer) |
: m_id(id) |
, m_type(type) |
@@ -73,29 +46,29 @@ |
, m_readyState(readyState) |
, m_requiresConsumer(requiresConsumer) |
{ |
- sourceDisposers().add(this, adoptPtr(new MediaStreamSourceDisposer(*this))); |
} |
-void MediaStreamSource::dispose() |
-{ |
- m_extraData = nullptr; |
-} |
- |
void MediaStreamSource::setReadyState(ReadyState readyState) |
{ |
if (m_readyState != ReadyStateEnded && m_readyState != readyState) { |
m_readyState = readyState; |
- for (HeapHashSet<WeakMember<Observer> >::iterator i = m_observers.begin(); i != m_observers.end(); ++i) |
+ for (Vector<Observer*>::iterator i = m_observers.begin(); i != m_observers.end(); ++i) |
(*i)->sourceChangedState(); |
} |
} |
void MediaStreamSource::addObserver(MediaStreamSource::Observer* observer) |
{ |
- ASSERT(!m_observers.contains(observer)); |
- m_observers.add(observer); |
+ m_observers.append(observer); |
} |
+void MediaStreamSource::removeObserver(MediaStreamSource::Observer* observer) |
+{ |
+ size_t pos = m_observers.find(observer); |
+ if (pos != kNotFound) |
+ m_observers.remove(pos); |
+} |
+ |
void MediaStreamSource::addAudioConsumer(AudioDestinationConsumer* consumer) |
{ |
ASSERT(m_requiresConsumer); |
@@ -130,11 +103,4 @@ |
(*it)->consumeAudio(bus, numberOfFrames); |
} |
-void MediaStreamSource::trace(Visitor* visitor) |
-{ |
- visitor->trace(m_observers); |
- visitor->trace(m_audioConsumers); |
-} |
- |
} // namespace blink |
- |