Index: Source/bindings/templates/interface.cpp |
diff --git a/Source/bindings/templates/interface.cpp b/Source/bindings/templates/interface.cpp |
index 5da47a89b6533626e3f90a0aa2fd535dfe2c64cc..abfc05c5d0cda070179c34b26a1cb357136f0384 100644 |
--- a/Source/bindings/templates/interface.cpp |
+++ b/Source/bindings/templates/interface.cpp |
@@ -596,8 +596,9 @@ void {{v8_class}}::visitDOMWrapper(v8::Isolate* isolate, ScriptWrappable* script |
{% for set_wrapper_reference_to in set_wrapper_reference_to_list %} |
{{set_wrapper_reference_to.cpp_type}} {{set_wrapper_reference_to.name}} = impl->{{set_wrapper_reference_to.name}}(); |
if ({{set_wrapper_reference_to.name}}) { |
- if (!DOMDataStore::containsWrapper({{set_wrapper_reference_to.name}}, isolate)) |
- {{set_wrapper_reference_to.name}}->wrap(creationContext, isolate); |
+ {# The target wrapper for SetWrapperReferenceTo must be created before entering V8 GC. |
+ Lazily creating a wrapper here may lead to execution of user javascript during GC. #} |
+ RELEASE_ASSERT(DOMDataStore::containsWrapper({{set_wrapper_reference_to.name}}, isolate)); |
DOMDataStore::setWrapperReference(wrapper, {{set_wrapper_reference_to.name}}, isolate); |
} |
{% endfor %} |