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..f38c8c45149c6594627126730a74187f92bc7c6d 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
@@ -167,6 +167,30 @@ class CORE_EXPORT V8PerIsolateData { |
return m_activeScriptWrappables.get(); |
} |
+ class TemporaryScriptWrappableVisitorScope { |
+ WTF_MAKE_NONCOPYABLE(TemporaryScriptWrappableVisitorScope); |
+ STACK_ALLOCATED(); |
+ |
+ public: |
+ TemporaryScriptWrappableVisitorScope(v8::Isolate* isolate, |
+ ScriptWrappableVisitor* visitor) |
+ : m_isolate(isolate) { |
+ m_savedVisitor = currentVisitor(m_isolate); |
+ setVisitor(visitor); |
+ } |
+ ~TemporaryScriptWrappableVisitorScope() { setVisitor(m_savedVisitor); } |
+ |
+ private: |
+ inline ScriptWrappableVisitor* currentVisitor(v8::Isolate* isolate) { |
+ return V8PerIsolateData::from(m_isolate)->scriptWrappableVisitor(); |
+ } |
+ |
+ void setVisitor(ScriptWrappableVisitor*); |
+ |
+ v8::Isolate* m_isolate; |
+ ScriptWrappableVisitor* m_savedVisitor; |
+ }; |
+ |
void setScriptWrappableVisitor( |
std::unique_ptr<ScriptWrappableVisitor> visitor) { |
m_scriptWrappableVisitor = std::move(visitor); |