Changeset 233982 in webkit


Ignore:
Timestamp:
Jul 19, 2018 6:38:16 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Hitting RELEASE_ASSERT(!m_activeDOMObjectAdditionForbidden) under HTMLMediaElement::resume()
https://bugs.webkit.org/show_bug.cgi?id=187793
<rdar://problem/42308469>

Patch by Antoine Quint <Antoine Quint> on 2018-07-19
Reviewed by Chris Dumez.

Ensure we do not call JS under resume(), which would happen as a result of calling configureMediaControls() in prepareForLoad().

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::~HTMLMediaElement):
(WebCore::HTMLMediaElement::contextDestroyed):
(WebCore::HTMLMediaElement::stop):
(WebCore::HTMLMediaElement::suspend):
(WebCore::HTMLMediaElement::resume):

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

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r233981 r233982  
     12018-07-19  Antoine Quint  <graouts@apple.com>
     2
     3        Hitting RELEASE_ASSERT(!m_activeDOMObjectAdditionForbidden) under HTMLMediaElement::resume()
     4        https://bugs.webkit.org/show_bug.cgi?id=187793
     5        <rdar://problem/42308469>
     6
     7        Reviewed by Chris Dumez.
     8
     9        Ensure we do not call JS under resume(), which would happen as a result of calling configureMediaControls() in prepareForLoad().
     10
     11        * html/HTMLMediaElement.cpp:
     12        (WebCore::HTMLMediaElement::~HTMLMediaElement):
     13        (WebCore::HTMLMediaElement::contextDestroyed):
     14        (WebCore::HTMLMediaElement::stop):
     15        (WebCore::HTMLMediaElement::suspend):
     16        (WebCore::HTMLMediaElement::resume):
     17        * html/HTMLMediaElement.h:
     18
    1192018-07-19  Philippe Normand  <pnormand@igalia.com>
    220
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r233926 r233982  
    679679
    680680    m_seekTaskQueue.close();
     681    m_resumeTaskQueue.close();
    681682    m_promiseTaskQueue.close();
    682683    m_pauseAfterDetachedTaskQueue.close();
     
    55845585{
    55855586    m_seekTaskQueue.close();
     5587    m_resumeTaskQueue.close();
    55865588    m_shadowDOMTaskQueue.close();
    55875589    m_promiseTaskQueue.close();
     
    56065608    m_promiseTaskQueue.close();
    56075609    m_resourceSelectionTaskQueue.close();
     5610    m_resumeTaskQueue.cancelAllTasks();
    56085611
    56095612    // Once an active DOM object has been stopped it can not be restarted, so we can deallocate
     
    56205623    INFO_LOG(LOGIDENTIFIER);
    56215624    Ref<HTMLMediaElement> protectedThis(*this);
     5625
     5626    m_resumeTaskQueue.cancelAllTasks();
    56225627
    56235628    switch (reason) {
     
    56635668    m_mediaSession->removeBehaviorRestriction(MediaElementSession::RequirePageConsentToResumeMedia);
    56645669
    5665     if (m_error && m_error->code() == MediaError::MEDIA_ERR_ABORTED) {
     5670    if (m_error && m_error->code() == MediaError::MEDIA_ERR_ABORTED && !m_resumeTaskQueue.hasPendingTasks()) {
    56665671        // Restart the load if it was aborted in the middle by moving the document to the page cache.
    56675672        // m_error is only left at MEDIA_ERR_ABORTED when the document becomes inactive (it is set to
     
    56695674        // This behavior is not specified but it seems like a sensible thing to do.
    56705675        // As it is not safe to immedately start loading now, let's schedule a load.
    5671         prepareForLoad();
     5676        m_resumeTaskQueue.enqueueTask(std::bind(&HTMLMediaElement::prepareForLoad, this));
    56725677    }
    56735678
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r233596 r233982  
    930930    Timer m_playbackControlsManagerBehaviorRestrictionsTimer;
    931931    Timer m_seekToPlaybackPositionEndedTimer;
     932    GenericTaskQueue<Timer> m_resumeTaskQueue;
    932933    GenericTaskQueue<Timer> m_seekTaskQueue;
    933934    GenericTaskQueue<Timer> m_shadowDOMTaskQueue;
Note: See TracChangeset for help on using the changeset viewer.