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