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 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")); |