Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1593)

Unified Diff: src/inspector/v8-debugger.cc

Issue 2622253004: [inspector] introduced debug::SetBreakEventListener,SetExceptionEventListener (Closed)
Patch Set: ready for review Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger.cc
diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc
index 51346ed787e6ae509ae42fb11689077a8e0b867a..7c198d7b93550c1c7e2816007d72f0afeda70cff 100644
--- a/src/inspector/v8-debugger.cc
+++ b/src/inspector/v8-debugger.cc
@@ -68,12 +68,14 @@ void V8Debugger::enable() {
if (m_enableCount++) return;
DCHECK(!enabled());
v8::HandleScope scope(m_isolate);
- v8::debug::SetDebugEventListener(m_isolate, &V8Debugger::v8DebugEventCallback,
- v8::External::New(m_isolate, this));
v8::debug::SetAsyncTaskListener(m_isolate, &V8Debugger::v8AsyncTaskListener,
this);
v8::debug::SetCompileEventListener(m_isolate,
&V8Debugger::v8CompileEventListener, this);
+ v8::debug::SetBreakEventListener(m_isolate, &V8Debugger::v8BreakEventListener,
+ this);
+ v8::debug::SetExceptionEventListener(
+ m_isolate, &V8Debugger::v8ExceptionEventListener, this);
m_debuggerContext.Reset(m_isolate, v8::debug::GetDebugContext(m_isolate));
v8::debug::ChangeBreakOnException(m_isolate, v8::debug::NoBreakOnException);
m_pauseOnExceptionsState = v8::debug::NoBreakOnException;
@@ -88,9 +90,12 @@ void V8Debugger::disable() {
m_debuggerContext.Reset();
allAsyncTasksCanceled();
m_wasmTranslation.Clear();
- v8::debug::SetDebugEventListener(m_isolate, nullptr);
v8::debug::SetAsyncTaskListener(m_isolate, nullptr, nullptr);
v8::debug::SetCompileEventListener(m_isolate, nullptr, nullptr);
+ v8::debug::SetBreakEventListener(m_isolate, nullptr, nullptr);
+ v8::debug::SetExceptionEventListener(m_isolate, nullptr, nullptr);
+ v8::debug::SetBreakEventListener(m_isolate, nullptr, nullptr);
jgruber 2017/01/17 08:55:11 Double copy-and-paste
+ v8::debug::SetExceptionEventListener(m_isolate, nullptr, nullptr);
}
bool V8Debugger::enabled() const { return !m_debuggerScript.IsEmpty(); }
@@ -512,67 +517,6 @@ void V8Debugger::handleProgramBreak(v8::Local<v8::Context> pausedContext,
}
}
-void V8Debugger::v8DebugEventCallback(
- const v8::debug::EventDetails& eventDetails) {
- V8Debugger* thisPtr = toV8Debugger(eventDetails.GetCallbackData());
- thisPtr->handleV8DebugEvent(eventDetails);
-}
-
-v8::Local<v8::Value> V8Debugger::callInternalGetterFunction(
- v8::Local<v8::Object> object, const char* functionName) {
- v8::MicrotasksScope microtasks(m_isolate,
- v8::MicrotasksScope::kDoNotRunMicrotasks);
- v8::Local<v8::Value> getterValue =
- object
- ->Get(m_isolate->GetCurrentContext(),
- toV8StringInternalized(m_isolate, functionName))
- .ToLocalChecked();
- DCHECK(!getterValue.IsEmpty() && getterValue->IsFunction());
- return v8::Local<v8::Function>::Cast(getterValue)
- ->Call(m_isolate->GetCurrentContext(), object, 0, nullptr)
- .ToLocalChecked();
-}
-
-void V8Debugger::handleV8DebugEvent(
- const v8::debug::EventDetails& eventDetails) {
- if (!enabled()) return;
- v8::HandleScope scope(m_isolate);
-
- v8::DebugEvent event = eventDetails.GetEvent();
- if (event != v8::Break && event != v8::Exception) return;
-
- v8::Local<v8::Context> eventContext = eventDetails.GetEventContext();
- DCHECK(!eventContext.IsEmpty());
- V8DebuggerAgentImpl* agent = m_inspector->enabledDebuggerAgentForGroup(
- m_inspector->contextGroupId(eventContext));
- if (!agent) return;
-
- if (event == v8::Exception) {
- v8::Local<v8::Context> context = debuggerContext();
- v8::Local<v8::Object> eventData = eventDetails.GetEventData();
- v8::Local<v8::Value> exception =
- callInternalGetterFunction(eventData, "exception");
- v8::Local<v8::Value> promise =
- callInternalGetterFunction(eventData, "promise");
- bool isPromiseRejection = !promise.IsEmpty() && promise->IsObject();
- v8::Local<v8::Value> uncaught =
- callInternalGetterFunction(eventData, "uncaught");
- bool isUncaught = uncaught->BooleanValue(context).FromJust();
- handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
- exception, v8::Local<v8::Array>(), isPromiseRejection,
- isUncaught);
- } else if (event == v8::Break) {
- v8::Local<v8::Value> argv[] = {eventDetails.GetEventData()};
- v8::Local<v8::Value> hitBreakpoints;
- if (!callDebuggerMethod("getBreakpointNumbers", 1, argv)
- .ToLocal(&hitBreakpoints))
- return;
- DCHECK(hitBreakpoints->IsArray());
- handleProgramBreak(eventContext, eventDetails.GetExecutionState(),
- v8::Local<v8::Value>(), hitBreakpoints.As<v8::Array>());
- }
-}
-
void V8Debugger::v8CompileEventListener(v8::Local<v8::debug::Script> script,
bool has_compile_error, void* data) {
V8Debugger* debugger = static_cast<V8Debugger*>(data);
@@ -594,6 +538,33 @@ void V8Debugger::v8CompileEventListener(v8::Local<v8::debug::Script> script,
}
}
+void V8Debugger::v8BreakEventListener(v8::Local<v8::Context> pausedContext,
+ v8::Local<v8::Object> execState,
+ v8::Local<v8::Value> breakPointsHit,
+ void* data) {
+ V8Debugger* debugger = static_cast<V8Debugger*>(data);
+ v8::Local<v8::Value> argv[] = {breakPointsHit};
+ v8::Local<v8::Value> hitBreakpoints;
+ if (!debugger->callDebuggerMethod("getBreakpointNumbers", 1, argv)
+ .ToLocal(&hitBreakpoints)) {
+ return;
+ }
+ DCHECK(hitBreakpoints->IsArray());
+ debugger->handleProgramBreak(pausedContext, execState, v8::Local<v8::Value>(),
+ hitBreakpoints.As<v8::Array>());
+}
+
+void V8Debugger::v8ExceptionEventListener(v8::Local<v8::Context> pausedContext,
+ v8::Local<v8::Object> execState,
+ v8::Local<v8::Value> exception,
+ bool isPromiseRejection,
+ bool isUncaught, void* data) {
+ V8Debugger* debugger = static_cast<V8Debugger*>(data);
+ debugger->handleProgramBreak(pausedContext, execState, exception,
+ v8::Local<v8::Array>(), isPromiseRejection,
+ isUncaught);
+}
+
void V8Debugger::v8AsyncTaskListener(v8::debug::PromiseDebugActionType type,
int id, void* data) {
V8Debugger* debugger = static_cast<V8Debugger*>(data);
« no previous file with comments | « src/inspector/v8-debugger.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698