// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_WORKLET_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_WORKLET_H_ #include "base/macros.h" #include "third_party/blink/renderer/core/workers/worklet.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/heap/handle.h" namespace blink { class AudioWorkletHandler; class AudioWorkletMessagingProxy; class BaseAudioContext; class CrossThreadAudioParamInfo; class MessagePortChannel; class SerializedScriptValue; class MODULES_EXPORT AudioWorklet final : public Worklet { DEFINE_WRAPPERTYPEINFO(); public: explicit AudioWorklet(BaseAudioContext*); ~AudioWorklet() override = default; void CreateProcessor(scoped_refptr, MessagePortChannel, scoped_refptr node_options); // Invoked by AudioWorkletMessagingProxy. Notifies |context_| when // AudioWorkletGlobalScope finishes the first script evaluation and is ready // for the worklet operation. Can be used for other post-evaluation tasks // in AudioWorklet or BaseAudioContext. void NotifyGlobalScopeIsUpdated(); BaseAudioContext* GetBaseAudioContext() const; // Returns |nullptr| if there is no active WorkletGlobalScope(). AudioWorkletMessagingProxy* GetMessagingProxy(); const Vector GetParamInfoListForProcessor( const String& name); bool IsProcessorRegistered(const String& name); // Returns |true| when a AudioWorkletMessagingProxy and a WorkletBackingThread // are ready. bool IsReady(); void Trace(Visitor*) const override; private: // Implements Worklet bool NeedsToCreateGlobalScope() final; WorkletGlobalScopeProxy* CreateGlobalScope() final; // To catch the first global scope update and notify the context. bool worklet_started_ = false; Member context_; DISALLOW_COPY_AND_ASSIGN(AudioWorklet); }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBAUDIO_AUDIO_WORKLET_H_