Bug 1300956. Part 9 - Implement ShutdownState. draft
authorJW Wang <jwwang@mozilla.com>
Tue, 06 Sep 2016 11:37:46 +0800
changeset 411528 43e4388b5af7aab57d689a37ad7aa1e73bf0b6dc
parent 411527 df977b0f5e7d48e228042f27ed12e96fe9ec89d4
child 411529 2558c786d881ce69d50a6a62ae8833b8c42a1637
push id28915
push userjwwang@mozilla.com
push dateThu, 08 Sep 2016 07:23:46 +0000
bugs1300956
milestone51.0a1
Bug 1300956. Part 9 - Implement ShutdownState. MozReview-Commit-ID: LnbQeCPYy9f
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -368,16 +368,38 @@ public:
   }
 
   State GetState() const override
   {
     return DECODER_STATE_COMPLETED;
   }
 };
 
+class MediaDecoderStateMachine::ShutdownState
+  : public MediaDecoderStateMachine::StateObject
+{
+public:
+  explicit ShutdownState(Master* aPtr) : StateObject(aPtr) {}
+
+  void Enter() override
+  {
+    mMaster->mIsShutdown = true;
+  }
+
+  void Exit() override
+  {
+    MOZ_DIAGNOSTIC_ASSERT(false, "Shouldn't escape the SHUTDOWN state.");
+  }
+
+  State GetState() const override
+  {
+    return DECODER_STATE_SHUTDOWN;
+  }
+};
+
 #define INIT_WATCHABLE(name, val) \
   name(val, "MediaDecoderStateMachine::" #name)
 #define INIT_MIRROR(name, val) \
   name(mTaskQueue, val, "MediaDecoderStateMachine::" #name " (Mirror)")
 #define INIT_CANONICAL(name, val) \
   name(mTaskQueue, val, "MediaDecoderStateMachine::" #name " (Canonical)")
 
 MediaDecoderStateMachine::MediaDecoderStateMachine(MediaDecoder* aDecoder,
@@ -1256,16 +1278,19 @@ MediaDecoderStateMachine::SetState(State
       mStateObj = MakeUnique<SeekingState>(this);
       break;
     case DECODER_STATE_BUFFERING:
       mStateObj = MakeUnique<BufferingState>(this);
       break;
     case DECODER_STATE_COMPLETED:
       mStateObj = MakeUnique<CompletedState>(this);
       break;
+    case DECODER_STATE_SHUTDOWN:
+      mStateObj = MakeUnique<ShutdownState>(this);
+      break;
     default:
       mStateObj = nullptr;
       break;
   }
 
   EnterState();
 }
 
@@ -1274,44 +1299,28 @@ MediaDecoderStateMachine::ExitState()
 {
   MOZ_ASSERT(OnTaskQueue());
 
   if (mStateObj) {
     MOZ_ASSERT(mState == mStateObj->GetState());
     mStateObj->Exit();
     return;
   }
-
-  switch (mState) {
-    case DECODER_STATE_SHUTDOWN:
-      MOZ_DIAGNOSTIC_ASSERT(false, "Shouldn't escape the SHUTDOWN state.");
-      break;
-    default:
-      break;
-  }
 }
 
 void
 MediaDecoderStateMachine::EnterState()
 {
   MOZ_ASSERT(OnTaskQueue());
 
   if (mStateObj) {
     MOZ_ASSERT(mState == mStateObj->GetState());
     mStateObj->Enter();
     return;
   }
-
-  switch (mState) {
-    case DECODER_STATE_SHUTDOWN:
-      mIsShutdown = true;
-      break;
-    default:
-      break;
-  }
 }
 
 void MediaDecoderStateMachine::VolumeChanged()
 {
   MOZ_ASSERT(OnTaskQueue());
   mMediaSink->SetVolume(mVolume);
 }