Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h |
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h |
| index ae16cf6910446937d5e32d7011dc206e0dfeb4f6..acfd56473ef94392947fbeb1511eb61a9e360cad 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h |
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletMessagingProxy.h |
| @@ -5,25 +5,72 @@ |
| #ifndef AudioWorkletMessagingProxy_h |
| #define AudioWorkletMessagingProxy_h |
| -#include <memory> |
| -#include "core/workers/ThreadedWorkletMessagingProxy.h" |
| -#include "platform/wtf/Allocator.h" |
| +#include "core/CoreExport.h" |
| +#include "core/loader/WorkletScriptLoader.h" |
| +#include "core/workers/ThreadedMessagingProxyBase.h" |
| +#include "core/workers/WorkletGlobalScopeProxy.h" |
| +#include "core/workers/WorkletPendingTasks.h" |
| +#include "platform/wtf/WeakPtr.h" |
| namespace blink { |
| -class ExecutionContext; |
| -class WorkerThread; |
| +class AudioWorkletHandler; |
| +class AudioWorkletObjectProxy; |
| +class ScriptSourceCode; |
| +class WaitableEvent; |
| +class WebThreadSupportingGC; |
| -class AudioWorkletMessagingProxy final : public ThreadedWorkletMessagingProxy { |
| - USING_FAST_MALLOC(AudioWorkletMessagingProxy); |
| +// NOTE: Currently this class is a duplication of ThreadedWorkletMessagingProxy, |
| +// because it needs to have the ownership of the worker thread. |
| +// |
| +// When rebasing the code, make sure to copy the behavior of |
| +// |ThreadedWorkletMessagingProxy| instead of inheriting from it. Think of this |
| +// class is a composition of |ThreadedWorkletMessagingProxy| and |
| +// |AudioWorkletMessagingProxy|. This is because we need a direct access of |
| +// |worklet_object_proxy| from BaseAudioContext. |
| +class CORE_EXPORT AudioWorkletMessagingProxy |
| + : public ThreadedMessagingProxyBase, |
| + public WorkletGlobalScopeProxy { |
| public: |
| AudioWorkletMessagingProxy(ExecutionContext*, WorkerClients*); |
| + // WorkletGlobalScopeProxy implementation. |
| + void FetchAndInvokeScript(const KURL& module_url_record, |
| + WebURLRequest::FetchCredentialsMode, |
| + RefPtr<WebTaskRunner> outside_settings_task_runner, |
| + WorkletPendingTasks*) final; |
| + void TerminateWorkletGlobalScope() final; |
| + void Initialize(); |
| + |
| + // This blocks the main thread until the rendering thread completes the |
| + // creation of AudioWorkletProcessor. |
| + void CreateProcessorInstance(const String& name, |
| + AudioWorkletHandler*, |
| + WaitableEvent*); |
| + |
| + // This returns the rendering thread so it can be passed to AudioDestination. |
| + WebThreadSupportingGC* GetRenderingThread(); |
| + |
| protected: |
| - ~AudioWorkletMessagingProxy() override; |
| + ~AudioWorkletMessagingProxy(); |
| + |
| + AudioWorkletObjectProxy& WorkletObjectProxy() { |
| + return *worklet_object_proxy_; |
| + } |
| std::unique_ptr<WorkerThread> CreateWorkerThread(double origin_time) override; |
| + |
| + private: |
| + friend class AudioWorkletMessagingProxyForTest; |
| + class LoaderClient; |
| + |
| + void NotifyLoadingFinished(WorkletScriptLoader*); |
| + void EvaluateScript(const ScriptSourceCode&); |
| + |
| + std::unique_ptr<AudioWorkletObjectProxy> worklet_object_proxy_; |
|
nhiroki
2017/06/07 14:43:52
If having the AudioWorkletObjectProxy is the only
|
| + HashSet<Persistent<WorkletScriptLoader>> loaders_; |
| + WeakPtrFactory<AudioWorkletMessagingProxy> weak_ptr_factory_; |
| }; |
| } // namespace blink |