Index: Source/core/html/HTMLMediaElement.cpp |
diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp |
index d9b5700ca7fd18ed33c33652f5a97190cd6348da..b60072a0a8655ea96075e6d57634d6ec75fb2eea 100644 |
--- a/Source/core/html/HTMLMediaElement.cpp |
+++ b/Source/core/html/HTMLMediaElement.cpp |
@@ -2116,8 +2116,12 @@ void HTMLMediaElement::setPlaybackRate(double rate) |
scheduleEvent(EventTypeNames::ratechange); |
} |
- if (m_player && potentiallyPlaying() && m_player->rate() != rate && !m_mediaController) |
- m_player->setRate(rate); |
+ updatePlaybackRate(); |
+} |
+ |
+double HTMLMediaElement::effectivePlaybackRate() const |
+{ |
+ return m_mediaController ? m_mediaController->playbackRate() : m_playbackRate; |
} |
HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() const |
@@ -2127,7 +2131,7 @@ HTMLMediaElement::DirectionOfPlayback HTMLMediaElement::directionOfPlayback() co |
void HTMLMediaElement::updatePlaybackRate() |
{ |
- double effectiveRate = m_mediaController ? m_mediaController->playbackRate() : m_playbackRate; |
+ double effectiveRate = effectivePlaybackRate(); |
if (m_player && potentiallyPlaying() && m_player->rate() != effectiveRate) |
m_player->setRate(effectiveRate); |
} |
@@ -2340,7 +2344,7 @@ void HTMLMediaElement::playbackProgressTimerFired(Timer<HTMLMediaElement>*) |
if (!m_seeking) |
scheduleTimeupdateEvent(true); |
- if (!m_playbackRate) |
+ if (!effectivePlaybackRate()) |
return; |
if (!m_paused && hasMediaControls()) |
@@ -3275,7 +3279,7 @@ void HTMLMediaElement::updatePlayState() |
if (playerPaused) { |
// 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. |
- m_player->setRate(m_playbackRate); |
+ m_player->setRate(effectivePlaybackRate()); |
updateVolume(); |
m_player->play(); |