Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(697)

Unified Diff: third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp

Issue 2795783004: Move core MediaControls implementation to modules/media_controls/. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
diff --git a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
similarity index 87%
rename from third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
rename to third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
index 811996a545f6752fcf5a449b696119c926d17b1c..402230417b10ac62781469052557d3177e51ee4e 100644
--- a/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
+++ b/third_party/WebKit/Source/modules/media_controls/MediaControlsImpl.cpp
@@ -24,7 +24,7 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include "core/html/shadow/MediaControls.h"
+#include "modules/media_controls/MediaControlsImpl.h"
#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/ClientRect.h"
@@ -40,12 +40,12 @@
#include "core/html/HTMLVideoElement.h"
#include "core/html/media/HTMLMediaElementControlsList.h"
#include "core/html/shadow/MediaControlsMediaEventListener.h"
-#include "core/html/shadow/MediaControlsOrientationLockDelegate.h"
#include "core/html/shadow/MediaControlsWindowEventListener.h"
#include "core/html/track/TextTrackContainer.h"
#include "core/html/track/TextTrackList.h"
#include "core/layout/LayoutObject.h"
#include "core/layout/LayoutTheme.h"
+#include "modules/media_controls/MediaControlsOrientationLockDelegate.h"
#include "platform/EventDispatchForbiddenScope.h"
namespace blink {
@@ -65,13 +65,11 @@ constexpr int kMinHeightForOverlayPlayButton = kOverlayPlayButtonHeight +
kAndroidMediaPanelHeight +
(2 * kOverlayBottomMargin);
-} // anonymous namespace
-
// If you change this value, then also update the corresponding value in
// LayoutTests/media/media-controls.js.
-static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3;
+const double timeWithoutMouseMovementBeforeHidingMediaControls = 3;
-static bool shouldShowFullscreenButton(const HTMLMediaElement& mediaElement) {
+bool shouldShowFullscreenButton(const HTMLMediaElement& mediaElement) {
// Unconditionally allow the user to exit fullscreen if we are in it
// now. Especially on android, when we might not yet know if
// fullscreen is supported, we sometimes guess incorrectly and show
@@ -98,7 +96,7 @@ static bool shouldShowFullscreenButton(const HTMLMediaElement& mediaElement) {
return true;
}
-static bool shouldShowCastButton(HTMLMediaElement& mediaElement) {
+bool shouldShowCastButton(HTMLMediaElement& mediaElement) {
if (mediaElement.fastHasAttribute(HTMLNames::disableremoteplaybackAttr))
return false;
@@ -118,17 +116,19 @@ static bool shouldShowCastButton(HTMLMediaElement& mediaElement) {
return mediaElement.hasRemoteRoutes();
}
-static bool preferHiddenVolumeControls(const Document& document) {
+bool preferHiddenVolumeControls(const Document& document) {
return !document.settings() ||
document.settings()->getPreferHiddenVolumeControls();
}
-class MediaControls::BatchedControlUpdate {
+} // anonymous namespace
+
+class MediaControlsImpl::BatchedControlUpdate {
WTF_MAKE_NONCOPYABLE(BatchedControlUpdate);
STACK_ALLOCATED();
public:
- explicit BatchedControlUpdate(MediaControls* controls)
+ explicit BatchedControlUpdate(MediaControlsImpl* controls)
: m_controls(controls) {
DCHECK(isMainThread());
DCHECK_GE(s_batchDepth, 0);
@@ -142,17 +142,17 @@ class MediaControls::BatchedControlUpdate {
}
private:
- Member<MediaControls> m_controls;
+ Member<MediaControlsImpl> m_controls;
static int s_batchDepth;
};
// Count of number open batches for controls visibility.
-int MediaControls::BatchedControlUpdate::s_batchDepth = 0;
+int MediaControlsImpl::BatchedControlUpdate::s_batchDepth = 0;
-class MediaControls::MediaControlsResizeObserverCallback final
+class MediaControlsImpl::MediaControlsResizeObserverCallback final
: public ResizeObserverCallback {
public:
- explicit MediaControlsResizeObserverCallback(MediaControls* controls)
+ explicit MediaControlsResizeObserverCallback(MediaControlsImpl* controls)
: m_controls(controls) {
DCHECK(controls);
}
@@ -161,7 +161,7 @@ class MediaControls::MediaControlsResizeObserverCallback final
void handleEvent(const HeapVector<Member<ResizeObserverEntry>>& entries,
ResizeObserver* observer) override {
DCHECK_EQ(1u, entries.size());
- DCHECK_EQ(entries[0]->target(), m_controls->m_mediaElement);
+ DCHECK_EQ(entries[0]->target(), m_controls->mediaElement());
m_controls->notifyElementSizeChanged(entries[0]->contentRect());
}
@@ -171,12 +171,18 @@ class MediaControls::MediaControlsResizeObserverCallback final
}
private:
- Member<MediaControls> m_controls;
+ Member<MediaControlsImpl> m_controls;
};
-MediaControls::MediaControls(HTMLMediaElement& mediaElement)
+MediaControls* MediaControlsImpl::Factory::create(
+ HTMLMediaElement& mediaElement,
+ ShadowRoot& shadowRoot) {
+ return MediaControlsImpl::create(mediaElement, shadowRoot);
+}
+
+MediaControlsImpl::MediaControlsImpl(HTMLMediaElement& mediaElement)
: HTMLDivElement(mediaElement.document()),
- m_mediaElement(&mediaElement),
+ MediaControls(mediaElement),
m_overlayEnclosure(nullptr),
m_overlayPlayButton(nullptr),
m_overlayCastButton(nullptr),
@@ -197,29 +203,31 @@ MediaControls::MediaControls(HTMLMediaElement& mediaElement)
m_mediaEventListener(new MediaControlsMediaEventListener(this)),
m_windowEventListener(MediaControlsWindowEventListener::create(
this,
- WTF::bind(&MediaControls::hideAllMenus, wrapWeakPersistent(this)))),
+ WTF::bind(&MediaControlsImpl::hideAllMenus,
+ wrapWeakPersistent(this)))),
m_orientationLockDelegate(nullptr),
m_hideMediaControlsTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer,
&mediaElement.document()),
this,
- &MediaControls::hideMediaControlsTimerFired),
+ &MediaControlsImpl::hideMediaControlsTimerFired),
m_hideTimerBehaviorFlags(IgnoreNone),
m_isMouseOverControls(false),
m_isPausedForScrubbing(false),
m_resizeObserver(ResizeObserver::create(
mediaElement.document(),
new MediaControlsResizeObserverCallback(this))),
- m_elementSizeChangedTimer(TaskRunnerHelper::get(TaskType::UnspecedTimer,
- &mediaElement.document()),
- this,
- &MediaControls::elementSizeChangedTimerFired),
+ m_elementSizeChangedTimer(
+ TaskRunnerHelper::get(TaskType::UnspecedTimer,
+ &mediaElement.document()),
+ this,
+ &MediaControlsImpl::elementSizeChangedTimerFired),
m_keepShowingUntilTimerFires(false) {
- m_resizeObserver->observe(m_mediaElement);
+ m_resizeObserver->observe(&mediaElement);
}
-MediaControls* MediaControls::create(HTMLMediaElement& mediaElement,
- ShadowRoot& shadowRoot) {
- MediaControls* controls = new MediaControls(mediaElement);
+MediaControlsImpl* MediaControlsImpl::create(HTMLMediaElement& mediaElement,
+ ShadowRoot& shadowRoot) {
+ MediaControlsImpl* controls = new MediaControlsImpl(mediaElement);
controls->setShadowPseudoId(AtomicString("-webkit-media-controls"));
controls->initializeControls();
controls->reset();
@@ -238,7 +246,7 @@ MediaControls* MediaControls::create(HTMLMediaElement& mediaElement,
// The media controls DOM structure looks like:
//
-// MediaControls
+// MediaControlsImpl
// (-webkit-media-controls)
// +-MediaControlOverlayEnclosureElement
// | (-webkit-media-controls-overlay-enclosure)
@@ -282,7 +290,7 @@ MediaControls* MediaControls::create(HTMLMediaElement& mediaElement,
// | (-internal-media-controls-text-track-list-kind-captions)
// +-MediaControlTextTrackListItemSubtitles
// (-internal-media-controls-text-track-list-kind-subtitles)
-void MediaControls::initializeControls() {
+void MediaControlsImpl::initializeControls() {
MediaControlOverlayEnclosureElement* overlayEnclosure =
MediaControlOverlayEnclosureElement::create(*this);
@@ -401,7 +409,7 @@ void MediaControls::initializeControls() {
*this, MediaControlToggleClosedCaptionsButtonElement::create(*this)));
}
-Node::InsertionNotificationRequest MediaControls::insertedInto(
+Node::InsertionNotificationRequest MediaControlsImpl::insertedInto(
ContainerNode* root) {
if (!mediaElement().isConnected())
return HTMLDivElement::insertedInto(root);
@@ -417,15 +425,16 @@ Node::InsertionNotificationRequest MediaControls::insertedInto(
if (!m_resizeObserver) {
m_resizeObserver =
- ResizeObserver::create(m_mediaElement->document(),
+ ResizeObserver::create(mediaElement().document(),
new MediaControlsResizeObserverCallback(this));
- m_resizeObserver->observe(m_mediaElement);
+ HTMLMediaElement& htmlMediaElement = mediaElement();
+ m_resizeObserver->observe(&htmlMediaElement);
}
return HTMLDivElement::insertedInto(root);
}
-void MediaControls::removedFrom(ContainerNode*) {
+void MediaControlsImpl::removedFrom(ContainerNode*) {
DCHECK(!mediaElement().isConnected());
// TODO(mlamouri): we hide show the controls instead of having
@@ -439,7 +448,7 @@ void MediaControls::removedFrom(ContainerNode*) {
m_resizeObserver.clear();
}
-void MediaControls::reset() {
+void MediaControlsImpl::reset() {
EventDispatchForbiddenScope::AllowUserAgentEvents allowEventsInShadow;
BatchedControlUpdate batch(this);
@@ -473,7 +482,7 @@ void MediaControls::reset() {
onControlsListUpdated();
}
-void MediaControls::onControlsListUpdated() {
+void MediaControlsImpl::onControlsListUpdated() {
BatchedControlUpdate batch(this);
m_fullscreenButton->setIsWanted(shouldShowFullscreenButton(mediaElement()));
@@ -484,11 +493,15 @@ void MediaControls::onControlsListUpdated() {
m_downloadButton->shouldDisplayDownloadButton());
}
-LayoutObject* MediaControls::layoutObjectForTextTrackLayout() {
+LayoutObject* MediaControlsImpl::panelLayoutObject() {
return m_panel->layoutObject();
}
-void MediaControls::show() {
+LayoutObject* MediaControlsImpl::containerLayoutObject() {
+ return layoutObject();
+}
+
+void MediaControlsImpl::show() {
makeOpaque();
m_panel->setIsWanted(true);
m_panel->setIsDisplayed(true);
@@ -496,26 +509,26 @@ void MediaControls::show() {
m_overlayPlayButton->updateDisplayType();
}
-void MediaControls::hide() {
+void MediaControlsImpl::hide() {
m_panel->setIsWanted(false);
m_panel->setIsDisplayed(false);
if (m_overlayPlayButton)
m_overlayPlayButton->setIsWanted(false);
}
-bool MediaControls::isVisible() const {
+bool MediaControlsImpl::isVisible() const {
return m_panel->isOpaque();
}
-void MediaControls::makeOpaque() {
+void MediaControlsImpl::makeOpaque() {
m_panel->makeOpaque();
}
-void MediaControls::makeTransparent() {
+void MediaControlsImpl::makeTransparent() {
m_panel->makeTransparent();
}
-bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const {
+bool MediaControlsImpl::shouldHideMediaControls(unsigned behaviorFlags) const {
// Never hide for a media element without visual representation.
if (!mediaElement().isHTMLVideoElement() || !mediaElement().hasVideo() ||
mediaElement().isPlayingRemotely()) {
@@ -553,7 +566,7 @@ bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const {
return true;
}
-void MediaControls::updatePlayState() {
+void MediaControlsImpl::updatePlayState() {
if (m_isPausedForScrubbing)
return;
@@ -562,14 +575,14 @@ void MediaControls::updatePlayState() {
m_playButton->updateDisplayType();
}
-void MediaControls::beginScrubbing() {
+void MediaControlsImpl::beginScrubbing() {
if (!mediaElement().paused()) {
m_isPausedForScrubbing = true;
mediaElement().pause();
}
}
-void MediaControls::endScrubbing() {
+void MediaControlsImpl::endScrubbing() {
if (m_isPausedForScrubbing) {
m_isPausedForScrubbing = false;
if (mediaElement().paused())
@@ -577,7 +590,7 @@ void MediaControls::endScrubbing() {
}
}
-void MediaControls::updateCurrentTimeDisplay() {
+void MediaControlsImpl::updateCurrentTimeDisplay() {
double now = mediaElement().currentTime();
double duration = mediaElement().duration();
@@ -588,7 +601,7 @@ void MediaControls::updateCurrentTimeDisplay() {
m_currentTimeDisplay->setCurrentValue(now);
}
-void MediaControls::toggleTextTrackList() {
+void MediaControlsImpl::toggleTextTrackList() {
if (!mediaElement().hasClosedCaptions()) {
m_textTrackList->setVisible(false);
return;
@@ -600,7 +613,7 @@ void MediaControls::toggleTextTrackList() {
m_textTrackList->setVisible(!m_textTrackList->isWanted());
}
-void MediaControls::showTextTrackAtIndex(unsigned indexToEnable) {
+void MediaControlsImpl::showTextTrackAtIndex(unsigned indexToEnable) {
TextTrackList* trackList = mediaElement().textTracks();
if (indexToEnable >= trackList->length())
return;
@@ -609,7 +622,7 @@ void MediaControls::showTextTrackAtIndex(unsigned indexToEnable) {
track->setMode(TextTrack::showingKeyword());
}
-void MediaControls::disableShowingTextTracks() {
+void MediaControlsImpl::disableShowingTextTracks() {
TextTrackList* trackList = mediaElement().textTracks();
for (unsigned i = 0; i < trackList->length(); ++i) {
TextTrack* track = trackList->anonymousIndexedGetter(i);
@@ -618,12 +631,12 @@ void MediaControls::disableShowingTextTracks() {
}
}
-void MediaControls::refreshCastButtonVisibility() {
+void MediaControlsImpl::refreshCastButtonVisibility() {
refreshCastButtonVisibilityWithoutUpdate();
BatchedControlUpdate batch(this);
}
-void MediaControls::refreshCastButtonVisibilityWithoutUpdate() {
+void MediaControlsImpl::refreshCastButtonVisibilityWithoutUpdate() {
if (!shouldShowCastButton(mediaElement())) {
m_castButton->setIsWanted(false);
m_overlayCastButton->setIsWanted(false);
@@ -655,7 +668,7 @@ void MediaControls::refreshCastButtonVisibilityWithoutUpdate() {
}
}
-void MediaControls::showOverlayCastButtonIfNeeded() {
+void MediaControlsImpl::showOverlayCastButtonIfNeeded() {
if (mediaElement().shouldShowControls() ||
!shouldShowCastButton(mediaElement()))
return;
@@ -664,25 +677,25 @@ void MediaControls::showOverlayCastButtonIfNeeded() {
resetHideMediaControlsTimer();
}
-void MediaControls::enterFullscreen() {
+void MediaControlsImpl::enterFullscreen() {
Fullscreen::requestFullscreen(mediaElement());
}
-void MediaControls::exitFullscreen() {
+void MediaControlsImpl::exitFullscreen() {
Fullscreen::exitFullscreen(document());
}
-void MediaControls::startedCasting() {
+void MediaControlsImpl::startedCasting() {
m_castButton->setIsPlayingRemotely(true);
m_overlayCastButton->setIsPlayingRemotely(true);
}
-void MediaControls::stoppedCasting() {
+void MediaControlsImpl::stoppedCasting() {
m_castButton->setIsPlayingRemotely(false);
m_overlayCastButton->setIsPlayingRemotely(false);
}
-void MediaControls::defaultEventHandler(Event* event) {
+void MediaControlsImpl::defaultEventHandler(Event* event) {
HTMLDivElement::defaultEventHandler(event);
// Do not handle events to not interfere with the rest of the page if no
@@ -754,7 +767,7 @@ void MediaControls::defaultEventHandler(Event* event) {
}
}
-void MediaControls::hideMediaControlsTimerFired(TimerBase*) {
+void MediaControlsImpl::hideMediaControlsTimerFired(TimerBase*) {
unsigned behaviorFlags =
m_hideTimerBehaviorFlags | IgnoreFocus | IgnoreVideoHover;
m_hideTimerBehaviorFlags = IgnoreNone;
@@ -770,23 +783,23 @@ void MediaControls::hideMediaControlsTimerFired(TimerBase*) {
m_overlayCastButton->setIsWanted(false);
}
-void MediaControls::startHideMediaControlsTimer() {
+void MediaControlsImpl::startHideMediaControlsTimer() {
m_hideMediaControlsTimer.startOneShot(
timeWithoutMouseMovementBeforeHidingMediaControls, BLINK_FROM_HERE);
}
-void MediaControls::stopHideMediaControlsTimer() {
+void MediaControlsImpl::stopHideMediaControlsTimer() {
m_keepShowingUntilTimerFires = false;
m_hideMediaControlsTimer.stop();
}
-void MediaControls::resetHideMediaControlsTimer() {
+void MediaControlsImpl::resetHideMediaControlsTimer() {
stopHideMediaControlsTimer();
if (!mediaElement().paused())
startHideMediaControlsTimer();
}
-bool MediaControls::containsRelatedTarget(Event* event) {
+bool MediaControlsImpl::containsRelatedTarget(Event* event) {
if (!event->isMouseEvent())
return false;
EventTarget* relatedTarget = toMouseEvent(event)->relatedTarget();
@@ -795,7 +808,7 @@ bool MediaControls::containsRelatedTarget(Event* event) {
return contains(relatedTarget->toNode());
}
-void MediaControls::onVolumeChange() {
+void MediaControlsImpl::onVolumeChange() {
m_muteButton->updateDisplayType();
m_volumeSlider->setVolume(mediaElement().muted() ? 0
: mediaElement().volume());
@@ -809,7 +822,7 @@ void MediaControls::onVolumeChange() {
m_muteButton->setIsWanted(mediaElement().hasAudio());
}
-void MediaControls::onFocusIn() {
+void MediaControlsImpl::onFocusIn() {
if (!mediaElement().shouldShowControls())
return;
@@ -817,7 +830,7 @@ void MediaControls::onFocusIn() {
resetHideMediaControlsTimer();
}
-void MediaControls::onTimeUpdate() {
+void MediaControlsImpl::onTimeUpdate() {
m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
@@ -832,7 +845,7 @@ void MediaControls::onTimeUpdate() {
makeTransparent();
}
-void MediaControls::onDurationChange() {
+void MediaControlsImpl::onDurationChange() {
const double duration = mediaElement().duration();
// Update the displayed current time/duration.
@@ -845,7 +858,7 @@ void MediaControls::onDurationChange() {
m_timeline->setDuration(duration);
}
-void MediaControls::onPlay() {
+void MediaControlsImpl::onPlay() {
updatePlayState();
m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
@@ -853,7 +866,7 @@ void MediaControls::onPlay() {
startHideMediaControlsTimer();
}
-void MediaControls::onPause() {
+void MediaControlsImpl::onPause() {
updatePlayState();
m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
@@ -862,40 +875,40 @@ void MediaControls::onPause() {
stopHideMediaControlsTimer();
}
-void MediaControls::onTextTracksAddedOrRemoved() {
+void MediaControlsImpl::onTextTracksAddedOrRemoved() {
m_toggleClosedCaptionsButton->setIsWanted(mediaElement().hasClosedCaptions());
BatchedControlUpdate batch(this);
}
-void MediaControls::onTextTracksChanged() {
+void MediaControlsImpl::onTextTracksChanged() {
m_toggleClosedCaptionsButton->updateDisplayType();
}
-void MediaControls::onError() {
+void MediaControlsImpl::onError() {
// TODO(mlamouri): we should only change the aspects of the control that need
// to be changed.
reset();
}
-void MediaControls::onLoadedMetadata() {
+void MediaControlsImpl::onLoadedMetadata() {
// TODO(mlamouri): we should only change the aspects of the control that need
// to be changed.
reset();
}
-void MediaControls::onEnteredFullscreen() {
+void MediaControlsImpl::onEnteredFullscreen() {
m_fullscreenButton->setIsFullscreen(true);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
-void MediaControls::onExitedFullscreen() {
+void MediaControlsImpl::onExitedFullscreen() {
m_fullscreenButton->setIsFullscreen(false);
stopHideMediaControlsTimer();
startHideMediaControlsTimer();
}
-void MediaControls::notifyElementSizeChanged(ClientRect* newSize) {
+void MediaControlsImpl::notifyElementSizeChanged(ClientRect* newSize) {
// Note that this code permits a bad frame on resize, since it is
// run after the relayout / paint happens. It would be great to improve
// this, but it would be even greater to move this code entirely to
@@ -918,11 +931,11 @@ void MediaControls::notifyElementSizeChanged(ClientRect* newSize) {
m_elementSizeChangedTimer.startOneShot(0, BLINK_FROM_HERE);
}
-void MediaControls::elementSizeChangedTimerFired(TimerBase*) {
+void MediaControlsImpl::elementSizeChangedTimerFired(TimerBase*) {
computeWhichControlsFit();
}
-void MediaControls::computeWhichControlsFit() {
+void MediaControlsImpl::computeWhichControlsFit() {
// Hide all controls that don't fit, and show the ones that do.
// This might be better suited for a layout, but since JS media controls
// won't benefit from that anwyay, we just do it here like JS will.
@@ -1035,16 +1048,17 @@ void MediaControls::computeWhichControlsFit() {
}
}
-void MediaControls::invalidate(Element* element) {
+void MediaControlsImpl::invalidate(Element* element) {
if (!element)
return;
- if (LayoutObject* layoutObject = element->layoutObject())
+ if (LayoutObject* layoutObject = element->layoutObject()) {
layoutObject
->setShouldDoFullPaintInvalidationIncludingNonCompositingDescendants();
+ }
}
-void MediaControls::networkStateChanged() {
+void MediaControlsImpl::networkStateChanged() {
invalidate(m_playButton);
invalidate(m_overlayPlayButton);
invalidate(m_muteButton);
@@ -1059,11 +1073,11 @@ void MediaControls::networkStateChanged() {
m_downloadButton->shouldDisplayDownloadButton());
}
-bool MediaControls::overflowMenuVisible() {
+bool MediaControlsImpl::overflowMenuVisible() {
return m_overflowList ? m_overflowList->isWanted() : false;
}
-void MediaControls::toggleOverflowMenu() {
+void MediaControlsImpl::toggleOverflowMenu() {
DCHECK(m_overflowList);
if (!m_overflowList->isWanted())
@@ -1071,7 +1085,7 @@ void MediaControls::toggleOverflowMenu() {
m_overflowList->setIsWanted(!m_overflowList->isWanted());
}
-void MediaControls::hideAllMenus() {
+void MediaControlsImpl::hideAllMenus() {
m_windowEventListener->stop();
if (m_overflowList->isWanted())
@@ -1080,9 +1094,8 @@ void MediaControls::hideAllMenus() {
m_textTrackList->setVisible(false);
}
-DEFINE_TRACE(MediaControls) {
+DEFINE_TRACE(MediaControlsImpl) {
visitor->trace(m_resizeObserver);
- visitor->trace(m_mediaElement);
visitor->trace(m_panel);
visitor->trace(m_overlayPlayButton);
visitor->trace(m_overlayEnclosure);
@@ -1104,6 +1117,7 @@ DEFINE_TRACE(MediaControls) {
visitor->trace(m_mediaEventListener);
visitor->trace(m_windowEventListener);
visitor->trace(m_orientationLockDelegate);
+ MediaControls::trace(visitor);
HTMLDivElement::trace(visitor);
}

Powered by Google App Engine
This is Rietveld 408576698