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

Unified Diff: Source/core/html/shadow/MediaControls.cpp

Issue 291163004: Implement media cast buttons (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Respond to comments Created 6 years, 3 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
Index: Source/core/html/shadow/MediaControls.cpp
diff --git a/Source/core/html/shadow/MediaControls.cpp b/Source/core/html/shadow/MediaControls.cpp
index 96a6062a30494d1a8c3ab46fa5a37bf7bc650edf..88f28d95f22a760f7622e897229293e59e2c8b39 100644
--- a/Source/core/html/shadow/MediaControls.cpp
+++ b/Source/core/html/shadow/MediaControls.cpp
@@ -59,6 +59,8 @@ MediaControls::MediaControls(HTMLMediaElement& mediaElement)
, m_volumeSlider(nullptr)
, m_toggleClosedCaptionsButton(nullptr)
, m_fullScreenButton(nullptr)
+ , m_castButton(nullptr)
+ , m_overlayCastButton(nullptr)
, m_durationDisplay(nullptr)
, m_enclosure(nullptr)
, m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired)
@@ -82,20 +84,27 @@ bool MediaControls::initializeControls()
{
TrackExceptionState exceptionState;
+ RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(*this);
+
if (document().settings() && document().settings()->mediaControlsOverlayPlayButtonEnabled()) {
- RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(*this);
RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButton = MediaControlOverlayPlayButtonElement::create(*this);
m_overlayPlayButton = overlayPlayButton.get();
overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionState);
if (exceptionState.hadException())
return false;
-
- m_overlayEnclosure = overlayEnclosure.get();
- appendChild(overlayEnclosure.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
}
+ RefPtrWillBeRawPtr<MediaControlCastButtonElement> overlayCastButton = MediaControlCastButtonElement::create(*this, true);
+ m_overlayCastButton = overlayCastButton.get();
+ overlayEnclosure->appendChild(overlayCastButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ m_overlayEnclosure = overlayEnclosure.get();
+ appendChild(overlayEnclosure.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
// Create an enclosing element for the panel so we can visually offset the controls correctly.
RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaControlPanelEnclosureElement::create(*this);
@@ -144,6 +153,12 @@ bool MediaControls::initializeControls()
if (exceptionState.hadException())
return false;
+ RefPtrWillBeRawPtr<MediaControlCastButtonElement> castButton = MediaControlCastButtonElement::create(*this, false);
+ m_castButton = castButton.get();
+ panel->appendChild(castButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlFullscreenButtonElement::create(*this);
m_fullScreenButton = fullscreenButton.get();
panel->appendChild(fullscreenButton.release(), exceptionState);
@@ -189,6 +204,7 @@ void MediaControls::reset()
else
m_fullScreenButton->hide();
+ refreshCastButtonVisibility();
makeOpaque();
}
@@ -204,7 +220,7 @@ void MediaControls::show()
void MediaControls::mediaElementFocused()
{
show();
- stopHideMediaControlsTimer();
+ resetHideMediaControlsTimer();
}
void MediaControls::hide()
@@ -351,6 +367,27 @@ void MediaControls::textTracksChanged()
refreshClosedCaptionsButtonVisibility();
}
+void MediaControls::refreshCastButtonVisibility()
+{
+ if (mediaElement().hasRemoteRoutes()) {
+ if (!mediaElement().shouldShowControls() && !mediaElement().autoplay() && mediaElement().paused()) {
acolwell GONE FROM CHROMIUM 2014/09/10 23:35:23 nit: Please add a comment about why the autoplay c
aberent 2014/09/11 16:38:19 Done.
+ showOverlayCastButton();
+ } else if (mediaElement().shouldShowControls()) {
+ m_overlayCastButton->hide();
+ m_castButton->show();
+ }
+ } else {
+ m_castButton->hide();
+ m_overlayCastButton->hide();
+ }
+}
+
+void MediaControls::showOverlayCastButton()
+{
+ m_overlayCastButton->show();
+ resetHideMediaControlsTimer();
+}
+
void MediaControls::enteredFullscreen()
{
m_fullScreenButton->setIsFullscreen(true);
@@ -365,6 +402,18 @@ void MediaControls::exitedFullscreen()
startHideMediaControlsTimer();
}
+void MediaControls::startedCasting()
+{
+ m_castButton->setIsPlayingRemotely(true);
+ m_overlayCastButton->setIsPlayingRemotely(true);
+}
+
+void MediaControls::stoppedCasting()
+{
+ m_castButton->setIsPlayingRemotely(false);
+ m_overlayCastButton->setIsPlayingRemotely(false);
+}
+
void MediaControls::defaultEventHandler(Event* event)
{
HTMLDivElement::defaultEventHandler(event);
@@ -414,6 +463,7 @@ void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*)
return;
makeTransparent();
+ m_overlayCastButton->hide();
}
void MediaControls::startHideMediaControlsTimer()
@@ -426,6 +476,14 @@ void MediaControls::stopHideMediaControlsTimer()
m_hideMediaControlsTimer.stop();
}
+void MediaControls::resetHideMediaControlsTimer()
+{
+ stopHideMediaControlsTimer();
+ if (!mediaElement().paused())
+ startHideMediaControlsTimer();
+}
+
+
const AtomicString& MediaControls::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls"));

Powered by Google App Engine
This is Rietveld 408576698