--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -142,16 +142,17 @@ static mozilla::LazyLogModule gMediaElem
#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/VideoPlaybackQuality.h"
#include "HTMLMediaElement.h"
#include "GMPCrashHelper.h"
using namespace mozilla::layers;
using mozilla::net::nsMediaFragmentURIParser;
+using namespace mozilla::dom::HTMLMediaElementBinding;
namespace mozilla {
namespace dom {
// Number of milliseconds between progress events as defined by spec
static const uint32_t PROGRESS_MS = 350;
// Number of milliseconds of no data before a stall event is fired as defined by spec
@@ -1387,35 +1388,35 @@ public:
// TODO : remove unsupported type related codes after finishing native
// support for HLS, see bug 1350842.
if (CanOwnerPlayUnsupportedTypeMedia() &&
aErrorCode == MEDIA_ERR_SRC_NOT_SUPPORTED) {
// 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);
mOwner->DispatchAsyncEvent(NS_LITERAL_STRING("error"));
if (mOwner->ReadyState() == HAVE_NOTHING &&
aErrorCode == MEDIA_ERR_ABORTED) {
// 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);
}
}
}
void ResetError()
{
mError = nullptr;
mSrcIsUnsupportedTypeMedia = false;
@@ -1812,18 +1813,18 @@ void HTMLMediaElement::AbortExistingLoad
RemoveMediaElementFromURITable();
mLoadingSrc = nullptr;
mLoadingSrcTriggeringPrincipal = nullptr;
DDLOG(DDLogCategory::Property, "loading_src", "");
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"));
}
mErrorSink->ResetError();
mCurrentPlayRangeStart = -1.0;
mLoadedDataFired = false;
mAutoplaying = true;
@@ -1836,26 +1837,26 @@ void HTMLMediaElement::AbortExistingLoad
mMediaInfo = MediaInfo();
mIsEncrypted = false;
mPendingEncryptedInitData.Reset();
mWaitingForKey = NOT_WAITING_FOR_KEY;
mSourcePointer = nullptr;
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.
if (!mPaused) {
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) {
mTextTrackManager->GetTextTracks()->SetCuesInactive();
}
if (fireTimeUpdate) {
// Since we destroyed the decoder above, the current playback position
@@ -1935,35 +1936,35 @@ void HTMLMediaElement::QueueLoadFromSour
{
if (!mIsLoadingFromSourceChildren || mShuttingDown) {
return;
}
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);
}
void HTMLMediaElement::QueueSelectResourceTask()
{
// Don't allow multiple async select resource calls to be queued.
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);
}
static bool HasSourceChildren(nsIContent* aElement)
{
for (nsIContent* child = aElement->GetFirstChild();
@@ -2051,24 +2052,24 @@ void HTMLMediaElement::SelectResourceWra
}
void HTMLMediaElement::SelectResource()
{
if (!mSrcAttrStream && !HasAttr(kNameSpaceID_None, nsGkAtoms::src) &&
!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
// so that we don't lose our state change by bailing out of the preload
// state update
UpdatePreloadAction();
mIsRunningSelectResource = true;
@@ -2366,17 +2367,17 @@ void HTMLMediaElement::LoadFromSourceChi
AddMutationObserverUnlessExists(this);
while (true) {
Element* child = GetNextSource();
if (!child) {
// 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;
}
// Must have src attribute.
nsAutoString src;
if (!child->GetAttr(kNameSpaceID_None, nsGkAtoms::src, src)) {
@@ -2415,17 +2416,17 @@ void HTMLMediaElement::LoadFromSourceChi
RemoveMediaElementFromURITable();
mLoadingSrc = uri;
mLoadingSrcTriggeringPrincipal = childSrc->GetSrcTriggeringPrincipal();
DDLOG(DDLogCategory::Property,
"loading_src",
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 &&
!IsMediaStreamURI(mLoadingSrc) && !mMediaSource) {
// preload:none media, suspend the load here before we make any
// network requests.
SuspendLoad();
return;
@@ -2439,28 +2440,28 @@ void HTMLMediaElement::LoadFromSourceChi
DispatchAsyncSourceError(child);
}
NS_NOTREACHED("Execution should not reach here!");
}
void HTMLMediaElement::SuspendLoad()
{
mSuspendedForPreloadNone = true;
- ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
+ ChangeNetworkState(NETWORK_IDLE);
ChangeDelayLoadStatus(false);
}
void HTMLMediaElement::ResumeLoad(PreloadAction aAction)
{
NS_ASSERTION(mSuspendedForPreloadNone,
"Must be halted for preload:none to resume from preload:none suspended load.");
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();
if (NS_FAILED(rv)) {
NoSupportedMediaSourceError(rv.Description());
}
} else {
// We were loading from a child <source> element. Try to resume the
@@ -2813,17 +2814,17 @@ HTMLMediaElement::Seek(double aTime,
if (mCurrentPlayRangeStart != rangeEndTime) {
mPlayed->Add(mCurrentPlayRangeStart, rangeEndTime);
}
// Reset the current played range start time. We'll re-set it once
// the seek completes.
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();
}
if (!mDecoder) {
// mDecoder must always be set in order to reach this point.
NS_ASSERTION(mDecoder, "SetCurrentTime failed: no decoder");
@@ -3010,17 +3011,17 @@ NS_IMETHODIMP HTMLMediaElement::GetPlaye
RefPtr<TimeRanges> ranges = Played();
ranges.forget(aPlayed);
return NS_OK;
}
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) {
mDecoder->Pause();
}
bool oldPaused = mPaused;
mPaused = true;
@@ -3078,17 +3079,17 @@ NS_IMETHODIMP HTMLMediaElement::SetVolum
return rv.StealNSResult();
}
void
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;
}
JS::Rooted<JSObject*> tags(cx, JS_NewPlainObject(cx));
if (!tags) {
aRv.Throw(NS_ERROR_FAILURE);
return;
@@ -3952,17 +3953,17 @@ NS_IMPL_ISUPPORTS(HTMLMediaElement::Shut
HTMLMediaElement::HTMLMediaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo)
: nsGenericHTMLElement(aNodeInfo),
mMainThreadEventTarget(OwnerDoc()->EventTargetFor(TaskCategory::Other)),
mAbstractMainThread(OwnerDoc()->AbstractMainThreadFor(TaskCategory::Other)),
mSrcStreamTracksAvailable(false),
mSrcStreamPausedCurrentTime(-1),
mShutdownObserver(new ShutdownObserver),
mSourcePointer(nullptr),
- mNetworkState(nsIDOMHTMLMediaElement::NETWORK_EMPTY),
+ mNetworkState(NETWORK_EMPTY),
mCurrentLoadID(0),
mLoadWaitStatus(NOT_WAITING),
mVolume(1.0),
mIsAudioTrackAudible(false),
mMuted(0),
mPreloadAction(PRELOAD_UNDEFINED),
mLastCurrentTime(0.0),
mFragmentStart(-1.0),
@@ -4250,47 +4251,47 @@ HTMLMediaElement::PlayInternal(ErrorResu
// 6.4. If the media element's readyState attribute has the value
// HAVE_NOTHING, HAVE_METADATA, or HAVE_CURRENT_DATA, queue a task to
// fire a simple event named waiting at the element.
// Otherwise, the media element's readyState attribute has the value
// 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.
AsyncResolvePendingPlayPromises();
}
// 8. Set the media element's autoplaying flag to false. (Already done.)
// 9. Return promise.
return promise.forget();
}
void
HTMLMediaElement::MaybeDoLoad()
{
- if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
+ if (mNetworkState == NETWORK_EMPTY) {
DoLoad();
}
}
HTMLMediaElement::WakeLockBoolWrapper&
HTMLMediaElement::WakeLockBoolWrapper::operator=(bool val)
{
if (mValue == val) {
@@ -4642,17 +4643,17 @@ HTMLMediaElement::ReportTelemetry()
RefPtr<TimeRanges> ranges = Buffered();
const double errorMargin = 0.05;
double t = CurrentTime();
TimeRanges::index_type index = ranges->Find(t, errorMargin);
ErrorResult ignore;
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;
}
}
Telemetry::Accumulate(Telemetry::VIDEO_UNLOAD_STATE, state);
LOG(LogLevel::Debug, ("%p VIDEO_UNLOAD_STATE = %d", this, state));
@@ -4870,17 +4871,17 @@ HTMLMediaElement::CanPlayType(const nsAS
return NS_OK;
}
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 "
"mSourceLoadCandidate=%d "
"mIsLoadingFromSourceChildren=%d mPreloadAction=%d "
"mSuspendedForPreloadNone=%d error=%d",
int(mReadyState),
int(mNetworkState),
@@ -5017,17 +5018,17 @@ nsresult HTMLMediaElement::InitializeDec
reportCanPlay(true);
bool isPrivateBrowsing = NodePrincipal()->GetPrivateBrowsingId() > 0;
return SetupDecoder(decoder.get(), aChannel, isPrivateBrowsing, aListener);
}
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;
// Set mDecoder now so if methods like GetCurrentSrc get called between
// here and Load(), they work.
SetDecoder(aDecoder);
@@ -5319,17 +5320,17 @@ void HTMLMediaElement::SetupSrcMediaStre
mSrcStream->OnTracksAvailable(new MediaStreamTracksAvailableCallback(this));
mMediaStreamTrackListener = new MediaStreamTrackListener(this);
mSrcStream->RegisterTrackListener(mMediaStreamTrackListener);
mSrcStream->AddPrincipalChangeObserver(this);
mSrcStreamVideoPrincipal = mSrcStream->GetVideoPrincipal();
- ChangeNetworkState(nsIDOMHTMLMediaElement::NETWORK_IDLE);
+ ChangeNetworkState(NETWORK_IDLE);
ChangeDelayLoadStatus(false);
CheckAutoplayDataReady();
// FirstFrameLoaded() will be called when the stream has current data.
}
void HTMLMediaElement::EndSrcMediaStreamPlayback()
{
@@ -5474,17 +5475,17 @@ HTMLMediaElement::MetadataLoaded(const M
{
MOZ_ASSERT(NS_IsMainThread());
SetMediaInfo(*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()) {
DispatchAsyncEvent(NS_LITERAL_STRING("resize"));
}
NS_ASSERTION(!HasVideo() ||
(mMediaInfo.mVideo.mDisplay.width > 0 &&
mMediaInfo.mVideo.mDisplay.height > 0),
@@ -5564,17 +5565,17 @@ void HTMLMediaElement::FirstFrameLoaded(
mSuspendedAfterFirstFrame = true;
mDecoder->Suspend();
}
}
void
HTMLMediaElement::NetworkError(const MediaResult& aError)
{
- if (mReadyState == nsIDOMHTMLMediaElement::HAVE_NOTHING) {
+ if (mReadyState == HAVE_NOTHING) {
NoSupportedMediaSourceError(aError.Description());
} else {
Error(MEDIA_ERR_NETWORK);
}
}
void HTMLMediaElement::DecodeError(const MediaResult& aError)
{
@@ -5591,17 +5592,17 @@ void HTMLMediaElement::DecodeError(const
if (mIsLoadingFromSourceChildren) {
mErrorSink->ResetError();
if (mSourceLoadCandidate) {
DispatchAsyncSourceError(mSourceLoadCandidate);
QueueLoadFromSourceTask();
} 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());
}
}
void HTMLMediaElement::DecodeWarning(const MediaResult& aError)
{
@@ -5697,32 +5698,32 @@ void
HTMLMediaElement::NotifySuspendedByCache(bool aSuspendedByCache)
{
mDownloadSuspendedByCache = aSuspendedByCache;
UpdateReadyStateInternal();
}
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();
if (aHaveNewProgress) {
mDataTime = now;
}
// If this is the first progress, or PROGRESS_MS has passed since the last
@@ -5777,17 +5778,17 @@ void HTMLMediaElement::ProgressTimerCall
{
auto decoder = static_cast<HTMLMediaElement*>(aClosure);
decoder->CheckProgress(false);
}
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),
ProgressTimerCallback, this, PROGRESS_MS, nsITimer::TYPE_REPEATING_SLACK,
"HTMLMediaElement::ProgressTimerCallback",
mMainThreadEventTarget);
}
@@ -5809,17 +5810,17 @@ void HTMLMediaElement::StopProgress()
}
mProgressTimer->Cancel();
mProgressTimer = nullptr;
}
void HTMLMediaElement::DownloadProgressed()
{
- if (mNetworkState != nsIDOMHTMLMediaElement::NETWORK_LOADING) {
+ if (mNetworkState != NETWORK_LOADING) {
return;
}
CheckProgress(true);
}
bool HTMLMediaElement::ShouldCheckAllowOrigin()
{
return mCORSMode != CORS_NONE;
@@ -5839,26 +5840,26 @@ HTMLMediaElement::UpdateReadyStateIntern
{
if (!mDecoder && !mSrcStream) {
// Not initialized - bail out.
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Not initialized", this));
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.
LOG(LogLevel::Debug, ("MediaElement %p UpdateReadyStateInternal() "
"Decoder ready state < HAVE_METADATA", this));
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));
return;
}
bool hasAudioTracks = !AudioTracks()->IsEmpty();
bool hasVideoTracks = !VideoTracks()->IsEmpty();
@@ -5927,99 +5928,99 @@ HTMLMediaElement::UpdateReadyStateIntern
// This means we've got the key and can reset mWaitingForKey now.
mWaitingForKey = NOT_WAITING_FOR_KEY;
}
}
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;
}
if (IsVideo() && HasVideo() && !IsPlaybackEnded() &&
GetImageContainer() && !GetImageContainer()->HasCurrentImage()) {
// Don't advance if we are playing video, but don't have a video frame.
// Also, if video became available after advancing to HAVE_CURRENT_DATA
// while we are still playing, we need to revert to HAVE_METADATA until
// 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;
}
if (!mFirstFrameLoaded) {
// We haven't yet loaded the first frame, making us unable to determine
// if we have enough valid data at the present stage.
return;
}
if (nextFrameStatus == NEXT_FRAME_UNAVAILABLE_BUFFERING) {
// Force HAVE_CURRENT_DATA when buffering.
- ChangeReadyState(nsIDOMHTMLMediaElement::HAVE_CURRENT_DATA);
+ ChangeReadyState(HAVE_CURRENT_DATA);
return;
}
// TextTracks must be loaded for the HAVE_ENOUGH_DATA and
// 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;
}
if (mDownloadSuspendedByCache && mDecoder && !mDecoder->IsEnded()) {
// The decoder has signaled that the download has been suspended by the
// media cache. So move readyState into HAVE_ENOUGH_DATA, in case there's
// script waiting for a "canplaythrough" event; without this forced
// transition, we will never fire the "canplaythrough" event if the
// media cache is too small, and scripts are bound to fail. Don't force
// this transition if the decoder is in ended state; the readyState
// should remain at HAVE_CURRENT_DATA in this case.
// Note that this state transition includes the case where we finished
// 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;
}
// Now see if we should set HAVE_ENOUGH_DATA.
// If it's something we don't know the size of, then we can't
// make a real estimate, so we go straight to HAVE_ENOUGH_DATA once
// we've downloaded enough data that our download rate is considered
// reliable. We have to move to HAVE_ENOUGH_DATA at some point or
// autoplay elements for live streams will never play. Otherwise we
// move to HAVE_ENOUGH_DATA if we can play through the entire media
// without stopping to buffer.
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[] = {
"HAVE_NOTHING",
"HAVE_METADATA",
"HAVE_CURRENT_DATA",
"HAVE_FUTURE_DATA",
"HAVE_ENOUGH_DATA"
@@ -6034,17 +6035,17 @@ HTMLMediaElement::ChangeReadyState(nsMed
nsMediaReadyState oldState = mReadyState;
mReadyState = aState;
LOG(LogLevel::Debug,
("%p Ready state changed to %s", this, gReadyStateToString[aState]));
DDLOG(DDLogCategory::Property, "ready_state", gReadyStateToString[aState]);
- if (mNetworkState == nsIDOMHTMLMediaElement::NETWORK_EMPTY) {
+ if (mNetworkState == NETWORK_EMPTY) {
return;
}
UpdateAudioChannelPlayingState();
// Handle raising of "waiting" event during seek (see 4.8.10.9)
// or
// 4.8.12.7 Ready states:
@@ -6052,44 +6053,44 @@ HTMLMediaElement::ChangeReadyState(nsMed
// ready state is HAVE_CURRENT_DATA or less
// If the media element was potentially playing before its readyState
// attribute changed to a value lower than HAVE_FUTURE_DATA, and the element
// has not ended playback, and playback has not stopped due to errors,
// paused for user interaction, or paused for in-band content, the user agent
// 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();
}
}
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"));
}
}
static const char* const gNetworkStateToString[] = {
"EMPTY",
"IDLE",
"LOADING",
@@ -6103,25 +6104,25 @@ void HTMLMediaElement::ChangeNetworkStat
}
nsMediaNetworkState oldState = mNetworkState;
mNetworkState = aState;
LOG(LogLevel::Debug, ("%p Network state changed to %s", this, gNetworkStateToString[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"));
}
// Changing mNetworkState affects AddRemoveSelfReference().
AddRemoveSelfReference();
}
@@ -6169,17 +6170,17 @@ bool HTMLMediaElement::CanActivateAutopl
if (mAudioChannelWrapper->GetSuspendType() == nsISuspendedTypes::SUSPENDED_PAUSE ||
mAudioChannelWrapper->GetSuspendType() == nsISuspendedTypes::SUSPENDED_BLOCK ||
mAudioChannelWrapper->IsPlaybackBlocked()) {
return false;
}
}
bool hasData =
- (mDecoder && mReadyState >= nsIDOMHTMLMediaElement::HAVE_ENOUGH_DATA) ||
+ (mDecoder && mReadyState >= HAVE_ENOUGH_DATA) ||
(mSrcStream && mSrcStream->Active());
return hasData;
}
void HTMLMediaElement::CheckAutoplayDataReady()
{
if (!CanActivateAutoplay()) {
@@ -6375,27 +6376,27 @@ nsresult HTMLMediaElement::DispatchPendi
bool HTMLMediaElement::IsPotentiallyPlaying() const
{
// TODO:
// playback has not stopped due to errors,
// 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();
}
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();
}
already_AddRefed<nsIPrincipal> HTMLMediaElement::GetCurrentPrincipal()
{
if (mDecoder) {
return mDecoder->GetCurrentPrincipal();
}
@@ -6601,17 +6602,17 @@ void HTMLMediaElement::AddRemoveSelfRefe
bool needSelfReference = !mShuttingDown &&
ownerDoc->IsActive() &&
(mDelayingLoadEvent ||
(!mPaused && mDecoder && !mDecoder->IsEnded()) ||
(!mPaused && mSrcStream && !mSrcStream->IsFinished()) ||
(mDecoder && mDecoder->IsSeeking()) ||
CanActivateAutoplay() ||
(mMediaSource ? mProgressTimer :
- mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING));
+ mNetworkState == NETWORK_LOADING));
if (needSelfReference != mHasSelfReference) {
mHasSelfReference = needSelfReference;
if (needSelfReference) {
// The shutdown observer will hold a strong reference to us. This
// will do to keep us alive. We need to know about shutdown so that
// we can release our self-reference.
mShutdownObserver->AddRefMediaElement();
@@ -6654,17 +6655,17 @@ void HTMLMediaElement::DispatchAsyncSour
void HTMLMediaElement::NotifyAddedSource()
{
// If a source element is inserted as a child of a media element
// that has no src attribute and whose networkState has the value
// 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();
}
// A load was paused in the resource selection algorithm, waiting for
// a new source child to be added, resume the resource selection algorithm.
if (mLoadWaitStatus == WAITING_FOR_SOURCE) {
@@ -7333,17 +7334,17 @@ HTMLMediaElement::SetOnwaitingforkey(Eve
void
HTMLMediaElement::DispatchEncrypted(const nsTArray<uint8_t>& aInitData,
const nsAString& aInitDataType)
{
LOG(LogLevel::Debug,
("%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);
return;
}
RefPtr<MediaEncryptedEvent> event;
if (IsCORSSameOrigin()) {
@@ -7502,17 +7503,17 @@ HTMLMediaElement::ComputedSuspended() co
mAudioChannelWrapper->GetSuspendType() : nsISuspendedTypes::NONE_SUSPENDED;
}
bool
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();
}
void
HTMLMediaElement::SetAudibleState(bool aAudible)
{
if (mIsAudioTrackAudible != aAudible) {
mIsAudioTrackAudible = aAudible;