Chromium Code Reviews| 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 |