Index: third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp |
diff --git a/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp b/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp |
index 5c351102830b7deb4e4e82e7f49f8154c8f3d1c4..8c936f50d2e747dd554c18f81614491bbf226a39 100644 |
--- a/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp |
+++ b/third_party/WebKit/Source/core/html/AutoplayUmaHelper.cpp |
@@ -29,7 +29,6 @@ AutoplayUmaHelper* AutoplayUmaHelper::create(HTMLMediaElement* element) { |
AutoplayUmaHelper::AutoplayUmaHelper(HTMLMediaElement* element) |
: EventListener(CPPEventListenerType), |
ContextLifecycleObserver(nullptr), |
- m_source(AutoplaySource::NumberOfSources), |
m_element(element), |
m_mutedVideoPlayMethodVisibilityObserver(nullptr), |
m_mutedVideoAutoplayOffscreenStartTimeMS(0), |
@@ -46,38 +45,53 @@ bool AutoplayUmaHelper::operator==(const EventListener& other) const { |
void AutoplayUmaHelper::onAutoplayInitiated(AutoplaySource source) { |
DEFINE_STATIC_LOCAL(EnumerationHistogram, videoHistogram, |
("Media.Video.Autoplay", |
- static_cast<int>(AutoplaySource::NumberOfSources))); |
+ static_cast<int>(AutoplaySource::NumberOfUmaSources))); |
DEFINE_STATIC_LOCAL(EnumerationHistogram, mutedVideoHistogram, |
("Media.Video.Autoplay.Muted", |
- static_cast<int>(AutoplaySource::NumberOfSources))); |
+ static_cast<int>(AutoplaySource::NumberOfUmaSources))); |
DEFINE_STATIC_LOCAL(EnumerationHistogram, audioHistogram, |
("Media.Audio.Autoplay", |
- static_cast<int>(AutoplaySource::NumberOfSources))); |
+ static_cast<int>(AutoplaySource::NumberOfUmaSources))); |
DEFINE_STATIC_LOCAL( |
EnumerationHistogram, blockedMutedVideoHistogram, |
("Media.Video.Autoplay.Muted.Blocked", AutoplayBlockedReasonMax)); |
// Autoplay already initiated |
- // TODO(zqzhang): how about having autoplay attribute and calling `play()` in |
- // the script? |
- if (hasSource()) |
+ if (m_sources.count(source)) |
return; |
- m_source = source; |
+ m_sources.insert(source); |
// Record the source. |
if (m_element->isHTMLVideoElement()) { |
- videoHistogram.count(static_cast<int>(m_source)); |
+ videoHistogram.count(static_cast<int>(source)); |
if (m_element->muted()) |
- mutedVideoHistogram.count(static_cast<int>(m_source)); |
+ mutedVideoHistogram.count(static_cast<int>(source)); |
} else { |
- audioHistogram.count(static_cast<int>(m_source)); |
+ audioHistogram.count(static_cast<int>(source)); |
+ } |
+ |
+ // Record dual source. |
+ if (m_sources.size() == |
+ static_cast<size_t>(AutoplaySource::NumberOfSources)) { |
+ if (m_element->isHTMLVideoElement()) { |
+ videoHistogram.count(static_cast<int>(AutoplaySource::DualSource)); |
+ if (m_element->muted()) |
+ mutedVideoHistogram.count(static_cast<int>(AutoplaySource::DualSource)); |
+ } else { |
+ audioHistogram.count(static_cast<int>(AutoplaySource::DualSource)); |
+ } |
} |
// Record the child frame and top-level frame URLs for autoplay muted videos |
// by attribute. |
if (m_element->isHTMLVideoElement() && m_element->muted()) { |
- if (source == AutoplaySource::Attribute) { |
+ if (m_sources.size() == |
+ static_cast<size_t>(AutoplaySource::NumberOfSources)) { |
+ Platform::current()->recordRapporURL( |
+ "Media.Video.Autoplay.Muted.DualSource.Frame", |
+ m_element->document().url()); |
+ } else if (source == AutoplaySource::Attribute) { |
Platform::current()->recordRapporURL( |
"Media.Video.Autoplay.Muted.Attribute.Frame", |
m_element->document().url()); |
@@ -261,8 +275,8 @@ void AutoplayUmaHelper::handleContextDestroyed() { |
} |
void AutoplayUmaHelper::maybeStartRecordingMutedVideoPlayMethodBecomeVisible() { |
- if (m_source != AutoplaySource::Method || !m_element->isHTMLVideoElement() || |
- !m_element->muted()) |
+ if (!m_sources.count(AutoplaySource::Method) || |
+ !m_element->isHTMLVideoElement() || !m_element->muted()) |
return; |
m_mutedVideoPlayMethodVisibilityObserver = new ElementVisibilityObserver( |
@@ -289,7 +303,8 @@ void AutoplayUmaHelper::maybeStopRecordingMutedVideoPlayMethodBecomeVisible( |
} |
void AutoplayUmaHelper::maybeStartRecordingMutedVideoOffscreenDuration() { |
- if (!m_element->isHTMLVideoElement() || !m_element->muted()) |
+ if (!m_element->isHTMLVideoElement() || !m_element->muted() || |
+ !m_sources.count(AutoplaySource::Method)) |
return; |
// Start recording muted video playing offscreen duration. |
@@ -322,13 +337,14 @@ void AutoplayUmaHelper::maybeStopRecordingMutedVideoOffscreenDuration() { |
std::min<int64_t>(m_mutedVideoAutoplayOffscreenDurationMS, |
std::numeric_limits<int32_t>::max())); |
- if (m_source == AutoplaySource::Method) { |
- DEFINE_STATIC_LOCAL( |
- CustomCountHistogram, durationHistogram, |
- ("Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration", 1, |
- maxOffscreenDurationUmaMS, offscreenDurationUmaBucketCount)); |
- durationHistogram.count(boundedTime); |
- } |
+ DCHECK(m_sources.count(AutoplaySource::Method)); |
+ |
+ DEFINE_STATIC_LOCAL( |
+ CustomCountHistogram, durationHistogram, |
+ ("Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration", 1, |
+ maxOffscreenDurationUmaMS, offscreenDurationUmaBucketCount)); |
+ durationHistogram.count(boundedTime); |
+ |
m_mutedVideoOffscreenDurationVisibilityObserver->stop(); |
m_mutedVideoOffscreenDurationVisibilityObserver = nullptr; |
m_mutedVideoAutoplayOffscreenDurationMS = 0; |
@@ -363,7 +379,7 @@ bool AutoplayUmaHelper::shouldListenToContextDestroyed() const { |
bool AutoplayUmaHelper::shouldRecordUserPausedAutoplayingCrossOriginVideo() |
const { |
return m_element->isInCrossOriginFrame() && m_element->isHTMLVideoElement() && |
- m_source != AutoplaySource::NumberOfSources && |
+ !m_sources.empty() && |
!m_recordedCrossOriginAutoplayResults.count( |
CrossOriginAutoplayResult::UserPaused); |
} |