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