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