Bug 1355031 P1 - adjust the event order; r?jwwang draft
authorKaku Kuo <kaku@mozilla.com>
Mon, 10 Apr 2017 17:32:39 +0800
changeset 560064 2e12a4f113da8432c555c9a15e0b631d408abbc8
parent 560062 7141018acf0780388e83bf535763f6422093d190
child 560065 e6a5ffd0e8a34180204501aa49ddb98c37e437a6
child 560144 f7d581618d05e3cac229229b9c9adaa71c43011e
push id53314
push userbmo:kaku@mozilla.com
push dateTue, 11 Apr 2017 02:57:43 +0000
reviewersjwwang
bugs1355031
milestone55.0a1
Bug 1355031 P1 - adjust the event order; r?jwwang (EnterVideoSuspend/ExitVideoSuspend) event pair and (VideoOnlySeekBegin/VideoOnlySeekCompleted) event pair should not interleave each other. MozReview-Commit-ID: HehMIls11nc
dom/media/MediaDecoderStateMachine.cpp
--- a/dom/media/MediaDecoderStateMachine.cpp
+++ b/dom/media/MediaDecoderStateMachine.cpp
@@ -939,31 +939,31 @@ class MediaDecoderStateMachine::SeekingS
 public:
   explicit SeekingState(Master* aPtr) : StateObject(aPtr) { }
 
   RefPtr<MediaDecoder::SeekPromise> Enter(SeekJob&& aSeekJob,
                                           EventVisibility aVisibility)
   {
     mSeekJob = Move(aSeekJob);
 
-    // Dispatch a mozvideoonlyseekbegin event to indicate UI for corresponding
-    // changes.
-    if (mSeekJob.mTarget->IsVideoOnly()) {
-      mMaster->mOnPlaybackEvent.Notify(MediaEventType::VideoOnlySeekBegin);
-    }
-
     // Always switch off the blank decoder otherwise we might become visible
     // in the middle of seeking and won't have a valid video frame to show
     // when seek is done.
     if (mMaster->mVideoDecodeSuspended) {
       mMaster->mVideoDecodeSuspended = false;
       mMaster->mOnPlaybackEvent.Notify(MediaEventType::ExitVideoSuspend);
       Reader()->SetVideoBlankDecode(false);
     }
 
+    // Dispatch a mozvideoonlyseekbegin event to indicate UI for corresponding
+    // changes.
+    if (mSeekJob.mTarget->IsVideoOnly()) {
+      mMaster->mOnPlaybackEvent.Notify(MediaEventType::VideoOnlySeekBegin);
+    }
+
     // Don't stop playback for a video-only seek since audio is playing.
     if (!mSeekJob.mTarget->IsVideoOnly()) {
       mMaster->StopPlayback();
     }
 
     mMaster->UpdatePlaybackPositionInternal(mSeekJob.mTarget->GetTime());
 
     if (aVisibility == EventVisibility::Observable) {