AudioWorkletProcessor.cpp (1847B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 6 7 #include "AudioWorkletProcessor.h" 8 9 #include "mozilla/dom/AudioWorkletGlobalScope.h" 10 #include "mozilla/dom/AudioWorkletNodeBinding.h" 11 #include "mozilla/dom/AudioWorkletProcessorBinding.h" 12 #include "mozilla/dom/MessagePort.h" 13 #include "mozilla/dom/WorkletGlobalScope.h" 14 #include "nsIGlobalObject.h" 15 16 namespace mozilla::dom { 17 18 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AudioWorkletProcessor, mParent, mPort) 19 20 AudioWorkletProcessor::AudioWorkletProcessor(nsIGlobalObject* aParent, 21 MessagePort* aPort) 22 : mParent(aParent), mPort(aPort) {} 23 24 AudioWorkletProcessor::~AudioWorkletProcessor() = default; 25 26 /* static */ 27 already_AddRefed<AudioWorkletProcessor> AudioWorkletProcessor::Constructor( 28 const GlobalObject& aGlobal, ErrorResult& aRv) { 29 nsCOMPtr<WorkletGlobalScope> global = 30 do_QueryInterface(aGlobal.GetAsSupports()); 31 MOZ_ASSERT(global); 32 RefPtr<MessagePort> port = static_cast<AudioWorkletGlobalScope*>(global.get()) 33 ->TakePortForProcessorCtor(); 34 if (!port) { 35 aRv.ThrowTypeError<MSG_ILLEGAL_CONSTRUCTOR>(); 36 return nullptr; 37 } 38 RefPtr<AudioWorkletProcessor> audioWorkletProcessor = 39 new AudioWorkletProcessor(global, port); 40 41 return audioWorkletProcessor.forget(); 42 } 43 44 JSObject* AudioWorkletProcessor::WrapObject(JSContext* aCx, 45 JS::Handle<JSObject*> aGivenProto) { 46 return AudioWorkletProcessor_Binding::Wrap(aCx, this, aGivenProto); 47 } 48 49 } // namespace mozilla::dom