Bug 1302001. Move some code to WaitForCDMState. draft
authorJW Wang <jwwang@mozilla.com>
Tue, 06 Sep 2016 15:01:30 +0800
changeset 412465 2c0eeb269b72b07ec18c147115b373d6da9c6b5b
parent 412448 7e873393cc11d326338779e5a3ed2da031e30936
child 530993 2b290e46ffa2f86d0616f82a3d66cf947a54b6d8
push id29180
push userjwwang@mozilla.com
push dateMon, 12 Sep 2016 02:19:05 +0000
bugs1302001
milestone51.0a1
Bug 1302001. Move some code to WaitForCDMState. MozReview-Commit-ID: RAvuVs7Ykq
dom/media/MediaDecoderStateMachine.cpp
--- 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();
 }