Title: [233571] trunk/Source/WebCore
Revision
233571
Author
[email protected]
Date
2018-07-06 00:37:50 -0700 (Fri, 06 Jul 2018)

Log Message

REGRESSION(r233496): macOS Sierra hits debug assertions in TrackListBase::suspend
https://bugs.webkit.org/show_bug.cgi?id=187378
<rdar://problem/41878885>

Reviewed by Eric Carlson.

These assertions were wrong since inline debugger, alert, etc... can suspend active DOM objects without
calling canSuspendForDocumentSuspension. Fixed the bug by removing the assertion and instead suspending
and resuming the generic event queue.

* Modules/mediasource/MediaSource.cpp:
(WebCore::MediaSource::suspend):
(WebCore::MediaSource::resume):
* Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::suspend):
(WebCore::SourceBuffer::resume):
* Modules/mediasource/SourceBufferList.cpp:
(WebCore::SourceBufferList::suspend):
(WebCore::SourceBufferList::resume):
* html/track/TrackListBase.cpp:
(WebCore::TrackListBase::suspend):
(WebCore::TrackListBase::resume):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (233570 => 233571)


--- trunk/Source/WebCore/ChangeLog	2018-07-06 06:43:28 UTC (rev 233570)
+++ trunk/Source/WebCore/ChangeLog	2018-07-06 07:37:50 UTC (rev 233571)
@@ -1,3 +1,28 @@
+2018-07-05  Ryosuke Niwa  <[email protected]>
+
+        REGRESSION(r233496): macOS Sierra hits debug assertions in TrackListBase::suspend
+        https://bugs.webkit.org/show_bug.cgi?id=187378
+        <rdar://problem/41878885>
+
+        Reviewed by Eric Carlson.
+
+        These assertions were wrong since inline debugger, alert, etc... can suspend active DOM objects without
+        calling canSuspendForDocumentSuspension. Fixed the bug by removing the assertion and instead suspending
+        and resuming the generic event queue.
+
+        * Modules/mediasource/MediaSource.cpp:
+        (WebCore::MediaSource::suspend):
+        (WebCore::MediaSource::resume):
+        * Modules/mediasource/SourceBuffer.cpp:
+        (WebCore::SourceBuffer::suspend):
+        (WebCore::SourceBuffer::resume):
+        * Modules/mediasource/SourceBufferList.cpp:
+        (WebCore::SourceBufferList::suspend):
+        (WebCore::SourceBufferList::resume):
+        * html/track/TrackListBase.cpp:
+        (WebCore::TrackListBase::suspend):
+        (WebCore::TrackListBase::resume):
+
 2018-07-05  Youenn Fablet  <[email protected]>
 
         REGRESSION (r230843): Flash doesn't work; Produces blue box on page

Modified: trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp (233570 => 233571)


--- trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp	2018-07-06 06:43:28 UTC (rev 233570)
+++ trunk/Source/WebCore/Modules/mediasource/MediaSource.cpp	2018-07-06 07:37:50 UTC (rev 233571)
@@ -935,14 +935,23 @@
         || ActiveDOMObject::hasPendingActivity();
 }
 
-void MediaSource::suspend(ReasonForSuspension)
+void MediaSource::suspend(ReasonForSuspension reason)
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    switch (reason) {
+    case ReasonForSuspension::PageCache:
+    case ReasonForSuspension::PageWillBeSuspended:
+        m_asyncEventQueue.suspend();
+        break;
+    case ReasonForSuspension::_javascript_DebuggerPaused:
+    case ReasonForSuspension::WillDeferLoading:
+        // Do nothing, we don't pause media playback in these cases.
+        break;
+    }
 }
 
 void MediaSource::resume()
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    m_asyncEventQueue.resume();
 }
 
 void MediaSource::stop()

Modified: trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp (233570 => 233571)


--- trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2018-07-06 06:43:28 UTC (rev 233570)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBuffer.cpp	2018-07-06 07:37:50 UTC (rev 233571)
@@ -458,14 +458,23 @@
     return m_source || m_asyncEventQueue.hasPendingEvents();
 }
 
-void SourceBuffer::suspend(ReasonForSuspension)
+void SourceBuffer::suspend(ReasonForSuspension reason)
 {
-    ASSERT(!hasPendingActivity());
+    switch (reason) {
+    case ReasonForSuspension::PageCache:
+    case ReasonForSuspension::PageWillBeSuspended:
+        m_asyncEventQueue.suspend();
+        break;
+    case ReasonForSuspension::_javascript_DebuggerPaused:
+    case ReasonForSuspension::WillDeferLoading:
+        // Do nothing, we don't pause media playback in these cases.
+        break;
+    }
 }
 
 void SourceBuffer::resume()
 {
-    ASSERT(!hasPendingActivity());
+    m_asyncEventQueue.resume();
 }
 
 void SourceBuffer::stop()

Modified: trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp (233570 => 233571)


--- trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp	2018-07-06 06:43:28 UTC (rev 233570)
+++ trunk/Source/WebCore/Modules/mediasource/SourceBufferList.cpp	2018-07-06 07:37:50 UTC (rev 233571)
@@ -103,14 +103,23 @@
     return !m_asyncEventQueue.hasPendingEvents();
 }
 
-void SourceBufferList::suspend(ReasonForSuspension)
+void SourceBufferList::suspend(ReasonForSuspension reason)
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    switch (reason) {
+    case ReasonForSuspension::PageCache:
+    case ReasonForSuspension::PageWillBeSuspended:
+        m_asyncEventQueue.suspend();
+        break;
+    case ReasonForSuspension::_javascript_DebuggerPaused:
+    case ReasonForSuspension::WillDeferLoading:
+        // Do nothing, we don't pause media playback in these cases.
+        break;
+    }
 }
 
 void SourceBufferList::resume()
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    m_asyncEventQueue.resume();
 }
 
 void SourceBufferList::stop()

Modified: trunk/Source/WebCore/html/track/TrackListBase.cpp (233570 => 233571)


--- trunk/Source/WebCore/html/track/TrackListBase.cpp	2018-07-06 06:43:28 UTC (rev 233570)
+++ trunk/Source/WebCore/html/track/TrackListBase.cpp	2018-07-06 07:37:50 UTC (rev 233571)
@@ -180,14 +180,23 @@
     return !m_asyncEventQueue.hasPendingEvents();
 }
 
-void TrackListBase::suspend(ReasonForSuspension)
+void TrackListBase::suspend(ReasonForSuspension reason)
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    switch (reason) {
+    case ReasonForSuspension::PageCache:
+    case ReasonForSuspension::PageWillBeSuspended:
+        m_asyncEventQueue.suspend();
+        break;
+    case ReasonForSuspension::_javascript_DebuggerPaused:
+    case ReasonForSuspension::WillDeferLoading:
+        // Do nothing, we don't pause media playback in these cases.
+        break;
+    }
 }
 
 void TrackListBase::resume()
 {
-    ASSERT(!m_asyncEventQueue.hasPendingEvents());
+    m_asyncEventQueue.resume();
 }
 
 void TrackListBase::stop()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to