Index: third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
diff --git a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
index 20c8688b9b8949bd3a2610b857ddb814d70c7b69..253e21493dc82ae0687383daaf38fe8338d4c2fa 100644 |
--- a/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
+++ b/third_party/WebKit/Source/modules/csspaint/PaintWorkletGlobalScope.cpp |
@@ -23,10 +23,12 @@ PaintWorkletGlobalScope* PaintWorkletGlobalScope::Create( |
const KURL& url, |
const String& user_agent, |
PassRefPtr<SecurityOrigin> security_origin, |
- v8::Isolate* isolate) { |
+ v8::Isolate* isolate, |
+ PaintWorkletPendingGeneratorRegistry* pending_generator_registry) { |
PaintWorkletGlobalScope* paint_worklet_global_scope = |
new PaintWorkletGlobalScope(frame, url, user_agent, |
- std::move(security_origin), isolate); |
+ std::move(security_origin), isolate, |
+ pending_generator_registry); |
paint_worklet_global_scope->ScriptController()->InitializeContextIfNeeded(); |
MainThreadDebugger::Instance()->ContextCreated( |
paint_worklet_global_scope->ScriptController()->GetScriptState(), |
@@ -40,22 +42,26 @@ PaintWorkletGlobalScope::PaintWorkletGlobalScope( |
const KURL& url, |
const String& user_agent, |
PassRefPtr<SecurityOrigin> security_origin, |
- v8::Isolate* isolate) |
+ v8::Isolate* isolate, |
+ PaintWorkletPendingGeneratorRegistry* pending_generator_registry) |
: MainThreadWorkletGlobalScope(frame, |
url, |
user_agent, |
std::move(security_origin), |
- isolate) {} |
+ isolate), |
+ pending_generator_registry_(pending_generator_registry) {} |
PaintWorkletGlobalScope::~PaintWorkletGlobalScope() {} |
void PaintWorkletGlobalScope::Dispose() { |
MainThreadDebugger::Instance()->ContextWillBeDestroyed( |
ScriptController()->GetScriptState()); |
+ |
// Explicitly clear the paint defininitions to break a reference cycle |
// between them and this global scope. |
paint_definitions_.clear(); |
+ pending_generator_registry_ = nullptr; |
WorkletGlobalScope::Dispose(); |
} |
@@ -193,17 +199,7 @@ void PaintWorkletGlobalScope::registerPaint(const String& name, |
native_invalidation_properties, custom_invalidation_properties, |
input_argument_types, has_alpha); |
paint_definitions_.Set(name, definition); |
- |
- // Set the definition on any pending generators. |
- GeneratorHashSet* set = pending_generators_.at(name); |
- if (set) { |
- for (const auto& generator : *set) { |
- if (generator) { |
- generator->SetDefinition(definition); |
- } |
- } |
- } |
- pending_generators_.erase(name); |
+ pending_generator_registry_->SetDefinition(name, definition); |
} |
CSSPaintDefinition* PaintWorkletGlobalScope::FindDefinition( |
@@ -211,19 +207,9 @@ CSSPaintDefinition* PaintWorkletGlobalScope::FindDefinition( |
return paint_definitions_.at(name); |
} |
-void PaintWorkletGlobalScope::AddPendingGenerator( |
- const String& name, |
- CSSPaintImageGeneratorImpl* generator) { |
- Member<GeneratorHashSet>& set = |
- pending_generators_.insert(name, nullptr).stored_value->value; |
- if (!set) |
- set = new GeneratorHashSet; |
- set->insert(generator); |
-} |
- |
DEFINE_TRACE(PaintWorkletGlobalScope) { |
visitor->Trace(paint_definitions_); |
- visitor->Trace(pending_generators_); |
+ visitor->Trace(pending_generator_registry_); |
MainThreadWorkletGlobalScope::Trace(visitor); |
} |