Chromium Code Reviews| Index: Source/bindings/v8/ScriptPromiseResolverWithContext.h |
| diff --git a/Source/bindings/v8/ScriptPromiseResolverWithContext.h b/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
| index 0ccf94e1c1d77195839cb79d9341d22c808fd0b2..d569326245345b021b39ef43ac4dd98c74ed3fb2 100644 |
| --- a/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
| +++ b/Source/bindings/v8/ScriptPromiseResolverWithContext.h |
| @@ -27,7 +27,7 @@ namespace WebCore { |
| // ExecutionContext state. When the ExecutionContext is suspended, |
| // resolve or reject will be delayed. When it is stopped, resolve or reject |
| // will be ignored. |
| -class ScriptPromiseResolverWithContext : public ActiveDOMObject, public RefCounted<ScriptPromiseResolverWithContext> { |
| +class ScriptPromiseResolverWithContext FINAL : public ActiveDOMObject, public RefCounted<ScriptPromiseResolverWithContext> { |
| WTF_MAKE_NONCOPYABLE(ScriptPromiseResolverWithContext); |
| public: |
| @@ -38,6 +38,8 @@ public: |
| 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) |
| @@ -68,8 +70,19 @@ public: |
| virtual void resume() OVERRIDE; |
| virtual void stop() OVERRIDE; |
| -protected: |
| - explicit ScriptPromiseResolverWithContext(ScriptState*); |
| + // This function registers |value| to the associated Promise as a hidden |
|
haraken
2014/06/13 14:23:31
This function registers a wrapper of |value| to th
|
| + // property. As a result, |value| will be kept alive until one of the |
| + // following events happens: |
| + // - the Promise is resolved |
| + // - the Promise is rejected |
| + // - the Promise is disposed by the GC |
| + // - this object is destructed |
| + template<typename T> |
| + void keepObjectWhilePending(const T& value) |
| + { |
| + ScriptState::Scope scope(m_scriptState.get()); |
|
haraken
2014/06/13 14:23:31
Probably it's better to move this ScriptState::Sco
|
| + keepObjectWhilePendingInternal(toV8Value(value)); |
| + } |
| private: |
| enum ResolutionState { |
| @@ -79,6 +92,8 @@ private: |
| ResolvedOrRejected, |
| }; |
| + explicit ScriptPromiseResolverWithContext(ScriptState*); |
| + |
| template<typename T> |
| v8::Handle<v8::Value> toV8Value(const T& value) |
| { |
| @@ -105,6 +120,9 @@ private: |
| void onTimerFired(Timer<ScriptPromiseResolverWithContext>*); |
| void clear(); |
| + void keepObjectWhilePendingInternal(v8::Handle<v8::Value>); |
| + void unregisterKeptObject(); |
|
haraken
2014/06/13 14:23:31
keepObjectWhilePending => registerPendingObject
ke
|
| + |
| ResolutionState m_state; |
| const RefPtr<ScriptState> m_scriptState; |
| Timer<ScriptPromiseResolverWithContext> m_timer; |