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

Unified Diff: third_party/WebKit/Source/core/html/AutoplayExperimentHelper.h

Issue 1470153004: Autoplay experiment metric fixes and additions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cl feedback Created 5 years 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/core/html/AutoplayExperimentHelper.h
diff --git a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.h b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.h
index a35406017692312b1c2aab08fc8c726e0ca14326..245d21e6e035cbf651c1adb443a46d83df469984 100644
--- a/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.h
+++ b/third_party/WebKit/Source/core/html/AutoplayExperimentHelper.h
@@ -62,6 +62,32 @@ enum AutoplayMetrics {
AnyPlaybackPaused = 12,
// Some playback, whether user initiated or not, bailed out early.
AnyPlaybackBailout = 13,
+ // Some playback, whether user initiated or not, played to completion.
+ AnyPlaybackComplete = 14,
+
+ // Number of audio elements detected that reach the resource fetch algorithm.
+ AnyAudioElement = 15,
+ // Numer of video elements detected that reach the resource fetch algorithm.
+ AnyVideoElement = 16,
+
+ // User gesture was bypassed, and playback started, and media played to
+ // completion without a user-initiated pause.
+ AutoplayComplete = 17,
+
+ // Autoplay started after the gesture requirement was removed by a
+ // user gesture load().
+ GesturelessPlaybackEnabledByLoad = 18,
+
+ // Gestureless playback started after the gesture requirement was removed
+ // because src is media stream.
+ GesturelessPlaybackEnabledByStream = 19,
+
+ // Gestureless playback was started, but it is unknown why a user gesture
+ // was not required. This includes the case where none is ever required.
+ GesturelessPlaybackUnknownReason = 20,
+
+ // Gestureless playback was enabled by a user gesture play() call.
+ GesturelessPlaybackEnabledByPlayMethod = 21,
// This enum value must be last.
NumberOfAutoplayMetrics,
@@ -76,9 +102,16 @@ public:
void becameReadyToPlay();
void playMethodCalled();
void pauseMethodCalled();
+ void loadMethodCalled();
void mutedChanged();
void positionChanged(const IntRect&);
void updatePositionNotificationRegistration();
+ void recordSandboxFailure();
+ void loadingStarted();
+ void playbackStarted();
+ void playbackEnded();
+ void initialPlayWithUserGesture();
+ void setGestureRemovalReason(AutoplayMetrics);
void triggerAutoplayViewportCheckForTesting();
@@ -137,7 +170,17 @@ private:
// Configure internal state to record that the autoplay experiment is
// going to start playback. This doesn't actually start playback, since
// there are several different cases.
- void prepareToPlay(AutoplayMetrics);
+ void prepareToAutoplay(AutoplayMetrics);
+
+ // Record that an attempt to play without a user gesture has happened.
+ // If there is not a user gesture requirement, then record why there
+ // is no such requirement, with the expectation that playback will start.
+ // This method takes no action after it is called once.
+ void autoplayMediaEncountered();
+
+ // If we are about to enter a paused state, call this to record
+ // autoplay metrics.
+ void recordMetricsBeforePause();
// Process a timer for checking visibility.
void viewportTimerFired(Timer<AutoplayExperimentHelper>*);
@@ -147,6 +190,8 @@ private:
HTMLMediaElement& element() const;
+ bool isUserGestureRequiredForPlay() const;
+
inline bool enabled(Mode mode) const
{
return ((int)m_mode) & ((int)mode);
@@ -154,6 +199,12 @@ private:
Mode fromString(const String& mode);
+ void recordAutoplayMetric(AutoplayMetrics);
+
+ // 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;
+
RawPtrWillBeMember<HTMLMediaElement> m_element;
Mode m_mode;
@@ -168,6 +219,15 @@ private:
// According to our last position update, are we in the viewport?
bool m_wasInViewport : 1;
+ // Have we counted this autoplay media in the metrics yet?
+ bool m_autoplayMediaCounted : 1;
+
+ // Did the first playback of the media occur without a user gesture?
+ bool m_initialPlayWithoutUserGesture : 1;
+
+ // Did we record that this media element exists in the metrics yet?
+ bool m_recordedElement : 1;
+
// According to our last position update, where was our element?
IntRect m_lastLocation;
IntRect m_lastVisibleRect;
@@ -176,6 +236,9 @@ private:
double m_lastLocationUpdateTime;
Timer<AutoplayExperimentHelper> m_viewportTimer;
+
+ // Reason that autoplay would be allowed to proceed without a user gesture.
+ AutoplayMetrics m_autoplayDeferredMetric;
};
inline AutoplayExperimentHelper::Mode& operator|=(AutoplayExperimentHelper::Mode& a,

Powered by Google App Engine
This is Rietveld 408576698