Chromium Code Reviews| 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); |