Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(719)

Unified Diff: Source/core/html/HTMLMediaElement.cpp

Issue 898883003: Fixes play seek when user sets loop after ended. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Minor cleanup Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« Source/core/html/HTMLMediaElement.h ('K') | « Source/core/html/HTMLMediaElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLMediaElement.cpp
diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp
index d950813509f57be4ced709d0b6c95b819abd7b1e..e3691d611b95a870d525051a37f85c9eba7f8be2 100644
--- a/Source/core/html/HTMLMediaElement.cpp
+++ b/Source/core/html/HTMLMediaElement.cpp
@@ -2299,7 +2299,10 @@ void HTMLMediaElement::playInternal()
if (!m_player || m_networkState == NETWORK_EMPTY)
scheduleDelayedAction(LoadMediaResource);
- if (endedPlayback())
+ // Generally "ended" and "looping" are exclusive. Here, the loop attribute
+ // is ignored to seek back to start in case loop was set after playback
+ // ended. See http://crbug.com/364442
+ if (endedPlayback(/* ignore_loop_attr */ true))
wolenetz 2015/02/12 22:12:27 nit: I don't see this style of commenting params m
chcunningham 2015/02/13 03:37:29 Perhaps this never should have been a bool. I'm no
seek(0);
if (m_mediaController)
@@ -3255,6 +3258,14 @@ bool HTMLMediaElement::couldPlayIfEnoughData() const
bool HTMLMediaElement::endedPlayback() const
{
+ // For general usage, presence of the loop attribute should be considered to mean playback
+ // has not "ended", as "ended" and "looping" are mutually exclusive. See
+ // http://dev.w3.org/html5/spec-preview/media-elements.html#ended-playback
+ return endedPlayback(/* ignore_loop_attr */ false);
wolenetz 2015/02/12 22:12:27 nit: ditto: drop the inline comment?
chcunningham 2015/02/13 03:37:29 Now an enum.
+}
+
+bool HTMLMediaElement::endedPlayback(bool ignoreLoopAttr) const
+{
double dur = duration();
if (!m_player || std::isnan(dur))
return false;
@@ -3271,7 +3282,7 @@ bool HTMLMediaElement::endedPlayback() const
// or the media element has a current media controller.
double now = currentTime();
if (directionOfPlayback() == Forward)
- return dur > 0 && now >= dur && (!loop() || m_mediaController);
+ return dur > 0 && now >= dur && (ignoreLoopAttr || !loop() || m_mediaController);
// or the current playback position is the earliest possible position and the direction
// of playback is backwards
« Source/core/html/HTMLMediaElement.h ('K') | « Source/core/html/HTMLMediaElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698