Title: [287186] trunk/Source/WebCore
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; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to