| Index: Source/core/html/HTMLMediaElement.cpp
|
| diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp
|
| index 4a6ddcfee0e11c4472bff586705351f637b7695a..0136464ef89e731646dcb0d6fced717c57badea3 100644
|
| --- a/Source/core/html/HTMLMediaElement.cpp
|
| +++ b/Source/core/html/HTMLMediaElement.cpp
|
| @@ -334,7 +334,6 @@ HTMLMediaElement::HTMLMediaElement(const QualifiedName& tagName, Document& docum
|
| , m_deferredLoadState(NotDeferred)
|
| , m_deferredLoadTimer(this, &HTMLMediaElement::deferredLoadTimerFired)
|
| , m_webLayer(nullptr)
|
| - , m_preload(MediaPlayer::Auto)
|
| , m_displayMode(Unknown)
|
| , m_cachedTime(std::numeric_limits<double>::quiet_NaN())
|
| , m_fragmentEndTime(std::numeric_limits<double>::quiet_NaN())
|
| @@ -534,20 +533,8 @@ void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr
|
| } else if (name == controlsAttr) {
|
| configureMediaControls();
|
| } else if (name == preloadAttr) {
|
| - if (equalIgnoringCase(value, "none")) {
|
| - m_preload = MediaPlayer::None;
|
| - } else if (equalIgnoringCase(value, "metadata")) {
|
| - m_preload = MediaPlayer::MetaData;
|
| - } else {
|
| - // The spec does not define an "invalid value default" but "auto" is suggested as the
|
| - // "missing value default", so use it for everything except "none" and "metadata"
|
| - m_preload = MediaPlayer::Auto;
|
| - }
|
| -
|
| - // The attribute must be ignored if the autoplay attribute is present
|
| if (m_player)
|
| setPlayerPreload();
|
| -
|
| } else if (name == mediagroupAttr && RuntimeEnabledFeatures::mediaControllerEnabled()) {
|
| setMediaGroup(value);
|
| } else {
|
| @@ -992,7 +979,7 @@ void HTMLMediaElement::loadResource(const KURL& url, ContentType& contentType, c
|
| if (attemptLoad && canLoadURL(url, contentType, keySystem)) {
|
| ASSERT(!webMediaPlayer());
|
|
|
| - if (!m_havePreparedToPlay && !autoplay() && m_preload == MediaPlayer::None) {
|
| + if (!m_havePreparedToPlay && !autoplay() && preloadType() == MediaPlayer::None) {
|
| WTF_LOG(Media, "HTMLMediaElement::loadResource(%p) : Delaying load because preload == 'none'", this);
|
| deferLoad();
|
| } else {
|
| @@ -1038,7 +1025,7 @@ void HTMLMediaElement::setPlayerPreload()
|
| {
|
| m_player->setPreload(effectivePreloadType());
|
|
|
| - if (loadIsDeferred() && m_preload != MediaPlayer::None)
|
| + if (loadIsDeferred() && preloadType() != MediaPlayer::None)
|
| startDeferredLoad();
|
| }
|
|
|
| @@ -1615,7 +1602,7 @@ void HTMLMediaElement::seek(double time)
|
| return;
|
|
|
| // If the media engine has been told to postpone loading data, let it go ahead now.
|
| - if (m_preload < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA)
|
| + if (preloadType() < MediaPlayer::Auto && m_readyState < HAVE_FUTURE_DATA)
|
| prepareToPlay();
|
|
|
| // Get the current time before setting m_seeking, m_lastSeekTime is returned once it is set.
|
| @@ -1880,16 +1867,13 @@ bool HTMLMediaElement::autoplay() const
|
|
|
| String HTMLMediaElement::preload() const
|
| {
|
| - switch (m_preload) {
|
| + switch (preloadType()) {
|
| case MediaPlayer::None:
|
| return "none";
|
| - break;
|
| case MediaPlayer::MetaData:
|
| return "metadata";
|
| - break;
|
| case MediaPlayer::Auto:
|
| return "auto";
|
| - break;
|
| }
|
|
|
| ASSERT_NOT_REACHED();
|
| @@ -1902,9 +1886,40 @@ void HTMLMediaElement::setPreload(const AtomicString& preload)
|
| setAttribute(preloadAttr, preload);
|
| }
|
|
|
| +MediaPlayer::Preload HTMLMediaElement::preloadType() const
|
| +{
|
| + // TODO(philipj): The spec requires case-sensitive string matching:
|
| + // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28951
|
| + const AtomicString& preload = fastGetAttribute(preloadAttr);
|
| + if (equalIgnoringCase(preload, "none")) {
|
| + UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadNone);
|
| + return MediaPlayer::None;
|
| + }
|
| + if (equalIgnoringCase(preload, "metadata")) {
|
| + UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadMetadata);
|
| + return MediaPlayer::MetaData;
|
| + }
|
| + if (equalIgnoringCase(preload, "auto")) {
|
| + UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadAuto);
|
| + return MediaPlayer::Auto;
|
| + }
|
| +
|
| + // "The attribute's missing value default is user-agent defined, though the
|
| + // Metadata state is suggested as a compromise between reducing server load
|
| + // and providing an optimal user experience."
|
| +
|
| + // The spec does not define an invalid value default:
|
| + // https://www.w3.org/Bugs/Public/show_bug.cgi?id=28950
|
| +
|
| + // TODO(philipj): Try to make "metadata" the default preload state:
|
| + // https://crbug.com/310450
|
| + UseCounter::count(document(), UseCounter::HTMLMediaElementPreloadDefault);
|
| + return MediaPlayer::Auto;
|
| +}
|
| +
|
| MediaPlayer::Preload HTMLMediaElement::effectivePreloadType() const
|
| {
|
| - return autoplay() ? MediaPlayer::Auto : m_preload;
|
| + return autoplay() ? MediaPlayer::Auto : preloadType();
|
| }
|
|
|
| void HTMLMediaElement::play()
|
|
|