Changeset 204050 in webkit


Ignore:
Timestamp:
Aug 2, 2016 4:03:30 PM (8 years ago)
Author:
eric.carlson@apple.com
Message:

Cleanup HTMLMediaElement track lists.
https://bugs.webkit.org/show_bug.cgi?id=160470

Reviewed by David Kilzer.

Source/WebCore:

Test: media/range-extract-contents-crash.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::~HTMLMediaElement):

  • html/track/AudioTrack.cpp:

(WebCore::AudioTrack::willRemove): ASSERT if media element is NULL.

  • html/track/TextTrackList.cpp:

(TextTrackList::clearElement): Clear track media element pointers and client.

  • html/track/TextTrackList.h:
  • html/track/TrackListBase.cpp:

(TrackListBase::~TrackListBase): Call clearElement.
(TrackListBase::clearElement): Clear track media element pointers and client.

  • html/track/TrackListBase.h:

LayoutTests:

  • media/range-extract-contents-crash-expected.txt: Added.
  • media/range-extract-contents-crash.html: Added.
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r204045 r204050  
     12016-08-02  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Cleanup HTMLMediaElement track lists.
     4        https://bugs.webkit.org/show_bug.cgi?id=160470
     5
     6        Reviewed by David Kilzer.
     7
     8        * media/range-extract-contents-crash-expected.txt: Added.
     9        * media/range-extract-contents-crash.html: Added.
     10
    1112016-08-02  Chris Dumez  <cdumez@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r204049 r204050  
     12016-08-02  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Cleanup HTMLMediaElement track lists.
     4        https://bugs.webkit.org/show_bug.cgi?id=160470
     5
     6        Reviewed by David Kilzer.
     7
     8        Test: media/range-extract-contents-crash.html
     9
     10        * html/HTMLMediaElement.cpp:
     11        (WebCore::HTMLMediaElement::~HTMLMediaElement):
     12
     13        * html/track/AudioTrack.cpp:
     14        (WebCore::AudioTrack::willRemove): ASSERT if media element is NULL.
     15
     16        * html/track/TextTrackList.cpp:
     17        (TextTrackList::clearElement): Clear track media element pointers and client.
     18        * html/track/TextTrackList.h:
     19
     20        * html/track/TrackListBase.cpp:
     21        (TrackListBase::~TrackListBase): Call clearElement.
     22        (TrackListBase::clearElement): Clear track media element pointers and client.
     23        * html/track/TrackListBase.h:
     24
    1252016-08-02  Anders Carlsson  <andersca@apple.com>
    226
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r203984 r204050  
    510510
    511511#if ENABLE(VIDEO_TRACK)
    512     if (m_audioTracks) {
     512    if (m_audioTracks)
    513513        m_audioTracks->clearElement();
    514         for (unsigned i = 0; i < m_audioTracks->length(); ++i)
    515             m_audioTracks->item(i)->clearClient();
    516     }
    517514    if (m_textTracks)
    518515        m_textTracks->clearElement();
    519     if (m_textTracks) {
    520         for (unsigned i = 0; i < m_textTracks->length(); ++i)
    521             m_textTracks->item(i)->clearClient();
    522     }
    523     if (m_videoTracks) {
     516    if (m_videoTracks)
    524517        m_videoTracks->clearElement();
    525         for (unsigned i = 0; i < m_videoTracks->length(); ++i)
    526             m_videoTracks->item(i)->clearClient();
    527     }
    528518#endif
    529519
  • trunk/Source/WebCore/html/track/AudioTrack.cpp

    r200943 r204050  
    168168{
    169169    ASSERT_UNUSED(trackPrivate, trackPrivate == m_private);
    170     mediaElement()->removeAudioTrack(*this);
     170    ASSERT(mediaElement());
     171    if (mediaElement())
     172        mediaElement()->removeAudioTrack(*this);
    171173}
    172174
  • trunk/Source/WebCore/html/track/TextTrackList.cpp

    r201385 r204050  
    4747}
    4848
     49void TextTrackList::clearElement()
     50{
     51    TrackListBase::clearElement();
     52    for (auto& track : m_elementTracks) {
     53        track->setMediaElement(nullptr);
     54        track->clearClient();
     55    }
     56    for (auto& track : m_addTrackTracks) {
     57        track->setMediaElement(nullptr);
     58        track->clearClient();
     59    }
     60}
     61
    4962unsigned TextTrackList::length() const
    5063{
  • trunk/Source/WebCore/html/track/TextTrackList.h

    r200943 r204050  
    4343    virtual ~TextTrackList();
    4444
     45    void clearElement() override;
     46
    4547    unsigned length() const override;
    4648    int getTrackIndex(TextTrack&);
  • trunk/Source/WebCore/html/track/TrackListBase.cpp

    r200943 r204050  
    4747TrackListBase::~TrackListBase()
    4848{
     49    clearElement();
     50}
     51
     52void TrackListBase::clearElement()
     53{
     54    m_element = nullptr;
     55    for (auto& track : m_inbandTracks) {
     56        track->setMediaElement(nullptr);
     57        track->clearClient();
     58    }
    4959}
    5060
  • trunk/Source/WebCore/html/track/TrackListBase.h

    r200943 r204050  
    5757    ScriptExecutionContext* scriptExecutionContext() const final { return m_context; }
    5858
    59     void clearElement() { m_element = 0; }
     59    virtual void clearElement();
    6060    Element* element() const;
    6161    HTMLMediaElement* mediaElement() const { return m_element; }
Note: See TracChangeset for help on using the changeset viewer.