Index: third_party/WebKit/Source/core/html/HTMLMediaElement.h |
diff --git a/third_party/WebKit/Source/core/html/HTMLMediaElement.h b/third_party/WebKit/Source/core/html/HTMLMediaElement.h |
index 0b731fbbd0c431616914cc58c7b831ad769ffcd3..68f658099d0433b29db2d80f105097dd043135eb 100644 |
--- a/third_party/WebKit/Source/core/html/HTMLMediaElement.h |
+++ b/third_party/WebKit/Source/core/html/HTMLMediaElement.h |
@@ -132,8 +132,8 @@ public: |
TimeRanges* seekable() const; |
bool ended() const; |
bool autoplay() const; |
- enum class RecordMetricsBehavior { DoNotRecord, DoRecord }; |
- bool shouldAutoplay(const RecordMetricsBehavior = RecordMetricsBehavior::DoNotRecord); |
+ using RecordMetricsBehavior = AutoplayExperimentHelper::Client::RecordMetricsBehavior; |
+ bool shouldAutoplay(const AutoplayExperimentHelper::Client::RecordMetricsBehavior = RecordMetricsBehavior::DoNotRecord); |
bool loop() const; |
void setLoop(bool); |
void play(); |
@@ -270,6 +270,8 @@ protected: |
DisplayMode displayMode() const { return m_displayMode; } |
virtual void setDisplayMode(DisplayMode mode) { m_displayMode = mode; } |
+ void recordAutoplayMetric(AutoplayMetrics); |
+ |
private: |
void resetMediaPlayerAndMediaSource(); |
@@ -375,14 +377,6 @@ private: |
// This does not change the buffering strategy. |
void pauseInternal(); |
- // If we are about to enter a paused state, call this to record |
- // autoplay metrics. If we were already in a stopped state, then |
- // this does nothing. |
- void recordMetricsIfPausing(); |
- // Could stopping at this point be considered a bailout of playback? |
- // (as in, "The user really didn't want to play this"). |
- bool isBailout() const; |
- void autoplayMediaEncountered(); |
void allowVideoRendering(); |
void updateVolume(); |
@@ -414,8 +408,6 @@ private: |
void setAllowHiddenVolumeControls(bool); |
- void recordAutoplayMetric(AutoplayMetrics); |
- |
WebMediaPlayer::CORSMode corsMode() const; |
// Returns the "direction of playback" value as specified in the HTML5 spec. |
@@ -435,8 +427,11 @@ private: |
// Return true if and only if we require a user gesture before letting |
// the media play. |
bool isUserGestureRequiredForPlay() const; |
+ |
+ // If the user gesture is required, then this will remove it. Note that |
+ // one should not generally call this method directly; use the one on |
+ // m_helper and give it a reason. |
void removeUserGestureRequirement(); |
- void setInitialPlayWithoutUserGestures(bool); |
void setNetworkState(NetworkState); |
@@ -544,8 +539,6 @@ private: |
bool m_remoteRoutesAvailable : 1; |
bool m_playingRemotely : 1; |
bool m_isFinalizing : 1; |
- bool m_initialPlayWithoutUserGesture : 1; |
- bool m_autoplayMediaCounted : 1; |
// Whether this element is in overlay fullscreen mode. |
bool m_inOverlayFullscreenVideo : 1; |
@@ -615,7 +608,41 @@ private: |
friend class AutoplayExperimentHelper; |
friend class MediaControlsTest; |
- AutoplayExperimentHelper m_autoplayHelper; |
+ class AutoplayHelperClientImpl : public AutoplayExperimentHelper::Client { |
+ public: |
+ AutoplayHelperClientImpl(HTMLMediaElement* element) : m_element(element) {} |
+ virtual ~AutoplayHelperClientImpl(); |
+ |
+ double currentTime() const override { return m_element->currentTime(); } |
+ double duration() const override { return m_element->duration(); } |
+ bool paused() const override { return m_element->paused(); } |
+ bool muted() const override { return m_element->muted(); } |
+ void setMuted(bool muted) override { m_element->setMuted(muted); } |
+ void playInternal() override { m_element->playInternal(); } |
+ bool isUserGestureRequiredForPlay() const override { return m_element->isUserGestureRequiredForPlay(); } |
+ void removeUserGestureRequirement() override { m_element->removeUserGestureRequirement(); } |
+ void recordAutoplayMetric(AutoplayMetrics metric) override { m_element->recordAutoplayMetric(metric); } |
+ bool shouldAutoplay(RecordMetricsBehavior behavior) override { return m_element->shouldAutoplay(behavior); } |
+ bool isHTMLVideoElement() const override { return m_element->isHTMLVideoElement(); } |
+ bool isHTMLAudioElement() const override { return m_element->isHTMLAudioElement(); } |
+ |
+ // Document |
+ bool isLegacyViewportType() override; |
+ PageVisibilityState pageVisibilityState() const override; |
+ String autoplayExperimentMode() const override; |
+ |
+ // LayoutObject |
+ void setRequestPositionUpdates(bool) override; |
+ IntRect absoluteBoundingBoxRect() const override; |
+ |
+ private: |
+ // AutoplayHelperClientImpl is destroyed by HTMLMediaElement, and is |
+ // not itself GC'd. |
+ RawPtr<HTMLMediaElement> m_element; |
philipj_slow
2016/02/02 08:08:15
A plain RawPtr<T>, as opposed to an Oilpan transit
|
+ }; |
+ |
+ OwnPtr<AutoplayExperimentHelper::Client> m_autoplayHelperClient; |
+ OwnPtr<AutoplayExperimentHelper> m_autoplayHelper; |
static URLRegistry* s_mediaStreamRegistry; |
}; |