mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
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:
parent
6cfccd8f15
commit
9e159ac69d
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user