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

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: Tidy up button name Created 6 years, 4 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 3a96327c6ad59a04845331f6539d70c2bafedec6..8904aab3de5cc0761d6927064f4f7247901da91b 100644
--- a/Source/core/html/shadow/MediaControls.cpp
+++ b/Source/core/html/shadow/MediaControls.cpp
@@ -54,6 +54,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)
@@ -76,20 +78,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<MediaControlOverlayCastButtonElement> overlayCastButton = MediaControlOverlayCastButtonElement::create(*this);
+ 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);
@@ -138,6 +147,12 @@ bool MediaControls::initializeControls()
if (exceptionState.hadException())
return false;
+ RefPtrWillBeRawPtr<MediaControlCastButtonElement> castButton = MediaControlCastButtonElement::create(*this);
+ 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);
@@ -183,6 +198,7 @@ void MediaControls::reset()
else
m_fullScreenButton->hide();
+ refreshCastButtonVisibility();
makeOpaque();
}
@@ -197,8 +213,15 @@ void MediaControls::show()
void MediaControls::mediaElementFocused()
{
- show();
+ if (mediaElement().shouldShowControls()) {
acolwell GONE FROM CHROMIUM 2014/08/05 19:36:34 This doesn't seem right. It feels like you are add
aberent 2014/08/22 14:08:34 Done.
+ show();
+ } else if (mediaElement().hasRemoteRoutes()) {
+ m_overlayCastButton->show();
+ }
+
stopHideMediaControlsTimer();
+ if (!mediaElement().paused())
+ startHideMediaControlsTimer();
}
void MediaControls::hide()
@@ -341,6 +364,21 @@ void MediaControls::closedCaptionTracksChanged()
refreshClosedCaptionsButtonVisibility();
}
+void MediaControls::refreshCastButtonVisibility()
+{
+ if (mediaElement().hasRemoteRoutes()) {
+ if (!mediaElement().shouldShowControls() && !mediaElement().autoplay() && mediaElement().paused()) {
acolwell GONE FROM CHROMIUM 2014/08/05 19:36:34 Why does autoplay() matter here?
aberent 2014/08/22 14:08:34 Some pages (e.g. vimeo.com) have an autoplay backg
+ m_overlayCastButton->show();
+ } else if (mediaElement().shouldShowControls()) {
+ m_overlayCastButton->hide();
+ m_castButton->show();
+ }
+ } else {
+ m_castButton->hide();
+ m_overlayCastButton->hide();
+ }
+}
+
void MediaControls::enteredFullscreen()
{
m_fullScreenButton->setIsFullscreen(true);
@@ -355,6 +393,18 @@ void MediaControls::exitedFullscreen()
startHideMediaControlsTimer();
}
+void MediaControls::startedCasting()
+{
+ m_castButton->setIsCasting(true);
+ m_overlayCastButton->setIsCasting(true);
+}
+
+void MediaControls::stoppedCasting()
+{
+ m_castButton->setIsCasting(false);
+ m_overlayCastButton->setIsCasting(false);
+}
+
void MediaControls::defaultEventHandler(Event* event)
{
HTMLDivElement::defaultEventHandler(event);
@@ -398,6 +448,7 @@ void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*)
return;
makeTransparent();
+ m_overlayCastButton->hide();
}
void MediaControls::startHideMediaControlsTimer()

Powered by Google App Engine
This is Rietveld 408576698