Title: [288759] trunk/Source
Revision
288759
Author
[email protected]
Date
2022-01-28 12:56:26 -0800 (Fri, 28 Jan 2022)

Log Message

ASSERTION FAILED: m_processCallback in WebCore::AudioWorkletProcessor::process
https://bugs.webkit.org/show_bug.cgi?id=235529

Reviewed by Geoffrey Garen and Darin Adler.

Source/WebCore:

m_processCallback stores the JS wrapper for the AudioWorkletProcessor and the crash
was due to that JS wrapper getting garbage collected while the AudioWorkletNode
was still rendering. The JS wrapper for AudioWorkletProcessor is actually created
by AudioWorkletGlobalScope::createProcessor() and the _javascript_ does not usually
keep a reference to it.

To address the issue, I added a visitor to the AudioWorkletGlobalScope wrapper
which visits the processors that it created and that still have an associated
AudioWorkletNode owner.

* Modules/webaudio/AudioWorkletGlobalScope.cpp:
(WebCore::AudioWorkletGlobalScope::createProcessor):
(WebCore::AudioWorkletGlobalScope::processorIsNoLongerNeeded):
(WebCore::AudioWorkletGlobalScope::visitProcessors):
* Modules/webaudio/AudioWorkletGlobalScope.h:
* Modules/webaudio/AudioWorkletGlobalScope.idl:
* Modules/webaudio/AudioWorkletNode.cpp:
(WebCore::AudioWorkletNode::~AudioWorkletNode):
* Modules/webaudio/AudioWorkletProcessor.cpp:
(WebCore::AudioWorkletProcessor::create):
(WebCore::AudioWorkletProcessor::AudioWorkletProcessor):
(WebCore::AudioWorkletProcessor::process):
(WebCore::AudioWorkletProcessor::setWrapper):
(WebCore::AudioWorkletProcessor::setProcessCallback): Deleted.
* Modules/webaudio/AudioWorkletProcessor.h:
(WebCore::AudioWorkletProcessor::wrapper):
(WebCore::AudioWorkletProcessor::processCallbackWrapper): Deleted.
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/JSAudioWorkletProcessorCustom.cpp:
(WebCore::JSAudioWorkletProcessor::visitAdditionalChildren):

Source/WTF:

Add template parameter to WeakHashSet to disable threading assertions. This is useful
when the call site is using locking.

* wtf/WeakHashSet.h:
* wtf/WeakPtr.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (288758 => 288759)


--- trunk/Source/WTF/ChangeLog	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WTF/ChangeLog	2022-01-28 20:56:26 UTC (rev 288759)
@@ -1,3 +1,16 @@
+2022-01-28  Chris Dumez  <[email protected]>
+
+        ASSERTION FAILED: m_processCallback in WebCore::AudioWorkletProcessor::process
+        https://bugs.webkit.org/show_bug.cgi?id=235529
+
+        Reviewed by Geoffrey Garen and Darin Adler.
+
+        Add template parameter to WeakHashSet to disable threading assertions. This is useful
+        when the call site is using locking.
+
+        * wtf/WeakHashSet.h:
+        * wtf/WeakPtr.h:
+
 2022-01-28  Tim Nguyen  <[email protected]>
 
         Enable inert attribute feature flag

Modified: trunk/Source/WTF/wtf/WeakHashSet.h (288758 => 288759)


--- trunk/Source/WTF/wtf/WeakHashSet.h	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WTF/wtf/WeakHashSet.h	2022-01-28 20:56:26 UTC (rev 288759)
@@ -31,7 +31,7 @@
 
 namespace WTF {
 
-template<typename T, typename Counter = EmptyCounter>
+template<typename T, typename Counter = EmptyCounter, EnableWeakPtrThreadingAssertions assertionsPolicy = EnableWeakPtrThreadingAssertions::Yes>
 class WeakHashSet final {
     WTF_MAKE_FAST_ALLOCATED;
 public:
@@ -83,7 +83,7 @@
         }
 
     private:
-        template <typename, typename> friend class WeakHashSet;
+        template <typename, typename, EnableWeakPtrThreadingAssertions> friend class WeakHashSet;
 
         typename WeakPtrImplSet::const_iterator m_position;
         typename WeakPtrImplSet::const_iterator m_endPosition;
@@ -98,7 +98,7 @@
     template <typename U>
     AddResult add(const U& value)
     {
-        return m_set.add(*static_cast<const T&>(value).weakPtrFactory().template createWeakPtr<T>(const_cast<U&>(value)).m_impl);
+        return m_set.add(*static_cast<const T&>(value).weakPtrFactory().template createWeakPtr<T>(const_cast<U&>(value), assertionsPolicy).m_impl);
     }
 
     template <typename U>

Modified: trunk/Source/WTF/wtf/WeakPtr.h (288758 => 288759)


--- trunk/Source/WTF/wtf/WeakPtr.h	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WTF/wtf/WeakPtr.h	2022-01-28 20:56:26 UTC (rev 288759)
@@ -33,9 +33,6 @@
 
 namespace WTF {
 
-template<typename, typename> class WeakHashSet;
-template<typename, typename> class WeakPtrFactory;
-
 struct EmptyCounter {
     static void increment() { }
     static void decrement() { }
@@ -42,7 +39,10 @@
 };
 
 enum class EnableWeakPtrThreadingAssertions : bool { No, Yes };
+template<typename, typename> class WeakPtrFactory;
 
+template<typename, typename, EnableWeakPtrThreadingAssertions> class WeakHashSet;
+
 template<typename Counter = EmptyCounter> class WeakPtrImpl : public ThreadSafeRefCounted<WeakPtrImpl<Counter>> {
     WTF_MAKE_NONCOPYABLE(WeakPtrImpl);
     WTF_MAKE_FAST_ALLOCATED;
@@ -159,7 +159,7 @@
 
 private:
     template<typename, typename, typename> friend class WeakHashMap;
-    template<typename, typename> friend class WeakHashSet;
+    template<typename, typename, EnableWeakPtrThreadingAssertions> friend class WeakHashSet;
     template<typename, typename> friend class WeakPtr;
     template<typename, typename> friend class WeakPtrFactory;
 
@@ -238,7 +238,7 @@
 #endif
 
 private:
-    template<typename, typename> friend class WeakHashSet;
+    template<typename, typename, EnableWeakPtrThreadingAssertions> friend class WeakHashSet;
     template<typename, typename, typename> friend class WeakHashMap;
     template<typename, typename> friend class WeakPtr;
 

Modified: trunk/Source/WebCore/ChangeLog (288758 => 288759)


--- trunk/Source/WebCore/ChangeLog	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/ChangeLog	2022-01-28 20:56:26 UTC (rev 288759)
@@ -1,3 +1,42 @@
+2022-01-28  Chris Dumez  <[email protected]>
+
+        ASSERTION FAILED: m_processCallback in WebCore::AudioWorkletProcessor::process
+        https://bugs.webkit.org/show_bug.cgi?id=235529
+
+        Reviewed by Geoffrey Garen and Darin Adler.
+
+        m_processCallback stores the JS wrapper for the AudioWorkletProcessor and the crash
+        was due to that JS wrapper getting garbage collected while the AudioWorkletNode
+        was still rendering. The JS wrapper for AudioWorkletProcessor is actually created
+        by AudioWorkletGlobalScope::createProcessor() and the _javascript_ does not usually
+        keep a reference to it.
+
+        To address the issue, I added a visitor to the AudioWorkletGlobalScope wrapper
+        which visits the processors that it created and that still have an associated
+        AudioWorkletNode owner.
+
+        * Modules/webaudio/AudioWorkletGlobalScope.cpp:
+        (WebCore::AudioWorkletGlobalScope::createProcessor):
+        (WebCore::AudioWorkletGlobalScope::processorIsNoLongerNeeded):
+        (WebCore::AudioWorkletGlobalScope::visitProcessors):
+        * Modules/webaudio/AudioWorkletGlobalScope.h:
+        * Modules/webaudio/AudioWorkletGlobalScope.idl:
+        * Modules/webaudio/AudioWorkletNode.cpp:
+        (WebCore::AudioWorkletNode::~AudioWorkletNode):
+        * Modules/webaudio/AudioWorkletProcessor.cpp:
+        (WebCore::AudioWorkletProcessor::create):
+        (WebCore::AudioWorkletProcessor::AudioWorkletProcessor):
+        (WebCore::AudioWorkletProcessor::process):
+        (WebCore::AudioWorkletProcessor::setWrapper):
+        (WebCore::AudioWorkletProcessor::setProcessCallback): Deleted.
+        * Modules/webaudio/AudioWorkletProcessor.h:
+        (WebCore::AudioWorkletProcessor::wrapper):
+        (WebCore::AudioWorkletProcessor::processCallbackWrapper): Deleted.
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * bindings/js/JSAudioWorkletProcessorCustom.cpp:
+        (WebCore::JSAudioWorkletProcessor::visitAdditionalChildren):
+
 2022-01-28  Alexey Shvayka  <[email protected]>
 
         JSEventListener::replaceJSFunctionForAttributeListener() should not replace m_wrapper unconditionally

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.cpp	2022-01-28 20:56:26 UTC (rev 288759)
@@ -154,7 +154,10 @@
     if (!jsProcessor)
         return nullptr;
 
-    jsProcessor->wrapped().setProcessCallback(jsProcessor);
+    {
+        Locker locker { m_processorsLock };
+        m_processors.add(jsProcessor->wrapped());
+    }
 
     return &jsProcessor->wrapped();
 }
@@ -199,6 +202,20 @@
     }
 }
 
+void AudioWorkletGlobalScope::processorIsNoLongerNeeded(AudioWorkletProcessor& processor)
+{
+    Locker locker { m_processorsLock };
+    m_processors.remove(processor);
+}
+
+void AudioWorkletGlobalScope::visitProcessors(JSC::AbstractSlotVisitor& visitor)
+{
+    Locker locker { m_processorsLock };
+    m_processors.forEach([&](auto& processor) {
+        visitor.addOpaqueRoot(&processor);
+    });
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.h (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.h	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.h	2022-01-28 20:56:26 UTC (rev 288759)
@@ -32,6 +32,7 @@
 #include "AudioWorkletThread.h"
 #include "MessagePort.h"
 #include "WorkletGlobalScope.h"
+#include <wtf/WeakHashSet.h>
 
 namespace JSC {
 class VM;
@@ -54,6 +55,8 @@
 
     ExceptionOr<void> registerProcessor(String&& name, Ref<JSAudioWorkletProcessorConstructor>&&);
     RefPtr<AudioWorkletProcessor> createProcessor(const String& name, TransferredMessagePort, Ref<SerializedScriptValue>&& options);
+    void processorIsNoLongerNeeded(AudioWorkletProcessor&);
+    void visitProcessors(JSC::AbstractSlotVisitor&);
 
     size_t currentFrame() const { return m_currentFrame; }
 
@@ -79,6 +82,8 @@
     size_t m_currentFrame { 0 };
     const float m_sampleRate;
     HashMap<String, RefPtr<JSAudioWorkletProcessorConstructor>> m_processorConstructorMap;
+    Lock m_processorsLock;
+    WeakHashSet<AudioWorkletProcessor, WTF::EmptyCounter, EnableWeakPtrThreadingAssertions::No> m_processors WTF_GUARDED_BY_LOCK(m_processorsLock);
     std::unique_ptr<AudioWorkletProcessorConstructionData> m_pendingProcessorConstructionData;
     std::optional<JSC::JSLockHolder> m_lockDuringRendering;
 };

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.idl (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.idl	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletGlobalScope.idl	2022-01-28 20:56:26 UTC (rev 288759)
@@ -29,6 +29,7 @@
 [
     Exposed=AudioWorklet,
     Conditional=WEB_AUDIO,
+    JSCustomMarkFunction,
     JSGenerateToNativeObject,
     IsImmutablePrototypeExoticObject,
     IsImmutablePrototypeExoticObjectOnPrototype,

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletNode.cpp (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletNode.cpp	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletNode.cpp	2022-01-28 20:56:26 UTC (rev 288759)
@@ -146,8 +146,11 @@
     {
         Locker locker { m_processLock };
         if (m_processor) {
-            if (auto* workletProxy = context().audioWorklet().proxy())
-                workletProxy->postTaskForModeToWorkletGlobalScope([m_processor = WTFMove(m_processor)](ScriptExecutionContext&) { }, WorkerRunLoop::defaultMode());
+            if (auto* workletProxy = context().audioWorklet().proxy()) {
+                workletProxy->postTaskForModeToWorkletGlobalScope([processor = WTFMove(m_processor)](ScriptExecutionContext& context) {
+                    downcast<AudioWorkletGlobalScope>(context).processorIsNoLongerNeeded(*processor);
+                }, WorkerRunLoop::defaultMode());
+            }
         }
     }
     uninitialize();

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.cpp	2022-01-28 20:56:26 UTC (rev 288759)
@@ -40,9 +40,12 @@
 #include "MessagePort.h"
 #include <_javascript_Core/JSTypedArrays.h>
 #include <wtf/GetPtr.h>
+#include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
 
+WTF_MAKE_ISO_ALLOCATED_IMPL(AudioWorkletProcessor);
+
 using namespace JSC;
 
 static unsigned busChannelCount(const AudioBus& bus)
@@ -197,17 +200,18 @@
 
 ExceptionOr<Ref<AudioWorkletProcessor>> AudioWorkletProcessor::create(ScriptExecutionContext& context)
 {
-    auto constructionData = downcast<AudioWorkletGlobalScope>(context).takePendingProcessorConstructionData();
+    auto& globalScope = downcast<AudioWorkletGlobalScope>(context);
+    auto constructionData = globalScope.takePendingProcessorConstructionData();
     if (!constructionData)
         return Exception { TypeError, "No pending construction data for this worklet processor"_s };
 
-    return adoptRef(*new AudioWorkletProcessor(context, *constructionData));
+    return adoptRef(*new AudioWorkletProcessor(globalScope, *constructionData));
 }
 
 AudioWorkletProcessor::~AudioWorkletProcessor() = default;
 
-AudioWorkletProcessor::AudioWorkletProcessor(ScriptExecutionContext& context, const AudioWorkletProcessorConstructionData& constructionData)
-    : m_scriptExecutionContext(context)
+AudioWorkletProcessor::AudioWorkletProcessor(AudioWorkletGlobalScope& globalScope, const AudioWorkletProcessorConstructionData& constructionData)
+    : m_globalScope(globalScope)
     , m_name(constructionData.name())
     , m_port(constructionData.port())
 {
@@ -236,8 +240,8 @@
     // explicitly allow the following allocation(s).
     DisableMallocRestrictionsForCurrentThreadScope disableMallocRestrictions;
 
-    ASSERT(m_processCallback);
-    auto& globalObject = *jsCast<JSDOMGlobalObject*>(m_scriptExecutionContext.globalObject());
+    ASSERT(wrapper());
+    auto& globalObject = *jsCast<JSDOMGlobalObject*>(m_globalScope.globalObject());
     ASSERT(globalObject.scriptExecutionContext());
     ASSERT(globalObject.scriptExecutionContext()->isContextThread());
 
@@ -248,7 +252,7 @@
     buildJSArguments(vm, globalObject, args, inputs, outputs, paramValuesMap);
 
     NakedPtr<JSC::Exception> returnedException;
-    auto result = JSCallbackData::invokeCallback(vm, asObject(m_processCallback), jsUndefined(), args, JSCallbackData::CallbackType::Object, Identifier::fromString(vm, "process"), returnedException);
+    auto result = JSCallbackData::invokeCallback(vm, wrapper(), jsUndefined(), args, JSCallbackData::CallbackType::Object, Identifier::fromString(vm, "process"), returnedException);
     if (returnedException) {
         reportException(&globalObject, returnedException);
         threwException = true;
@@ -260,11 +264,6 @@
     return result.toBoolean(&globalObject);
 }
 
-void AudioWorkletProcessor::setProcessCallback(JSObject* processCallback)
-{
-    m_processCallback = { processCallback };
-}
-
 } // namespace WebCore
 
 #endif // ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h	2022-01-28 20:56:26 UTC (rev 288759)
@@ -32,9 +32,11 @@
 #include "AudioArray.h"
 #include "ExceptionOr.h"
 #include "JSValueInWrappedObject.h"
+#include "ScriptWrappable.h"
 #include <wtf/Forward.h>
 #include <wtf/Ref.h>
 #include <wtf/ThreadSafeRefCounted.h>
+#include <wtf/WeakPtr.h>
 
 namespace JSC {
 class JSArray;
@@ -44,12 +46,14 @@
 namespace WebCore {
 
 class AudioBus;
+class AudioWorkletGlobalScope;
 class AudioWorkletProcessorConstructionData;
 class JSCallbackDataStrong;
 class MessagePort;
 class ScriptExecutionContext;
 
-class AudioWorkletProcessor : public ThreadSafeRefCounted<AudioWorkletProcessor> {
+class AudioWorkletProcessor : public ScriptWrappable, public ThreadSafeRefCounted<AudioWorkletProcessor>, public CanMakeWeakPtr<AudioWorkletProcessor> {
+    WTF_MAKE_ISO_ALLOCATED(AudioWorkletProcessor);
 public:
     static ExceptionOr<Ref<AudioWorkletProcessor>> create(ScriptExecutionContext&);
     ~AudioWorkletProcessor();
@@ -59,21 +63,17 @@
 
     bool process(const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap, bool& threwException);
 
-    void setProcessCallback(JSC::JSObject*);
-
-    JSValueInWrappedObject& processCallbackWrapper() { return m_processCallback; }
     JSValueInWrappedObject& jsInputsWrapper() { return m_jsInputs; }
     JSValueInWrappedObject& jsOutputsWrapper() { return m_jsOutputs; }
     JSValueInWrappedObject& jsParamValuesWrapper() { return m_jsParamValues; }
 
 private:
-    explicit AudioWorkletProcessor(ScriptExecutionContext&, const AudioWorkletProcessorConstructionData&);
+    explicit AudioWorkletProcessor(AudioWorkletGlobalScope&, const AudioWorkletProcessorConstructionData&);
     void buildJSArguments(JSC::VM&, JSC::JSGlobalObject&, JSC::MarkedArgumentBufferBase&, const Vector<RefPtr<AudioBus>>& inputs, Vector<Ref<AudioBus>>& outputs, const HashMap<String, std::unique_ptr<AudioFloatArray>>& paramValuesMap);
 
-    ScriptExecutionContext& m_scriptExecutionContext;
+    AudioWorkletGlobalScope& m_globalScope;
     String m_name;
     Ref<MessagePort> m_port;
-    JSValueInWrappedObject m_processCallback;
     JSValueInWrappedObject m_jsInputs;
     JSValueInWrappedObject m_jsOutputs;
     JSValueInWrappedObject m_jsParamValues;

Modified: trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.idl (288758 => 288759)


--- trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.idl	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Modules/webaudio/AudioWorkletProcessor.idl	2022-01-28 20:56:26 UTC (rev 288759)
@@ -29,7 +29,8 @@
 [
     Conditional=WEB_AUDIO,
     Exposed=AudioWorklet,
-    JSCustomMarkFunction
+    GenerateIsReachable=Impl,
+    JSCustomMarkFunction,
 ] interface AudioWorkletProcessor {
     [CallWith=ScriptExecutionContext] constructor();
     readonly attribute MessagePort port;

Modified: trunk/Source/WebCore/Sources.txt (288758 => 288759)


--- trunk/Source/WebCore/Sources.txt	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/Sources.txt	2022-01-28 20:56:26 UTC (rev 288759)
@@ -501,6 +501,7 @@
 bindings/js/JSAudioBufferCustom.cpp
 bindings/js/JSAudioBufferSourceNodeCustom.cpp
 bindings/js/JSAudioNodeCustom.cpp
+bindings/js/JSAudioWorkletGlobalScopeCustom.cpp
 bindings/js/JSAudioWorkletProcessorCustom.cpp
 bindings/js/JSAuthenticatorResponseCustom.cpp
 bindings/js/JSBaseAudioContextCustom.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (288758 => 288759)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2022-01-28 20:56:26 UTC (rev 288759)
@@ -9185,6 +9185,7 @@
 		460CBF331D4BCCFE0092E88E /* JSDOMWindowProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMWindowProperties.cpp; sourceTree = "<group>"; };
 		460CBF341D4BCCFE0092E88E /* JSDOMWindowProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMWindowProperties.h; sourceTree = "<group>"; };
 		460D19441FCE21DD00C3DB85 /* JSServiceWorkerGlobalScopeCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSServiceWorkerGlobalScopeCustom.cpp; sourceTree = "<group>"; };
+		46273C2127A1CBC7006A15B9 /* JSAudioWorkletProcessorCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioWorkletProcessorCustom.cpp; sourceTree = "<group>"; };
 		46273CAC260E59DF006FAA91 /* SWScriptStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SWScriptStorage.h; sourceTree = "<group>"; };
 		46273CAE260E59DF006FAA91 /* SWScriptStorage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SWScriptStorage.cpp; sourceTree = "<group>"; };
 		462E4C4D2616A801003A2C67 /* ScriptBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptBuffer.h; sourceTree = "<group>"; };
@@ -9245,6 +9246,7 @@
 		468344DC1EDDFA5F00B7795B /* DOMRectList.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = DOMRectList.idl; sourceTree = "<group>"; };
 		468344DD1EDDFA5F00B7795B /* DOMRectList.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DOMRectList.cpp; sourceTree = "<group>"; };
 		468344DE1EDDFA5F00B7795B /* DOMRectList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DOMRectList.h; sourceTree = "<group>"; };
+		46838DFB27A1B8B9005DB9FB /* JSAudioWorkletGlobalScopeCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioWorkletGlobalScopeCustom.cpp; sourceTree = "<group>"; };
 		4683DF392767DF26007D00C8 /* ShadowRealmGlobalScope.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ShadowRealmGlobalScope.cpp; sourceTree = "<group>"; };
 		4683DF3B2767DF26007D00C8 /* ShadowRealmGlobalScope.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShadowRealmGlobalScope.h; sourceTree = "<group>"; };
 		4683DF3C2767DF26007D00C8 /* ShadowRealmGlobalScope.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ShadowRealmGlobalScope.idl; sourceTree = "<group>"; };
@@ -12266,7 +12268,6 @@
 		83EE598C1F50958B003E8B30 /* JSErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSErrorCallback.cpp; sourceTree = "<group>"; };
 		83F28BFD24DB1DD3005BA6F6 /* ConvolverOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConvolverOptions.h; sourceTree = "<group>"; };
 		83F28BFF24DB1DD4005BA6F6 /* ConvolverOptions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = ConvolverOptions.idl; sourceTree = "<group>"; };
-		83F37A672536B21B00FF5F3B /* JSAudioWorkletProcessorCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioWorkletProcessorCustom.cpp; sourceTree = "<group>"; };
 		83F570AD1C53268E007FD6CB /* JSXMLDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSXMLDocument.h; sourceTree = "<group>"; };
 		83F570AE1C53268E007FD6CB /* JSXMLDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSXMLDocument.cpp; sourceTree = "<group>"; };
 		83F572941FA1066F003837BE /* JSServiceWorkerClientCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSServiceWorkerClientCustom.cpp; sourceTree = "<group>"; };
@@ -24818,7 +24819,8 @@
 				BC2ED6BB0C6BD2F000920BFF /* JSAttrCustom.cpp */,
 				46C3A8D32548D4B700C8C53A /* JSAudioBufferCustom.cpp */,
 				466536FA264C8DD100AAD1D7 /* JSAudioNodeCustom.cpp */,
-				83F37A672536B21B00FF5F3B /* JSAudioWorkletProcessorCustom.cpp */,
+				46838DFB27A1B8B9005DB9FB /* JSAudioWorkletGlobalScopeCustom.cpp */,
+				46273C2127A1CBC7006A15B9 /* JSAudioWorkletProcessorCustom.cpp */,
 				576082562011BE0200116678 /* JSAuthenticatorResponseCustom.cpp */,
 				468B8BDE25CC849300F67822 /* JSBaseAudioContextCustom.cpp */,
 				5760824F20118D8D00116678 /* JSBasicCredentialCustom.cpp */,

Copied: trunk/Source/WebCore/bindings/js/JSAudioWorkletGlobalScopeCustom.cpp (from rev 288758, trunk/Source/WebCore/bindings/js/JSAudioWorkletProcessorCustom.cpp) (0 => 288759)


--- trunk/Source/WebCore/bindings/js/JSAudioWorkletGlobalScopeCustom.cpp	                        (rev 0)
+++ trunk/Source/WebCore/bindings/js/JSAudioWorkletGlobalScopeCustom.cpp	2022-01-28 20:56:26 UTC (rev 288759)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2022 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "JSAudioWorkletGlobalScope.h"
+
+#include "AudioWorkletGlobalScope.h"
+#include "AudioWorkletProcessor.h"
+
+#if ENABLE(WEB_AUDIO)
+
+namespace WebCore {
+
+template<typename Visitor>
+void JSAudioWorkletGlobalScope::visitAdditionalChildren(Visitor& visitor)
+{
+    wrapped().visitProcessors(visitor);
+}
+
+DEFINE_VISIT_ADDITIONAL_CHILDREN(JSAudioWorkletGlobalScope);
+
+} // namespace WebCore
+
+#endif // ENABLE(WEB_AUDIO)

Modified: trunk/Source/WebCore/bindings/js/JSAudioWorkletProcessorCustom.cpp (288758 => 288759)


--- trunk/Source/WebCore/bindings/js/JSAudioWorkletProcessorCustom.cpp	2022-01-28 20:48:11 UTC (rev 288758)
+++ trunk/Source/WebCore/bindings/js/JSAudioWorkletProcessorCustom.cpp	2022-01-28 20:56:26 UTC (rev 288759)
@@ -29,13 +29,11 @@
 #if ENABLE(WEB_AUDIO)
 
 namespace WebCore {
-using namespace JSC;
 
 template<typename Visitor>
 void JSAudioWorkletProcessor::visitAdditionalChildren(Visitor& visitor)
 {
     auto& processor = wrapped();
-    processor.processCallbackWrapper().visit(visitor);
     processor.jsInputsWrapper().visit(visitor);
     processor.jsOutputsWrapper().visit(visitor);
     processor.jsParamValuesWrapper().visit(visitor);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to