| Index: Source/bindings/v8/ScriptPromiseResolver.h
|
| diff --git a/Source/bindings/v8/ScriptPromiseResolver.h b/Source/bindings/v8/ScriptPromiseResolver.h
|
| index d51448c87c226c4a853020d3ea97432d4be17641..65511db2278025d87abdff4057c921665cbc8359 100644
|
| --- a/Source/bindings/v8/ScriptPromiseResolver.h
|
| +++ b/Source/bindings/v8/ScriptPromiseResolver.h
|
| @@ -46,40 +46,27 @@ class ExecutionContext;
|
|
|
| // ScriptPromiseResolver is a class for performing operations on Promise
|
| // (resolve / reject) from C++ world.
|
| -// ScriptPromiseResolver holds a Promise and a PromiseResolver.
|
| -// All methods of this class must be called from the main thread.
|
| +// ScriptPromiseResolver holds a PromiseResolver.
|
| // Here is a typical usage:
|
| -// 1. Create a ScriptPromiseResolver.
|
| +// 1. Create a ScriptPromiseResolver from a ScriptPromise.
|
| // 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 longer need it.
|
| -// 4. Call resolve or reject when the operation completes or
|
| +// 3. Call resolve or reject when the operation completes or
|
| // the operation fails respectively.
|
| //
|
| // Most methods including constructors must be called within a v8 context.
|
| // 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 object manually.
|
| -// Logically ScriptPromiseResolver has 2 references to the promise object.
|
| -// One is for exposing the promise object, another is for resolving it.
|
| -// To prevent memory leaks, you should release these 2 references manually.
|
| -// Following operations release references to the promise object.
|
| -// 1. detachPromise releases the reference for exposing.
|
| -// 2. resolve / reject operations release the reference for resolving.
|
| -// 3. detach releases both references.
|
| -// 4. Destroying ScriptPromiseResolver releases both references.
|
| -//
|
| -// So if you no longer need the promise object, you should call detachPromise.
|
| -// And if the operation completes or fails, you should call resolve / reject.
|
| -// Destroying ScriptPromiseResolver will also detach the promise object.
|
| +// To prevent memory leaks, you should release the reference manually
|
| +// by calling resolve or reject.
|
| +// Destroying the object will also release the reference.
|
| //
|
| class ScriptPromiseResolver : public RefCounted<ScriptPromiseResolver> {
|
| WTF_MAKE_NONCOPYABLE(ScriptPromiseResolver);
|
| public:
|
| - static PassRefPtr<ScriptPromiseResolver> create(ExecutionContext*);
|
| - static PassRefPtr<ScriptPromiseResolver> create();
|
| + static PassRefPtr<ScriptPromiseResolver> create(ScriptPromise, ExecutionContext*);
|
| + static PassRefPtr<ScriptPromiseResolver> create(ScriptPromise);
|
|
|
| // A ScriptPromiseResolver should be resolved / rejected before
|
| // its destruction.
|
| @@ -87,12 +74,6 @@ public:
|
| // entering a v8 context.
|
| ~ScriptPromiseResolver();
|
|
|
| - // Reject the promise with undefined and detach it.
|
| - void detach();
|
| -
|
| - // Detach the promise object.
|
| - void detachPromise();
|
| -
|
| // Return true if the promise object is in pending state.
|
| bool isPending() const;
|
|
|
| @@ -102,10 +83,6 @@ public:
|
| return m_promise;
|
| }
|
|
|
| - // Fulfill with a C++ object which can be converted to a v8 object by toV8.
|
| - // This method "fulfill" is the deprecated alias to resolve.
|
| - template<typename T>
|
| - inline void fulfill(PassRefPtr<T>);
|
| // Resolve with a C++ object which can be converted to a v8 object by toV8.
|
| template<typename T>
|
| inline void resolve(PassRefPtr<T>);
|
| @@ -113,34 +90,19 @@ public:
|
| template<typename T>
|
| inline void reject(PassRefPtr<T>);
|
|
|
| - // This method "fulfill" is the deprecated alias to resolve.
|
| - void fulfill(ScriptValue);
|
| void resolve(ScriptValue);
|
| void reject(ScriptValue);
|
|
|
| private:
|
| - ScriptPromiseResolver(v8::Handle<v8::Object> creationContext, v8::Isolate*);
|
| - void fulfill(v8::Handle<v8::Value>);
|
| + ScriptPromiseResolver(ScriptPromise, v8::Isolate*);
|
| void resolve(v8::Handle<v8::Value>);
|
| void reject(v8::Handle<v8::Value>);
|
|
|
| v8::Isolate* m_isolate;
|
| ScriptPromise m_promise;
|
| - bool m_promiseForExposeDetached : 1;
|
| - bool m_promiseForResolveDetached : 1;
|
| -
|
| - void detachPromiseForExpose();
|
| - void detachPromiseForResolve();
|
| };
|
|
|
| template<typename T>
|
| -void ScriptPromiseResolver::fulfill(PassRefPtr<T> value)
|
| -{
|
| - ASSERT(v8::Context::InContext());
|
| - fulfill(toV8(value.get(), v8::Object::New(), m_isolate));
|
| -}
|
| -
|
| -template<typename T>
|
| void ScriptPromiseResolver::resolve(PassRefPtr<T> value)
|
| {
|
| ASSERT(v8::Context::InContext());
|
|
|