Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Unified Diff: Source/bindings/v8/ScriptPromiseResolver.h

Issue 23479016: Introduce Promise mapping to the IDL generator (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Add hasNoValue Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/bindings/v8/ScriptPromise.h ('k') | Source/bindings/v8/ScriptPromiseResolver.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/v8/ScriptPromiseResolver.h
diff --git a/Source/bindings/v8/ScriptPromiseResolver.h b/Source/bindings/v8/ScriptPromiseResolver.h
index 18d30523fad4eef50394bc20bae123dba4888b14..7140b391370250c726f7b0b9156553e79c1189f8 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"
@@ -51,7 +52,7 @@ class ScriptExecutionContext;
// 1. Create a ScriptPromiseResolver.
// 2. Pass the promise object of the holder to a JavaScript program
// (such as XMLHttpRequest return value).
-// 3. Detach the promise object if you no long need it.
+// 3. Detach the promise object if you no longer need it.
// 4. Call fulfill or reject when the operation completes or
// the operation fails respectively.
//
@@ -59,6 +60,14 @@ 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 in a DOM object,
+// 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.
+//
class ScriptPromiseResolver : public RefCounted<ScriptPromiseResolver> {
WTF_MAKE_NONCOPYABLE(ScriptPromiseResolver);
public:
@@ -83,10 +92,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 +119,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;
};
« no previous file with comments | « Source/bindings/v8/ScriptPromise.h ('k') | Source/bindings/v8/ScriptPromiseResolver.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698