Index: third_party/WebKit/Source/platform/v8_inspector/PromiseTracker.cpp |
diff --git a/third_party/WebKit/Source/platform/v8_inspector/PromiseTracker.cpp b/third_party/WebKit/Source/platform/v8_inspector/PromiseTracker.cpp |
deleted file mode 100644 |
index 96ad5879903b9c09a8f400cc8e771a3c7e859d20..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/platform/v8_inspector/PromiseTracker.cpp |
+++ /dev/null |
@@ -1,160 +0,0 @@ |
-// 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. |
- |
-#include "platform/v8_inspector/PromiseTracker.h" |
- |
-#include "platform/inspector_protocol/String16.h" |
-#include "platform/v8_inspector/V8DebuggerAgentImpl.h" |
-#include "platform/v8_inspector/V8StackTraceImpl.h" |
-#include "platform/v8_inspector/public/V8DebuggerClient.h" |
-#include "wtf/PassOwnPtr.h" |
- |
-using namespace blink::protocol; |
- |
-namespace blink { |
- |
-class PromiseTracker::PromiseWrapper { |
-public: |
- PromiseWrapper(PromiseTracker* tracker, int id, v8::Local<v8::Object> promise) |
- : m_tracker(tracker) |
- , m_id(id) |
- , m_promise(tracker->m_isolate, promise) { } |
- |
- ~PromiseWrapper() |
- { |
- OwnPtr<Debugger::PromiseDetails> promiseDetails = Debugger::PromiseDetails::create().setId(m_id).build(); |
- m_tracker->m_agent->didUpdatePromise(Debugger::PromiseUpdated::EventTypeEnum::Gc, promiseDetails.release()); |
- } |
- |
-private: |
- friend class PromiseTracker; |
- |
- PromiseTracker* m_tracker; |
- int m_id; |
- v8::Global<v8::Object> m_promise; |
-}; |
- |
-PromiseTracker::PromiseTracker(V8DebuggerAgentImpl* agent, v8::Isolate* isolate) |
- : m_circularSequentialId(0) |
- , m_isEnabled(false) |
- , m_captureStacks(false) |
- , m_agent(agent) |
- , m_isolate(isolate) |
-{ |
- clear(); |
-} |
- |
-PromiseTracker::~PromiseTracker() |
-{ |
-} |
- |
-void PromiseTracker::setEnabled(bool enabled, bool captureStacks) |
-{ |
- m_isEnabled = enabled; |
- m_captureStacks = captureStacks; |
- if (!enabled) |
- clear(); |
-} |
- |
-void PromiseTracker::clear() |
-{ |
- v8::HandleScope scope(m_isolate); |
- m_promiseToId.Reset(m_isolate, v8::NativeWeakMap::New(m_isolate)); |
- m_idToPromise.clear(); |
-} |
- |
-int PromiseTracker::circularSequentialId() |
-{ |
- ++m_circularSequentialId; |
- if (m_circularSequentialId <= 0) |
- m_circularSequentialId = 1; |
- return m_circularSequentialId; |
-} |
- |
-void PromiseTracker::weakCallback(const v8::WeakCallbackInfo<PromiseWrapper>& data) |
-{ |
- PromiseWrapper* wrapper = data.GetParameter(); |
- wrapper->m_tracker->m_idToPromise.remove(wrapper->m_id); |
-} |
- |
-void PromiseTracker::promiseCollected(int id) |
-{ |
-} |
- |
-int PromiseTracker::promiseId(v8::Local<v8::Object> promise, bool* isNewPromise) |
-{ |
- v8::HandleScope scope(m_isolate); |
- v8::Local<v8::NativeWeakMap> map = v8::Local<v8::NativeWeakMap>::New(m_isolate, m_promiseToId); |
- v8::Local<v8::Value> value = map->Get(promise); |
- if (value->IsInt32()) { |
- *isNewPromise = false; |
- return value.As<v8::Int32>()->Value(); |
- } |
- *isNewPromise = true; |
- int id = circularSequentialId(); |
- map->Set(promise, v8::Int32::New(m_isolate, id)); |
- |
- OwnPtr<PromiseWrapper> wrapper = adoptPtr(new PromiseWrapper(this, id, promise)); |
- wrapper->m_promise.SetWeak(wrapper.get(), weakCallback, v8::WeakCallbackType::kParameter); |
- m_idToPromise.set(id, wrapper.release()); |
- return id; |
-} |
- |
-void PromiseTracker::didReceiveV8PromiseEvent(v8::Local<v8::Context> context, v8::Local<v8::Object> promise, v8::Local<v8::Value> parentPromise, int status) |
-{ |
- ASSERT(isEnabled()); |
- ASSERT(!context.IsEmpty()); |
- |
- bool isNewPromise = false; |
- int id = promiseId(promise, &isNewPromise); |
- |
- blink::protocol::String16 eventType = isNewPromise ? Debugger::PromiseUpdated::EventTypeEnum::New : Debugger::PromiseUpdated::EventTypeEnum::Update; |
- |
- blink::protocol::String16 promiseStatus; |
- switch (status) { |
- case 0: |
- promiseStatus = Debugger::PromiseDetails::StatusEnum::Pending; |
- break; |
- case 1: |
- promiseStatus = Debugger::PromiseDetails::StatusEnum::Resolved; |
- break; |
- default: |
- promiseStatus = Debugger::PromiseDetails::StatusEnum::Rejected; |
- }; |
- OwnPtr<Debugger::PromiseDetails> promiseDetails = Debugger::PromiseDetails::create().setId(id).setStatus(promiseStatus).build(); |
- |
- if (!parentPromise.IsEmpty() && parentPromise->IsObject()) { |
- v8::Local<v8::Object> handle = parentPromise->ToObject(context->GetIsolate()); |
- bool parentIsNewPromise = false; |
- int parentPromiseId = promiseId(handle, &parentIsNewPromise); |
- promiseDetails->setParentId(parentPromiseId); |
- } else { |
- if (!status) { |
- if (isNewPromise) { |
- promiseDetails->setCreationTime(m_agent->debugger().client()->currentTimeMS()); |
- OwnPtr<V8StackTraceImpl> stack = V8StackTraceImpl::capture(m_agent, m_captureStacks ? V8StackTraceImpl::maxCallStackSizeToCapture : 1); |
- if (stack) |
- promiseDetails->setCreationStack(stack->buildInspectorObject()); |
- } |
- } else { |
- promiseDetails->setSettlementTime(m_agent->debugger().client()->currentTimeMS()); |
- if (m_captureStacks) { |
- OwnPtr<V8StackTraceImpl> stack = V8StackTraceImpl::capture(m_agent, V8StackTrace::maxCallStackSizeToCapture); |
- if (stack) |
- promiseDetails->setSettlementStack(stack->buildInspectorObject()); |
- } |
- } |
- } |
- |
- m_agent->didUpdatePromise(eventType, promiseDetails.release()); |
-} |
- |
-v8::Local<v8::Object> PromiseTracker::promiseById(int promiseId) |
-{ |
- ASSERT(isEnabled()); |
- PromiseWrapper* wrapper = m_idToPromise.get(promiseId); |
- return wrapper ? wrapper->m_promise.Get(m_isolate) : v8::Local<v8::Object>(); |
-} |
- |
-} // namespace blink |