Index: third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
index b4e05891a44b8bf5df5ffde47e5a3814f974f91a..99776e7788df252375e0feae48dca8cbaf82dfce 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
@@ -167,6 +167,33 @@ class CORE_EXPORT V8PerIsolateData { |
return m_activeScriptWrappables.get(); |
} |
+ class TemporaryScriptWrappableVisitorScope { |
+ WTF_MAKE_NONCOPYABLE(TemporaryScriptWrappableVisitorScope); |
+ STACK_ALLOCATED(); |
+ |
+ public: |
+ TemporaryScriptWrappableVisitorScope( |
+ v8::Isolate* isolate, |
+ std::unique_ptr<ScriptWrappableVisitor> visitor) |
+ : m_isolate(isolate) { |
+ swapWithV8PerIsolateDataVisitor(visitor); |
+ } |
+ ~TemporaryScriptWrappableVisitorScope() { |
+ swapWithV8PerIsolateDataVisitor(m_savedVisitor); |
+ } |
+ |
+ private: |
+ inline ScriptWrappableVisitor* currentVisitor(v8::Isolate* isolate) { |
+ return V8PerIsolateData::from(m_isolate)->scriptWrappableVisitor(); |
+ } |
+ |
+ void swapWithV8PerIsolateDataVisitor( |
+ std::unique_ptr<ScriptWrappableVisitor>&); |
+ |
+ v8::Isolate* m_isolate; |
+ std::unique_ptr<ScriptWrappableVisitor> m_savedVisitor; |
+ }; |
+ |
void setScriptWrappableVisitor( |
std::unique_ptr<ScriptWrappableVisitor> visitor) { |
m_scriptWrappableVisitor = std::move(visitor); |