Bug 1404441 - return NS_ERROR_DOM_MEDIA_OVERFLOW_ERR if MediaData::AdjustForStartTime() results in an invalid mTime.
MozReview-Commit-ID: 44VgbrknYbi
--- a/dom/media/ReaderProxy.cpp
+++ b/dom/media/ReaderProxy.cpp
@@ -57,18 +57,22 @@ RefPtr<ReaderProxy::AudioDataPromise>
ReaderProxy::OnAudioDataRequestCompleted(RefPtr<AudioData> aAudio)
{
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
// Subtract the start time and add the looping-offset time.
int64_t offset =
StartTime().ToMicroseconds() - mLoopingOffset.ToMicroseconds();
aAudio->AdjustForStartTime(offset);
- mLastAudioEndTime = aAudio->mTime;
- return AudioDataPromise::CreateAndResolve(aAudio.forget(), __func__);
+ if (aAudio->mTime.IsValid()) {
+ mLastAudioEndTime = aAudio->mTime;
+ return AudioDataPromise::CreateAndResolve(aAudio.forget(), __func__);
+ }
+ return AudioDataPromise::CreateAndReject(NS_ERROR_DOM_MEDIA_OVERFLOW_ERR,
+ __func__);
}
RefPtr<ReaderProxy::AudioDataPromise>
ReaderProxy::OnAudioDataRequestFailed(const MediaResult& aError)
{
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
if (mSeamlessLoopingBlocked || !mSeamlessLoopingEnabled ||
@@ -144,18 +148,21 @@ ReaderProxy::RequestVideoData(const medi
mReader.get(),
__func__,
&MediaFormatReader::RequestVideoData,
threshold)
->Then(mOwnerThread,
__func__,
[startTime](RefPtr<VideoData> aVideo) {
aVideo->AdjustForStartTime(startTime);
- return VideoDataPromise::CreateAndResolve(aVideo.forget(),
- __func__);
+ return aVideo->mTime.IsValid()
+ ? VideoDataPromise::CreateAndResolve(aVideo.forget(),
+ __func__)
+ : VideoDataPromise::CreateAndReject(
+ NS_ERROR_DOM_MEDIA_OVERFLOW_ERR, __func__);
},
[](const MediaResult& aError) {
return VideoDataPromise::CreateAndReject(aError, __func__);
});
}
RefPtr<ReaderProxy::SeekPromise>
ReaderProxy::Seek(const SeekTarget& aTarget)