Chromium Code Reviews| Index: src/debug/debug.cc |
| diff --git a/src/debug/debug.cc b/src/debug/debug.cc |
| index 08da3d8b26f0b52e9bb8b946389a1436e41af93a..75ff222765125df94ceb84ab931bcee125df5342 100644 |
| --- a/src/debug/debug.cc |
| +++ b/src/debug/debug.cc |
| @@ -1815,6 +1815,27 @@ void ResetPromiseHandle(const v8::WeakCallbackInfo<void>& info) { |
| GlobalHandles::Destroy(data->location); |
| info.SetSecondPassCallback(&SendAsyncTaskEventCancel); |
| } |
| + |
| +debug::PromiseDebugActionName ToInterfaceDebugActionName( |
| + PromiseDebugActionName name) { |
| + switch (name) { |
| + case kDebugAsyncFunction: |
| + return debug::kDebugAsyncFunction; |
| + case kDebugPromiseResolve: |
| + return debug::kDebugPromiseResolve; |
| + case kDebugPromiseReject: |
| + return debug::kDebugPromiseReject; |
| + case kDebugPromiseResolveThenableJob: |
| + return debug::kDebugPromiseResolveThenableJob; |
| + case kDebugPromiseCollected: |
| + return debug::kDebugPromiseCollected; |
| + case kDebugNotActive: |
| + UNREACHABLE(); |
| + return debug::kDebugAsyncFunction; |
| + } |
| + UNREACHABLE(); |
| + return debug::kDebugAsyncFunction; |
| +} |
| } // namespace |
| int Debug::NextAsyncTaskId(Handle<JSObject> promise) { |
| @@ -1844,10 +1865,26 @@ int Debug::NextAsyncTaskId(Handle<JSObject> promise) { |
| return async_id->value(); |
| } |
| +void Debug::SetAsyncTaskListener(debug::AsyncTaskListener listener, |
| + void* data) { |
| + async_task_listener_ = listener; |
| + async_task_listener_data_ = data; |
| + UpdateState(); |
| +} |
| + |
| void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id, |
| PromiseDebugActionName name) { |
| if (in_debug_scope() || ignore_events()) return; |
| + if (async_task_listener_) { |
| + async_task_listener_(type, id, ToInterfaceDebugActionName(name), |
| + async_task_listener_data_); |
| + if (message_handler_ == NULL && |
|
dgozman
2017/01/13 00:01:48
nullptr
dgozman
2017/01/13 00:01:48
Let's extract variable |only_foreign_listener_pres
kozy
2017/01/13 15:59:13
Done.
kozy
2017/01/13 15:59:13
Done.
|
| + (event_listener_.is_null() || event_listener_->IsForeign())) { |
| + return; |
| + } |
| + } |
| + |
| HandleScope scope(isolate_); |
| DebugScope debug_scope(this); |
| if (debug_scope.failed()) return; |
| @@ -2131,7 +2168,8 @@ void Debug::SetMessageHandler(v8::Debug::MessageHandler handler) { |
| } |
| void Debug::UpdateState() { |
| - bool is_active = message_handler_ != NULL || !event_listener_.is_null(); |
| + bool is_active = message_handler_ != NULL || !event_listener_.is_null() || |
| + async_task_listener_ != NULL; |
| if (is_active || in_debug_scope()) { |
| // Note that the debug context could have already been loaded to |
| // bootstrap test cases. |