Bug 1345711 - Ensure MediaDecoderStateMachine::InitializationTask() is the first task to run on the task queue. r?kaku
MozReview-Commit-ID: KCtXmckLkZr
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -2677,16 +2677,21 @@ MediaDecoderStateMachine::Initialization
&MediaDecoderStateMachine::RecomputeDuration);
mWatchManager.Watch(mPlayState, &MediaDecoderStateMachine::PlayStateChanged);
if (MediaPrefs::MDSMSuspendBackgroundVideoEnabled()) {
mIsVisible.Connect(aDecoder->CanonicalIsVisible());
mWatchManager.Watch(mIsVisible,
&MediaDecoderStateMachine::VisibilityChanged);
}
+
+ MOZ_ASSERT(!mStateObj);
+ auto* s = new DecodeMetadataState(this);
+ mStateObj.reset(s);
+ s->Enter();
}
void
MediaDecoderStateMachine::AudioAudibleChanged(bool aAudible)
{
mIsAudioDataAudible = aAudible;
}
@@ -2812,17 +2817,17 @@ void MediaDecoderStateMachine::SetMediaN
nsresult MediaDecoderStateMachine::Init(MediaDecoder* aDecoder)
{
MOZ_ASSERT(NS_IsMainThread());
// Dispatch initialization that needs to happen on that task queue.
nsCOMPtr<nsIRunnable> r = NewRunnableMethod<RefPtr<MediaDecoder>>(
this, &MediaDecoderStateMachine::InitializationTask, aDecoder);
- mTaskQueue->Dispatch(r.forget());
+ mTaskQueue->DispatchStateChange(r.forget());
mAudioQueueListener = AudioQueue().PopEvent().Connect(
mTaskQueue, this, &MediaDecoderStateMachine::OnAudioPopped);
mVideoQueueListener = VideoQueue().PopEvent().Connect(
mTaskQueue, this, &MediaDecoderStateMachine::OnVideoPopped);
mMetadataManager.Connect(mReader->TimedMetadataEvent(), OwnerThread());
@@ -2835,24 +2840,16 @@ nsresult MediaDecoderStateMachine::Init(
OwnerThread(), __func__, this,
&MediaDecoderStateMachine::OnCDMProxyReady,
&MediaDecoderStateMachine::OnCDMProxyNotReady)
->Track(mCDMProxyPromise);
nsresult rv = mReader->Init();
NS_ENSURE_SUCCESS(rv, rv);
- RefPtr<MediaDecoderStateMachine> self = this;
- OwnerThread()->Dispatch(NS_NewRunnableFunction([self] () {
- MOZ_ASSERT(!self->mStateObj);
- auto s = new DecodeMetadataState(self);
- self->mStateObj.reset(s);
- s->Enter();
- }));
-
return NS_OK;
}
void
MediaDecoderStateMachine::StopPlayback()
{
MOZ_ASSERT(OnTaskQueue());
DECODER_LOG("StopPlayback()");