| Index: third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
|
| diff --git a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
|
| index 9edf22ea2786855e941702d4f7e8e5bc65cd06a7..78cb95c1e5e9520e4215316f9a39650c28763baa 100644
|
| --- a/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
|
| +++ b/third_party/WebKit/Source/modules/mediasource/SourceBuffer.cpp
|
| @@ -128,6 +128,7 @@ SourceBuffer::SourceBuffer(PassOwnPtr<WebSourceBuffer> webSourceBuffer, MediaSou
|
| ASSERT(m_webSourceBuffer);
|
| ASSERT(m_source);
|
| ASSERT(m_source->mediaElement());
|
| + ThreadState::current()->registerPreFinalizer(this);
|
| m_audioTracks = AudioTrackList::create(*m_source->mediaElement());
|
| m_videoTracks = VideoTrackList::create(*m_source->mediaElement());
|
| m_webSourceBuffer->setClient(this);
|
| @@ -135,20 +136,16 @@ SourceBuffer::SourceBuffer(PassOwnPtr<WebSourceBuffer> webSourceBuffer, MediaSou
|
|
|
| SourceBuffer::~SourceBuffer()
|
| {
|
| - // Oilpan: a SourceBuffer might be finalized without having been
|
| - // explicitly removed first, hence the asserts below will not
|
| - // hold.
|
| -#if !ENABLE(OILPAN)
|
| - m_audioTracks->shutdown();
|
| - m_videoTracks->shutdown();
|
| - ASSERT(isRemoved());
|
| - ASSERT(!m_loader);
|
| - ASSERT(!m_stream);
|
| - ASSERT(!m_webSourceBuffer);
|
| -#endif
|
| WTF_LOG(Media, "SourceBuffer(%p)::~SourceBuffer", this);
|
| }
|
|
|
| +void SourceBuffer::dispose()
|
| +{
|
| + // Promptly clears a raw reference from content/ to an on-heap object
|
| + // so that content/ doesn't access it in a lazy sweeping phase.
|
| + m_webSourceBuffer.clear();
|
| +}
|
| +
|
| const AtomicString& SourceBuffer::segmentsKeyword()
|
| {
|
| DEFINE_STATIC_LOCAL(const AtomicString, segments, ("segments"));
|
|
|