| Index: third_party/WebKit/Source/modules/webaudio/AudioWorkletObjectProxy.cpp
 | 
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioWorkletObjectProxy.cpp b/third_party/WebKit/Source/modules/webaudio/AudioWorkletObjectProxy.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..8777c5f86d914a350b35b03cec4719fa2b7a166e
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioWorkletObjectProxy.cpp
 | 
| @@ -0,0 +1,69 @@
 | 
| +// Copyright 2017 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.
 | 
| +
 | 
| +#include "modules/webaudio/AudioWorkletObjectProxy.h"
 | 
| +
 | 
| +#include <memory>
 | 
| +#include "bindings/core/v8/ScriptSourceCode.h"
 | 
| +#include "bindings/core/v8/WorkerOrWorkletScriptController.h"
 | 
| +#include "core/workers/WorkerThread.h"
 | 
| +#include "modules/webaudio/AudioWorkletGlobalScope.h"
 | 
| +#include "modules/webaudio/AudioWorkletMessagingProxy.h"
 | 
| +#include "modules/webaudio/AudioWorkletNode.h"
 | 
| +#include "modules/webaudio/AudioWorkletProcessor.h"
 | 
| +#include "modules/webaudio/AudioWorkletProcessorDefinition.h"
 | 
| +#include "platform/wtf/PtrUtil.h"
 | 
| +
 | 
| +
 | 
| +namespace blink {
 | 
| +
 | 
| +std::unique_ptr<AudioWorkletObjectProxy> AudioWorkletObjectProxy::Create(
 | 
| +    AudioWorkletMessagingProxy* messaging_proxy_weak_ptr,
 | 
| +    ParentFrameTaskRunners* parent_frame_task_runners) {
 | 
| +  DCHECK(messaging_proxy_weak_ptr);
 | 
| +  return WTF::WrapUnique(new AudioWorkletObjectProxy(
 | 
| +      messaging_proxy_weak_ptr, parent_frame_task_runners));
 | 
| +}
 | 
| +
 | 
| +AudioWorkletObjectProxy::~AudioWorkletObjectProxy() {}
 | 
| +
 | 
| +void AudioWorkletObjectProxy::EvaluateScript(const String& source,
 | 
| +                                                const KURL& script_url,
 | 
| +                                                WorkerThread* worker_thread) {
 | 
| +  AudioWorkletGlobalScope* global_scope =
 | 
| +        ToAudioWorkletGlobalScope(worker_thread->GlobalScope());
 | 
| +    global_scope->ScriptController()->Evaluate(
 | 
| +        ScriptSourceCode(source, script_url));
 | 
| +}
 | 
| +
 | 
| +void AudioWorkletObjectProxy::CreateProcessorInstance(
 | 
| +      const String& name,
 | 
| +      AudioWorkletHandler* handler,
 | 
| +      WaitableEvent* done,
 | 
| +      WorkerThread* worker_thread) {
 | 
| +  AudioWorkletGlobalScope* global_scope =
 | 
| +      ToAudioWorkletGlobalScope(worker_thread->GlobalScope());
 | 
| +  ScriptState* script_state =
 | 
| +      global_scope->ScriptController()->GetScriptState();
 | 
| +
 | 
| +  ScriptState::Scope scope(script_state);
 | 
| +
 | 
| +  AudioWorkletProcessor* processor = global_scope->CreateInstance(name);
 | 
| +  handler->SetProcessorOnRenderingThread(processor);
 | 
| +
 | 
| +  done->Signal();
 | 
| +}
 | 
| +
 | 
| +AudioWorkletObjectProxy::AudioWorkletObjectProxy(
 | 
| +    AudioWorkletMessagingProxy* messaging_proxy_weak_ptr,
 | 
| +    ParentFrameTaskRunners* parent_frame_task_runners)
 | 
| +    : ThreadedObjectProxyBase(parent_frame_task_runners),
 | 
| +      messaging_proxy_weak_ptr_(messaging_proxy_weak_ptr) {}
 | 
| +
 | 
| +CrossThreadWeakPersistent<ThreadedMessagingProxyBase>
 | 
| +AudioWorkletObjectProxy::MessagingProxyWeakPtr() {
 | 
| +  return messaging_proxy_weak_ptr_;
 | 
| +}
 | 
| +
 | 
| +}  // namespace blink
 | 
| 
 |