- Revision
- 287186
- Author
- [email protected]
- Date
- 2021-12-17 07:51:40 -0800 (Fri, 17 Dec 2021)
Log Message
ActiveDOMObject::suspendIfNeeded() should not be called within constructors
https://bugs.webkit.org/show_bug.cgi?id=233945
Reviewed by Chris Dumez.
Step 4 where we convert the only remaining call to suspendIfNeeded() in a constructor, AudioScheduledSourceNode,
to be in create() methods, in this case AudioScheduledSourceNode subclasses. This was the final step, all 145
calls to ActiveDOMObject::suspendIfNeeded() have been audited to not be made within a constructor.
* Modules/webaudio/AudioBufferSourceNode.cpp:
(WebCore::AudioBufferSourceNode::create):
* Modules/webaudio/AudioBufferSourceNode.h:
* Modules/webaudio/AudioScheduledSourceNode.cpp:
(WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
* Modules/webaudio/AudioScheduledSourceNode.h:
* Modules/webaudio/ConstantSourceNode.cpp:
(WebCore::ConstantSourceNode::create):
* Modules/webaudio/OscillatorNode.cpp:
(WebCore::OscillatorNode::create):
* Modules/webaudio/OscillatorNode.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (287185 => 287186)
--- trunk/Source/WebCore/ChangeLog 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/ChangeLog 2021-12-17 15:51:40 UTC (rev 287186)
@@ -1,3 +1,26 @@
+2021-12-17 Antoine Quint <[email protected]>
+
+ ActiveDOMObject::suspendIfNeeded() should not be called within constructors
+ https://bugs.webkit.org/show_bug.cgi?id=233945
+
+ Reviewed by Chris Dumez.
+
+ Step 4 where we convert the only remaining call to suspendIfNeeded() in a constructor, AudioScheduledSourceNode,
+ to be in create() methods, in this case AudioScheduledSourceNode subclasses. This was the final step, all 145
+ calls to ActiveDOMObject::suspendIfNeeded() have been audited to not be made within a constructor.
+
+ * Modules/webaudio/AudioBufferSourceNode.cpp:
+ (WebCore::AudioBufferSourceNode::create):
+ * Modules/webaudio/AudioBufferSourceNode.h:
+ * Modules/webaudio/AudioScheduledSourceNode.cpp:
+ (WebCore::AudioScheduledSourceNode::AudioScheduledSourceNode):
+ * Modules/webaudio/AudioScheduledSourceNode.h:
+ * Modules/webaudio/ConstantSourceNode.cpp:
+ (WebCore::ConstantSourceNode::create):
+ * Modules/webaudio/OscillatorNode.cpp:
+ (WebCore::OscillatorNode::create):
+ * Modules/webaudio/OscillatorNode.h:
+
2021-12-17 Alan Bujtas <[email protected]>
[LFC][IFC] Simple RTL content may need visual reordering
Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.cpp 2021-12-17 15:51:40 UTC (rev 287186)
@@ -65,6 +65,7 @@
ExceptionOr<Ref<AudioBufferSourceNode>> AudioBufferSourceNode::create(BaseAudioContext& context, AudioBufferSourceOptions&& options)
{
auto node = adoptRef(*new AudioBufferSourceNode(context));
+ node->suspendIfNeeded();
node->setBufferForBindings(WTFMove(options.buffer));
node->detune().setValue(options.detune);
Modified: trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/AudioBufferSourceNode.h 2021-12-17 15:51:40 UTC (rev 287186)
@@ -82,10 +82,9 @@
const char* activeDOMObjectName() const override { return "AudioBufferSourceNode"; }
-protected:
- explicit AudioBufferSourceNode(BaseAudioContext&);
+private:
+ AudioBufferSourceNode(BaseAudioContext&);
-private:
double tailTime() const final { return 0; }
double latencyTime() const final { return 0; }
Modified: trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.cpp 2021-12-17 15:51:40 UTC (rev 287186)
@@ -51,7 +51,6 @@
: AudioNode(context, type)
, ActiveDOMObject(context.scriptExecutionContext())
{
- suspendIfNeeded();
}
void AudioScheduledSourceNode::updateSchedulingInfo(size_t quantumFrameSize, AudioBus& outputBus, size_t& quantumFrameOffset, size_t& nonSilentFramesToProcess, double& startFrameOffset)
Modified: trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/AudioScheduledSourceNode.h 2021-12-17 15:51:40 UTC (rev 287186)
@@ -52,8 +52,6 @@
PLAYING_STATE = 2,
FINISHED_STATE = 3
};
-
- AudioScheduledSourceNode(BaseAudioContext&, NodeType);
ExceptionOr<void> startLater(double when);
ExceptionOr<void> stopLater(double when);
@@ -63,6 +61,8 @@
bool hasFinished() const { return m_playbackState == FINISHED_STATE; }
protected:
+ AudioScheduledSourceNode(BaseAudioContext&, NodeType);
+
// Get frame information for the current time quantum.
// We handle the transition into PLAYING_STATE and FINISHED_STATE here,
// zeroing out portions of the outputBus which are outside the range of startFrame and endFrame.
Modified: trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/ConstantSourceNode.cpp 2021-12-17 15:51:40 UTC (rev 287186)
@@ -41,7 +41,9 @@
ExceptionOr<Ref<ConstantSourceNode>> ConstantSourceNode::create(BaseAudioContext& context, const ConstantSourceOptions& options)
{
- return adoptRef(*new ConstantSourceNode(context, options.offset));
+ auto node = adoptRef(*new ConstantSourceNode(context, options.offset));
+ node->suspendIfNeeded();
+ return node;
}
ConstantSourceNode::ConstantSourceNode(BaseAudioContext& context, float offset)
Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.cpp 2021-12-17 15:51:40 UTC (rev 287186)
@@ -64,7 +64,8 @@
return Exception { InvalidStateError, "Must provide periodicWave when using custom type."_s };
auto oscillator = adoptRef(*new OscillatorNode(context, options));
-
+ oscillator->suspendIfNeeded();
+
auto result = oscillator->handleAudioNodeOptions(options, { 2, ChannelCountMode::Max, ChannelInterpretation::Speakers });
if (result.hasException())
return result.releaseException();
Modified: trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h (287185 => 287186)
--- trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h 2021-12-17 15:41:00 UTC (rev 287185)
+++ trunk/Source/WebCore/Modules/webaudio/OscillatorNode.h 2021-12-17 15:51:40 UTC (rev 287186)
@@ -52,10 +52,9 @@
void setPeriodicWave(PeriodicWave&);
-protected:
- explicit OscillatorNode(BaseAudioContext&, const OscillatorOptions& = { });
+private:
+ OscillatorNode(BaseAudioContext&, const OscillatorOptions& = { });
-private:
void process(size_t framesToProcess) final;
double tailTime() const final { return 0; }