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

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: move recording 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 a83ad8a0042c242a50b3ac384087e1e05eb993c2..020e539047db244fcc9878bc8f9e5da1fe0beefa 100644
--- a/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/BaseAudioContext.cpp
@@ -108,6 +108,7 @@ BaseAudioContext::BaseAudioContext(Document* document)
if (document->settings() &&
document->settings()->mediaPlaybackRequiresUserGesture() &&
document->frame() && document->frame()->isCrossOriginSubframe()) {
+ m_autoplayStatus = AutoplayStatus::AutoplayStatusFailed;
m_userGestureRequired = true;
}
@@ -145,6 +146,7 @@ BaseAudioContext::~BaseAudioContext() {
DCHECK(!m_finishedSourceHandlers.size());
DCHECK(!m_isResolvingResumePromises);
DCHECK(!m_resumeResolvers.size());
+ DCHECK(!m_autoplayStatus.has_value());
}
void BaseAudioContext::initialize() {
@@ -189,6 +191,8 @@ void BaseAudioContext::uninitialize() {
DCHECK(m_listener);
m_listener->waitForHRTFDatabaseLoaderThreadCompletion();
+ recordAutoplayStatus();
+
clear();
}
@@ -562,6 +566,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.
@@ -784,8 +797,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 {
@@ -816,6 +833,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