tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 1f4c1dae040f99d7a89cc3d7cd0e144bd4377a3f
parent a6f907d2143c15b3e89fd18ddc2a7f42e16e0c02
Author: Andrew Osmond <aosmond@gmail.com>
Date:   Wed,  7 Jan 2026 14:31:36 +0000

Bug 1976929 - Don't assume MediaChangeMonitor::mDecodePromise is set after dispatching. r=media-playback-reviewers,padenot

Since the owner can call MediaChangeMonitor::Shutdown and reject any
outstanding promises, we shouldn't assume mDecodePromise will still be
set in any promise chains after dispatching. This will allow us to
shutdown gracefully.

Differential Revision: https://phabricator.services.mozilla.com/D278077

Diffstat:
Mdom/media/platforms/wrappers/MediaChangeMonitor.cpp | 14+++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/dom/media/platforms/wrappers/MediaChangeMonitor.cpp b/dom/media/platforms/wrappers/MediaChangeMonitor.cpp @@ -1205,7 +1205,7 @@ MediaResult MediaChangeMonitor::CreateDecoderAndInit(MediaRawData* aSample) { return; } - mDecodePromise.Reject( + mDecodePromise.RejectIfExists( MediaResult( aError.Code(), RESULT_DETAIL("Unable to initialize decoder")), @@ -1220,7 +1220,7 @@ MediaResult MediaChangeMonitor::CreateDecoderAndInit(MediaRawData* aSample) { mFlushPromise.Reject(aError, __func__); return; } - mDecodePromise.Reject( + mDecodePromise.RejectIfExists( MediaResult(NS_ERROR_DOM_MEDIA_FATAL_ERR, RESULT_DETAIL("Unable to create decoder")), __func__); @@ -1264,12 +1264,12 @@ void MediaChangeMonitor::DecodeFirstSample(MediaRawData* aSample) { [self, this](MediaDataDecoder::DecodedData&& aResults) { mDecodePromiseRequest.Complete(); mPendingFrames.AppendElements(std::move(aResults)); - mDecodePromise.Resolve(std::move(mPendingFrames), __func__); + mDecodePromise.ResolveIfExists(std::move(mPendingFrames), __func__); mPendingFrames = DecodedData(); }, [self, this](const MediaResult& aError) { mDecodePromiseRequest.Complete(); - mDecodePromise.Reject(aError, __func__); + mDecodePromise.RejectIfExists(aError, __func__); }) ->Track(mDecodePromiseRequest); } @@ -1328,7 +1328,7 @@ void MediaChangeMonitor::DrainThenFlushDecoder(MediaRawData* aPendingSample) { mFlushPromise.Reject(aError, __func__); return; } - mDecodePromise.Reject(aError, __func__); + mDecodePromise.RejectIfExists(aError, __func__); }) ->Track(mDrainRequest); } @@ -1372,7 +1372,7 @@ void MediaChangeMonitor::FlushThenShutdownDecoder( return; } MOZ_ASSERT(NS_FAILED(rv)); - mDecodePromise.Reject(rv, __func__); + mDecodePromise.RejectIfExists(rv, __func__); return; }, [] { MOZ_CRASH("Can't reach here'"); }) @@ -1385,7 +1385,7 @@ void MediaChangeMonitor::FlushThenShutdownDecoder( mFlushPromise.Reject(aError, __func__); return; } - mDecodePromise.Reject(aError, __func__); + mDecodePromise.RejectIfExists(aError, __func__); }) ->Track(mFlushRequest); }