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. |