Oilpan: Move MediaStreamSource, MediaStreamComponent and MediaStreamDescriptor
to oilpan's heap - MediaStreamSource, MediaStreamComponent and MediaStreamDescriptor must be moved to oilpan's heap in one go because their lifetime are tightly coupled. - Removed m_descriptor->setClient(0) from MediaStream's destructor. This is OK because MediaStreamDescriptor has a strong Member back to the Client (i.e., MediaStream). - Removed m_component->source()->removeObserver(this) from MediaStreamTrack's destructor. This is OK because this CL made the observers weak (i.e., MediaStreamSource::m_observers is a hash set of weak members to MediaStreamTrack objects). - Removed WebMediaStreamTrack::ExtraData::m_owner because it's unused. - Introduced MediaStreamComponentDisposer to delay the destruction of MediaStreamComponent::m_extraData. The ExtraData is exposed to the web and some Chromium objects inherit from the ExtraData. If we clear the m_extraData in the MediaStreamComponent's destructor, those Chromium-side objects are also destructed in the MediaStreamComponent's destructor. This is problematic because the destructors of the Chromium-side classes can touch other on-heap objects in the Blink side. To avoid the issue, we need to delay the destruction of the ExtraData to thread-specific weak processing. 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. - The same problem arises for MediaStreamDescriptor and MediaStreamSource. This CL adds MediaStreamDescriptorDisposer and MediaStreamSourceDisposer. - This CL depends on https://codereview.chromium.org/543603003/ and https://codereview.chromium.org/549153002. BUG=340522 Review URL: https://codereview.chromium.org/552653005 git-svn-id: svn://svn.chromium.org/blink/trunk@181702 bbb929c8-8fbe-4397-9dbb-9b2b20218538
Showing
Please register or sign in to comment