Index: Source/bindings/v8/ScriptPromiseResolverWithContext.h |
diff --git a/Source/bindings/v8/ScriptPromiseResolverWithContext.h b/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
index 0ccf94e1c1d77195839cb79d9341d22c808fd0b2..2de442dd68eae7002f5dd01ec657b1fbfbdc5850 100644 |
--- a/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
+++ b/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
@@ -31,13 +31,24 @@ class ScriptPromiseResolverWithContext : public ActiveDOMObject, public RefCount |
WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext); |
public: |
- static PassRefPtr<ScriptPromiseResolverWithContext> create(ScriptState* scriptState) |
+ enum Mode { |
+ Default, |
+ KeepSelfWhilePending, |
haraken
2014/06/16 10:54:04
KeepAliveWhilePending ?
yhirano
2014/06/16 11:47:51
Done.
|
+ }; |
+ |
+ // Create a ScriptPromiseResolverWithContext. |
+ // If |mode| is KeepSelfWhilePending, the resolver refers itself in order |
+ // to stay alive while the promise is pending and the accosiated |
+ // ExecutionContext isn't stopped. |
+ static PassRefPtr<ScriptPromiseResolverWithContext> create(ScriptState* scriptState, Mode mode = Default) |
{ |
- RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptPromiseResolverWithContext(scriptState)); |
+ RefPtr<ScriptPromiseResolverWithContext> resolver = adoptRef(new ScriptPromiseResolverWithContext(scriptState, mode)); |
resolver->suspendIfNeeded(); |
return resolver.release(); |
} |
+ virtual ~ScriptPromiseResolverWithContext(); |
+ |
// Anything that can be passed to toV8Value can be passed to this function. |
template <typename T> |
void resolve(T value) |
@@ -69,7 +80,7 @@ public: |
virtual void stop() OVERRIDE; |
protected: |
- explicit ScriptPromiseResolverWithContext(ScriptState*); |
+ ScriptPromiseResolverWithContext(ScriptState*, Mode); |
private: |
enum ResolutionState { |
@@ -90,6 +101,7 @@ private: |
{ |
if (m_state != Pending || !executionContext() || executionContext()->activeDOMObjectsAreStopped()) |
return; |
+ ASSERT(newState == Resolving || newState == Rejecting); |
m_state = newState; |
// Retain this object until it is actually resolved or rejected. |
// |deref| will be called in |clear|. |
@@ -107,6 +119,7 @@ private: |
ResolutionState m_state; |
const RefPtr<ScriptState> m_scriptState; |
+ Mode m_mode; |
Timer<ScriptPromiseResolverWithContext> m_timer; |
RefPtr<ScriptPromiseResolver> m_resolver; |
ScopedPersistent<v8::Value> m_value; |