Bug 1407040 - Change HTMLMediaElement XPCOM Enums to WebIDL Enums; r=bz

MozReview-Commit-ID: 55GnbaL2HKl

--HG--
extra : rebase_source : 5bb6c927443bf6adcfe594e69bd70c3b597b9ea4
This commit is contained in:
Kyle Machulis 2018-02-14 19:23:32 -08:00
parent 6cfccd8f15
commit 9e159ac69d
5 changed files with 90 additions and 83 deletions

View File

@ -7,6 +7,7 @@
#include "mozilla/dom/ImageBitmap.h"
#include "mozilla/CheckedInt.h"
#include "mozilla/dom/DOMPrefs.h"
#include "mozilla/dom/HTMLMediaElementBinding.h"
#include "mozilla/dom/ImageBitmapBinding.h"
#include "mozilla/dom/Promise.h"
#include "mozilla/dom/StructuredCloneTags.h"
@ -22,6 +23,8 @@
using namespace mozilla::gfx;
using namespace mozilla::layers;
using mozilla::dom::HTMLMediaElementBinding::NETWORK_EMPTY;
using mozilla::dom::HTMLMediaElementBinding::HAVE_METADATA;
namespace mozilla {
namespace dom {
@ -902,14 +905,14 @@ ImageBitmap::CreateInternal(nsIGlobalObject* aGlobal, HTMLVideoElement& aVideoEl
aVideoEl.MarkAsContentSource(mozilla::dom::HTMLVideoElement::CallerAPI::CREATE_IMAGEBITMAP);
// Check network state.
if (aVideoEl.NetworkState() == HTMLMediaElement::NETWORK_EMPTY) {
if (aVideoEl.NetworkState() == NETWORK_EMPTY) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return nullptr;
}
// Check ready state.
// Cannot be HTMLMediaElement::HAVE_NOTHING or HTMLMediaElement::HAVE_METADATA.
if (aVideoEl.ReadyState() <= HTMLMediaElement::HAVE_METADATA) {
if (aVideoEl.ReadyState() <= HAVE_METADATA) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return nullptr;
}

View File

@ -147,6 +147,7 @@ static mozilla::LazyLogModule gMediaElementEventsLog("nsMediaElementEvents");
using namespace mozilla::layers;
using mozilla::net::nsMediaFragmentURIParser;
using namespace mozilla::dom::HTMLMediaElementBinding;
namespace mozilla {
namespace dom {
@ -1392,7 +1393,7 @@ public:
// On Fennec, we do some hack for unsupported type media, we don't set
// its error state in order to open it with external app.
mSrcIsUnsupportedTypeMedia = true;
mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
mOwner->ChangeNetworkState(NETWORK_NO_SOURCE);
MaybeOpenUnsupportedMediaForOwner();
} else {
mError = new MediaError(mOwner, aErrorCode, aErrorDetails);
@ -1402,15 +1403,15 @@ public:
// https://html.spec.whatwg.org/multipage/embedded-content.html#media-data-processing-steps-list
// "If the media data fetching process is aborted by the user"
mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("abort"));
mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
mOwner->ChangeNetworkState(NETWORK_EMPTY);
mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("emptied"));
if (mOwner->mDecoder) {
mOwner->ShutdownDecoder();
}
} else if (aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED) {
mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
mOwner->ChangeNetworkState(NETWORK_NO_SOURCE);
} else {
mOwner->ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
mOwner->ChangeNetworkState(NETWORK_IDLE);
}
}
}
@ -1817,8 +1818,8 @@ void HTMLMediaElement::AbortExistingLoads()
DDUNLINKCHILD(mMediaSource.get());
mMediaSource = nullptr;
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING ||
mNetworkState == nsIDOMHTMLMediaElement::NETWORK_IDLE)
if (mNetworkState == NETWORK_LOADING ||
mNetworkState == NETWORK_IDLE)
{
DispatchAsyncEvent(NS_LITERAL_STRING("abort"));
}
@ -1841,7 +1842,7 @@ void HTMLMediaElement::AbortExistingLoads()
mTags = nullptr;
if (mNetworkState != nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
if (mNetworkState != NETWORK_EMPTY) {
NS_ASSERTION(!mDecoder && !mSrcStream, "How did someone setup a new stream/decoder already?");
// ChangeNetworkState() will call UpdateAudioChannelPlayingState()
// indirectly which depends on mPaused. So we need to update mPaused first.
@ -1849,8 +1850,8 @@ void HTMLMediaElement::AbortExistingLoads()
mPaused = true;
RejectPromises(TakePendingPlayPromises(), NS_ERROR_DOM_MEDIA_ABORT_ERR);
}
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_NOTHING);
ChangeNetworkState(NETWORK_EMPTY);
ChangeReadyState(HAVE_NOTHING);
//TODO: Apply the rules for text track cue rendering Bug 865407
if (mTextTrackManager) {
@ -1940,13 +1941,13 @@ void HTMLMediaElement::QueueLoadFromSourceTask()
if (mDecoder) {
// Reset readyState to HAVE_NOTHING since we're going to load a new decoder.
ShutdownDecoder();
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_NOTHING);
ChangeReadyState(HAVE_NOTHING);
}
AssertReadyStateIsNothing();
ChangeDelayLoadStatus(true);
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_LOADING);
ChangeNetworkState(NETWORK_LOADING);
RefPtr<Runnable> r = NewRunnableMethod("HTMLMediaElement::LoadFromSourceChildren",
this, &HTMLMediaElement::LoadFromSourceChildren);
RunInStableState(r);
@ -1958,7 +1959,7 @@ void HTMLMediaElement::QueueSelectResourceTask()
if (mHaveQueuedSelectResource)
return;
mHaveQueuedSelectResource = true;
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
ChangeNetworkState(NETWORK_NO_SOURCE);
RefPtr<Runnable> r = NewRunnableMethod("HTMLMediaElement::SelectResourceWrapper",
this, &HTMLMediaElement::SelectResourceWrapper);
RunInStableState(r);
@ -2056,14 +2057,14 @@ void HTMLMediaElement::SelectResource()
!HasSourceChildren(this)) {
// The media element has neither a src attribute nor any source
// element children, abort the load.
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY);
ChangeNetworkState(NETWORK_EMPTY);
ChangeDelayLoadStatus(false);
return;
}
ChangeDelayLoadStatus(true);
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_LOADING);
ChangeNetworkState(NETWORK_LOADING);
DispatchAsyncEvent(NS_LITERAL_STRING("loadstart"));
// Delay setting mIsRunningSeletResource until after UpdatePreloadAction
@ -2371,7 +2372,7 @@ void HTMLMediaElement::LoadFromSourceChildren()
// Exhausted candidates, wait for more candidates to be appended to
// the media element.
mLoadWaitStatus = WAITING_FOR_SOURCE;
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_NO_SOURCE);
ChangeNetworkState(NETWORK_NO_SOURCE);
ChangeDelayLoadStatus(false);
ReportLoadError("MediaLoadExhaustedCandidates");
return;
@ -2420,7 +2421,7 @@ void HTMLMediaElement::LoadFromSourceChildren()
nsCString(NS_ConvertUTF16toUTF8(src)));
mMediaSource = childSrc->GetSrcMediaSource();
DDLINKCHILD("mediasource", mMediaSource.get());
NS_ASSERTION(mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING,
NS_ASSERTION(mNetworkState == NETWORK_LOADING,
"Network state should be loading");
if (mPreloadAction == HTMLMediaElement::PRELOAD_NONE &&
@ -2444,7 +2445,7 @@ void HTMLMediaElement::LoadFromSourceChildren()
void HTMLMediaElement::SuspendLoad()
{
mSuspendedForPreloadNone = true;
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
ChangeNetworkState(NETWORK_IDLE);
ChangeDelayLoadStatus(false);
}
@ -2455,7 +2456,7 @@ void HTMLMediaElement::ResumeLoad(PreloadAction aAction)
mSuspendedForPreloadNone = false;
mPreloadAction = aAction;
ChangeDelayLoadStatus(true);
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_LOADING);
ChangeNetworkState(NETWORK_LOADING);
if (!mIsLoadingFromSourceChildren) {
// We were loading from the element's src attribute.
MediaResult rv = LoadResource();
@ -2818,7 +2819,7 @@ HTMLMediaElement::Seek(double aTime,
mCurrentPlayRangeStart = -1.0;
}
if (mReadyState == nsIDOMHTMLMediaElement::HAVE_NOTHING) {
if (mReadyState == HAVE_NOTHING) {
mDefaultPlaybackStartPosition = aTime;
promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
return promise.forget();
@ -3015,7 +3016,7 @@ NS_IMETHODIMP HTMLMediaElement::GetPlayed(nsIDOMTimeRanges** aPlayed)
void
HTMLMediaElement::Pause(ErrorResult& aRv)
{
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
if (mNetworkState == NETWORK_EMPTY) {
LOG(LogLevel::Debug, ("Loading due to Pause()"));
DoLoad();
} else if (mDecoder) {
@ -3083,7 +3084,7 @@ HTMLMediaElement::MozGetMetadata(JSContext* cx,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv)
{
if (mReadyState < nsIDOMHTMLMediaElement::HAVE_METADATA) {
if (mReadyState < HAVE_METADATA) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return;
}
@ -3957,7 +3958,7 @@ HTMLMediaElement::HTMLMediaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNo
mSrcStreamPausedCurrentTime(-1),
mShutdownObserver(new ShutdownObserver),
mSourcePointer(nullptr),
mNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY),
mNetworkState(NETWORK_EMPTY),
mCurrentLoadID(0),
mLoadWaitStatus(NOT_WAITING),
mVolume(1.0),
@ -4255,21 +4256,21 @@ HTMLMediaElement::PlayInternal(ErrorResult& aRv)
// HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA: notify about playing for the
// element.
switch (mReadyState) {
case nsIDOMHTMLMediaElement::HAVE_NOTHING:
case HAVE_NOTHING:
DispatchAsyncEvent(NS_LITERAL_STRING("waiting"));
break;
case nsIDOMHTMLMediaElement::HAVE_METADATA:
case nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA:
case HAVE_METADATA:
case HAVE_CURRENT_DATA:
FireTimeUpdate(false);
DispatchAsyncEvent(NS_LITERAL_STRING("waiting"));
break;
case nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA:
case nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA:
case HAVE_FUTURE_DATA:
case HAVE_ENOUGH_DATA:
FireTimeUpdate(false);
NotifyAboutPlaying();
break;
}
} else if (mReadyState >= nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA) {
} else if (mReadyState >= HAVE_FUTURE_DATA) {
// 7. Otherwise, if the media element's readyState attribute has the value
// HAVE_FUTURE_DATA or HAVE_ENOUGH_DATA, take pending play promises and
// queue a task to resolve pending play promises with the result.
@ -4285,7 +4286,7 @@ HTMLMediaElement::PlayInternal(ErrorResult& aRv)
void
HTMLMediaElement::MaybeDoLoad()
{
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
if (mNetworkState == NETWORK_EMPTY) {
DoLoad();
}
}
@ -4647,7 +4648,7 @@ HTMLMediaElement::ReportTelemetry()
stalled = index != TimeRanges::NoIndex &&
(ranges->End(index, ignore) - t) < errorMargin;
stalled |= mDecoder && NextFrameStatus() == MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_BUFFERING &&
mReadyState == HTMLMediaElement::HAVE_CURRENT_DATA;
mReadyState == HAVE_CURRENT_DATA;
if (stalled) {
state = STALLED;
}
@ -4875,7 +4876,7 @@ void
HTMLMediaElement::AssertReadyStateIsNothing()
{
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
if (mReadyState != nsIDOMHTMLMediaElement::HAVE_NOTHING) {
if (mReadyState != HAVE_NOTHING) {
char buf[1024];
SprintfLiteral(buf,
"readyState=%d networkState=%d mLoadWaitStatus=%d "
@ -5022,7 +5023,7 @@ nsresult HTMLMediaElement::InitializeDecoderForChannel(nsIChannel* aChannel,
nsresult
HTMLMediaElement::FinishDecoderSetup(MediaDecoder* aDecoder)
{
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_LOADING);
ChangeNetworkState(NETWORK_LOADING);
// Force a same-origin check before allowing events for this media resource.
mMediaSecurityVerified = false;
@ -5324,7 +5325,7 @@ void HTMLMediaElement::SetupSrcMediaStreamPlayback(DOMMediaStream* aStream)
mSrcStream->AddPrincipalChangeObserver(this);
mSrcStreamVideoPrincipal = mSrcStream->GetVideoPrincipal();
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
ChangeNetworkState(NETWORK_IDLE);
ChangeDelayLoadStatus(false);
CheckAutoplayDataReady();
@ -5479,7 +5480,7 @@ HTMLMediaElement::MetadataLoaded(const MediaInfo* aInfo,
mIsEncrypted = aInfo->IsEncrypted() || mPendingEncryptedInitData.IsEncrypted();
mTags = Move(aTags);
mLoadedDataFired = false;
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_METADATA);
ChangeReadyState(HAVE_METADATA);
DispatchAsyncEvent(NS_LITERAL_STRING("durationchange"));
if (IsVideo() && HasVideo()) {
@ -5569,7 +5570,7 @@ void HTMLMediaElement::FirstFrameLoaded()
void
HTMLMediaElement::NetworkError(const MediaResult& aError)
{
if (mReadyState == nsIDOMHTMLMediaElement::HAVE_NOTHING) {
if (mReadyState == HAVE_NOTHING) {
NoSupportedMediaSourceError(aError.Description());
} else {
Error(MEDIA_ERR_NETWORK);
@ -5596,7 +5597,7 @@ void HTMLMediaElement::DecodeError(const MediaResult& aError)
} else {
NS_WARNING("Should know the source we were loading from!");
}
} else if (mReadyState == nsIDOMHTMLMediaElement::HAVE_NOTHING) {
} else if (mReadyState == HAVE_NOTHING) {
NoSupportedMediaSourceError(aError.Description());
} else {
Error(MEDIA_ERR_DECODE, aError.Description());
@ -5702,22 +5703,22 @@ HTMLMediaElement::NotifySuspendedByCache(bool aSuspendedByCache)
void HTMLMediaElement::DownloadSuspended()
{
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING) {
if (mNetworkState == NETWORK_LOADING) {
DispatchAsyncEvent(NS_LITERAL_STRING("progress"));
}
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
ChangeNetworkState(NETWORK_IDLE);
}
void
HTMLMediaElement::DownloadResumed()
{
ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_LOADING);
ChangeNetworkState(NETWORK_LOADING);
}
void HTMLMediaElement::CheckProgress(bool aHaveNewProgress)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING);
MOZ_ASSERT(mNetworkState == NETWORK_LOADING);
TimeStamp now = TimeStamp::NowLoRes();
@ -5782,7 +5783,7 @@ void HTMLMediaElement::ProgressTimerCallback(nsITimer* aTimer, void* aClosure)
void HTMLMediaElement::StartProgressTimer()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING);
MOZ_ASSERT(mNetworkState == NETWORK_LOADING);
NS_ASSERTION(!mProgressTimer, "Already started progress timer.");
NS_NewTimerWithFuncCallback(getter_AddRefs(mProgressTimer),
@ -5814,7 +5815,7 @@ void HTMLMediaElement::StopProgress()
void HTMLMediaElement::DownloadProgressed()
{
if (mNetworkState != nsIDOMHTMLMediaElement::NETWORK_LOADING) {
if (mNetworkState != NETWORK_LOADING) {
return;
}
CheckProgress(true);
@ -5844,7 +5845,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
return;
}
if (mDecoder && mReadyState < nsIDOMHTMLMediaElement::HAVE_METADATA) {
if (mDecoder && mReadyState < HAVE_METADATA) {
// aNextFrame might have a next frame because the decoder can advance
// on its own thread before MetadataLoaded gets a chance to run.
// The arrival of more data can't change us out of this readyState.
@ -5853,7 +5854,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
return;
}
if (mSrcStream && mReadyState < nsIDOMHTMLMediaElement::HAVE_METADATA) {
if (mSrcStream && mReadyState < HAVE_METADATA) {
if (!mSrcStreamTracksAvailable) {
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"MediaStreamTracks not available yet", this));
@ -5932,7 +5933,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
if (nextFrameStatus == MediaDecoderOwner::NEXT_FRAME_UNAVAILABLE_SEEKING) {
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"NEXT_FRAME_UNAVAILABLE_SEEKING; Forcing HAVE_METADATA", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_METADATA);
ChangeReadyState(HAVE_METADATA);
return;
}
@ -5944,7 +5945,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
// a video frame is available.
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Playing video but no video frame; Forcing HAVE_METADATA", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_METADATA);
ChangeReadyState(HAVE_METADATA);
return;
}
@ -5956,7 +5957,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
if (nextFrameStatus == NEXT_FRAME_UNAVAILABLE_BUFFERING) {
// Force HAVE_CURRENT_DATA when buffering.
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA);
ChangeReadyState(HAVE_CURRENT_DATA);
return;
}
@ -5964,7 +5965,7 @@ HTMLMediaElement::UpdateReadyStateInternal()
// HAVE_FUTURE_DATA.
// So force HAVE_CURRENT_DATA if text tracks not loaded.
if (mTextTrackManager && !mTextTrackManager->IsLoaded()) {
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA);
ChangeReadyState(HAVE_CURRENT_DATA);
return;
}
@ -5980,21 +5981,21 @@ HTMLMediaElement::UpdateReadyStateInternal()
// downloaded the whole data stream.
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Decoder download suspended by cache", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA);
ChangeReadyState(HAVE_ENOUGH_DATA);
return;
}
if (nextFrameStatus != MediaDecoderOwner::NEXT_FRAME_AVAILABLE) {
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Next frame not available", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA);
ChangeReadyState(HAVE_CURRENT_DATA);
return;
}
if (mSrcStream) {
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Stream HAVE_ENOUGH_DATA", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA);
ChangeReadyState(HAVE_ENOUGH_DATA);
return;
}
@ -6009,12 +6010,12 @@ HTMLMediaElement::UpdateReadyStateInternal()
if (mDecoder->CanPlayThrough()) {
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Decoder can play through", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA);
ChangeReadyState(HAVE_ENOUGH_DATA);
return;
}
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Default; Decoder has future data", this));
ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA);
ChangeReadyState(HAVE_FUTURE_DATA);
}
static const char* const gReadyStateToString[] = {
@ -6039,7 +6040,7 @@ HTMLMediaElement::ChangeReadyState(nsMediaReadyState aState)
DDLOG(DDLogCategory::Property, "ready_state", gReadyStateToString[aState]);
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
if (mNetworkState == NETWORK_EMPTY) {
return;
}
@ -6057,24 +6058,24 @@ HTMLMediaElement::ChangeReadyState(nsMediaReadyState aState)
// must queue a task to fire a simple event named timeupdate at the element,
// and queue a task to fire a simple event named waiting at the element."
if (mPlayingBeforeSeek &&
mReadyState < nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA) {
mReadyState < HAVE_FUTURE_DATA) {
DispatchAsyncEvent(NS_LITERAL_STRING("waiting"));
} else if (oldState >= nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA &&
mReadyState < nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA &&
} else if (oldState >= HAVE_FUTURE_DATA &&
mReadyState < HAVE_FUTURE_DATA &&
!Paused() && !Ended() && !mErrorSink->mError) {
FireTimeUpdate(false);
DispatchAsyncEvent(NS_LITERAL_STRING("waiting"));
}
if (oldState < nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA &&
mReadyState >= nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA &&
if (oldState < HAVE_CURRENT_DATA &&
mReadyState >= HAVE_CURRENT_DATA &&
!mLoadedDataFired) {
DispatchAsyncEvent(NS_LITERAL_STRING("loadeddata"));
mLoadedDataFired = true;
}
if (oldState < nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA &&
mReadyState >= nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA) {
if (oldState < HAVE_FUTURE_DATA &&
mReadyState >= HAVE_FUTURE_DATA) {
DispatchAsyncEvent(NS_LITERAL_STRING("canplay"));
if (!mPaused) {
NotifyAboutPlaying();
@ -6083,8 +6084,8 @@ HTMLMediaElement::ChangeReadyState(nsMediaReadyState aState)
CheckAutoplayDataReady();
if (oldState < nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA &&
mReadyState >= nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA) {
if (oldState < HAVE_ENOUGH_DATA &&
mReadyState >= HAVE_ENOUGH_DATA) {
DispatchAsyncEvent(NS_LITERAL_STRING("canplaythrough"));
}
}
@ -6108,15 +6109,15 @@ void HTMLMediaElement::ChangeNetworkState(nsMediaNetworkState aState)
DDLOG(
DDLogCategory::Property, "network_state", gNetworkStateToString[aState]);
if (oldState == nsIDOMHTMLMediaElement::NETWORK_LOADING) {
if (oldState == NETWORK_LOADING) {
// Stop progress notification when exiting NETWORK_LOADING.
StopProgress();
}
if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING) {
if (mNetworkState == NETWORK_LOADING) {
// Start progress notification when entering NETWORK_LOADING.
StartProgress();
} else if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_IDLE &&
} else if (mNetworkState == NETWORK_IDLE &&
!mErrorSink->mError) {
// Fire 'suspend' event when entering NETWORK_IDLE and no error presented.
DispatchAsyncEvent(NS_LITERAL_STRING("suspend"));
@ -6174,7 +6175,7 @@ bool HTMLMediaElement::CanActivateAutoplay()
}
bool hasData =
(mDecoder && mReadyState >= nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA) ||
(mDecoder && mReadyState >= HAVE_ENOUGH_DATA) ||
(mSrcStream && mSrcStream->Active());
return hasData;
@ -6380,8 +6381,8 @@ bool HTMLMediaElement::IsPotentiallyPlaying() const
// and the element has not paused for user interaction
return
!mPaused &&
(mReadyState == nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA ||
mReadyState == nsIDOMHTMLMediaElement::HAVE_FUTURE_DATA) &&
(mReadyState == HAVE_ENOUGH_DATA ||
mReadyState == HAVE_FUTURE_DATA) &&
!IsPlaybackEnded();
}
@ -6390,7 +6391,7 @@ bool HTMLMediaElement::IsPlaybackEnded() const
// TODO:
// the current playback position is equal to the effective end of the media resource.
// See bug 449157.
return mReadyState >= nsIDOMHTMLMediaElement::HAVE_METADATA &&
return mReadyState >= HAVE_METADATA &&
mDecoder && mDecoder->IsEnded();
}
@ -6606,7 +6607,7 @@ void HTMLMediaElement::AddRemoveSelfReference()
(mDecoder && mDecoder->IsSeeking()) ||
CanActivateAutoplay() ||
(mMediaSource ? mProgressTimer :
mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING));
mNetworkState == NETWORK_LOADING));
if (needSelfReference != mHasSelfReference) {
mHasSelfReference = needSelfReference;
@ -6659,7 +6660,7 @@ void HTMLMediaElement::NotifyAddedSource()
// NETWORK_EMPTY, the user agent must invoke the media element's
// resource selection algorithm.
if (!HasAttr(kNameSpaceID_None, nsGkAtoms::src) &&
mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY)
mNetworkState == NETWORK_EMPTY)
{
AssertReadyStateIsNothing();
QueueSelectResourceTask();
@ -7338,7 +7339,7 @@ HTMLMediaElement::DispatchEncrypted(const nsTArray<uint8_t>& aInitData,
("%p DispatchEncrypted initDataType='%s'",
this, NS_ConvertUTF16toUTF8(aInitDataType).get()));
if (mReadyState == nsIDOMHTMLMediaElement::HAVE_NOTHING) {
if (mReadyState == HAVE_NOTHING) {
// Ready state not HAVE_METADATA (yet), don't dispatch encrypted now.
// Queueing for later dispatch in MetadataLoaded.
mPendingEncryptedInitData.AddInitData(aInitDataType, aInitData);
@ -7507,7 +7508,7 @@ HTMLMediaElement::IsCurrentlyPlaying() const
{
// We have playable data, but we still need to check whether data is "real"
// current data.
return mReadyState >= nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA &&
return mReadyState >= HAVE_CURRENT_DATA &&
!IsPlaybackEnded();
}

View File

@ -1436,7 +1436,7 @@ protected:
// Media loading flags. See:
// http://www.whatwg.org/specs/web-apps/current-work/#video)
nsMediaNetworkState mNetworkState;
nsMediaReadyState mReadyState = nsIDOMHTMLMediaElement::HAVE_NOTHING;
nsMediaReadyState mReadyState = HTMLMediaElementBinding::HAVE_NOTHING;
enum LoadAlgorithmState {
// No load algorithm instance is waiting for a source to be added to the

View File

@ -9,6 +9,7 @@
#include "mozilla/EventStateManager.h"
#include "mozilla/Preferences.h"
#include "mozilla/dom/HTMLMediaElement.h"
#include "mozilla/dom/HTMLMediaElementBinding.h"
#include "nsIDocument.h"
#include "MediaManager.h"
@ -53,7 +54,7 @@ AutoplayPolicy::IsMediaElementAllowedToPlay(NotNull<HTMLMediaElement*> aElement)
// Media has already loaded metadata and doesn't contain audio track
if (aElement->IsVideo() &&
aElement->ReadyState() >= nsIDOMHTMLMediaElement::HAVE_METADATA &&
aElement->ReadyState() >= HTMLMediaElementBinding::HAVE_METADATA &&
!aElement->HasAudio()) {
return true;
}
@ -62,4 +63,4 @@ AutoplayPolicy::IsMediaElementAllowedToPlay(NotNull<HTMLMediaElement*> aElement)
}
} // namespace dom
} // namespace mozilla
} // namespace mozilla

View File

@ -68,6 +68,7 @@
#include <algorithm>
#include <limits>
#include "mozilla/dom/AnonymousContent.h"
#include "mozilla/dom/HTMLMediaElementBinding.h"
#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/HTMLImageElement.h"
#include "mozilla/dom/DOMRect.h"
@ -157,6 +158,8 @@ using namespace mozilla::image;
using namespace mozilla::layers;
using namespace mozilla::layout;
using namespace mozilla::gfx;
using mozilla::dom::HTMLMediaElementBinding::HAVE_NOTHING;
using mozilla::dom::HTMLMediaElementBinding::HAVE_METADATA;
#define WEBKIT_PREFIXES_ENABLED_PREF_NAME "layout.css.prefixes.webkit"
#define TEXT_ALIGN_UNSAFE_ENABLED_PREF_NAME "layout.css.text-align-unsafe-value.enabled"
@ -7876,10 +7879,9 @@ nsLayoutUtils::SurfaceFromElement(HTMLVideoElement* aElement,
return result;
}
uint16_t readyState;
if (NS_SUCCEEDED(aElement->GetReadyState(&readyState)) &&
(readyState == nsIDOMHTMLMediaElement::HAVE_NOTHING ||
readyState == nsIDOMHTMLMediaElement::HAVE_METADATA)) {
uint16_t readyState = aElement->ReadyState();
if (readyState == HAVE_NOTHING ||
readyState == HAVE_METADATA) {
result.mIsStillLoading = true;
return result;
}