Commit 2c68be80 authored by mlamouri's avatar mlamouri Committed by Commit bot

Media Controls: use events to enter/exit fullscreen.

This is also adding MediaControlsMediaEventListener::mediaElement() and
always call `m_fullscreenButton->setIsFullscreen` in ::reset() to avoid
the dependency when the controls are first created.

BUG=662761
R=zqzhang@chromium.org

Review-Url: https://codereview.chromium.org/2592443002
Cr-Commit-Position: refs/heads/master@{#439785}
parent 1fb76ab1
...@@ -3432,8 +3432,6 @@ bool HTMLMediaElement::isFullscreen() const { ...@@ -3432,8 +3432,6 @@ bool HTMLMediaElement::isFullscreen() const {
void HTMLMediaElement::didEnterFullscreen() { void HTMLMediaElement::didEnterFullscreen() {
configureMediaControls(); configureMediaControls();
if (mediaControls())
mediaControls()->enteredFullscreen();
// FIXME: There is no embedder-side handling in layout test mode. // FIXME: There is no embedder-side handling in layout test mode.
if (webMediaPlayer() && !LayoutTestSupport::isRunningLayoutTest()) if (webMediaPlayer() && !LayoutTestSupport::isRunningLayoutTest())
webMediaPlayer()->enteredFullscreen(); webMediaPlayer()->enteredFullscreen();
...@@ -3446,8 +3444,6 @@ void HTMLMediaElement::didEnterFullscreen() { ...@@ -3446,8 +3444,6 @@ void HTMLMediaElement::didEnterFullscreen() {
void HTMLMediaElement::didExitFullscreen() { void HTMLMediaElement::didExitFullscreen() {
configureMediaControls(); configureMediaControls();
if (mediaControls())
mediaControls()->exitedFullscreen();
if (webMediaPlayer()) if (webMediaPlayer())
webMediaPlayer()->exitedFullscreen(); webMediaPlayer()->exitedFullscreen();
if (m_inOverlayFullscreenVideo) if (m_inOverlayFullscreenVideo)
...@@ -3622,10 +3618,7 @@ void HTMLMediaElement::ensureMediaControls() { ...@@ -3622,10 +3618,7 @@ void HTMLMediaElement::ensureMediaControls() {
return; return;
MediaControls* mediaControls = MediaControls::create(*this); MediaControls* mediaControls = MediaControls::create(*this);
mediaControls->reset(); mediaControls->reset();
if (isFullscreen())
mediaControls->enteredFullscreen();
ShadowRoot& shadowRoot = ensureUserAgentShadowRoot(); ShadowRoot& shadowRoot = ensureUserAgentShadowRoot();
assertShadowRootChildren(shadowRoot); assertShadowRootChildren(shadowRoot);
......
...@@ -354,6 +354,7 @@ void MediaControls::reset() { ...@@ -354,6 +354,7 @@ void MediaControls::reset() {
onTextTracksAddedOrRemoved(); onTextTracksAddedOrRemoved();
m_fullscreenButton->setIsWanted(shouldShowFullscreenButton(mediaElement())); m_fullscreenButton->setIsWanted(shouldShowFullscreenButton(mediaElement()));
m_fullscreenButton->setIsFullscreen(mediaElement().isFullscreen());
refreshCastButtonVisibilityWithoutUpdate(); refreshCastButtonVisibilityWithoutUpdate();
...@@ -549,18 +550,6 @@ void MediaControls::exitFullscreen() { ...@@ -549,18 +550,6 @@ void MediaControls::exitFullscreen() {
Fullscreen::exitFullscreen(document()); Fullscreen::exitFullscreen(document());
} }
void MediaControls::enteredFullscreen() {
m_fullscreenButton->setIsFullscreen(true);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
void MediaControls::exitedFullscreen() {
m_fullscreenButton->setIsFullscreen(false);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
void MediaControls::startedCasting() { void MediaControls::startedCasting() {
m_castButton->setIsPlayingRemotely(true); m_castButton->setIsPlayingRemotely(true);
m_overlayCastButton->setIsPlayingRemotely(true); m_overlayCastButton->setIsPlayingRemotely(true);
...@@ -760,6 +749,18 @@ void MediaControls::onLoadedMetadata() { ...@@ -760,6 +749,18 @@ void MediaControls::onLoadedMetadata() {
reset(); reset();
} }
void MediaControls::onEnteredFullscreen() {
m_fullscreenButton->setIsFullscreen(true);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
void MediaControls::onExitedFullscreen() {
m_fullscreenButton->setIsFullscreen(false);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
void MediaControls::notifyPanelWidthChanged(const LayoutUnit& newWidth) { void MediaControls::notifyPanelWidthChanged(const LayoutUnit& newWidth) {
// Don't bother to do any work if this matches the most recent panel // Don't bother to do any work if this matches the most recent panel
// width, since we're called after layout. // width, since we're called after layout.
......
...@@ -62,9 +62,6 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement { ...@@ -62,9 +62,6 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement {
void enterFullscreen(); void enterFullscreen();
void exitFullscreen(); void exitFullscreen();
void enteredFullscreen();
void exitedFullscreen();
void showOverlayCastButtonIfNeeded(); void showOverlayCastButtonIfNeeded();
// Update cast button visibility, but don't try to update our panel // Update cast button visibility, but don't try to update our panel
// button visibility for space. // button visibility for space.
...@@ -171,6 +168,8 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement { ...@@ -171,6 +168,8 @@ class CORE_EXPORT MediaControls final : public HTMLDivElement {
void onTextTracksChanged(); void onTextTracksChanged();
void onError(); void onError();
void onLoadedMetadata(); void onLoadedMetadata();
void onEnteredFullscreen();
void onExitedFullscreen();
// Internal cast related methods. // Internal cast related methods.
void startedCasting(); void startedCasting();
......
...@@ -14,25 +14,24 @@ namespace blink { ...@@ -14,25 +14,24 @@ namespace blink {
MediaControlsMediaEventListener::MediaControlsMediaEventListener( MediaControlsMediaEventListener::MediaControlsMediaEventListener(
MediaControls* mediaControls) MediaControls* mediaControls)
: EventListener(CPPEventListenerType), m_mediaControls(mediaControls) { : EventListener(CPPEventListenerType), m_mediaControls(mediaControls) {
m_mediaControls->m_mediaElement->addEventListener( mediaElement().addEventListener(EventTypeNames::volumechange, this, false);
EventTypeNames::volumechange, this, false); mediaElement().addEventListener(EventTypeNames::focusin, this, false);
m_mediaControls->m_mediaElement->addEventListener(EventTypeNames::focusin, mediaElement().addEventListener(EventTypeNames::timeupdate, this, false);
this, false); mediaElement().addEventListener(EventTypeNames::play, this, false);
m_mediaControls->m_mediaElement->addEventListener(EventTypeNames::timeupdate, mediaElement().addEventListener(EventTypeNames::pause, this, false);
this, false); mediaElement().addEventListener(EventTypeNames::durationchange, this, false);
m_mediaControls->m_mediaElement->addEventListener(EventTypeNames::play, this, mediaElement().addEventListener(EventTypeNames::error, this, false);
false); mediaElement().addEventListener(EventTypeNames::loadedmetadata, this, false);
m_mediaControls->m_mediaElement->addEventListener(EventTypeNames::pause, this,
false); // Listen to two different fullscreen events in order to make sure the new and
m_mediaControls->m_mediaElement->addEventListener( // old APIs are handled.
EventTypeNames::durationchange, this, false); mediaElement().addEventListener(EventTypeNames::webkitfullscreenchange, this,
m_mediaControls->m_mediaElement->addEventListener(EventTypeNames::error, this,
false); false);
m_mediaControls->m_mediaElement->addEventListener( m_mediaControls->document().addEventListener(EventTypeNames::fullscreenchange,
EventTypeNames::loadedmetadata, this, false); this, false);
// TextTracks events. // TextTracks events.
TextTrackList* textTracks = m_mediaControls->m_mediaElement->textTracks(); TextTrackList* textTracks = mediaElement().textTracks();
textTracks->addEventListener(EventTypeNames::addtrack, this, false); textTracks->addEventListener(EventTypeNames::addtrack, this, false);
textTracks->addEventListener(EventTypeNames::change, this, false); textTracks->addEventListener(EventTypeNames::change, this, false);
textTracks->addEventListener(EventTypeNames::removetrack, this, false); textTracks->addEventListener(EventTypeNames::removetrack, this, false);
...@@ -43,6 +42,10 @@ bool MediaControlsMediaEventListener::operator==( ...@@ -43,6 +42,10 @@ bool MediaControlsMediaEventListener::operator==(
return this == &other; return this == &other;
} }
HTMLMediaElement& MediaControlsMediaEventListener::mediaElement() {
return m_mediaControls->mediaElement();
}
void MediaControlsMediaEventListener::handleEvent( void MediaControlsMediaEventListener::handleEvent(
ExecutionContext* executionContext, ExecutionContext* executionContext,
Event* event) { Event* event) {
...@@ -79,6 +82,16 @@ void MediaControlsMediaEventListener::handleEvent( ...@@ -79,6 +82,16 @@ void MediaControlsMediaEventListener::handleEvent(
return; return;
} }
// Fullscreen handling.
if (event->type() == EventTypeNames::fullscreenchange ||
event->type() == EventTypeNames::webkitfullscreenchange) {
if (mediaElement().isFullscreen())
m_mediaControls->onEnteredFullscreen();
else
m_mediaControls->onExitedFullscreen();
return;
}
// TextTracks events. // TextTracks events.
if (event->type() == EventTypeNames::addtrack || if (event->type() == EventTypeNames::addtrack ||
event->type() == EventTypeNames::removetrack) { event->type() == EventTypeNames::removetrack) {
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
namespace blink { namespace blink {
class HTMLMediaElement;
class MediaControls; class MediaControls;
class MediaControlsMediaEventListener final : public EventListener { class MediaControlsMediaEventListener final : public EventListener {
...@@ -20,6 +21,8 @@ class MediaControlsMediaEventListener final : public EventListener { ...@@ -20,6 +21,8 @@ class MediaControlsMediaEventListener final : public EventListener {
DECLARE_VIRTUAL_TRACE(); DECLARE_VIRTUAL_TRACE();
private: private:
HTMLMediaElement& mediaElement();
void handleEvent(ExecutionContext*, Event*) override; void handleEvent(ExecutionContext*, Event*) override;
Member<MediaControls> m_mediaControls; Member<MediaControls> m_mediaControls;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment