| Index: third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
|
| index efacfc60689c597d98367ad783bed465bbeead12..a06dc57a0eb3315f58a5bc6205000bc07364cb48 100644
|
| --- a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
|
| +++ b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.cpp
|
| @@ -26,7 +26,7 @@ using namespace HTMLNames;
|
| static const double kViewportTimerPollDelay = 0.5;
|
|
|
| AutoplayExperimentHelper::AutoplayExperimentHelper(HTMLMediaElement& element)
|
| - : m_element(element)
|
| + : m_element(&element)
|
| , m_mode(Mode::ExperimentOff)
|
| , m_playPending(false)
|
| , m_registeredWithLayoutObject(false)
|
| @@ -85,7 +85,7 @@ void AutoplayExperimentHelper::playMethodCalled()
|
| }
|
| }
|
|
|
| - } else if (m_element.isUserGestureRequiredForPlay()) {
|
| + } else if (element().isUserGestureRequiredForPlay()) {
|
| unregisterForPositionUpdatesIfNeeded();
|
| }
|
| }
|
| @@ -121,7 +121,7 @@ void AutoplayExperimentHelper::registerForPositionUpdatesIfNeeded()
|
| return;
|
| }
|
|
|
| - if (LayoutObject* layoutObject = m_element.layoutObject()) {
|
| + if (LayoutObject* layoutObject = element().layoutObject()) {
|
| LayoutMedia* layoutMedia = toLayoutMedia(layoutObject);
|
| layoutMedia->setRequestPositionUpdates(true);
|
| }
|
| @@ -133,7 +133,7 @@ void AutoplayExperimentHelper::registerForPositionUpdatesIfNeeded()
|
| void AutoplayExperimentHelper::unregisterForPositionUpdatesIfNeeded()
|
| {
|
| if (m_registeredWithLayoutObject) {
|
| - if (LayoutObject* obj = m_element.layoutObject()) {
|
| + if (LayoutObject* obj = element().layoutObject()) {
|
| LayoutMedia* layoutMedia = toLayoutMedia(obj);
|
| layoutMedia->setRequestPositionUpdates(false);
|
| }
|
| @@ -155,10 +155,10 @@ void AutoplayExperimentHelper::positionChanged(const IntRect& visibleRect)
|
|
|
| m_lastVisibleRect = visibleRect;
|
|
|
| - if (!m_element.layoutObject())
|
| + if (!element().layoutObject())
|
| return;
|
|
|
| - IntRect currentLocation = m_element.layoutObject()->absoluteBoundingBoxRect();
|
| + IntRect currentLocation = element().layoutObject()->absoluteBoundingBoxRect();
|
| bool inViewport = meetsVisibilityRequirements();
|
|
|
| if (m_lastLocation != currentLocation) {
|
| @@ -177,7 +177,7 @@ void AutoplayExperimentHelper::positionChanged(const IntRect& visibleRect)
|
| void AutoplayExperimentHelper::updatePositionNotificationRegistration()
|
| {
|
| if (m_registeredWithLayoutObject) {
|
| - LayoutMedia* layoutMedia = toLayoutMedia(m_element.layoutObject());
|
| + LayoutMedia* layoutMedia = toLayoutMedia(element().layoutObject());
|
| layoutMedia->setRequestPositionUpdates(true);
|
| }
|
| }
|
| @@ -215,7 +215,7 @@ void AutoplayExperimentHelper::viewportTimerFired(Timer<AutoplayExperimentHelper
|
| bool AutoplayExperimentHelper::meetsVisibilityRequirements() const
|
| {
|
| if (enabled(IfPageVisible)
|
| - && m_element.document().pageVisibilityState() != PageVisibilityStateVisible)
|
| + && element().document().pageVisibilityState() != PageVisibilityStateVisible)
|
| return false;
|
|
|
| if (!enabled(IfViewport))
|
| @@ -224,7 +224,7 @@ bool AutoplayExperimentHelper::meetsVisibilityRequirements() const
|
| if (m_lastVisibleRect.isEmpty())
|
| return false;
|
|
|
| - LayoutObject* layoutObject = m_element.layoutObject();
|
| + LayoutObject* layoutObject = element().layoutObject();
|
| if (!layoutObject)
|
| return false;
|
|
|
| @@ -255,10 +255,10 @@ bool AutoplayExperimentHelper::maybeStartPlaying()
|
| }
|
|
|
| // Start playing!
|
| - prepareToPlay(m_element.shouldAutoplay()
|
| + prepareToPlay(element().shouldAutoplay()
|
| ? GesturelessPlaybackStartedByAutoplayFlagAfterScroll
|
| : GesturelessPlaybackStartedByPlayMethodAfterScroll);
|
| - m_element.playInternal();
|
| + element().playInternal();
|
|
|
| return true;
|
| }
|
| @@ -272,22 +272,20 @@ bool AutoplayExperimentHelper::isEligible() const
|
| // This is what prevents us from starting playback more than once.
|
| // Since this flag is never set to true once it's cleared, it will block
|
| // the autoplay experiment forever.
|
| - if (!m_element.isUserGestureRequiredForPlay())
|
| + if (!element().isUserGestureRequiredForPlay())
|
| return false;
|
|
|
| // Make sure that this is an element of the right type.
|
| - if (!enabled(ForVideo)
|
| - && isHTMLVideoElement(m_element))
|
| + if (!enabled(ForVideo) && isHTMLVideoElement(element()))
|
| return false;
|
|
|
| - if (!enabled(ForAudio)
|
| - && isHTMLAudioElement(m_element))
|
| + if (!enabled(ForAudio) && isHTMLAudioElement(element()))
|
| return false;
|
|
|
| // If nobody has requested playback, either by the autoplay attribute or
|
| // a play() call, then do nothing.
|
|
|
| - if (!m_playPending && !m_element.shouldAutoplay())
|
| + if (!m_playPending && !element().shouldAutoplay())
|
| return false;
|
|
|
| // Note that the viewport test always returns false on desktop, which is
|
| @@ -298,7 +296,7 @@ bool AutoplayExperimentHelper::isEligible() const
|
|
|
| // If we require muted media and this is muted, then it is eligible.
|
| if (enabled(IfMuted))
|
| - return m_element.muted();
|
| + return element().muted();
|
|
|
| // Element is eligible for gesture override, maybe muted.
|
| return true;
|
| @@ -311,17 +309,17 @@ void AutoplayExperimentHelper::muteIfNeeded()
|
| // If we are actually changing the muted state, then this will call
|
| // mutedChanged(). If isEligible(), then mutedChanged() will try
|
| // to start playback, which we should not do here.
|
| - m_element.setMuted(true);
|
| + element().setMuted(true);
|
| }
|
| }
|
|
|
| void AutoplayExperimentHelper::prepareToPlay(AutoplayMetrics metric)
|
| {
|
| - m_element.recordAutoplayMetric(metric);
|
| + element().recordAutoplayMetric(metric);
|
|
|
| // This also causes !isEligible, so that we don't allow autoplay more than
|
| // once. Be sure to do this before muteIfNeeded().
|
| - m_element.removeUserGestureRequirement();
|
| + element().removeUserGestureRequirement();
|
|
|
| unregisterForPositionUpdatesIfNeeded();
|
| muteIfNeeded();
|
| @@ -329,14 +327,20 @@ void AutoplayExperimentHelper::prepareToPlay(AutoplayMetrics metric)
|
| // Record that this autoplayed without a user gesture. This is normally
|
| // set when we discover an autoplay attribute, but we include all cases
|
| // where playback started without a user gesture, e.g., play().
|
| - m_element.setInitialPlayWithoutUserGestures(true);
|
| + element().setInitialPlayWithoutUserGestures(true);
|
|
|
| // Do not actually start playback here.
|
| }
|
|
|
| Document& AutoplayExperimentHelper::document() const
|
| {
|
| - return m_element.document();
|
| + return element().document();
|
| +}
|
| +
|
| +HTMLMediaElement& AutoplayExperimentHelper::element() const
|
| +{
|
| + ASSERT(m_element);
|
| + return *m_element;
|
| }
|
|
|
| AutoplayExperimentHelper::Mode AutoplayExperimentHelper::fromString(const String& mode)
|
|
|