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