Chromium Code Reviews| Index: Source/bindings/v8/ScriptPromiseResolver.h |
| diff --git a/Source/bindings/v8/ScriptPromiseResolver.h b/Source/bindings/v8/ScriptPromiseResolver.h |
| index 18d30523fad4eef50394bc20bae123dba4888b14..40e1d7bbca013f8cbd2432a7157a6db32a96a0b2 100644 |
| --- a/Source/bindings/v8/ScriptPromiseResolver.h |
| +++ b/Source/bindings/v8/ScriptPromiseResolver.h |
| @@ -33,6 +33,7 @@ |
| #include "bindings/v8/ScopedPersistent.h" |
| #include "bindings/v8/ScriptObject.h" |
| +#include "bindings/v8/ScriptPromise.h" |
| #include "bindings/v8/ScriptState.h" |
| #include "bindings/v8/ScriptValue.h" |
| #include "wtf/RefPtr.h" |
| @@ -59,6 +60,13 @@ class ScriptExecutionContext; |
| // To use ScriptPromiseResolver out of a v8 context the caller must |
| // enter a v8 context, for example by using ScriptScope and ScriptState. |
| // |
| +// If you hold ScriptPromiseResolver as a member variable, it causes memory |
| +// leaks unless you detach the promise and resolver object manually. |
| +// So if you no longer need the promise object, you should call detachPromise. |
| +// And if the operation completes or fails, you should call fulfill / resolve / |
| +// reject. Destroying ScriptPromiseResolver will also detach the promise and |
| +// resolver object. |
| +// |
|
yusukesuzuki
2013/09/04 06:37:00
Added the comment about possible memory leaks.
|
| class ScriptPromiseResolver : public RefCounted<ScriptPromiseResolver> { |
| WTF_MAKE_NONCOPYABLE(ScriptPromiseResolver); |
| public: |
| @@ -83,10 +91,10 @@ public: |
| // - The resolver's resolved flag is not set. |
| bool isPending() const; |
| - ScriptObject promise() |
| + ScriptPromise promise() |
| { |
| ASSERT(v8::Context::InContext()); |
| - return ScriptObject(ScriptState::current(), m_promise.newLocal(m_isolate)); |
| + return m_promise; |
| } |
| // Fulfill with a C++ object which can be converted to a v8 object by toV8. |
| @@ -110,7 +118,7 @@ private: |
| void reject(v8::Handle<v8::Value>); |
| v8::Isolate* m_isolate; |
| - ScopedPersistent<v8::Object> m_promise; |
| + ScriptPromise m_promise; |
| ScopedPersistent<v8::Object> m_resolver; |
| bool isPendingInternal() const; |
| }; |