Changeset 260529 in webkit


Ignore:
Timestamp:
Apr 22, 2020 12:38:00 PM (4 years ago)
Author:
eric.carlson@apple.com
Message:

fast/events/event-handler-detached-document-dispatchEvent.html is crashing
https://bugs.webkit.org/show_bug.cgi?id=210859
<rdar://problem/62072269>

Reviewed by Jer Noble.

A media session may not have a Page when it is created, so register with the MediaUsageManager
in inActiveDocumentChanged if necessary.

No new tests, fixes an existing test.

  • html/MediaElementSession.cpp:

(WebCore::MediaElementSession::MediaElementSession):
(WebCore::MediaElementSession::~MediaElementSession):
(WebCore::MediaElementSession::addedMediaUsageManagerSessionIfNecessary):
(WebCore::MediaElementSession::inActiveDocumentChanged):
(WebCore::MediaElementSession::updateMediaUsageIfChanged):

  • html/MediaElementSession.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r260528 r260529  
     12020-04-22  Eric Carlson  <eric.carlson@apple.com>
     2
     3        fast/events/event-handler-detached-document-dispatchEvent.html is crashing
     4        https://bugs.webkit.org/show_bug.cgi?id=210859
     5        <rdar://problem/62072269>
     6
     7        Reviewed by Jer Noble.
     8
     9        A media session may not have a Page when it is created, so register with the MediaUsageManager
     10        in inActiveDocumentChanged if necessary.
     11
     12        No new tests, fixes an existing test.
     13
     14        * html/MediaElementSession.cpp:
     15        (WebCore::MediaElementSession::MediaElementSession):
     16        (WebCore::MediaElementSession::~MediaElementSession):
     17        (WebCore::MediaElementSession::addedMediaUsageManagerSessionIfNecessary):
     18        (WebCore::MediaElementSession::inActiveDocumentChanged):
     19        (WebCore::MediaElementSession::updateMediaUsageIfChanged):
     20        * html/MediaElementSession.h:
     21
    1222020-04-22  Antti Koivisto  <antti@apple.com>
    223
  • trunk/Source/WebCore/html/MediaElementSession.cpp

    r260217 r260529  
    121121#endif
    122122{
     123    addedMediaUsageManagerSessionIfNecessary();
     124}
     125
     126MediaElementSession::~MediaElementSession()
     127{
    123128#if ENABLE(MEDIA_USAGE)
    124     if (auto page = m_element.document().page())
    125         page->chrome().client().addMediaUsageManagerSession(mediaSessionIdentifier(), m_element.sourceApplicationIdentifier(), m_element.document().url());
    126 #endif
    127 }
    128 
    129 MediaElementSession::~MediaElementSession()
     129    auto page = m_element.document().page();
     130    if (page && m_haveAddedMediaUsageManagerSession)
     131        page->chrome().client().removeMediaUsageManagerSession(mediaSessionIdentifier());
     132#endif
     133}
     134
     135void MediaElementSession::addedMediaUsageManagerSessionIfNecessary()
    130136{
    131137#if ENABLE(MEDIA_USAGE)
    132     if (auto page = m_element.document().page())
    133         page->chrome().client().removeMediaUsageManagerSession(mediaSessionIdentifier());
     138    if (m_haveAddedMediaUsageManagerSession)
     139        return;
     140
     141    auto page = m_element.document().page();
     142    if (!page)
     143        return;
     144
     145    m_haveAddedMediaUsageManagerSession = true;
     146    page->chrome().client().addMediaUsageManagerSession(mediaSessionIdentifier(), m_element.sourceApplicationIdentifier(), m_element.document().url());
    134147#endif
    135148}
     
    201214    m_elementIsHiddenBecauseItWasRemovedFromDOM = !m_element.inActiveDocument();
    202215    scheduleClientDataBufferingCheck();
     216    addedMediaUsageManagerSessionIfNecessary();
    203217}
    204218
     
    10691083
    10701084#if ENABLE(MEDIA_USAGE)
     1085    ASSERT(m_haveAddedMediaUsageManagerSession);
    10711086    page->chrome().client().updateMediaUsageManagerSessionState(mediaSessionIdentifier(), *m_mediaUsageInfo);
    10721087#endif
  • trunk/Source/WebCore/html/MediaElementSession.h

    r260182 r260529  
    190190    void updateClientDataBuffering();
    191191
     192    void addedMediaUsageManagerSessionIfNecessary();
     193
    192194    HTMLMediaElement& m_element;
    193195    BehaviorRestrictions m_restrictions;
     
    216218#if !RELEASE_LOG_DISABLED
    217219    const void* m_logIdentifier;
     220#endif
     221
     222#if ENABLE(MEDIA_USAGE)
     223    bool m_haveAddedMediaUsageManagerSession { false };
    218224#endif
    219225};
Note: See TracChangeset for help on using the changeset viewer.