| Index: Source/core/html/shadow/MediaControls.cpp
|
| diff --git a/Source/core/html/shadow/MediaControls.cpp b/Source/core/html/shadow/MediaControls.cpp
|
| index 8e65d275d32aae675e97f5050b16f13c429948fc..db7f1c8cbeb73cc53f2a4cf84cb9cf291df62885 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)
|
| @@ -81,20 +83,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);
|
|
|
| @@ -143,6 +152,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);
|
| @@ -188,6 +203,7 @@ void MediaControls::reset()
|
| else
|
| m_fullScreenButton->hide();
|
|
|
| + refreshCastButtonVisibility();
|
| makeOpaque();
|
| }
|
|
|
| @@ -203,7 +219,7 @@ void MediaControls::show()
|
| void MediaControls::mediaElementFocused()
|
| {
|
| show();
|
| - stopHideMediaControlsTimer();
|
| + resetHideMediaControlsTimer();
|
| }
|
|
|
| void MediaControls::hide()
|
| @@ -346,6 +362,27 @@ void MediaControls::closedCaptionTracksChanged()
|
| refreshClosedCaptionsButtonVisibility();
|
| }
|
|
|
| +void MediaControls::refreshCastButtonVisibility()
|
| +{
|
| + if (mediaElement().hasRemoteRoutes()) {
|
| + if (!mediaElement().shouldShowControls() && !mediaElement().autoplay() && mediaElement().paused()) {
|
| + 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);
|
| @@ -360,6 +397,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);
|
| @@ -403,6 +452,7 @@ void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*)
|
| return;
|
|
|
| makeTransparent();
|
| + m_overlayCastButton->hide();
|
| }
|
|
|
| void MediaControls::startHideMediaControlsTimer()
|
| @@ -415,6 +465,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"));
|
|
|