--- a/dom/media/MediaDecoder.cpp
+++ b/dom/media/MediaDecoder.cpp
@@ -288,17 +288,17 @@ MediaDecoder::ResourceCallback::NotifyBy
AbstractThread::MainThread()->Dispatch(r.forget());
}
void
MediaDecoder::NotifyOwnerActivityChanged(bool aIsVisible)
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
SetElementVisibility(aIsVisible);
UpdateDormantState(false /* aDormantTimeout */, false /* aActivity */);
// Start dormant timer if necessary
StartDormantTimer();
@@ -318,17 +318,17 @@ MediaDecoder::IsHeuristicDormantSupporte
mIsHeuristicDormantSupported;
}
void
MediaDecoder::UpdateDormantState(bool aDormantTimeout, bool aActivity)
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown ||
+ if (IsShutdown() ||
!mDecoderStateMachine ||
mPlayState == PLAY_STATE_SHUTDOWN ||
!mOwner->GetVideoFrameContainer() ||
(mOwner->GetMediaElement() && mOwner->GetMediaElement()->IsBeingDestroyed()) ||
!mDormantSupported)
{
return;
}
@@ -390,17 +390,17 @@ void
MediaDecoder::StartDormantTimer()
{
MOZ_ASSERT(NS_IsMainThread());
if (!IsHeuristicDormantSupported()) {
return;
}
if (mIsHeuristicDormant ||
- mShuttingDown ||
+ IsShutdown() ||
mIsVisible ||
(mPlayState != PLAY_STATE_PAUSED &&
!IsEnded()))
{
return;
}
if (!mDormantTimer) {
@@ -471,17 +471,17 @@ MediaDecoder::CanonicalDurationOrNull()
MOZ_ASSERT(mDecoderStateMachine);
return mDecoderStateMachine->CanonicalDuration();
}
void
MediaDecoder::SetInfinite(bool aInfinite)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
mInfiniteStream = aInfinite;
DurationChanged();
}
bool
MediaDecoder::IsInfinite() const
{
MOZ_ASSERT(NS_IsMainThread());
@@ -602,17 +602,17 @@ MediaDecoder::MediaDecoder(MediaDecoderO
MediaShutdownManager::Instance().Register(this);
}
void
MediaDecoder::Shutdown()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
mShuttingDown = true;
// Unwatch all watch targets to prevent further notifications.
mWatchManager.Shutdown();
@@ -802,17 +802,17 @@ MediaDecoder::Play()
ChangeState(PLAY_STATE_PLAYING);
return NS_OK;
}
nsresult
MediaDecoder::Seek(double aTime, SeekTarget::Type aSeekType, dom::Promise* aPromise /*=nullptr*/)
{
MOZ_ASSERT(NS_IsMainThread());
- NS_ENSURE_TRUE(!mShuttingDown, NS_ERROR_FAILURE);
+ NS_ENSURE_TRUE(!IsShutdown(), NS_ERROR_FAILURE);
UpdateDormantState(false /* aDormantTimeout */, true /* aActivity */);
MOZ_ASSERT(!mIsDormant, "should be out of dormant by now");
MOZ_ASSERT(aTime >= 0.0, "Cannot seek to a negative value.");
int64_t timeUsecs = TimeUnit::FromSeconds(aTime).ToMicroseconds();
@@ -905,17 +905,17 @@ MediaDecoder::OnMetadataUpdate(TimedMeta
}
void
MediaDecoder::MetadataLoaded(nsAutoPtr<MediaInfo> aInfo,
nsAutoPtr<MetadataTags> aTags,
MediaDecoderEventVisibility aEventVisibility)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
DECODER_LOG("MetadataLoaded, channels=%u rate=%u hasAudio=%d hasVideo=%d",
aInfo->mAudio.mChannels, aInfo->mAudio.mRate,
aInfo->HasAudio(), aInfo->HasVideo());
SetMediaSeekable(aInfo->mMediaSeekable);
SetMediaSeekableOnlyInBufferedRanges(aInfo->mMediaSeekableOnlyInBufferedRanges);
mInfo = aInfo.forget();
@@ -978,17 +978,17 @@ MediaDecoder::PlayStateStr()
return ToPlayStateStr(mPlayState);
}
void
MediaDecoder::FirstFrameLoaded(nsAutoPtr<MediaInfo> aInfo,
MediaDecoderEventVisibility aEventVisibility)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
DECODER_LOG("FirstFrameLoaded, channels=%u rate=%u hasAudio=%d hasVideo=%d mPlayState=%s mIsDormant=%d",
aInfo->mAudio.mChannels, aInfo->mAudio.mRate,
aInfo->HasAudio(), aInfo->HasVideo(), PlayStateStr(), mIsDormant);
mInfo = aInfo.forget();
Invalidate();
@@ -1011,54 +1011,54 @@ MediaDecoder::FirstFrameLoaded(nsAutoPtr
// that autoplay should run.
NotifySuspendedStatusChanged();
}
nsresult
MediaDecoder::FinishDecoderSetup(MediaResource* aResource)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
HTMLMediaElement* element = mOwner->GetMediaElement();
NS_ENSURE_TRUE(element, NS_ERROR_FAILURE);
element->FinishDecoderSetup(this, aResource);
return NS_OK;
}
void
MediaDecoder::ResetConnectionState()
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
// Notify the media element that connection gets lost.
mOwner->ResetConnectionState();
// Since we have notified the media element the connection
// lost event, the decoder will be reloaded when user tries
// to play the Rtsp streaming next time.
Shutdown();
}
void
MediaDecoder::NetworkError()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown)
+ if (IsShutdown())
return;
mOwner->NetworkError();
Shutdown();
}
void
MediaDecoder::DecodeError()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown)
+ if (IsShutdown())
return;
mOwner->DecodeError();
Shutdown();
}
void
MediaDecoder::UpdateSameOriginStatus(bool aSameOrigin)
@@ -1080,17 +1080,17 @@ MediaDecoder::IsEndedOrShutdown() const
MOZ_ASSERT(NS_IsMainThread());
return IsEnded() || mPlayState == PLAY_STATE_SHUTDOWN;
}
bool
MediaDecoder::OwnerHasError() const
{
MOZ_ASSERT(NS_IsMainThread());
- return mShuttingDown || mOwner->HasError();
+ return IsShutdown() || mOwner->HasError();
}
class MediaElementGMPCrashHelper : public GMPCrashHelper
{
public:
explicit MediaElementGMPCrashHelper(HTMLMediaElement* aElement)
: mElement(aElement)
{
@@ -1118,22 +1118,29 @@ MediaDecoder::GetCrashHelper()
bool
MediaDecoder::IsEnded() const
{
MOZ_ASSERT(NS_IsMainThread());
return mPlayState == PLAY_STATE_ENDED;
}
+bool
+MediaDecoder::IsShutdown() const
+{
+ MOZ_ASSERT(NS_IsMainThread());
+ return mShuttingDown;
+}
+
void
MediaDecoder::PlaybackEnded()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown ||
+ if (IsShutdown() ||
mLogicallySeeking ||
mPlayState == PLAY_STATE_LOADING) {
return;
}
ChangeState(PLAY_STATE_ENDED);
InvalidateWithFlags(VideoFrameContainer::INVALIDATE_FORCE);
mOwner->PlaybackEnded();
@@ -1200,39 +1207,39 @@ MediaDecoder::UpdatePlaybackRate()
mResource->SetPlaybackRate(rate);
}
void
MediaDecoder::NotifySuspendedStatusChanged()
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
if (mResource) {
bool suspended = mResource->IsSuspendedByCache();
mOwner->NotifySuspendedByCache(suspended);
}
}
void
MediaDecoder::NotifyBytesDownloaded()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
UpdatePlaybackRate();
mOwner->DownloadProgressed();
}
void
MediaDecoder::NotifyDownloadEnded(nsresult aStatus)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
DECODER_LOG("NotifyDownloadEnded, status=%x", aStatus);
if (aStatus == NS_BINDING_ABORTED) {
// Download has been cancelled by user.
mOwner->LoadAborted();
return;
}
@@ -1248,27 +1255,27 @@ MediaDecoder::NotifyDownloadEnded(nsresu
NetworkError();
}
}
void
MediaDecoder::NotifyPrincipalChanged()
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
nsCOMPtr<nsIPrincipal> newPrincipal = GetCurrentPrincipal();
mMediaPrincipalHandle = MakePrincipalHandle(newPrincipal);
mOwner->NotifyDecoderPrincipalChanged();
}
void
MediaDecoder::NotifyBytesConsumed(int64_t aBytes, int64_t aOffset)
{
MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
if (mIgnoreProgressData) {
return;
}
MOZ_ASSERT(mDecoderStateMachine);
if (aOffset >= mDecoderPosition) {
mPlaybackStatistics->AddBytes(aBytes);
@@ -1277,17 +1284,17 @@ MediaDecoder::NotifyBytesConsumed(int64_
}
void
MediaDecoder::OnSeekResolved(SeekResolveValue aVal)
{
MOZ_ASSERT(NS_IsMainThread());
mSeekRequest.Complete();
- if (mShuttingDown)
+ if (IsShutdown())
return;
bool fireEnded = false;
{
// An additional seek was requested while the current seek was
// in operation.
UnpinForSeek();
fireEnded = aVal.mAtEnd;
@@ -1317,17 +1324,17 @@ MediaDecoder::OnSeekRejected()
mLogicallySeeking = false;
AsyncRejectSeekDOMPromiseIfExists();
}
void
MediaDecoder::SeekingStarted(MediaDecoderEventVisibility aEventVisibility)
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown)
+ if (IsShutdown())
return;
if (aEventVisibility != MediaDecoderEventVisibility::Suppressed) {
mOwner->SeekStarted();
}
}
void
@@ -1356,17 +1363,17 @@ MediaDecoder::ChangeState(PlayState aSta
// Start dormant timer if necessary
StartDormantTimer();
}
void
MediaDecoder::UpdateLogicalPositionInternal(MediaDecoderEventVisibility aEventVisibility)
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
double currentPosition = static_cast<double>(CurrentPosition()) / static_cast<double>(USECS_PER_S);
bool logicalPositionChanged = mLogicalPosition != currentPosition;
mLogicalPosition = currentPosition;
// Invalidate the frame so any video data is displayed.
@@ -1381,17 +1388,17 @@ MediaDecoder::UpdateLogicalPositionInter
}
}
void
MediaDecoder::DurationChanged()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
double oldDuration = mDuration;
if (IsInfinite()) {
mDuration = std::numeric_limits<double>::infinity();
} else if (mExplicitDuration.Ref().isSome()) {
mDuration = mExplicitDuration.Ref().ref();
@@ -1661,17 +1668,17 @@ void MediaDecoder::AddSizeOfResources(Re
}
}
void
MediaDecoder::NotifyDataArrived() {
MOZ_ASSERT(NS_IsMainThread());
// Don't publish events since task queues might be shutting down.
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
mDataArrivedEvent.Notify();
}
// Provide access to the state machine object
MediaDecoderStateMachine*
@@ -1679,17 +1686,17 @@ MediaDecoder::GetStateMachine() const {
MOZ_ASSERT(NS_IsMainThread());
return mDecoderStateMachine;
}
void
MediaDecoder::FireTimeUpdate()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
mOwner->FireTimeUpdate(true);
}
void
MediaDecoder::PinForSeek()
{
@@ -1859,25 +1866,25 @@ MediaMemoryTracker::CollectReports(nsIHa
return NS_OK;
}
MediaDecoderOwner*
MediaDecoder::GetOwner()
{
MOZ_ASSERT(NS_IsMainThread());
// mOwner is valid until shutdown.
- return !mShuttingDown ? mOwner : nullptr;
+ return !IsShutdown() ? mOwner : nullptr;
}
void
MediaDecoder::ConstructMediaTracks()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown || mMediaTracksConstructed || !mInfo) {
+ if (IsShutdown() || mMediaTracksConstructed || !mInfo) {
return;
}
HTMLMediaElement* element = mOwner->GetMediaElement();
if (!element) {
return;
}
@@ -1903,17 +1910,17 @@ MediaDecoder::ConstructMediaTracks()
}
}
void
MediaDecoder::RemoveMediaTracks()
{
MOZ_ASSERT(NS_IsMainThread());
- if (mShuttingDown) {
+ if (IsShutdown()) {
return;
}
HTMLMediaElement* element = mOwner->GetMediaElement();
if (!element) {
return;
}
@@ -1944,34 +1951,34 @@ MediaDecoder::NextFrameBufferedStatus()
? MediaDecoderOwner::NEXT_FRAME_AVAILABLE
: MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE;
}
void
MediaDecoder::DumpDebugInfo()
{
DUMP_LOG("metadata: channels=%u rate=%u hasAudio=%d hasVideo=%d, "
- "state: mPlayState=%s mIsDormant=%d, mShuttingDown=%d",
+ "state: mPlayState=%s mIsDormant=%d, IsShutdown()=%d",
mInfo ? mInfo->mAudio.mChannels : 0, mInfo ? mInfo->mAudio.mRate : 0,
mInfo ? mInfo->HasAudio() : 0, mInfo ? mInfo->HasVideo() : 0,
- PlayStateStr(), mIsDormant, mShuttingDown);
+ PlayStateStr(), mIsDormant, IsShutdown());
nsString str;
GetMozDebugReaderData(str);
DUMP_LOG("reader data:\n%s", NS_ConvertUTF16toUTF8(str).get());
- if (!mShuttingDown && GetStateMachine()) {
+ if (!IsShutdown() && GetStateMachine()) {
GetStateMachine()->DumpDebugInfo();
}
}
void
MediaDecoder::NotifyAudibleStateChanged()
{
- MOZ_ASSERT(!mShuttingDown);
+ MOZ_ASSERT(!IsShutdown());
mOwner->SetAudibleState(mIsAudioDataAudible);
}
MediaMemoryTracker::MediaMemoryTracker()
{
}
void