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); |