Bug 1302001. Move some code to WaitForCDMState.
MozReview-Commit-ID: RAvuVs7Ykq
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -219,16 +219,17 @@ public:
virtual void Enter() {}; // Entry action.
virtual void Exit() {}; // Exit action.
virtual void Step() {} // Perform a 'cycle' of this state object.
virtual State GetState() const = 0;
// Event handlers for various events.
// Return true if the event is handled by this state object.
virtual bool HandleDormant(bool aDormant) { return false; }
+ virtual bool HandleCDMProxyReady() { return false; }
protected:
using Master = MediaDecoderStateMachine;
explicit StateObject(Master* aPtr) : mMaster(aPtr) {}
TaskQueue* OwnerThread() const { return mMaster->mTaskQueue; }
MediaResource* Resource() const { return mMaster->mResource; }
MediaDecoderReaderWrapper* Reader() const { return mMaster->mReader; }
@@ -374,16 +375,22 @@ class MediaDecoderStateMachine::WaitForC
{
public:
explicit WaitForCDMState(Master* aPtr) : StateObject(aPtr) {}
State GetState() const override
{
return DECODER_STATE_WAIT_FOR_CDM;
}
+
+ bool HandleCDMProxyReady() override
+ {
+ SetState(DECODER_STATE_DECODING_FIRSTFRAME);
+ return true;
+ }
};
class MediaDecoderStateMachine::DormantState
: public MediaDecoderStateMachine::StateObject
{
public:
explicit DormantState(Master* aPtr) : StateObject(aPtr) {}
@@ -2949,19 +2956,17 @@ void MediaDecoderStateMachine::OnMediaSi
#ifdef MOZ_EME
void
MediaDecoderStateMachine::OnCDMProxyReady(RefPtr<CDMProxy> aProxy)
{
MOZ_ASSERT(OnTaskQueue());
mCDMProxyPromise.Complete();
mCDMProxy = aProxy;
mReader->SetCDMProxy(aProxy);
- if (mState == DECODER_STATE_WAIT_FOR_CDM) {
- SetState(DECODER_STATE_DECODING_FIRSTFRAME);
- }
+ mStateObj->HandleCDMProxyReady();
}
void
MediaDecoderStateMachine::OnCDMProxyNotReady()
{
MOZ_ASSERT(OnTaskQueue());
mCDMProxyPromise.Complete();
}