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..2b5bd4d9e5a9afa300fae8fe971148312a8d2d60 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8PerIsolateData.h |
@@ -167,6 +167,32 @@ 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); |
+ swapInNewVisitor(visitor); |
+ } |
+ ~TemporaryScriptWrappableVisitorScope() { |
+ swapInNewVisitor(m_savedVisitor); |
+ } |
+ |
+ private: |
+ inline ScriptWrappableVisitor* currentVisitor(v8::Isolate* isolate) { |
+ return V8PerIsolateData::from(m_isolate)->scriptWrappableVisitor(); |
+ } |
+ |
+ void swapInNewVisitor(ScriptWrappableVisitor*); |
haraken
2017/01/12 16:25:18
Nit: swapInNewVisitor => setVisitor ?
(Swap sound
Michael Lippautz
2017/01/13 15:08:40
Done.
|
+ |
+ v8::Isolate* m_isolate; |
+ ScriptWrappableVisitor* m_savedVisitor; |
+ }; |
+ |
void setScriptWrappableVisitor( |
std::unique_ptr<ScriptWrappableVisitor> visitor) { |
m_scriptWrappableVisitor = std::move(visitor); |