Bug 1367701 P2 - transit to NextFrameSeekingState in Transit(); r?jwwang draft
authorKaku Kuo <kaku@mozilla.com>
Thu, 25 May 2017 15:40:59 +0800
changeset 584847 c6fe438cb2d867b30177ce53a2c8a7f92f0c9e1a
parent 584846 bb135fd69bbd98cad7b9b131cb803e26df69bcac
child 584848 0fcc7372ea274f3961037e7414f605c443a1fb23
push id60901
push userbmo:kaku@mozilla.com
push dateFri, 26 May 2017 03:23:29 +0000
reviewersjwwang
bugs1367701
milestone55.0a1
Bug 1367701 P2 - transit to NextFrameSeekingState in Transit(); r?jwwang MozReview-Commit-ID: FdPHn6uGubq
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -1731,42 +1731,37 @@ public:
   }
 
   RefPtr<MediaDecoder::SeekPromise> Enter(SeekJob&& aCurrentSeekJob,
                                           SeekJob&& aFutureSeekJob)
   {
     mFutureSeekJob = Move(aFutureSeekJob);
 
     AccurateSeekingState::Enter(Move(aCurrentSeekJob),
-                                EventVisibility::Suppressed)
-      ->Then(OwnerThread(),
-             __func__,
-             [this]() {
-               mAccurateSeekRequest.Complete();
-               SetState<NextFrameSeekingState>(Move(mFutureSeekJob),
-                                               EventVisibility::Observable);
-             },
-             [this]() { mAccurateSeekRequest.Complete(); })
-      ->Track(mAccurateSeekRequest);
+                                EventVisibility::Suppressed);
+
     return mFutureSeekJob.mPromise.Ensure(__func__);
   }
 
   void Exit() override
   {
-    mAccurateSeekRequest.DisconnectIfExists();
     mFutureSeekJob.RejectIfExists(__func__);
     AccurateSeekingState::Exit();
   }
 
 private:
-  MozPromiseRequestHolder<MediaDecoder::SeekPromise> mAccurateSeekRequest;
   SeekJob mFutureSeekJob;
 
-  // We don't want to transition to DecodingState once this seek completes.
-  void GoToNextState() override { // No transition after seek completed. }
+  // We don't want to transition to DecodingState once this seek completes,
+  // instead, we transition to NextFrameSeekingState.
+  void GoToNextState() override
+  {
+    SetState<NextFrameSeekingState>(Move(mFutureSeekJob),
+                                    EventVisibility::Observable);
+  }
 };
 
 RefPtr<MediaDecoder::SeekPromise>
 MediaDecoderStateMachine::DormantState::HandleSeek(SeekTarget aTarget)
 {
   if (aTarget.IsNextFrame()) {
     // NextFrameSeekingState doesn't reset the decoder unlike
     // AccurateSeekingState. So we first must come out of dormant by seeking to