From fb3387d7969be63e771c3a1b018e1ee9674e2b2b Mon Sep 17 00:00:00 2001 From: Paul Adenot Date: Mon, 19 Oct 2020 08:45:04 +0000 Subject: [PATCH] Bug 1346880 - Always initialize an AudioChannelAgent when initializing an AudioContext. r=alwu Differential Revision: https://phabricator.services.mozilla.com/D92644 --- dom/media/webaudio/AudioContext.cpp | 1 + dom/media/webaudio/AudioDestinationNode.cpp | 12 ++++++++++++ dom/media/webaudio/AudioDestinationNode.h | 2 ++ 3 files changed, 15 insertions(+) diff --git a/dom/media/webaudio/AudioContext.cpp b/dom/media/webaudio/AudioContext.cpp index c2991598ab26..df6fa6687009 100644 --- a/dom/media/webaudio/AudioContext.cpp +++ b/dom/media/webaudio/AudioContext.cpp @@ -176,6 +176,7 @@ AudioContext::AudioContext(nsPIDOMWindowInner* aWindow, bool aIsOffline, const bool allowedToStart = AutoplayPolicy::IsAllowedToPlay(*this); mDestination = new AudioDestinationNode(this, aIsOffline, allowedToStart, aNumberOfChannels, aLength); + mDestination->Init(); // If an AudioContext is not allowed to start, we would postpone its state // transition from `suspended` to `running` until sites explicitly call // AudioContext.resume() or AudioScheduledSourceNode.start(). diff --git a/dom/media/webaudio/AudioDestinationNode.cpp b/dom/media/webaudio/AudioDestinationNode.cpp index 04da4a09a7c8..17cdeb86c629 100644 --- a/dom/media/webaudio/AudioDestinationNode.cpp +++ b/dom/media/webaudio/AudioDestinationNode.cpp @@ -321,6 +321,18 @@ AudioDestinationNode::AudioDestinationNode(AudioContext* aContext, } } +void AudioDestinationNode::Init() { + if (!mIsOffline) { + CreateAudioChannelAgent(); + nsresult rv = mAudioChannelAgent->NotifyStartedPlaying( + AudioChannelService::AudibleState::eNotAudible); + if (NS_WARN_IF(NS_FAILED(rv))) { + return; + } + mAudioChannelAgent->PullInitialUpdate(); + } +} + AudioDestinationNode::~AudioDestinationNode() { ReleaseAudioWakeLockIfExists(); } diff --git a/dom/media/webaudio/AudioDestinationNode.h b/dom/media/webaudio/AudioDestinationNode.h index 9066b1145cfb..f2cdc70e1984 100644 --- a/dom/media/webaudio/AudioDestinationNode.h +++ b/dom/media/webaudio/AudioDestinationNode.h @@ -42,6 +42,8 @@ class AudioDestinationNode final : public AudioNode, uint32_t MaxChannelCount() const; void SetChannelCount(uint32_t aChannelCount, ErrorResult& aRv) override; + void Init(); + // Returns the track or null after unlink. AudioNodeTrack* Track();