blob: 9acbbafdd08e7f7cb583cf39dc200706e2cc70da [file] [log] [blame]
// 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 <v8.h>
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<ArrayBuffer>) \
V(PassRefPtr<BatteryManager>) \
V(PassRefPtr<Cache>) \
V(PassRefPtr<MediaKeySession>) \
V(PassRefPtr<Response>) \
V(PassRefPtrWillBeRawPtr<Blob>) \
V(PassRefPtrWillBeRawPtr<DOMError>) \
V(PassRefPtrWillBeRawPtr<DOMException>) \
V(PassRefPtrWillBeRawPtr<FontFace>) \
V(PassRefPtrWillBeRawPtr<FontFaceSet>) \
V(PassRefPtrWillBeRawPtr<ImageBitmap>) \
V(PassRefPtrWillBeRawPtr<MIDIAccess>) \
V(PassRefPtrWillBeRawPtr<ServiceWorker>) \
V(PassRefPtrWillBeRawPtr<ServiceWorkerRegistration>) \
V(PushRegistration*) \
V(ScriptValue) \
V(ServiceWorker*) \
V(StorageInfo*) \
V(String) \
V(WillBeHeapVector<RefPtrWillBeMember<ServiceWorkerClient> >) \
V(Vector<String>) \
V(V8UndefinedType) \
V(WillBeHeapVector<RefPtrWillBeMember<FontFace> >) \
V(const char*) \
V(v8::Handle<v8::Value>) \
// 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<AbstractScriptPromise> 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