// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef AbstractScriptPromiseResolver_h #define AbstractScriptPromiseResolver_h #include "bindings/common/ScriptPromise.h" #include "bindings/common/ScriptState.h" #include "bindings/core/v8/ScopedPersistent.h" #include "bindings/core/v8/V8Binding.h" #include "core/dom/ActiveDOMObject.h" #include "core/dom/ExecutionContext.h" #include "platform/Timer.h" #include "wtf/RefCounted.h" #include "wtf/Vector.h" #include namespace blink { class BatteryManager; class Blob; class Cache; class Credential; class CryptoKey; class DOMError; class DOMException; class ExecutionContext; class FontFace; class FontFaceSet; class ImageBitmap; class MIDIAccess; class MediaKeySession; class MediaKeys; class PushRegistration; class Response; class ServiceWorker; class ServiceWorkerClient; class ServiceWorkerRegistration; class StorageInfo; // Do not add bool to this list, as it becomes the implicit conversion for types // that are missing from this list. Use ScriptState::createBoolean instead. #define PROMISE_RESOLUTION_TYPES_LIST(V) \ V(AtomicString) \ V(BatteryManager*) \ V(Credential*) \ V(CryptoKey*) \ V(MediaKeys*) \ V(MIDIAccess*) \ V(PassRefPtr) \ V(PassRefPtr) \ V(PassRefPtr) \ V(PassRefPtr) \ V(PassRefPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PassRefPtrWillBeRawPtr) \ V(PushRegistration*) \ V(ScriptValue) \ V(ServiceWorker*) \ V(StorageInfo*) \ V(String) \ V(WillBeHeapVector >) \ V(Vector) \ V(V8UndefinedType) \ V(WillBeHeapVector >) \ V(const char*) \ V(v8::Handle) \ // This class wraps v8::Promise::Resolver and provides the following // functionalities. // - A ScriptPromiseResolver retains a ScriptState. A caller // can call resolve or reject from outside of a V8 context. // - This class is an ActiveDOMObject and keeps track of the associated // ExecutionContext state. When the ExecutionContext is suspended, // resolve or reject will be delayed. When it is stopped, resolve or reject // will be ignored. class AbstractScriptPromiseResolver { WTF_MAKE_NONCOPYABLE(AbstractScriptPromiseResolver); public: virtual ~AbstractScriptPromiseResolver() { } // Note that an empty ScriptPromise will be returned after resolve or // reject is called. virtual PassRefPtr promise() = 0; virtual void resolve() = 0; virtual void reject() = 0; #define DECLARE_RESOLUTION_METHODS(type) \ virtual void resolve(type) = 0; \ virtual void reject(type) = 0; PROMISE_RESOLUTION_TYPES_LIST(DECLARE_RESOLUTION_METHODS); #undef DECLARE_RESOLUTION_METHODS // Once this function is called this resolver stays alive while the // promise is pending and the associated ExecutionContext isn't stopped. virtual void keepAliveWhilePending() = 0; virtual ScriptState* scriptState() = 0; virtual ScriptState* scriptState() const = 0; // Forwarded ActiveDOMObject implementation. virtual void suspend() = 0; virtual void resume() = 0; virtual void stop() = 0; protected: // You need to call suspendIfNeeded after the construction because // this is an ActiveDOMObject. AbstractScriptPromiseResolver() { } }; } // namespace blink #endif // #ifndef AbstractScriptPromiseResolver_h