1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
// Copyright 2016 The Chromium Authors
// 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_CSSPAINT_PAINT_WORKLET_GLOBAL_SCOPE_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_PAINT_WORKLET_GLOBAL_SCOPE_H_
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/renderer/bindings/core/v8/script_value.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/workers/worklet_global_scope.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/collection_support/heap_hash_map.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
class CSSPaintDefinition;
class ExceptionState;
class ScriptState;
class V8NoArgumentConstructor;
class WorkerReportingProxy;
class MODULES_EXPORT PaintWorkletGlobalScope final : public WorkletGlobalScope {
DEFINE_WRAPPERTYPEINFO();
public:
// Creates a main-thread bound PaintWorkletGlobalScope.
static PaintWorkletGlobalScope* Create(
LocalFrame*,
std::unique_ptr<GlobalScopeCreationParams>,
WorkerReportingProxy&);
// Creates an worklet-thread bound PaintWorkletGlobalScope.
static PaintWorkletGlobalScope* Create(
std::unique_ptr<GlobalScopeCreationParams>,
WorkerThread*);
PaintWorkletGlobalScope(LocalFrame*,
std::unique_ptr<GlobalScopeCreationParams>,
WorkerReportingProxy&);
PaintWorkletGlobalScope(std::unique_ptr<GlobalScopeCreationParams>,
WorkerThread*);
~PaintWorkletGlobalScope() override;
void Dispose() final;
bool IsPaintWorkletGlobalScope() const final { return true; }
void registerPaint(const ScriptState* script_state,
const String& name,
V8NoArgumentConstructor* paint_ctor,
ExceptionState&);
CSSPaintDefinition* FindDefinition(const String& name);
double devicePixelRatio() const;
void Trace(Visitor*) const override;
// Returns the token that uniquely identifies this worklet.
const PaintWorkletToken& GetPaintWorkletToken() const { return token_; }
WorkletToken GetWorkletToken() const final { return token_; }
ExecutionContextToken GetExecutionContextToken() const final {
return token_;
}
private:
network::mojom::RequestDestination GetDestination() const override {
return network::mojom::RequestDestination::kPaintWorklet;
}
// Registers the global scope with a proxy client, if not already done. Only
// used for worklet-thread bound PaintWorkletGlobalScopes.
void RegisterWithProxyClientIfNeeded();
// The implementation of the "paint definition" concept:
// https://drafts.css-houdini.org/css-paint-api/#paint-definition
typedef HeapHashMap<String, Member<CSSPaintDefinition>> DefinitionMap;
DefinitionMap paint_definitions_;
// Tracks whether this PaintWorkletGlobalScope has been registered with a
// PaintWorkletProxyClient. Only used in worklet-thread bound
// PaintWorkletGlobalScopes.
bool registered_ = false;
// Default initialized to generate a distinct token for this worklet.
const PaintWorkletToken token_;
};
template <>
struct DowncastTraits<PaintWorkletGlobalScope> {
static bool AllowFrom(const ExecutionContext& context) {
return context.IsPaintWorkletGlobalScope();
}
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_CSSPAINT_PAINT_WORKLET_GLOBAL_SCOPE_H_
|