Title: [201167] trunk/Source/WebCore
- Revision
- 201167
- Author
- [email protected]
- Date
- 2016-05-19 09:22:35 -0700 (Thu, 19 May 2016)
Log Message
Playback controls should not be active for muted media elements.
https://bugs.webkit.org/show_bug.cgi?id=157876
<rdar://problem/26007525>
Reviewed by Eric Carlson.
Consolidate calls to setUpPlaybackControlsManager() and clearUpPlaybackControlsManager()
into a new method, updatePlaybackControlsManager(), which checks with the MediaElementSession
whether the media element can currently control the playback controls manager, and call
one or the other method conditionally.
That means more logic needs to be moved into MediaElementSession::canControlControlsManager(),
such as whether the element is muted(), has ended(), or whether the element's document has
been suspended.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::~HTMLMediaElement):
(WebCore::HTMLMediaElement::setMuted):
(WebCore::HTMLMediaElement::updatePlayState):
(WebCore::HTMLMediaElement::clearMediaPlayer):
(WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
(WebCore::HTMLMediaElement::createMediaPlayer):
(WebCore::HTMLMediaElement::updatePlaybackControlsManager):
* html/HTMLMediaElement.h:
* html/MediaElementSession.cpp:
(WebCore::MediaElementSession::canControlControlsManager):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (201166 => 201167)
--- trunk/Source/WebCore/ChangeLog 2016-05-19 16:11:52 UTC (rev 201166)
+++ trunk/Source/WebCore/ChangeLog 2016-05-19 16:22:35 UTC (rev 201167)
@@ -1,3 +1,32 @@
+2016-05-18 Jer Noble <[email protected]>
+
+ Playback controls should not be active for muted media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=157876
+ <rdar://problem/26007525>
+
+ Reviewed by Eric Carlson.
+
+ Consolidate calls to setUpPlaybackControlsManager() and clearUpPlaybackControlsManager()
+ into a new method, updatePlaybackControlsManager(), which checks with the MediaElementSession
+ whether the media element can currently control the playback controls manager, and call
+ one or the other method conditionally.
+
+ That means more logic needs to be moved into MediaElementSession::canControlControlsManager(),
+ such as whether the element is muted(), has ended(), or whether the element's document has
+ been suspended.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::~HTMLMediaElement):
+ (WebCore::HTMLMediaElement::setMuted):
+ (WebCore::HTMLMediaElement::updatePlayState):
+ (WebCore::HTMLMediaElement::clearMediaPlayer):
+ (WebCore::HTMLMediaElement::stopWithoutDestroyingMediaPlayer):
+ (WebCore::HTMLMediaElement::createMediaPlayer):
+ (WebCore::HTMLMediaElement::updatePlaybackControlsManager):
+ * html/HTMLMediaElement.h:
+ * html/MediaElementSession.cpp:
+ (WebCore::MediaElementSession::canControlControlsManager):
+
2016-05-19 Chris Dumez <[email protected]>
Kill JSDOMBindings' createNewWrapper()
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (201166 => 201167)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-05-19 16:11:52 UTC (rev 201166)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2016-05-19 16:22:35 UTC (rev 201167)
@@ -500,9 +500,6 @@
setShouldDelayLoadEvent(false);
unregisterWithDocument(document());
- if (document().page())
- document().page()->chrome().client().clearPlaybackControlsManager(*this);
-
#if ENABLE(VIDEO_TRACK)
if (m_audioTracks) {
m_audioTracks->clearElement();
@@ -562,6 +559,9 @@
m_pauseAfterDetachedTaskQueue.close();
m_completelyLoaded = true;
+
+ m_player = nullptr;
+ updatePlaybackControlsManager();
}
void HTMLMediaElement::registerWithDocument(Document& document)
@@ -3353,6 +3353,8 @@
#endif
}
#endif
+
+ updatePlaybackControlsManager();
}
void HTMLMediaElement::togglePlayState()
@@ -4835,8 +4837,7 @@
LOG(Media, "HTMLMediaElement::updatePlayState(%p) - shouldBePlaying = %s, playerPaused = %s", this, boolString(shouldBePlaying), boolString(playerPaused));
if (shouldBePlaying) {
- if (document().page() && m_mediaSession->canControlControlsManager(*this))
- document().page()->chrome().client().setUpPlaybackControlsManager(*this);
+ updatePlaybackControlsManager();
setDisplayMode(Video);
invalidateCachedTime();
@@ -4870,8 +4871,7 @@
startPlaybackProgressTimer();
setPlaying(true);
} else {
- if (endedPlayback() && document().page())
- document().page()->chrome().client().clearPlaybackControlsManager(*this);
+ updatePlaybackControlsManager();
if (!playerPaused)
m_player->pause();
@@ -5008,10 +5008,8 @@
document().removeMediaCanStartListener(this);
}
- if (document().page())
- document().page()->chrome().client().clearPlaybackControlsManager(*this);
-
m_player = nullptr;
+ updatePlaybackControlsManager();
stopPeriodicTimers();
m_pendingActionTimer.stop();
@@ -5047,9 +5045,7 @@
if (m_videoFullscreenMode != VideoFullscreenModeNone)
exitFullscreen();
- if (document().page())
- document().page()->chrome().client().clearPlaybackControlsManager(*this);
-
+ updatePlaybackControlsManager();
m_inActiveDocument = false;
// Stop the playback without generating events
@@ -5890,11 +5886,8 @@
#if ENABLE(VIDEO_TRACK)
forgetResourceSpecificTracks();
#endif
-
- if (document().page())
- document().page()->chrome().client().clearPlaybackControlsManager(*this);
-
m_player = std::make_unique<MediaPlayer>(static_cast<MediaPlayerClient&>(*this));
+ updatePlaybackControlsManager();
#if ENABLE(WEB_AUDIO)
if (m_audioSourceNode) {
@@ -7019,6 +7012,18 @@
play();
}
+void HTMLMediaElement::updatePlaybackControlsManager()
+{
+ Page* page = document().page();
+ if (!page)
+ return;
+
+ if (m_mediaSession->canControlControlsManager(*this))
+ page->chrome().client().setUpPlaybackControlsManager(*this);
+ else
+ page->chrome().client().clearPlaybackControlsManager(*this);
}
+}
+
#endif
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (201166 => 201167)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2016-05-19 16:11:52 UTC (rev 201166)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2016-05-19 16:22:35 UTC (rev 201167)
@@ -784,6 +784,7 @@
void updateShouldAutoplay();
void pauseAfterDetachedTask();
+ void updatePlaybackControlsManager();
Timer m_pendingActionTimer;
Timer m_progressEventTimer;
Modified: trunk/Source/WebCore/html/MediaElementSession.cpp (201166 => 201167)
--- trunk/Source/WebCore/html/MediaElementSession.cpp 2016-05-19 16:11:52 UTC (rev 201166)
+++ trunk/Source/WebCore/html/MediaElementSession.cpp 2016-05-19 16:22:35 UTC (rev 201167)
@@ -216,6 +216,15 @@
if (!element.hasAudio())
return false;
+ if (element.muted())
+ return false;
+
+ if (element.ended())
+ return false;
+
+ if (element.document().activeDOMObjectsAreSuspended())
+ return false;
+
if (!playbackPermitted(element))
return false;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes