| // Copyright 2018 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 "third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.h" |
| |
| #include "third_party/blink/renderer/core/dom/document.h" |
| #include "third_party/blink/renderer/core/frame/web_frame_widget_base.h" |
| #include "third_party/blink/renderer/core/frame/web_local_frame_impl.h" |
| #include "third_party/blink/renderer/core/workers/worker_thread.h" |
| #include "third_party/blink/renderer/modules/csspaint/css_paint_definition.h" |
| #include "third_party/blink/renderer/platform/cross_thread_functional.h" |
| #include "third_party/blink/renderer/platform/graphics/image.h" |
| |
| namespace blink { |
| |
| const char PaintWorkletProxyClient::kSupplementName[] = |
| "PaintWorkletProxyClient"; |
| |
| // static |
| PaintWorkletProxyClient* PaintWorkletProxyClient::Create() { |
| return MakeGarbageCollected<PaintWorkletProxyClient>(); |
| } |
| |
| PaintWorkletProxyClient::PaintWorkletProxyClient() |
| : state_(RunState::kUninitialized) { |
| DCHECK(IsMainThread()); |
| } |
| |
| void PaintWorkletProxyClient::Trace(blink::Visitor* visitor) { |
| Supplement<WorkerClients>::Trace(visitor); |
| } |
| |
| void PaintWorkletProxyClient::SetGlobalScope(WorkletGlobalScope* global_scope) { |
| DCHECK(global_scope); |
| DCHECK(global_scope->IsContextThread()); |
| if (state_ == RunState::kDisposed) |
| return; |
| DCHECK(state_ == RunState::kUninitialized); |
| |
| global_scope_ = static_cast<PaintWorkletGlobalScope*>(global_scope); |
| state_ = RunState::kWorking; |
| } |
| |
| void PaintWorkletProxyClient::Dispose() { |
| if (state_ == RunState::kWorking) { |
| DCHECK(global_scope_); |
| DCHECK(global_scope_->IsContextThread()); |
| |
| // At worklet scope termination break the reference cycle between |
| // PaintWorkletGlobalScope and PaintWorkletProxyClient. |
| global_scope_ = nullptr; |
| } |
| |
| DCHECK(state_ != RunState::kDisposed); |
| state_ = RunState::kDisposed; |
| } |
| |
| // static |
| PaintWorkletProxyClient* PaintWorkletProxyClient::From(WorkerClients* clients) { |
| return Supplement<WorkerClients>::From<PaintWorkletProxyClient>(clients); |
| } |
| |
| void ProvidePaintWorkletProxyClientTo(WorkerClients* clients, |
| PaintWorkletProxyClient* client) { |
| clients->ProvideSupplement(client); |
| } |
| |
| } // namespace blink |