Chromium Code Reviews| Index: src/inspector/v8-debugger.cc |
| diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc |
| index 39cc556fb920bebb164c7b077e7aef6e340dd837..51346ed787e6ae509ae42fb11689077a8e0b867a 100644 |
| --- a/src/inspector/v8-debugger.cc |
| +++ b/src/inspector/v8-debugger.cc |
| @@ -72,6 +72,8 @@ void V8Debugger::enable() { |
| v8::External::New(m_isolate, this)); |
| v8::debug::SetAsyncTaskListener(m_isolate, &V8Debugger::v8AsyncTaskListener, |
| this); |
| + v8::debug::SetCompileEventListener(m_isolate, |
| + &V8Debugger::v8CompileEventListener, 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,6 +90,7 @@ void V8Debugger::disable() { |
| m_wasmTranslation.Clear(); |
| v8::debug::SetDebugEventListener(m_isolate, nullptr); |
| v8::debug::SetAsyncTaskListener(m_isolate, nullptr, nullptr); |
| + v8::debug::SetCompileEventListener(m_isolate, nullptr, nullptr); |
| } |
| bool V8Debugger::enabled() const { return !m_debuggerScript.IsEmpty(); } |
| @@ -536,9 +539,7 @@ void V8Debugger::handleV8DebugEvent( |
| v8::HandleScope scope(m_isolate); |
| v8::DebugEvent event = eventDetails.GetEvent(); |
| - if (event != v8::Break && event != v8::Exception && |
| - event != v8::AfterCompile && event != v8::CompileError) |
| - return; |
| + if (event != v8::Break && event != v8::Exception) return; |
| v8::Local<v8::Context> eventContext = eventDetails.GetEventContext(); |
| DCHECK(!eventContext.IsEmpty()); |
| @@ -546,28 +547,7 @@ void V8Debugger::handleV8DebugEvent( |
| m_inspector->contextGroupId(eventContext)); |
| if (!agent) return; |
| - if (event == v8::AfterCompile || event == v8::CompileError) { |
| - v8::Context::Scope contextScope(debuggerContext()); |
| - // Determine if the script is a wasm script. |
| - v8::Local<v8::Value> scriptMirror = |
| - callInternalGetterFunction(eventDetails.GetEventData(), "script"); |
| - DCHECK(scriptMirror->IsObject()); |
| - v8::Local<v8::Value> scriptWrapper = |
| - callInternalGetterFunction(scriptMirror.As<v8::Object>(), "value"); |
| - DCHECK(scriptWrapper->IsObject()); |
| - v8::Local<v8::debug::Script> script; |
| - if (!v8::debug::Script::Wrap(m_isolate, scriptWrapper.As<v8::Object>()) |
| - .ToLocal(&script)) { |
| - return; |
| - } |
| - if (script->IsWasm()) { |
| - m_wasmTranslation.AddScript(script.As<v8::debug::WasmScript>(), agent); |
| - } else if (m_ignoreScriptParsedEventsCounter == 0) { |
| - agent->didParseSource( |
| - V8DebuggerScript::Create(m_isolate, script, inLiveEditScope), |
| - event == v8::AfterCompile); |
| - } |
| - } else if (event == v8::Exception) { |
| + if (event == v8::Exception) { |
| v8::Local<v8::Context> context = debuggerContext(); |
| v8::Local<v8::Object> eventData = eventDetails.GetEventData(); |
| v8::Local<v8::Value> exception = |
| @@ -593,6 +573,27 @@ void V8Debugger::handleV8DebugEvent( |
| } |
| } |
| +void V8Debugger::v8CompileEventListener(v8::Local<v8::debug::Script> script, |
| + bool has_compile_error, void* data) { |
| + V8Debugger* debugger = static_cast<V8Debugger*>(data); |
| + v8::Local<v8::Value> contextData; |
| + if (!script->ContextData().ToLocal(&contextData) || !contextData->IsInt32()) { |
| + return; |
| + } |
| + int contextId = static_cast<int>(contextData.As<v8::Int32>()->Value()); |
| + V8DebuggerAgentImpl* agent = |
| + debugger->m_inspector->enabledDebuggerAgentForGroup(contextId); |
|
dgozman
2017/01/18 18:18:29
contextId is not a group id.
kozy
2017/01/18 20:00:02
Done.
|
| + if (!agent) return; |
| + if (script->IsWasm()) { |
| + debugger->m_wasmTranslation.AddScript(script.As<v8::debug::WasmScript>(), |
| + agent); |
| + } else if (debugger->m_ignoreScriptParsedEventsCounter == 0) { |
| + agent->didParseSource( |
| + V8DebuggerScript::Create(debugger->m_isolate, script, inLiveEditScope), |
| + !has_compile_error); |
| + } |
| +} |
| + |
| void V8Debugger::v8AsyncTaskListener(v8::debug::PromiseDebugActionType type, |
| int id, void* data) { |
| V8Debugger* debugger = static_cast<V8Debugger*>(data); |