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

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: remove empty line 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..77fd418146e86f6c285da01900a4411e82ff1ea9 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();
Raymond Toy 2016/10/10 17:05:10 I think if the user closes a tab, everything goes
mlamouri (slow - plz ping) 2016/10/10 18:44:40 I guess if the object is marked as GCFinalized, it
}
void BaseAudioContext::initialize() {
@@ -196,6 +199,7 @@ void BaseAudioContext::contextDestroyed() {
}
bool BaseAudioContext::hasPendingActivity() const {
+ LOG(INFO) << "hasPendingActivity() => " << !m_isCleared;
Raymond Toy 2016/10/10 17:05:10 Do you really want this log? Just asking.
mlamouri (slow - plz ping) 2016/10/10 18:44:40 No :)
// There's no pending activity if the audio context has been cleared.
return !m_isCleared;
}
@@ -553,6 +557,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 +788,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 +824,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