Bug 1269741 - Allow resuming a suspended AudioContext in the same event loop run. r?karlt draft
authorPaul Adenot <paul@paul.cx>
Wed, 04 May 2016 14:48:42 +0200
changeset 363270 95a208689737a3987e5519ae1cd2fb7efb05cfdf
parent 363269 6ee91067e584e637b78da421fe3f008a4d0f9452
child 363396 fb47034b6f2108ba5bd9c7f4cba5d42590235152
push id17163
push userpaul@paul.cx
push dateWed, 04 May 2016 12:49:38 +0000
reviewerskarlt
bugs1269741
milestone49.0a1
Bug 1269741 - Allow resuming a suspended AudioContext in the same event loop run. r?karlt MozReview-Commit-ID: 4pS9ZaLGWrn
dom/media/webaudio/AudioContext.cpp
--- a/dom/media/webaudio/AudioContext.cpp
+++ b/dom/media/webaudio/AudioContext.cpp
@@ -861,17 +861,18 @@ AudioContext::Suspend(ErrorResult& aRv)
   }
 
   if (mAudioContextState == AudioContextState::Closed ||
       mCloseCalled) {
     promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
     return promise.forget();
   }
 
-  if (mAudioContextState == AudioContextState::Suspended) {
+  if (mAudioContextState == AudioContextState::Suspended &&
+      mSuspendCalled) {
     promise->MaybeResolve(JS::UndefinedHandleValue);
     return promise.forget();
   }
 
   Destination()->Suspend();
 
   mPromiseGripArray.AppendElement(promise);
 
@@ -908,17 +909,18 @@ AudioContext::Resume(ErrorResult& aRv)
   }
 
   if (mAudioContextState == AudioContextState::Closed ||
       mCloseCalled) {
     promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
     return promise.forget();
   }
 
-  if (mAudioContextState == AudioContextState::Running) {
+  if (mAudioContextState == AudioContextState::Running &&
+      !mSuspendCalled) {
     promise->MaybeResolve(JS::UndefinedHandleValue);
     return promise.forget();
   }
 
   Destination()->Resume();
 
   nsTArray<MediaStream*> streams;
   // If mSuspendCalled is false then we already resumed all our streams,