17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#ifndef PromiseTracker_h
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define PromiseTracker_h
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/InspectorTypeBuilder.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/heap/Handle.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/HashMap.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/Noncopyable.h"
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/RefPtr.h"
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/Vector.h"
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include <v8.h>
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ScriptState;
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ScriptValue;
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass PromiseTracker FINAL : public NoBaseWillBeGarbageCollected<PromiseTracker> {
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    WTF_MAKE_NONCOPYABLE(PromiseTracker);
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(PromiseTracker);
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic:
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static PassOwnPtrWillBeRawPtr<PromiseTracker> create()
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return adoptPtrWillBeNoop(new PromiseTracker());
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    bool isEnabled() const { return m_isEnabled; }
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void setEnabled(bool);
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void clear();
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void didReceiveV8PromiseEvent(ScriptState*, v8::Handle<v8::Object> promise, v8::Handle<v8::Value> parentPromise, int status);
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::PromiseDetails> > promises();
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ScriptValue promiseById(int promiseId) const;
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    class PromiseData;
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    typedef WillBeHeapVector<RefPtrWillBeMember<PromiseData> > PromiseDataVector;
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    typedef WillBeHeapHashMap<int, PromiseDataVector> PromiseDataMap;
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*);
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PromiseDataMap& promiseDataMap() { return m_promiseDataMap; }
487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate:
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PromiseTracker();
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int circularSequentialId();
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PassRefPtrWillBeRawPtr<PromiseData> createPromiseDataIfNeeded(ScriptState*, v8::Handle<v8::Object> promise);
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int m_circularSequentialId;
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    PromiseDataMap m_promiseDataMap;
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    bool m_isEnabled;
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci};
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // !defined(PromiseTracker_h)
63