1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// 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 PromiseTracker_h
#define PromiseTracker_h
#include "core/InspectorTypeBuilder.h"
#include "platform/heap/Handle.h"
#include "wtf/HashMap.h"
#include "wtf/Noncopyable.h"
#include "wtf/RefPtr.h"
#include "wtf/Vector.h"
#include <v8.h>
namespace blink {
class ScriptState;
class ScriptValue;
class PromiseTracker final : public NoBaseWillBeGarbageCollected<PromiseTracker> {
WTF_MAKE_NONCOPYABLE(PromiseTracker);
DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(PromiseTracker);
public:
static PassOwnPtrWillBeRawPtr<PromiseTracker> create()
{
return adoptPtrWillBeNoop(new PromiseTracker());
}
bool isEnabled() const { return m_isEnabled; }
void setEnabled(bool enabled, bool captureStacks);
void clear();
void didReceiveV8PromiseEvent(ScriptState*, v8::Local<v8::Object> promise, v8::Local<v8::Value> parentPromise, int status);
PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::PromiseDetails> > promises();
ScriptValue promiseById(int promiseId) const;
class PromiseData;
typedef WillBeHeapVector<RefPtrWillBeMember<PromiseData> > PromiseDataVector;
typedef WillBeHeapHashMap<int, PromiseDataVector> PromiseDataMap;
typedef WillBeHeapHashMap<int, RefPtrWillBeMember<PromiseData> > PromiseIdToDataMap;
void trace(Visitor*);
PromiseDataMap& promiseDataMap() { return m_promiseDataMap; }
PromiseIdToDataMap& promiseIdToDataMap() { return m_promiseIdToDataMap; }
private:
PromiseTracker();
int circularSequentialId();
PassRefPtrWillBeRawPtr<PromiseData> createPromiseDataIfNeeded(ScriptState*, v8::Local<v8::Object> promise);
int m_circularSequentialId;
PromiseDataMap m_promiseDataMap;
bool m_isEnabled;
bool m_captureStacks;
PromiseIdToDataMap m_promiseIdToDataMap;
};
} // namespace blink
#endif // !defined(PromiseTracker_h)
|