Bug 1258562: MSE] Abort if MediaSource has been shutdown. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Tue, 22 Mar 2016 10:34:30 +1100
changeset 343180 39973358b80709cf6827c8dd3fa72101f04cb408
parent 342865 4037eb98974db1b1e0b5012c8a7f3a36428eaa11
child 516708 483dea47cfed3ae9cab33bbc5836c2937b0e7ec4
push id13546
push userbmo:jyavenard@mozilla.com
push dateMon, 21 Mar 2016 23:55:40 +0000
reviewersgerald
bugs1258562
milestone48.0a1
Bug 1258562: MSE] Abort if MediaSource has been shutdown. r?gerald The assumption was made that this code was never called if MediaSourceDecoder::NextFrameBufferedStatus() had been called before. However, that assumption was incorrect as NextFrameBufferedStatus() is only called if we had determine we had no frame buffered. MozReview-Commit-ID: 1hsEJuInION
dom/media/mediasource/MediaSourceDecoder.cpp
--- a/dom/media/mediasource/MediaSourceDecoder.cpp
+++ b/dom/media/mediasource/MediaSourceDecoder.cpp
@@ -272,16 +272,21 @@ MediaSourceDecoder::NextFrameBufferedSta
     ? MediaDecoderOwner::NEXT_FRAME_AVAILABLE
     : MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
 }
 
 bool
 MediaSourceDecoder::CanPlayThrough()
 {
   MOZ_ASSERT(NS_IsMainThread());
+
+  if (NextFrameBufferedStatus() == MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE) {
+    return false;
+  }
+
   if (IsNaN(mMediaSource->Duration())) {
     // Don't have any data yet.
     return false;
   }
   TimeUnit duration = TimeUnit::FromSeconds(mMediaSource->Duration());
   TimeUnit currentPosition = TimeUnit::FromMicroseconds(CurrentPosition());
   if (duration.IsInfinite()) {
     // We can't make an informed decision and just assume that it's a live stream