Title: [234029] branches/safari-606-branch/Source/WebCore
Revision
234029
Author
[email protected]
Date
2018-07-20 01:05:34 -0700 (Fri, 20 Jul 2018)

Log Message

Cherry-pick r233982. rdar://problem/42389208

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

    Patch by Antoine Quint <[email protected]> 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:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233982 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-606-branch/Source/WebCore/ChangeLog (234028 => 234029)


--- branches/safari-606-branch/Source/WebCore/ChangeLog	2018-07-20 08:00:54 UTC (rev 234028)
+++ branches/safari-606-branch/Source/WebCore/ChangeLog	2018-07-20 08:05:34 UTC (rev 234029)
@@ -1,3 +1,44 @@
+2018-07-20  Babak Shafiei  <[email protected]>
+
+        Cherry-pick r233982. rdar://problem/42389208
+
+    Hitting RELEASE_ASSERT(!m_activeDOMObjectAdditionForbidden) under HTMLMediaElement::resume()
+    https://bugs.webkit.org/show_bug.cgi?id=187793
+    <rdar://problem/42308469>
+    
+    Patch by Antoine Quint <[email protected]> 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:
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@233982 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2018-07-19  Antoine Quint  <[email protected]>
+
+            Hitting RELEASE_ASSERT(!m_activeDOMObjectAdditionForbidden) under HTMLMediaElement::resume()
+            https://bugs.webkit.org/show_bug.cgi?id=187793
+            <rdar://problem/42308469>
+
+            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:
+
 2018-07-19  Babak Shafiei  <[email protected]>
 
         Revert r233982. rdar://problem/42389208

Modified: branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.cpp (234028 => 234029)


--- branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.cpp	2018-07-20 08:00:54 UTC (rev 234028)
+++ branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.cpp	2018-07-20 08:05:34 UTC (rev 234029)
@@ -678,6 +678,7 @@
 #endif
 
     m_seekTaskQueue.close();
+    m_resumeTaskQueue.close();
     m_promiseTaskQueue.close();
     m_pauseAfterDetachedTaskQueue.close();
     m_playbackControlsManagerBehaviorRestrictionsQueue.close();
@@ -5583,6 +5584,7 @@
 void HTMLMediaElement::contextDestroyed()
 {
     m_seekTaskQueue.close();
+    m_resumeTaskQueue.close();
     m_shadowDOMTaskQueue.close();
     m_promiseTaskQueue.close();
     m_pauseAfterDetachedTaskQueue.close();
@@ -5605,6 +5607,7 @@
     m_asyncEventQueue.close();
     m_promiseTaskQueue.close();
     m_resourceSelectionTaskQueue.close();
+    m_resumeTaskQueue.cancelAllTasks();
 
     // Once an active DOM object has been stopped it can not be restarted, so we can deallocate
     // the media player now. Note that userCancelledLoad will already called clearMediaPlayer
@@ -5620,6 +5623,8 @@
     INFO_LOG(LOGIDENTIFIER);
     Ref<HTMLMediaElement> protectedThis(*this);
 
+    m_resumeTaskQueue.cancelAllTasks();
+
     switch (reason) {
     case ReasonForSuspension::PageCache:
         stopWithoutDestroyingMediaPlayer();
@@ -5662,13 +5667,13 @@
 
     m_mediaSession->removeBehaviorRestriction(MediaElementSession::RequirePageConsentToResumeMedia);
 
-    if (m_error && m_error->code() == MediaError::MEDIA_ERR_ABORTED) {
+    if (m_error && m_error->code() == MediaError::MEDIA_ERR_ABORTED && !m_resumeTaskQueue.hasPendingTasks()) {
         // Restart the load if it was aborted in the middle by moving the document to the page cache.
         // m_error is only left at MEDIA_ERR_ABORTED when the document becomes inactive (it is set to
         //  MEDIA_ERR_ABORTED while the abortEvent is being sent, but cleared immediately afterwards).
         // This behavior is not specified but it seems like a sensible thing to do.
         // As it is not safe to immedately start loading now, let's schedule a load.
-        prepareForLoad();
+        m_resumeTaskQueue.enqueueTask(std::bind(&HTMLMediaElement::prepareForLoad, this));
     }
 
     updateRenderer();

Modified: branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.h (234028 => 234029)


--- branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.h	2018-07-20 08:00:54 UTC (rev 234028)
+++ branches/safari-606-branch/Source/WebCore/html/HTMLMediaElement.h	2018-07-20 08:05:34 UTC (rev 234029)
@@ -929,6 +929,7 @@
     Timer m_scanTimer;
     Timer m_playbackControlsManagerBehaviorRestrictionsTimer;
     Timer m_seekToPlaybackPositionEndedTimer;
+    GenericTaskQueue<Timer> m_resumeTaskQueue;
     GenericTaskQueue<Timer> m_seekTaskQueue;
     GenericTaskQueue<Timer> m_shadowDOMTaskQueue;
     GenericTaskQueue<Timer> m_promiseTaskQueue;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to