Index: Source/platform/mediastream/MediaStreamComponent.cpp |
diff --git a/Source/platform/mediastream/MediaStreamComponent.cpp b/Source/platform/mediastream/MediaStreamComponent.cpp |
index 43bc57d0c4d4148621eedb36f73676f052e7c74a..212c94f5d19a545468181da7f3c2dbddb8869a0a 100644 |
--- a/Source/platform/mediastream/MediaStreamComponent.cpp |
+++ b/Source/platform/mediastream/MediaStreamComponent.cpp |
@@ -40,23 +40,49 @@ |
namespace blink { |
-PassRefPtr<MediaStreamComponent> MediaStreamComponent::create(PassRefPtr<MediaStreamSource> source) |
+MediaStreamComponent* MediaStreamComponent::create(MediaStreamSource* source) |
{ |
- return adoptRef(new MediaStreamComponent(createCanonicalUUIDString(), source)); |
+ return new MediaStreamComponent(createCanonicalUUIDString(), source); |
} |
-PassRefPtr<MediaStreamComponent> MediaStreamComponent::create(const String& id, PassRefPtr<MediaStreamSource> source) |
+MediaStreamComponent* MediaStreamComponent::create(const String& id, MediaStreamSource* source) |
{ |
- return adoptRef(new MediaStreamComponent(id, source)); |
+ return new MediaStreamComponent(id, source); |
} |
-MediaStreamComponent::MediaStreamComponent(const String& id, PassRefPtr<MediaStreamSource> source) |
+class MediaStreamComponentDisposer { |
haraken
2014/09/04 11:27:51
We need to implement the disposer not only for Med
|
+public: |
+ explicit MediaStreamComponentDisposer(MediaStreamComponent& component) : m_component(component) { } |
+ ~MediaStreamComponentDisposer() |
+ { |
+ m_component.dispose(); |
+ } |
+ |
+private: |
+ MediaStreamComponent& m_component; |
+}; |
+ |
+typedef HeapHashMap<WeakMember<MediaStreamComponent>, OwnPtr<MediaStreamComponentDisposer> > ComponentDisposers; |
+ |
+static ComponentDisposers& componentDisposers() |
+{ |
+ DEFINE_STATIC_LOCAL(Persistent<ComponentDisposers>, disposers, (new ComponentDisposers)); |
+ return *disposers; |
+} |
+ |
+MediaStreamComponent::MediaStreamComponent(const String& id, MediaStreamSource* source) |
: m_source(source) |
, m_id(id) |
, m_enabled(true) |
, m_muted(false) |
{ |
ASSERT(m_id.length()); |
+ componentDisposers().add(this, adoptPtr(new MediaStreamComponentDisposer(*this))); |
+} |
+ |
+void MediaStreamComponent::dispose() |
+{ |
+ m_extraData = nullptr; |
} |
#if ENABLE(WEB_AUDIO) |
@@ -88,5 +114,10 @@ void MediaStreamComponent::AudioSourceProviderImpl::provideInput(AudioBus* bus, |
} |
#endif // #if ENABLE(WEB_AUDIO) |
+void MediaStreamComponent::trace(Visitor* visitor) |
+{ |
+ visitor->trace(m_source); |
+} |
+ |
} // namespace blink |