Chromium Code Reviews| 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() |