| Index: third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| index 269ceaaede30595688baea1c854efcbf59834178..487a11dbd712a57b5828e24450cc7c60920803f1 100644
|
| --- a/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| +++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.cpp
|
| @@ -45,7 +45,6 @@
|
| #include "core/html/HTMLMediaSource.h"
|
| #include "core/html/HTMLSourceElement.h"
|
| #include "core/html/HTMLTrackElement.h"
|
| -#include "core/html/MediaController.h"
|
| #include "core/html/MediaError.h"
|
| #include "core/html/MediaFragmentURIParser.h"
|
| #include "core/html/TimeRanges.h"
|
| @@ -379,10 +378,6 @@ HTMLMediaElement::~HTMLMediaElement()
|
| m_audioTracks->shutdown();
|
| m_videoTracks->shutdown();
|
|
|
| - if (m_mediaController) {
|
| - m_mediaController->removeMediaElement(this);
|
| - m_mediaController = nullptr;
|
| - }
|
| closeMediaSource();
|
|
|
| removeElementFromDocumentMap(this, &document());
|
| @@ -517,8 +512,6 @@ void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomicStr
|
| configureMediaControls();
|
| } else if (name == preloadAttr) {
|
| setPlayerPreload();
|
| - } else if (name == mediagroupAttr && RuntimeEnabledFeatures::mediaControllerEnabled()) {
|
| - setMediaGroup(value);
|
| } else {
|
| HTMLElement::parseAttribute(name, value);
|
| }
|
| @@ -787,8 +780,6 @@ void HTMLMediaElement::prepareForLoad()
|
| // 4.9 - Set the timeline offset to Not-a-Number (NaN).
|
| // 4.10 - Update the duration attribute to Not-a-Number (NaN).
|
|
|
| -
|
| - updateMediaController();
|
| cueTimeline().updateActiveCues(0);
|
| }
|
|
|
| @@ -1523,13 +1514,6 @@ void HTMLMediaElement::setReadyState(ReadyState state)
|
| jumped = true;
|
| }
|
|
|
| - if (m_mediaController) {
|
| - if (jumped && initialPlaybackPosition > m_mediaController->currentTime())
|
| - m_mediaController->setCurrentTime(initialPlaybackPosition);
|
| - else
|
| - seek(m_mediaController->currentTime());
|
| - }
|
| -
|
| if (mediaControls())
|
| mediaControls()->reset();
|
| if (layoutObject())
|
| @@ -1586,7 +1570,6 @@ void HTMLMediaElement::setReadyState(ReadyState state)
|
| }
|
|
|
| updatePlayState();
|
| - updateMediaController();
|
| cueTimeline().updateActiveCues(currentTime());
|
| }
|
|
|
| @@ -1783,13 +1766,8 @@ double HTMLMediaElement::currentTime() const
|
| return m_cachedTime;
|
| }
|
|
|
| -void HTMLMediaElement::setCurrentTime(double time, ExceptionState& exceptionState)
|
| +void HTMLMediaElement::setCurrentTime(double time)
|
| {
|
| - if (m_mediaController) {
|
| - exceptionState.throwDOMException(InvalidStateError, "The element is slaved to a MediaController.");
|
| - return;
|
| - }
|
| -
|
| // If the media element's readyState is HAVE_NOTHING, then set the default
|
| // playback start position to that time.
|
| if (m_readyState == HAVE_NOTHING) {
|
| @@ -1861,11 +1839,6 @@ void HTMLMediaElement::setPlaybackRate(double rate)
|
| updatePlaybackRate();
|
| }
|
|
|
| -double HTMLMediaElement::effectivePlaybackRate() const
|
| -{
|
| - return m_mediaController ? m_mediaController->playbackRate() : m_playbackRate;
|
| -}
|
| -
|
| HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() const
|
| {
|
| return m_playbackRate >= 0 ? Forward : Backward;
|
| @@ -1873,12 +1846,11 @@ HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() co
|
|
|
| void HTMLMediaElement::updatePlaybackRate()
|
| {
|
| - double effectiveRate = effectivePlaybackRate();
|
| // FIXME: remove m_webMediaPlayer check once we figure out how
|
| // m_webMediaPlayer is going out of sync with readystate.
|
| // m_webMediaPlayer is cleared but readystate is not set to HAVE_NOTHING.
|
| if (m_webMediaPlayer && potentiallyPlaying())
|
| - webMediaPlayer()->setRate(effectiveRate);
|
| + webMediaPlayer()->setRate(playbackRate());
|
| }
|
|
|
| bool HTMLMediaElement::ended() const
|
| @@ -2005,9 +1977,6 @@ void HTMLMediaElement::playInternal()
|
| if (endedPlayback(LoopCondition::Ignored))
|
| seek(0);
|
|
|
| - if (m_mediaController)
|
| - m_mediaController->bringElementUpToSpeed(this);
|
| -
|
| if (m_paused) {
|
| m_paused = false;
|
| invalidateCachedTime();
|
| @@ -2021,7 +1990,6 @@ void HTMLMediaElement::playInternal()
|
| m_autoplaying = false;
|
|
|
| updatePlayState();
|
| - updateMediaController();
|
| }
|
|
|
| void HTMLMediaElement::autoplayMediaEncountered()
|
| @@ -2170,15 +2138,7 @@ double HTMLMediaElement::effectiveMediaVolume() const
|
| if (m_muted)
|
| return 0;
|
|
|
| - if (m_mediaController && m_mediaController->muted())
|
| - return 0;
|
| -
|
| - double volume = m_volume;
|
| -
|
| - if (m_mediaController)
|
| - volume *= m_mediaController->volume();
|
| -
|
| - return volume;
|
| + return m_volume;
|
| }
|
|
|
| // The spec says to fire periodic timeupdate events (those sent while playing) every
|
| @@ -2198,7 +2158,7 @@ void HTMLMediaElement::playbackProgressTimerFired(Timer<HTMLMediaElement>*)
|
| {
|
| if (!std::isnan(m_fragmentEndTime) && currentTime() >= m_fragmentEndTime && directionOfPlayback() == Forward) {
|
| m_fragmentEndTime = std::numeric_limits<double>::quiet_NaN();
|
| - if (!m_mediaController && !m_paused) {
|
| + if (!m_paused) {
|
| UseCounter::count(document(), UseCounter::HTMLMediaElementPauseAtFragmentEnd);
|
| // changes paused to true and fires a simple event named pause at the media element.
|
| pause();
|
| @@ -2208,7 +2168,7 @@ void HTMLMediaElement::playbackProgressTimerFired(Timer<HTMLMediaElement>*)
|
| if (!m_seeking)
|
| scheduleTimeupdateEvent(true);
|
|
|
| - if (!effectivePlaybackRate())
|
| + if (!playbackRate())
|
| return;
|
|
|
| if (!m_paused && mediaControls())
|
| @@ -2235,28 +2195,12 @@ void HTMLMediaElement::scheduleTimeupdateEvent(bool periodicEvent)
|
| }
|
| }
|
|
|
| -bool HTMLMediaElement::togglePlayStateWillPlay() const
|
| -{
|
| - if (m_mediaController)
|
| - return m_mediaController->paused() || m_mediaController->isRestrained();
|
| - return paused();
|
| -}
|
| -
|
| void HTMLMediaElement::togglePlayState()
|
| {
|
| - if (m_mediaController) {
|
| - if (m_mediaController->isRestrained())
|
| - m_mediaController->play();
|
| - else if (m_mediaController->paused())
|
| - m_mediaController->unpause();
|
| - else
|
| - m_mediaController->pause();
|
| - } else {
|
| - if (paused())
|
| - play();
|
| - else
|
| - pause();
|
| - }
|
| + if (paused())
|
| + play();
|
| + else
|
| + pause();
|
| }
|
|
|
| AudioTrackList& HTMLMediaElement::audioTracks()
|
| @@ -2763,16 +2707,15 @@ void HTMLMediaElement::timeChanged()
|
| // When the current playback position reaches the end of the media resource when the direction of
|
| // playback is forwards, then the user agent must follow these steps:
|
| if (!std::isnan(dur) && dur && now >= dur && directionOfPlayback() == Forward) {
|
| - // If the media element has a loop attribute specified and does not have a current media controller,
|
| - if (loop() && !m_mediaController) {
|
| + // If the media element has a loop attribute specified
|
| + if (loop()) {
|
| m_sentEndEvent = false;
|
| // then seek to the earliest possible position of the media resource and abort these steps.
|
| seek(0);
|
| } else {
|
| - // If the media element does not have a current media controller, and the media element
|
| - // has still ended playback, and the direction of playback is still forwards, and paused
|
| - // is false,
|
| - if (!m_mediaController && !m_paused) {
|
| + // If the media element has still ended playback, and the direction of playback is still
|
| + // forwards, and paused is false,
|
| + if (!m_paused) {
|
| // changes paused to true and fires a simple event named pause at the media element.
|
| m_paused = true;
|
| scheduleEvent(EventTypeNames::pause);
|
| @@ -2783,9 +2726,6 @@ void HTMLMediaElement::timeChanged()
|
| scheduleEvent(EventTypeNames::ended);
|
| }
|
| recordMetricsIfPausing();
|
| - // If the media element has a current media controller, then report the controller state
|
| - // for the media element's current media controller.
|
| - updateMediaController();
|
| }
|
| } else {
|
| m_sentEndEvent = false;
|
| @@ -2841,11 +2781,7 @@ void HTMLMediaElement::playbackStateChanged()
|
| void HTMLMediaElement::requestSeek(double time)
|
| {
|
| // The player is the source of this seek request.
|
| - if (m_mediaController) {
|
| - m_mediaController->setCurrentTime(time);
|
| - return;
|
| - }
|
| - setCurrentTime(time, ASSERT_NO_EXCEPTION);
|
| + setCurrentTime(time);
|
| }
|
|
|
| void HTMLMediaElement::remoteRouteAvailabilityChanged(bool routesAvailable)
|
| @@ -2934,7 +2870,7 @@ bool HTMLMediaElement::potentiallyPlaying() const
|
| // when it ran out of buffered data. A movie in this state is "potentially playing", modulo the
|
| // checks in couldPlayIfEnoughData().
|
| bool pausedToBuffer = m_readyStateMaximum >= HAVE_FUTURE_DATA && m_readyState < HAVE_FUTURE_DATA;
|
| - return (pausedToBuffer || m_readyState >= HAVE_FUTURE_DATA) && couldPlayIfEnoughData() && !isBlockedOnMediaController();
|
| + return (pausedToBuffer || m_readyState >= HAVE_FUTURE_DATA) && couldPlayIfEnoughData();
|
| }
|
|
|
| bool HTMLMediaElement::couldPlayIfEnoughData() const
|
| @@ -2957,10 +2893,9 @@ bool HTMLMediaElement::endedPlayback(LoopCondition loopCondition) const
|
|
|
| // and the current playback position is the end of the media resource and the direction
|
| // of playback is forwards, Either the media element does not have a loop attribute specified,
|
| - // or the media element has a current media controller.
|
| double now = currentTime();
|
| if (directionOfPlayback() == Forward)
|
| - return dur > 0 && now >= dur && (loopCondition == LoopCondition::Ignored || !loop() || m_mediaController);
|
| + return dur > 0 && now >= dur && (loopCondition == LoopCondition::Ignored || !loop());
|
|
|
| // or the current playback position is the earliest possible position and the direction
|
| // of playback is backwards
|
| @@ -2994,7 +2929,7 @@ void HTMLMediaElement::updatePlayState()
|
| if (!isPlaying) {
|
| // Set rate, muted before calling play in case they were set before the media engine was setup.
|
| // The media engine should just stash the rate and muted values since it isn't already playing.
|
| - webMediaPlayer()->setRate(effectivePlaybackRate());
|
| + webMediaPlayer()->setRate(playbackRate());
|
| updateVolume();
|
| webMediaPlayer()->play();
|
| }
|
| @@ -3023,8 +2958,6 @@ void HTMLMediaElement::updatePlayState()
|
| mediaControls()->playbackStopped();
|
| }
|
|
|
| - updateMediaController();
|
| -
|
| if (layoutObject())
|
| layoutObject()->updateFromElement();
|
| }
|
| @@ -3076,7 +3009,6 @@ void HTMLMediaElement::userCancelledLoad()
|
| m_currentSourceNode = nullptr;
|
|
|
| invalidateCachedTime();
|
| - updateMediaController();
|
| cueTimeline().updateActiveCues(0);
|
| }
|
|
|
| @@ -3180,17 +3112,6 @@ bool HTMLMediaElement::hasPendingActivity() const
|
| return false;
|
| }
|
|
|
| -void HTMLMediaElement::contextDestroyed()
|
| -{
|
| - // With Oilpan the ExecutionContext is weakly referenced from the media
|
| - // controller and so it will clear itself on destruction.
|
| -#if !ENABLE(OILPAN)
|
| - if (m_mediaController)
|
| - m_mediaController->clearExecutionContext();
|
| -#endif
|
| - ActiveDOMObject::contextDestroyed();
|
| -}
|
| -
|
| bool HTMLMediaElement::isFullscreen() const
|
| {
|
| return Fullscreen::isActiveFullScreenElement(*this);
|
| @@ -3533,105 +3454,6 @@ void HTMLMediaElement::setAudioSourceNode(AudioSourceProviderClient* sourceNode)
|
| }
|
| #endif
|
|
|
| -const AtomicString& HTMLMediaElement::mediaGroup() const
|
| -{
|
| - return fastGetAttribute(mediagroupAttr);
|
| -}
|
| -
|
| -void HTMLMediaElement::setMediaGroup(const AtomicString& group)
|
| -{
|
| - // When a media element is created with a mediagroup attribute, and when a media element's mediagroup
|
| - // attribute is set, changed, or removed, the user agent must run the following steps:
|
| - // 1. Let _R [this] be the media element in question.
|
| - // 2. Let m have no current media controller, if it currently has one.
|
| - setControllerInternal(nullptr);
|
| -
|
| - // 3. If m's mediagroup attribute is being removed, then abort these steps.
|
| - if (group.isNull() || group.isEmpty())
|
| - return;
|
| -
|
| - // 4. If there is another media element whose Document is the same as m's Document (even if one or both
|
| - // of these elements are not actually in the Document),
|
| - WeakMediaElementSet elements = documentToElementSetMap().get(&document());
|
| - for (const auto& element : elements) {
|
| - if (element == this)
|
| - continue;
|
| -
|
| - // and which also has a mediagroup attribute, and whose mediagroup attribute has the same value as
|
| - // the new value of m's mediagroup attribute,
|
| - if (element->mediaGroup() == group) {
|
| - // then let controller be that media element's current media controller.
|
| - setControllerInternal(element->controller());
|
| - return;
|
| - }
|
| - }
|
| -
|
| - // Otherwise, let controller be a newly created MediaController.
|
| - setControllerInternal(MediaController::create(Node::executionContext()));
|
| -}
|
| -
|
| -MediaController* HTMLMediaElement::controller() const
|
| -{
|
| - return m_mediaController.get();
|
| -}
|
| -
|
| -void HTMLMediaElement::setController(MediaController* controller)
|
| -{
|
| - // 4.8.10.11.2 Media controllers: controller attribute.
|
| - // On setting, it must first remove the element's mediagroup attribute, if any,
|
| - removeAttribute(mediagroupAttr);
|
| - // and then set the current media controller to the given value.
|
| - setControllerInternal(controller);
|
| -}
|
| -
|
| -void HTMLMediaElement::setControllerInternal(MediaController* controller)
|
| -{
|
| - if (m_mediaController)
|
| - m_mediaController->removeMediaElement(this);
|
| -
|
| - m_mediaController = controller;
|
| -
|
| - if (m_mediaController)
|
| - m_mediaController->addMediaElement(this);
|
| -}
|
| -
|
| -void HTMLMediaElement::updateMediaController()
|
| -{
|
| - if (m_mediaController)
|
| - m_mediaController->reportControllerState();
|
| -}
|
| -
|
| -bool HTMLMediaElement::isBlocked() const
|
| -{
|
| - // A media element is a blocked media element if its readyState attribute is in the
|
| - // HAVE_NOTHING state, the HAVE_METADATA state, or the HAVE_CURRENT_DATA state,
|
| - // or if the element has paused for user interaction or paused for in-band content.
|
| - if (m_readyState <= HAVE_CURRENT_DATA)
|
| - return true;
|
| -
|
| - return false;
|
| -}
|
| -
|
| -bool HTMLMediaElement::isBlockedOnMediaController() const
|
| -{
|
| - if (!m_mediaController)
|
| - return false;
|
| -
|
| - // A media element is blocked on its media controller if the MediaController is a blocked
|
| - // media controller,
|
| - if (m_mediaController->isBlocked())
|
| - return true;
|
| -
|
| - // or if its media controller position is either before the media resource's earliest possible
|
| - // position relative to the MediaController's timeline or after the end of the media resource
|
| - // relative to the MediaController's timeline.
|
| - double mediaControllerPosition = m_mediaController->currentTime();
|
| - if (mediaControllerPosition < 0 || mediaControllerPosition > duration())
|
| - return true;
|
| -
|
| - return false;
|
| -}
|
| -
|
| void HTMLMediaElement::setAllowHiddenVolumeControls(bool allow)
|
| {
|
| ensureMediaControls();
|
| @@ -3701,7 +3523,6 @@ DEFINE_TRACE(HTMLMediaElement)
|
| visitor->trace(m_cueTimeline);
|
| visitor->trace(m_textTracks);
|
| visitor->trace(m_textTracksWhenResourceSelectionBegan);
|
| - visitor->trace(m_mediaController);
|
| #if ENABLE(WEB_AUDIO)
|
| visitor->trace(m_audioSourceProvider);
|
| visitor->template registerWeakMembers<HTMLMediaElement, &HTMLMediaElement::clearWeakMembers>(this);
|
|
|