| OLD | NEW | 
|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/inspector/v8-debugger-agent-impl.h" | 5 #include "src/inspector/v8-debugger-agent-impl.h" | 
| 6 | 6 | 
| 7 #include <algorithm> | 7 #include <algorithm> | 
| 8 | 8 | 
| 9 #include "src/debug/debug-interface.h" | 9 #include "src/debug/debug-interface.h" | 
| 10 #include "src/inspector/injected-script.h" | 10 #include "src/inspector/injected-script.h" | 
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 176   enableImpl(); | 176   enableImpl(); | 
| 177   return Response::OK(); | 177   return Response::OK(); | 
| 178 } | 178 } | 
| 179 | 179 | 
| 180 Response V8DebuggerAgentImpl::disable() { | 180 Response V8DebuggerAgentImpl::disable() { | 
| 181   if (!enabled()) return Response::OK(); | 181   if (!enabled()) return Response::OK(); | 
| 182 | 182 | 
| 183   m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, | 183   m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, | 
| 184                      protocol::DictionaryValue::create()); | 184                      protocol::DictionaryValue::create()); | 
| 185   m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, | 185   m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, | 
| 186                       v8::DebugInterface::NoBreakOnException); | 186                       v8::debug::NoBreakOnException); | 
| 187   m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0); | 187   m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0); | 
| 188 | 188 | 
| 189   if (!m_pausedContext.IsEmpty()) m_debugger->continueProgram(); | 189   if (!m_pausedContext.IsEmpty()) m_debugger->continueProgram(); | 
| 190   m_debugger->disable(); | 190   m_debugger->disable(); | 
| 191   m_pausedContext.Reset(); | 191   m_pausedContext.Reset(); | 
| 192   JavaScriptCallFrames emptyCallFrames; | 192   JavaScriptCallFrames emptyCallFrames; | 
| 193   m_pausedCallFrames.swap(emptyCallFrames); | 193   m_pausedCallFrames.swap(emptyCallFrames); | 
| 194   m_scripts.clear(); | 194   m_scripts.clear(); | 
| 195   m_blackboxedPositions.clear(); | 195   m_blackboxedPositions.clear(); | 
| 196   m_breakpointIdToDebuggerBreakpointIds.clear(); | 196   m_breakpointIdToDebuggerBreakpointIds.clear(); | 
| (...skipping 17 matching lines...) Expand all  Loading... | 
| 214 | 214 | 
| 215 void V8DebuggerAgentImpl::restore() { | 215 void V8DebuggerAgentImpl::restore() { | 
| 216   DCHECK(!m_enabled); | 216   DCHECK(!m_enabled); | 
| 217   if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false)) | 217   if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false)) | 
| 218     return; | 218     return; | 
| 219   if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) | 219   if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) | 
| 220     return; | 220     return; | 
| 221 | 221 | 
| 222   enableImpl(); | 222   enableImpl(); | 
| 223 | 223 | 
| 224   int pauseState = v8::DebugInterface::NoBreakOnException; | 224   int pauseState = v8::debug::NoBreakOnException; | 
| 225   m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState); | 225   m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState); | 
| 226   setPauseOnExceptionsImpl(pauseState); | 226   setPauseOnExceptionsImpl(pauseState); | 
| 227 | 227 | 
| 228   m_skipAllPauses = | 228   m_skipAllPauses = | 
| 229       m_state->booleanProperty(DebuggerAgentState::skipAllPauses, false); | 229       m_state->booleanProperty(DebuggerAgentState::skipAllPauses, false); | 
| 230 | 230 | 
| 231   int asyncCallStackDepth = 0; | 231   int asyncCallStackDepth = 0; | 
| 232   m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, | 232   m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, | 
| 233                       &asyncCallStackDepth); | 233                       &asyncCallStackDepth); | 
| 234   m_debugger->setAsyncCallStackDepth(this, asyncCallStackDepth); | 234   m_debugger->setAsyncCallStackDepth(this, asyncCallStackDepth); | 
| (...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 719   m_recursionLevelForStepOut = 1; | 719   m_recursionLevelForStepOut = 1; | 
| 720   m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); | 720   m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); | 
| 721   m_session->releaseObjectGroup(kBacktraceObjectGroup); | 721   m_session->releaseObjectGroup(kBacktraceObjectGroup); | 
| 722   m_debugger->stepOutOfFunction(); | 722   m_debugger->stepOutOfFunction(); | 
| 723   return Response::OK(); | 723   return Response::OK(); | 
| 724 } | 724 } | 
| 725 | 725 | 
| 726 Response V8DebuggerAgentImpl::setPauseOnExceptions( | 726 Response V8DebuggerAgentImpl::setPauseOnExceptions( | 
| 727     const String16& stringPauseState) { | 727     const String16& stringPauseState) { | 
| 728   if (!enabled()) return Response::Error(kDebuggerNotEnabled); | 728   if (!enabled()) return Response::Error(kDebuggerNotEnabled); | 
| 729   v8::DebugInterface::ExceptionBreakState pauseState; | 729   v8::debug::ExceptionBreakState pauseState; | 
| 730   if (stringPauseState == "none") { | 730   if (stringPauseState == "none") { | 
| 731     pauseState = v8::DebugInterface::NoBreakOnException; | 731     pauseState = v8::debug::NoBreakOnException; | 
| 732   } else if (stringPauseState == "all") { | 732   } else if (stringPauseState == "all") { | 
| 733     pauseState = v8::DebugInterface::BreakOnAnyException; | 733     pauseState = v8::debug::BreakOnAnyException; | 
| 734   } else if (stringPauseState == "uncaught") { | 734   } else if (stringPauseState == "uncaught") { | 
| 735     pauseState = v8::DebugInterface::BreakOnUncaughtException; | 735     pauseState = v8::debug::BreakOnUncaughtException; | 
| 736   } else { | 736   } else { | 
| 737     return Response::Error("Unknown pause on exceptions mode: " + | 737     return Response::Error("Unknown pause on exceptions mode: " + | 
| 738                            stringPauseState); | 738                            stringPauseState); | 
| 739   } | 739   } | 
| 740   setPauseOnExceptionsImpl(pauseState); | 740   setPauseOnExceptionsImpl(pauseState); | 
| 741   return Response::OK(); | 741   return Response::OK(); | 
| 742 } | 742 } | 
| 743 | 743 | 
| 744 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(int pauseState) { | 744 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(int pauseState) { | 
| 745   m_debugger->setPauseOnExceptionsState( | 745   m_debugger->setPauseOnExceptionsState( | 
| 746       static_cast<v8::DebugInterface::ExceptionBreakState>(pauseState)); | 746       static_cast<v8::debug::ExceptionBreakState>(pauseState)); | 
| 747   m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseState); | 747   m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseState); | 
| 748 } | 748 } | 
| 749 | 749 | 
| 750 Response V8DebuggerAgentImpl::evaluateOnCallFrame( | 750 Response V8DebuggerAgentImpl::evaluateOnCallFrame( | 
| 751     const String16& callFrameId, const String16& expression, | 751     const String16& callFrameId, const String16& expression, | 
| 752     Maybe<String16> objectGroup, Maybe<bool> includeCommandLineAPI, | 752     Maybe<String16> objectGroup, Maybe<bool> includeCommandLineAPI, | 
| 753     Maybe<bool> silent, Maybe<bool> returnByValue, Maybe<bool> generatePreview, | 753     Maybe<bool> silent, Maybe<bool> returnByValue, Maybe<bool> generatePreview, | 
| 754     std::unique_ptr<RemoteObject>* result, | 754     std::unique_ptr<RemoteObject>* result, | 
| 755     Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) { | 755     Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) { | 
| 756   if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused); | 756   if (m_pausedContext.IsEmpty()) return Response::Error(kDebuggerNotPaused); | 
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 930 } | 930 } | 
| 931 | 931 | 
| 932 Response V8DebuggerAgentImpl::currentCallFrames( | 932 Response V8DebuggerAgentImpl::currentCallFrames( | 
| 933     std::unique_ptr<Array<CallFrame>>* result) { | 933     std::unique_ptr<Array<CallFrame>>* result) { | 
| 934   if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) { | 934   if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) { | 
| 935     *result = Array<CallFrame>::create(); | 935     *result = Array<CallFrame>::create(); | 
| 936     return Response::OK(); | 936     return Response::OK(); | 
| 937   } | 937   } | 
| 938   v8::HandleScope handles(m_isolate); | 938   v8::HandleScope handles(m_isolate); | 
| 939   v8::Local<v8::Context> debuggerContext = | 939   v8::Local<v8::Context> debuggerContext = | 
| 940       v8::DebugInterface::GetDebugContext(m_isolate); | 940       v8::debug::GetDebugContext(m_isolate); | 
| 941   v8::Context::Scope contextScope(debuggerContext); | 941   v8::Context::Scope contextScope(debuggerContext); | 
| 942 | 942 | 
| 943   v8::Local<v8::Array> objects = v8::Array::New(m_isolate); | 943   v8::Local<v8::Array> objects = v8::Array::New(m_isolate); | 
| 944 | 944 | 
| 945   for (size_t frameOrdinal = 0; frameOrdinal < m_pausedCallFrames.size(); | 945   for (size_t frameOrdinal = 0; frameOrdinal < m_pausedCallFrames.size(); | 
| 946        ++frameOrdinal) { | 946        ++frameOrdinal) { | 
| 947     const std::unique_ptr<JavaScriptCallFrame>& currentCallFrame = | 947     const std::unique_ptr<JavaScriptCallFrame>& currentCallFrame = | 
| 948         m_pausedCallFrames[frameOrdinal]; | 948         m_pausedCallFrames[frameOrdinal]; | 
| 949 | 949 | 
| 950     v8::Local<v8::Object> details = currentCallFrame->details(); | 950     v8::Local<v8::Object> details = currentCallFrame->details(); | 
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1229   m_scheduledDebuggerStep = NoStep; | 1229   m_scheduledDebuggerStep = NoStep; | 
| 1230   m_steppingFromFramework = false; | 1230   m_steppingFromFramework = false; | 
| 1231   m_pausingOnNativeEvent = false; | 1231   m_pausingOnNativeEvent = false; | 
| 1232   m_debugger->breakProgram(); | 1232   m_debugger->breakProgram(); | 
| 1233 } | 1233 } | 
| 1234 | 1234 | 
| 1235 void V8DebuggerAgentImpl::breakProgramOnException( | 1235 void V8DebuggerAgentImpl::breakProgramOnException( | 
| 1236     const String16& breakReason, | 1236     const String16& breakReason, | 
| 1237     std::unique_ptr<protocol::DictionaryValue> data) { | 1237     std::unique_ptr<protocol::DictionaryValue> data) { | 
| 1238   if (!enabled() || | 1238   if (!enabled() || | 
| 1239       m_debugger->getPauseOnExceptionsState() == | 1239       m_debugger->getPauseOnExceptionsState() == v8::debug::NoBreakOnException) | 
| 1240           v8::DebugInterface::NoBreakOnException) |  | 
| 1241     return; | 1240     return; | 
| 1242   breakProgram(breakReason, std::move(data)); | 1241   breakProgram(breakReason, std::move(data)); | 
| 1243 } | 1242 } | 
| 1244 | 1243 | 
| 1245 void V8DebuggerAgentImpl::clearBreakDetails() { | 1244 void V8DebuggerAgentImpl::clearBreakDetails() { | 
| 1246   m_breakReason = protocol::Debugger::Paused::ReasonEnum::Other; | 1245   m_breakReason = protocol::Debugger::Paused::ReasonEnum::Other; | 
| 1247   m_breakAuxData = nullptr; | 1246   m_breakAuxData = nullptr; | 
| 1248 } | 1247 } | 
| 1249 | 1248 | 
| 1250 void V8DebuggerAgentImpl::setBreakpointAt(const String16& scriptId, | 1249 void V8DebuggerAgentImpl::setBreakpointAt(const String16& scriptId, | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 1266 | 1265 | 
| 1267 void V8DebuggerAgentImpl::reset() { | 1266 void V8DebuggerAgentImpl::reset() { | 
| 1268   if (!enabled()) return; | 1267   if (!enabled()) return; | 
| 1269   m_scheduledDebuggerStep = NoStep; | 1268   m_scheduledDebuggerStep = NoStep; | 
| 1270   m_scripts.clear(); | 1269   m_scripts.clear(); | 
| 1271   m_blackboxedPositions.clear(); | 1270   m_blackboxedPositions.clear(); | 
| 1272   m_breakpointIdToDebuggerBreakpointIds.clear(); | 1271   m_breakpointIdToDebuggerBreakpointIds.clear(); | 
| 1273 } | 1272 } | 
| 1274 | 1273 | 
| 1275 }  // namespace v8_inspector | 1274 }  // namespace v8_inspector | 
| OLD | NEW | 
|---|