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() |