| Index: src/debug/debug.cc
|
| diff --git a/src/debug/debug.cc b/src/debug/debug.cc
|
| index ac2c99eba1c612cc153d83d91a2b4d51957583c2..30fc2a1a660cd4f8b24b9d0c1eb11d21319d87c1 100644
|
| --- a/src/debug/debug.cc
|
| +++ b/src/debug/debug.cc
|
| @@ -1866,17 +1866,7 @@ void Debug::OnAsyncTaskEvent(debug::PromiseDebugActionType type, int id) {
|
|
|
| if (async_task_listener_) {
|
| async_task_listener_(type, id, async_task_listener_data_);
|
| - // There are three types of event listeners: C++ message_handler,
|
| - // JavaScript event listener and C++ event listener.
|
| - // Currently inspector still uses C++ event listener and installs
|
| - // more specific event listeners for part of events. Calling of
|
| - // C++ event listener is redundant when more specific event listener
|
| - // is presented. Other clients can install JavaScript event listener
|
| - // (e.g. some of NodeJS module).
|
| - bool non_inspector_listener_exists =
|
| - message_handler_ != nullptr ||
|
| - (event_listener_.is_null() && !event_listener_->IsForeign());
|
| - if (!non_inspector_listener_exists) return;
|
| + if (!non_inspector_listener_exists()) return;
|
| }
|
|
|
| HandleScope scope(isolate_);
|
| @@ -1955,6 +1945,12 @@ void Debug::CallEventCallback(v8::DebugEvent event,
|
| in_debug_event_listener_ = previous;
|
| }
|
|
|
| +void Debug::SetCompileEventListener(debug::CompileEventListener listener,
|
| + void* data) {
|
| + compile_event_listener_ = listener;
|
| + compile_event_listener_data_ = data;
|
| + UpdateState();
|
| +}
|
|
|
| void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) {
|
| if (ignore_events()) return;
|
| @@ -1963,12 +1959,18 @@ void Debug::ProcessCompileEvent(v8::DebugEvent event, Handle<Script> script) {
|
| return;
|
| }
|
| SuppressDebug while_processing(this);
|
| -
|
| bool in_nested_debug_scope = in_debug_scope();
|
| - HandleScope scope(isolate_);
|
| DebugScope debug_scope(this);
|
| if (debug_scope.failed()) return;
|
|
|
| + if (compile_event_listener_) {
|
| + compile_event_listener_(ToApiHandle<debug::Script>(script),
|
| + event != v8::AfterCompile,
|
| + compile_event_listener_data_);
|
| + if (!non_inspector_listener_exists()) return;
|
| + }
|
| +
|
| + HandleScope scope(isolate_);
|
| // Create the compile state object.
|
| Handle<Object> event_data;
|
| // Bail out and don't call debugger if exception.
|
| @@ -2162,7 +2164,8 @@ void Debug::SetMessageHandler(v8::Debug::MessageHandler handler) {
|
|
|
| void Debug::UpdateState() {
|
| bool is_active = message_handler_ != nullptr || !event_listener_.is_null() ||
|
| - async_task_listener_ != nullptr;
|
| + async_task_listener_ != nullptr ||
|
| + compile_event_listener_ != nullptr;
|
| if (is_active || in_debug_scope()) {
|
| // Note that the debug context could have already been loaded to
|
| // bootstrap test cases.
|
|
|