Bug 1244768 part 7 - refactor the Play() and PlayInternal() methods; r?jwwang
MozReview-Commit-ID: CP00vERdWMv
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -3693,27 +3693,26 @@ void
HTMLMediaElement::Play(ErrorResult& aRv)
{
if (mAudioChannelWrapper && mAudioChannelWrapper->IsPlaybackBlocked()) {
// NOTE: for promise-based-play, will return a pending promise here.
MaybeDoLoad();
return;
}
- nsresult rv = PlayInternal();
- if (NS_FAILED(rv)) {
- aRv.Throw(rv);
- }
+ PlayInternal(aRv);
UpdateCustomPolicyAfterPlayed();
}
-nsresult
-HTMLMediaElement::PlayInternal()
-{
+void
+HTMLMediaElement::PlayInternal(ErrorResult& aRv)
+{
+ MOZ_ASSERT(!aRv.Failed());
+
if (!IsAllowedToPlay()) {
// NOTE: for promise-based-play, will return a rejected promise here.
return NS_OK;
}
// Play was not blocked so assume user interacted with the element.
mHasUserInteraction = true;
@@ -3729,17 +3728,18 @@ HTMLMediaElement::PlayInternal()
// here if we managed to clone an existing decoder.
if (mDecoder) {
if (mDecoder->IsEnded()) {
SetCurrentTime(0);
}
if (!mPausedForInactiveDocumentOrChannel) {
nsresult rv = mDecoder->Play();
if (NS_FAILED(rv)) {
- return rv;
+ aRv.Throw(rv);
+ return;
}
}
}
if (mCurrentPlayRangeStart == -1.0) {
mCurrentPlayRangeStart = CurrentTime();
}
@@ -3769,17 +3769,17 @@ HTMLMediaElement::PlayInternal()
case nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA:
case nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA:
FireTimeUpdate(false);
DispatchAsyncEvent(NS_LITERAL_STRING("playing"));
break;
}
}
- return NS_OK;
+ return;
}
void
HTMLMediaElement::MaybeDoLoad()
{
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
DoLoad();
}
@@ -3788,19 +3788,20 @@ HTMLMediaElement::MaybeDoLoad()
NS_IMETHODIMP HTMLMediaElement::Play()
{
if (mAudioChannelWrapper && mAudioChannelWrapper->IsPlaybackBlocked()) {
// NOTE: for promise-based-play, will return a pending promise here.
MaybeDoLoad();
return NS_OK;
}
- nsresult rv = PlayInternal();
- if (NS_FAILED(rv)) {
- return rv;
+ ErrorResult rv;
+ PlayInternal(rv);
+ if (rv.Failed()) {
+ return rv.StealNSResult();
}
UpdateCustomPolicyAfterPlayed();
return NS_OK;
}
HTMLMediaElement::WakeLockBoolWrapper&
HTMLMediaElement::WakeLockBoolWrapper::operator=(bool val)
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -805,17 +805,18 @@ protected:
bool mCapturingDecoder;
bool mCapturingMediaStream;
// The following members are keeping state for a captured MediaStream.
TrackID mNextAvailableTrackID;
nsTArray<Pair<nsString, RefPtr<MediaInputPort>>> mTrackPorts;
};
- nsresult PlayInternal();
+ // Will make this method return a already_AddRefed<Promise> in next patch.
+ void PlayInternal(ErrorResult& aRv);
/** Use this method to change the mReadyState member, so required
* events can be fired.
*/
void ChangeReadyState(nsMediaReadyState aState);
/**
* Use this method to change the mNetworkState member, so required