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

Unified Diff: third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp

Issue 2404743002: Web Audio: record autoplay status when an AudioContext is destroyed. (Closed)
Patch Set: fix Created 4 years, 2 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/webaudio/BaseAudioContext.cpp
diff --git a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
index cb83b9a35728164a9ca67af4e53409db1ed868a5..416e885939f4c814315d46b023cd8ece5b16c896 100644
--- a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
@@ -107,6 +107,7 @@ BaseAudioContext::BaseAudioContext(Document* document)
if (document->settings() &&
document->settings()->mediaPlaybackRequiresUserGesture() &&
document->frame() && document->frame()->isCrossOriginSubframe()) {
+ m_autoplayStatus = AutoplayStatus::AutoplayStatusFailed;
m_userGestureRequired = true;
}
@@ -144,6 +145,8 @@ BaseAudioContext::~BaseAudioContext() {
DCHECK(!m_finishedSourceHandlers.size());
DCHECK(!m_isResolvingResumePromises);
DCHECK(!m_resumeResolvers.size());
+
+ recordAutoplayStatus();
}
void BaseAudioContext::initialize() {
@@ -553,6 +556,15 @@ PeriodicWave* BaseAudioContext::periodicWave(int type) {
}
}
+void BaseAudioContext::maybeRecordStartAttempt() {
+ if (!m_userGestureRequired || !UserGestureIndicator::processingUserGesture())
+ return;
+
+ DCHECK(!m_autoplayStatus.has_value() ||
+ m_autoplayStatus != AutoplayStatus::AutoplayStatusSucceeded);
+ m_autoplayStatus = AutoplayStatus::AutoplayStatusFailedWithStart;
+}
+
String BaseAudioContext::state() const {
// These strings had better match the strings for AudioContextState in
// AudioContext.idl.
@@ -775,8 +787,12 @@ void BaseAudioContext::maybeUnlockUserGesture() {
if (!m_userGestureRequired || !UserGestureIndicator::processingUserGesture())
return;
+ DCHECK(!m_autoplayStatus.has_value() ||
+ m_autoplayStatus != AutoplayStatus::AutoplayStatusSucceeded);
+
UserGestureIndicator::utilizeUserGesture();
m_userGestureRequired = false;
+ m_autoplayStatus = AutoplayStatus::AutoplayStatusSucceeded;
}
bool BaseAudioContext::isAllowedToStart() const {
@@ -807,6 +823,18 @@ void BaseAudioContext::rejectPendingResolvers() {
rejectPendingDecodeAudioDataResolvers();
}
+void BaseAudioContext::recordAutoplayStatus() {
+ if (!m_autoplayStatus.has_value())
+ return;
+
+ DEFINE_STATIC_LOCAL(
+ EnumerationHistogram, autoplayHistogram,
+ ("WebAudio.Autoplay.CrossOrigin", AutoplayStatus::AutoplayStatusCount));
+ autoplayHistogram.count(m_autoplayStatus.value());
+
+ m_autoplayStatus.reset();
+}
+
const AtomicString& BaseAudioContext::interfaceName() const {
return EventTargetNames::AudioContext;
}

Powered by Google App Engine
This is Rietveld 408576698