| 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 1032 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 void V8DebuggerAgentImpl::didParseSource( | 1045 void V8DebuggerAgentImpl::didParseSource( |
| 1046 std::unique_ptr<V8DebuggerScript> script, bool success) { | 1046 std::unique_ptr<V8DebuggerScript> script, bool success) { |
| 1047 v8::HandleScope handles(m_isolate); | 1047 v8::HandleScope handles(m_isolate); |
| 1048 String16 scriptSource = script->source(m_isolate); | 1048 String16 scriptSource = script->source(m_isolate); |
| 1049 if (!success) script->setSourceURL(findSourceURL(scriptSource, false)); | 1049 if (!success) script->setSourceURL(findSourceURL(scriptSource, false)); |
| 1050 if (!success) | 1050 if (!success) |
| 1051 script->setSourceMappingURL(findSourceMapURL(scriptSource, false)); | 1051 script->setSourceMappingURL(findSourceMapURL(scriptSource, false)); |
| 1052 | 1052 |
| 1053 int contextId = script->executionContextId(); |
| 1054 int contextGroupId = m_inspector->contextGroupId(contextId); |
| 1055 InspectedContext* inspected = |
| 1056 m_inspector->getContext(contextGroupId, contextId); |
| 1053 std::unique_ptr<protocol::DictionaryValue> executionContextAuxData; | 1057 std::unique_ptr<protocol::DictionaryValue> executionContextAuxData; |
| 1054 if (!script->executionContextAuxData().isEmpty()) | 1058 if (inspected) { |
| 1059 // Script reused between different groups/sessions can have a stale |
| 1060 // execution context id. |
| 1055 executionContextAuxData = protocol::DictionaryValue::cast( | 1061 executionContextAuxData = protocol::DictionaryValue::cast( |
| 1056 protocol::StringUtil::parseJSON(script->executionContextAuxData())); | 1062 protocol::StringUtil::parseJSON(inspected->auxData())); |
| 1063 } |
| 1057 bool isLiveEdit = script->isLiveEdit(); | 1064 bool isLiveEdit = script->isLiveEdit(); |
| 1058 bool hasSourceURL = script->hasSourceURL(); | 1065 bool hasSourceURL = script->hasSourceURL(); |
| 1059 String16 scriptId = script->scriptId(); | 1066 String16 scriptId = script->scriptId(); |
| 1060 String16 scriptURL = script->sourceURL(); | 1067 String16 scriptURL = script->sourceURL(); |
| 1061 | 1068 |
| 1062 m_scripts[scriptId] = std::move(script); | 1069 m_scripts[scriptId] = std::move(script); |
| 1063 | 1070 |
| 1064 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId); | 1071 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId); |
| 1065 DCHECK(scriptIterator != m_scripts.end()); | 1072 DCHECK(scriptIterator != m_scripts.end()); |
| 1066 V8DebuggerScript* scriptRef = scriptIterator->second.get(); | 1073 V8DebuggerScript* scriptRef = scriptIterator->second.get(); |
| 1067 | 1074 |
| 1068 Maybe<String16> sourceMapURLParam = scriptRef->sourceMappingURL(); | 1075 Maybe<String16> sourceMapURLParam = scriptRef->sourceMappingURL(); |
| 1069 Maybe<protocol::DictionaryValue> executionContextAuxDataParam( | 1076 Maybe<protocol::DictionaryValue> executionContextAuxDataParam( |
| 1070 std::move(executionContextAuxData)); | 1077 std::move(executionContextAuxData)); |
| 1071 const bool* isLiveEditParam = isLiveEdit ? &isLiveEdit : nullptr; | 1078 const bool* isLiveEditParam = isLiveEdit ? &isLiveEdit : nullptr; |
| 1072 const bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : nullptr; | 1079 const bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : nullptr; |
| 1073 if (success) | 1080 if (success) |
| 1074 m_frontend.scriptParsed( | 1081 m_frontend.scriptParsed( |
| 1075 scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(), | 1082 scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(), |
| 1076 scriptRef->endLine(), scriptRef->endColumn(), | 1083 scriptRef->endLine(), scriptRef->endColumn(), contextId, |
| 1077 scriptRef->executionContextId(), scriptRef->hash(m_isolate), | 1084 scriptRef->hash(m_isolate), std::move(executionContextAuxDataParam), |
| 1078 std::move(executionContextAuxDataParam), isLiveEditParam, | 1085 isLiveEditParam, std::move(sourceMapURLParam), hasSourceURLParam); |
| 1079 std::move(sourceMapURLParam), hasSourceURLParam); | |
| 1080 else | 1086 else |
| 1081 m_frontend.scriptFailedToParse( | 1087 m_frontend.scriptFailedToParse( |
| 1082 scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(), | 1088 scriptId, scriptURL, scriptRef->startLine(), scriptRef->startColumn(), |
| 1083 scriptRef->endLine(), scriptRef->endColumn(), | 1089 scriptRef->endLine(), scriptRef->endColumn(), contextId, |
| 1084 scriptRef->executionContextId(), scriptRef->hash(m_isolate), | 1090 scriptRef->hash(m_isolate), std::move(executionContextAuxDataParam), |
| 1085 std::move(executionContextAuxDataParam), std::move(sourceMapURLParam), | 1091 std::move(sourceMapURLParam), hasSourceURLParam); |
| 1086 hasSourceURLParam); | |
| 1087 | 1092 |
| 1088 if (scriptURL.isEmpty() || !success) return; | 1093 if (scriptURL.isEmpty() || !success) return; |
| 1089 | 1094 |
| 1090 protocol::DictionaryValue* breakpointsCookie = | 1095 protocol::DictionaryValue* breakpointsCookie = |
| 1091 m_state->getObject(DebuggerAgentState::javaScriptBreakpoints); | 1096 m_state->getObject(DebuggerAgentState::javaScriptBreakpoints); |
| 1092 if (!breakpointsCookie) return; | 1097 if (!breakpointsCookie) return; |
| 1093 | 1098 |
| 1094 for (size_t i = 0; i < breakpointsCookie->size(); ++i) { | 1099 for (size_t i = 0; i < breakpointsCookie->size(); ++i) { |
| 1095 auto cookie = breakpointsCookie->at(i); | 1100 auto cookie = breakpointsCookie->at(i); |
| 1096 protocol::DictionaryValue* breakpointObject = | 1101 protocol::DictionaryValue* breakpointObject = |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1143 if (!topCallFrame) return RequestContinue; | 1148 if (!topCallFrame) return RequestContinue; |
| 1144 | 1149 |
| 1145 DCHECK(m_pausedContext.IsEmpty()); | 1150 DCHECK(m_pausedContext.IsEmpty()); |
| 1146 JavaScriptCallFrames frames = m_debugger->currentCallFrames(); | 1151 JavaScriptCallFrames frames = m_debugger->currentCallFrames(); |
| 1147 m_pausedCallFrames.swap(frames); | 1152 m_pausedCallFrames.swap(frames); |
| 1148 m_pausedContext.Reset(m_isolate, context); | 1153 m_pausedContext.Reset(m_isolate, context); |
| 1149 v8::HandleScope handles(m_isolate); | 1154 v8::HandleScope handles(m_isolate); |
| 1150 | 1155 |
| 1151 if (!exception.IsEmpty()) { | 1156 if (!exception.IsEmpty()) { |
| 1152 InjectedScript* injectedScript = nullptr; | 1157 InjectedScript* injectedScript = nullptr; |
| 1153 m_session->findInjectedScript(V8Debugger::contextId(context), | 1158 m_session->findInjectedScript(InspectedContext::contextId(context), |
| 1154 injectedScript); | 1159 injectedScript); |
| 1155 if (injectedScript) { | 1160 if (injectedScript) { |
| 1156 m_breakReason = | 1161 m_breakReason = |
| 1157 isPromiseRejection | 1162 isPromiseRejection |
| 1158 ? protocol::Debugger::Paused::ReasonEnum::PromiseRejection | 1163 ? protocol::Debugger::Paused::ReasonEnum::PromiseRejection |
| 1159 : protocol::Debugger::Paused::ReasonEnum::Exception; | 1164 : protocol::Debugger::Paused::ReasonEnum::Exception; |
| 1160 std::unique_ptr<protocol::Runtime::RemoteObject> obj; | 1165 std::unique_ptr<protocol::Runtime::RemoteObject> obj; |
| 1161 injectedScript->wrapObject(exception, kBacktraceObjectGroup, false, false, | 1166 injectedScript->wrapObject(exception, kBacktraceObjectGroup, false, false, |
| 1162 &obj); | 1167 &obj); |
| 1163 if (obj) { | 1168 if (obj) { |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 | 1267 |
| 1263 void V8DebuggerAgentImpl::reset() { | 1268 void V8DebuggerAgentImpl::reset() { |
| 1264 if (!enabled()) return; | 1269 if (!enabled()) return; |
| 1265 m_scheduledDebuggerStep = NoStep; | 1270 m_scheduledDebuggerStep = NoStep; |
| 1266 m_scripts.clear(); | 1271 m_scripts.clear(); |
| 1267 m_blackboxedPositions.clear(); | 1272 m_blackboxedPositions.clear(); |
| 1268 m_breakpointIdToDebuggerBreakpointIds.clear(); | 1273 m_breakpointIdToDebuggerBreakpointIds.clear(); |
| 1269 } | 1274 } |
| 1270 | 1275 |
| 1271 } // namespace v8_inspector | 1276 } // namespace v8_inspector |
| OLD | NEW |