Chromium Code Reviews| 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..69aefbf464652c6f8fe8c9901ddcf031cd6680ae 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,8 @@ BaseAudioContext::~BaseAudioContext() { |
| DCHECK(!m_finishedSourceHandlers.size()); |
| DCHECK(!m_isResolvingResumePromises); |
| DCHECK(!m_resumeResolvers.size()); |
| + |
| + recordAutoplayStatus(); |
|
haraken
2016/10/17 00:57:33
This is safe but in general it's not encouraged to
mlamouri (slow - plz ping)
2016/10/17 11:34:45
I can call this in "uninitialize" which I did firs
|
| } |
| void BaseAudioContext::initialize() { |
| @@ -562,6 +565,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 +796,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 +832,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; |
| } |