Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / inspector / PromiseTracker.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef PromiseTracker_h
6 #define PromiseTracker_h
7
8 #include "core/InspectorTypeBuilder.h"
9 #include "platform/heap/Handle.h"
10 #include "wtf/HashMap.h"
11 #include "wtf/Noncopyable.h"
12 #include "wtf/RefPtr.h"
13 #include "wtf/Vector.h"
14 #include <v8.h>
15
16 namespace blink {
17
18 class ScriptState;
19 class ScriptValue;
20
21 class PromiseTracker FINAL : public NoBaseWillBeGarbageCollected<PromiseTracker> {
22     WTF_MAKE_NONCOPYABLE(PromiseTracker);
23     DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(PromiseTracker);
24 public:
25     static PassOwnPtrWillBeRawPtr<PromiseTracker> create()
26     {
27         return adoptPtrWillBeNoop(new PromiseTracker());
28     }
29
30     bool isEnabled() const { return m_isEnabled; }
31     void setEnabled(bool);
32
33     void clear();
34
35     void didReceiveV8PromiseEvent(ScriptState*, v8::Handle<v8::Object> promise, v8::Handle<v8::Value> parentPromise, int status);
36
37     PassRefPtr<TypeBuilder::Array<TypeBuilder::Debugger::PromiseDetails> > promises();
38     ScriptValue promiseById(int promiseId) const;
39
40     class PromiseData;
41
42     typedef WillBeHeapVector<RefPtrWillBeMember<PromiseData> > PromiseDataVector;
43     typedef WillBeHeapHashMap<int, PromiseDataVector> PromiseDataMap;
44
45     void trace(Visitor*);
46
47     PromiseDataMap& promiseDataMap() { return m_promiseDataMap; }
48
49 private:
50     PromiseTracker();
51
52     int circularSequentialId();
53     PassRefPtrWillBeRawPtr<PromiseData> createPromiseDataIfNeeded(ScriptState*, v8::Handle<v8::Object> promise);
54
55     int m_circularSequentialId;
56     PromiseDataMap m_promiseDataMap;
57     bool m_isEnabled;
58 };
59
60 } // namespace blink
61
62 #endif // !defined(PromiseTracker_h)