| 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;
|
| }
|
|
|