OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium 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 "platform/v8_inspector/V8DebuggerAgentImpl.h" | 5 #include "platform/v8_inspector/V8DebuggerAgentImpl.h" |
6 | 6 |
7 #include "platform/inspector_protocol/String16.h" | 7 #include "platform/inspector_protocol/String16.h" |
8 #include "platform/inspector_protocol/Values.h" | 8 #include "platform/inspector_protocol/Values.h" |
9 #include "platform/v8_inspector/InjectedScript.h" | 9 #include "platform/v8_inspector/InjectedScript.h" |
10 #include "platform/v8_inspector/InspectedContext.h" | 10 #include "platform/v8_inspector/InspectedContext.h" |
(...skipping 27 matching lines...) Expand all Loading... | |
38 static const char v8AsyncTaskEventWillHandle[] = "willHandle"; | 38 static const char v8AsyncTaskEventWillHandle[] = "willHandle"; |
39 static const char v8AsyncTaskEventDidHandle[] = "didHandle"; | 39 static const char v8AsyncTaskEventDidHandle[] = "didHandle"; |
40 } | 40 } |
41 | 41 |
42 namespace blink { | 42 namespace blink { |
43 | 43 |
44 namespace DebuggerAgentState { | 44 namespace DebuggerAgentState { |
45 static const char javaScriptBreakpoints[] = "javaScriptBreakopints"; | 45 static const char javaScriptBreakpoints[] = "javaScriptBreakopints"; |
46 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState"; | 46 static const char pauseOnExceptionsState[] = "pauseOnExceptionsState"; |
47 static const char asyncCallStackDepth[] = "asyncCallStackDepth"; | 47 static const char asyncCallStackDepth[] = "asyncCallStackDepth"; |
48 static const char blackboxPatterns[] = "blackboxPatterns"; | |
49 static const char blackboxRangesByURL[] = "blackboxRangesByURL"; | |
50 static const char blackboxRangesByHash[] = "blackboxRangesByHash"; | |
51 static const char blackboxScriptsByURL[] = "blackboxScriptsByURL"; | |
52 static const char blackboxScriptsByHash[] = "blackboxScriptsByHash"; | |
48 | 53 |
49 // Breakpoint properties. | 54 // Breakpoint properties. |
50 static const char url[] = "url"; | 55 static const char url[] = "url"; |
51 static const char isRegex[] = "isRegex"; | 56 static const char isRegex[] = "isRegex"; |
52 static const char lineNumber[] = "lineNumber"; | 57 static const char lineNumber[] = "lineNumber"; |
53 static const char columnNumber[] = "columnNumber"; | 58 static const char columnNumber[] = "columnNumber"; |
54 static const char condition[] = "condition"; | 59 static const char condition[] = "condition"; |
55 static const char skipAllPauses[] = "skipAllPauses"; | 60 static const char skipAllPauses[] = "skipAllPauses"; |
56 | 61 |
57 } // namespace DebuggerAgentState; | 62 } // namespace DebuggerAgentState; |
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
229 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions); | 234 m_state->setNumber(DebuggerAgentState::pauseOnExceptionsState, V8DebuggerImp l::DontPauseOnExceptions); |
230 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0); | 235 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, 0); |
231 | 236 |
232 if (!m_pausedContext.IsEmpty()) | 237 if (!m_pausedContext.IsEmpty()) |
233 debugger().continueProgram(); | 238 debugger().continueProgram(); |
234 debugger().debuggerAgentDisabled(); | 239 debugger().debuggerAgentDisabled(); |
235 m_pausedContext.Reset(); | 240 m_pausedContext.Reset(); |
236 JavaScriptCallFrames emptyCallFrames; | 241 JavaScriptCallFrames emptyCallFrames; |
237 m_pausedCallFrames.swap(emptyCallFrames); | 242 m_pausedCallFrames.swap(emptyCallFrames); |
238 m_scripts.clear(); | 243 m_scripts.clear(); |
239 m_blackboxedPositions.clear(); | |
240 m_breakpointIdToDebuggerBreakpointIds.clear(); | 244 m_breakpointIdToDebuggerBreakpointIds.clear(); |
241 internalSetAsyncCallStackDepth(0); | 245 internalSetAsyncCallStackDepth(0); |
242 m_continueToLocationBreakpointId = String16(); | 246 m_continueToLocationBreakpointId = String16(); |
243 clearBreakDetails(); | 247 clearBreakDetails(); |
244 m_scheduledDebuggerStep = NoStep; | 248 m_scheduledDebuggerStep = NoStep; |
245 m_skipNextDebuggerStepOut = false; | 249 m_skipNextDebuggerStepOut = false; |
246 m_javaScriptPauseScheduled = false; | 250 m_javaScriptPauseScheduled = false; |
247 m_steppingFromFramework = false; | 251 m_steppingFromFramework = false; |
248 m_pausingOnNativeEvent = false; | 252 m_pausingOnNativeEvent = false; |
249 m_skippedStepFrameCount = 0; | 253 m_skippedStepFrameCount = 0; |
250 m_recursionLevelForStepFrame = 0; | 254 m_recursionLevelForStepFrame = 0; |
251 m_skipAllPauses = false; | 255 m_skipAllPauses = false; |
252 m_enabled = false; | 256 m_enabled = false; |
257 | |
258 m_blackboxPattern = nullptr; | |
259 m_blackboxRangesByHash.clear(); | |
260 m_blackboxRangesByURL.clear(); | |
253 } | 261 } |
254 | 262 |
255 void V8DebuggerAgentImpl::internalSetAsyncCallStackDepth(int depth) | 263 void V8DebuggerAgentImpl::internalSetAsyncCallStackDepth(int depth) |
256 { | 264 { |
257 if (depth <= 0) { | 265 if (depth <= 0) { |
258 m_maxAsyncCallStackDepth = 0; | 266 m_maxAsyncCallStackDepth = 0; |
259 allAsyncTasksCanceled(); | 267 allAsyncTasksCanceled(); |
260 } else { | 268 } else { |
261 m_maxAsyncCallStackDepth = depth; | 269 m_maxAsyncCallStackDepth = depth; |
262 } | 270 } |
(...skipping 14 matching lines...) Expand all Loading... | |
277 | 285 |
278 void V8DebuggerAgentImpl::restore() | 286 void V8DebuggerAgentImpl::restore() |
279 { | 287 { |
280 ASSERT(!m_enabled); | 288 ASSERT(!m_enabled); |
281 enable(); | 289 enable(); |
282 ErrorString error; | 290 ErrorString error; |
283 | 291 |
284 int pauseState = V8DebuggerImpl::DontPauseOnExceptions; | 292 int pauseState = V8DebuggerImpl::DontPauseOnExceptions; |
285 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState); | 293 m_state->getNumber(DebuggerAgentState::pauseOnExceptionsState, &pauseState); |
286 setPauseOnExceptionsImpl(&error, pauseState); | 294 setPauseOnExceptionsImpl(&error, pauseState); |
295 ASSERT(error.isEmpty()); | |
287 | 296 |
288 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); | 297 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); |
289 | 298 |
290 int asyncCallStackDepth = 0; | 299 int asyncCallStackDepth = 0; |
291 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth); | 300 m_state->getNumber(DebuggerAgentState::asyncCallStackDepth, &asyncCallStackD epth); |
292 internalSetAsyncCallStackDepth(asyncCallStackDepth); | 301 internalSetAsyncCallStackDepth(asyncCallStackDepth); |
302 | |
303 protocol::ListValue* blackboxPatternsValue = m_state->getArray(DebuggerAgent State::blackboxPatterns); | |
304 if (blackboxPatternsValue) { | |
305 protocol::ErrorSupport errors; | |
306 OwnPtr<protocol::Array<String16>> blackboxPatterns = protocol::Array<Str ing16>::parse(blackboxPatternsValue, &errors); | |
307 if (blackboxPatterns) | |
308 setBlackboxPatterns(&error, blackboxPatterns.release()); | |
309 ASSERT(!errors.hasErrors() && error.isEmpty()); | |
310 } | |
311 restoreBlackboxScripts(DebuggerAgentState::blackboxScriptsByHash, m_blackbox RangesByHash); | |
dgozman
2016/04/20 02:06:40
Can we use empty ranges as a meaning for "fully bl
| |
312 restoreBlackboxScripts(DebuggerAgentState::blackboxScriptsByURL, m_blackboxR angesByURL); | |
313 restoreBlackboxRanges(DebuggerAgentState::blackboxRangesByHash, m_blackboxRa ngesByHash); | |
314 restoreBlackboxRanges(DebuggerAgentState::blackboxRangesByURL, m_blackboxRan gesByURL); | |
315 } | |
316 | |
317 void V8DebuggerAgentImpl::restoreBlackboxScripts(const String16& key, BlackboxRa ngesByString& map) | |
318 { | |
319 protocol::ListValue* list = m_state->getArray(key); | |
320 if (!list) | |
321 return; | |
322 Vector<std::pair<int, int>> blackboxedRanges(1); | |
323 for (size_t i = 0; i < list->size(); ++i) { | |
324 protocol::Value* val = list->at(i); | |
325 String16 id; | |
326 bool success = val->asString(&id); | |
327 ASSERT_UNUSED(success, success); | |
328 map.set(id, blackboxedRanges); | |
329 } | |
330 } | |
331 | |
332 void V8DebuggerAgentImpl::restoreBlackboxRanges(const String16& key, BlackboxRan gesByString& map) | |
333 { | |
334 using protocol::Runtime::SourceRange; | |
335 | |
336 protocol::DictionaryValue* storedMap = m_state->getObject(key); | |
337 if (!storedMap) | |
338 return; | |
339 protocol::ErrorSupport errorSupport; | |
340 for (size_t i = 0; i < storedMap->size(); ++i) { | |
341 auto value = storedMap->at(i); | |
342 OwnPtr<protocol::Array<SourceRange>> ranges = protocol::Array<SourceRang e>::parse(value.second, &errorSupport); | |
343 ASSERT(!errorSupport.hasErrors()); | |
344 Vector<std::pair<int, int>> blackboxedRanges(ranges->length() * 2); | |
345 for (size_t i = 0; i < ranges->length(); ++i) { | |
346 SourceRange* range = ranges->get(i); | |
347 blackboxedRanges[i * 2] = std::make_pair(range->getStartLine(), rang e->getStartColumn()); | |
348 blackboxedRanges[i * 2 + 1] = std::make_pair(range->getEndLine(), ra nge->getEndColumn()); | |
349 } | |
350 map.set(value.first, blackboxedRanges); | |
351 } | |
293 } | 352 } |
294 | 353 |
295 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) | 354 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) |
296 { | 355 { |
297 if (!checkEnabled(errorString)) | 356 if (!checkEnabled(errorString)) |
298 return; | 357 return; |
299 debugger().setBreakpointsActivated(active); | 358 debugger().setBreakpointsActivated(active); |
300 } | 359 } |
301 | 360 |
302 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) | 361 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
498 | 557 |
499 bool V8DebuggerAgentImpl::isCallFrameWithUnknownScriptOrBlackboxed(JavaScriptCal lFrame* frame) | 558 bool V8DebuggerAgentImpl::isCallFrameWithUnknownScriptOrBlackboxed(JavaScriptCal lFrame* frame) |
500 { | 559 { |
501 if (!frame) | 560 if (!frame) |
502 return true; | 561 return true; |
503 ScriptsMap::iterator it = m_scripts.find(String16::number(frame->sourceID()) ); | 562 ScriptsMap::iterator it = m_scripts.find(String16::number(frame->sourceID()) ); |
504 if (it == m_scripts.end()) { | 563 if (it == m_scripts.end()) { |
505 // Unknown scripts are blackboxed. | 564 // Unknown scripts are blackboxed. |
506 return true; | 565 return true; |
507 } | 566 } |
508 auto itBlackboxedPositions = m_blackboxedPositions.find(String16::number(fra me->sourceID())); | 567 V8DebuggerScript* script = it->second; |
509 if (itBlackboxedPositions == m_blackboxedPositions.end()) | 568 if (m_blackboxPattern) { |
569 String16 scriptSourceURL = script->sourceURL(); | |
570 if (!scriptSourceURL.isEmpty() && m_blackboxPattern->match(scriptSourceU RL) != -1) | |
571 return true; | |
572 } | |
573 auto itBlackboxedRangesByHash = m_blackboxRangesByHash.find(script->hash()); | |
574 const Vector<std::pair<int, int>>* ranges = nullptr; | |
575 if (itBlackboxedRangesByHash != m_blackboxRangesByHash.end()) { | |
576 ranges = itBlackboxedRangesByHash->second; | |
577 } else { | |
578 auto itBlackboxedRangesByURL = m_blackboxRangesByURL.find(script->source URL()); | |
579 if (itBlackboxedRangesByURL != m_blackboxRangesByURL.end()) | |
580 ranges = itBlackboxedRangesByURL->second; | |
581 } | |
582 if (!ranges) | |
510 return false; | 583 return false; |
511 | |
512 protocol::Vector<std::pair<int, int>>* ranges = itBlackboxedPositions->secon d; | |
513 auto itRange = std::lower_bound(ranges->begin(), ranges->end(), std::make_pa ir(frame->line(), frame->column()), positionComparator); | 584 auto itRange = std::lower_bound(ranges->begin(), ranges->end(), std::make_pa ir(frame->line(), frame->column()), positionComparator); |
514 // Ranges array contains positions in script where blackbox state is changed . | 585 // Ranges array contains positions in script where blackbox state is changed . |
515 // [(0,0) ... ranges[0]) isn't blackboxed, [ranges[0] ... ranges[1]) is blac kboxed... | 586 // [(0,0) ... ranges[0]) isn't blackboxed, [ranges[0] ... ranges[1]) is blac kboxed... |
516 return std::distance(ranges->begin(), itRange) % 2; | 587 return std::distance(ranges->begin(), itRange) % 2; |
517 } | 588 } |
518 | 589 |
519 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::shouldSkipExceptionPa use(JavaScriptCallFrame* topCallFrame) | 590 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::shouldSkipExceptionPa use(JavaScriptCallFrame* topCallFrame) |
520 { | 591 { |
521 if (m_steppingFromFramework) | 592 if (m_steppingFromFramework) |
522 return RequestNoSkip; | 593 return RequestNoSkip; |
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1043 { | 1114 { |
1044 m_asyncTaskStacks.clear(); | 1115 m_asyncTaskStacks.clear(); |
1045 m_recurringTasks.clear(); | 1116 m_recurringTasks.clear(); |
1046 m_currentStacks.clear(); | 1117 m_currentStacks.clear(); |
1047 | 1118 |
1048 #if ENABLE(ASSERT) | 1119 #if ENABLE(ASSERT) |
1049 m_currentTasks.clear(); | 1120 m_currentTasks.clear(); |
1050 #endif | 1121 #endif |
1051 } | 1122 } |
1052 | 1123 |
1053 void V8DebuggerAgentImpl::setBlackboxedRanges(ErrorString* error, const String16 & scriptId, PassOwnPtr<protocol::Array<protocol::Debugger::ScriptPosition>> inPo sitions) | 1124 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* errorString, PassOwnP tr<protocol::Array<String16>> patterns) |
1054 { | 1125 { |
1055 if (!m_scripts.contains(scriptId)) { | 1126 if (!patterns->length()) { |
1056 *error = "No script with passed id."; | 1127 m_blackboxPattern = nullptr; |
1128 m_state->setArray(DebuggerAgentState::blackboxPatterns, patterns->serial ize()); | |
1057 return; | 1129 return; |
1058 } | 1130 } |
1059 | 1131 |
1060 if (!inPositions->length()) { | 1132 String16 pattern; |
1061 m_blackboxedPositions.remove(scriptId); | 1133 for (size_t i = 0; i < patterns->length() - 1; ++i) |
1134 pattern = pattern + patterns->get(i) + "|"; | |
1135 pattern = "(" + pattern + patterns->get(patterns->length() - 1) + ")"; | |
1136 | |
1137 OwnPtr<V8Regex> regex = adoptPtr(new V8Regex(m_debugger, pattern, true /** c aseSensitive */, false /** multiline */)); | |
1138 if (!regex->isValid()) { | |
1139 *errorString = "Pattern parser error: " + regex->errorMessage(); | |
1062 return; | 1140 return; |
1063 } | 1141 } |
1064 | 1142 |
1065 protocol::Vector<std::pair<int, int>> positions(inPositions->length()); | 1143 m_blackboxPattern = regex.release(); |
1066 for (size_t i = 0; i < positions.size(); ++i) { | 1144 m_state->setArray(DebuggerAgentState::blackboxPatterns, patterns->serialize( )); |
1067 protocol::Debugger::ScriptPosition* position = inPositions->get(i); | 1145 } |
1068 if (position->getLine() < 0) { | 1146 |
1069 *error = "Position missing 'line' or 'line' < 0."; | 1147 void V8DebuggerAgentImpl::setScriptBlackboxed(ErrorString* errorString, const Ma ybe<String16>& hash, const Maybe<String16>& url, const Maybe<protocol::Array<pro tocol::Runtime::SourceRange>>& optRanges) |
1070 return; | 1148 { |
1149 using protocol::Runtime::SourceRange; | |
1150 | |
1151 if (!hash.isJust() && !url.isJust()) { | |
1152 *errorString = "Hash or URL should be set"; | |
1153 return; | |
1154 } | |
1155 BlackboxRangesByString& idToBlackboxRanges = hash.isJust() ? m_blackboxRange sByHash : m_blackboxRangesByURL; | |
1156 String16 id = hash.isJust() ? hash.fromJust() : url.fromJust(); | |
1157 | |
1158 if (!optRanges.isJust()) { | |
1159 const String16& stateKey = hash.isJust() ? DebuggerAgentState::blackboxS criptsByHash : DebuggerAgentState::blackboxScriptsByURL; | |
1160 protocol::ListValue* stateBlackboxedScripts = m_state->getArray(stateKey ); | |
1161 if (!stateBlackboxedScripts) { | |
1162 m_state->setArray(stateKey, protocol::ListValue::create()); | |
1163 stateBlackboxedScripts = m_state->getArray(stateKey); | |
1071 } | 1164 } |
1072 if (position->getColumn() < 0) { | |
1073 *error = "Position missing 'column' or 'column' < 0."; | |
1074 return; | |
1075 } | |
1076 positions[i] = std::make_pair(position->getLine(), position->getColumn() ); | |
1077 } | |
1078 | 1165 |
1079 for (size_t i = 1; i < positions.size(); ++i) { | 1166 Vector<std::pair<int, int>> blackboxedRanges(1); |
1080 if (positions[i - 1].first < positions[i].first) | 1167 idToBlackboxRanges.set(id, blackboxedRanges); |
1081 continue; | 1168 stateBlackboxedScripts->pushValue(protocol::StringValue::create(id)); |
1082 if (positions[i - 1].first == positions[i].first && positions[i - 1].sec ond < positions[i].second) | |
1083 continue; | |
1084 *error = "Input positions array is not sorted or contains duplicate valu es."; | |
1085 return; | 1169 return; |
1086 } | 1170 } |
1087 | 1171 |
1088 m_blackboxedPositions.set(scriptId, positions); | 1172 const String16& stateKey = hash.isJust() ? DebuggerAgentState::blackboxRange sByHash : DebuggerAgentState::blackboxRangesByURL; |
1173 protocol::DictionaryValue* stateMap = m_state->getObject(stateKey); | |
1174 if (!stateMap) { | |
1175 m_state->setObject(stateKey, protocol::DictionaryValue::create()); | |
1176 stateMap = m_state->getObject(stateKey); | |
1177 } | |
1178 protocol::Array<SourceRange>* ranges = optRanges.fromJust(); | |
1179 if (!ranges->length()) { | |
1180 idToBlackboxRanges.remove(id); | |
1181 stateMap->remove(id); | |
1182 return; | |
1183 } | |
1184 | |
1185 String16 errors; | |
dgozman
2016/04/20 02:06:40
Let's extract validation into a helper function.
| |
1186 for (size_t i = 0; i < ranges->length(); ++i) { | |
1187 SourceRange* range = ranges->get(i); | |
1188 if (range->getStartLine() > range->getEndLine()) | |
1189 errors = errors + " 'startLine' should be not more then 'endLine' in (" + String16::number(i + 1) + ")."; | |
1190 if (range->getStartLine() == range->getEndLine() && range->getStartColum n() >= range->getEndColumn()) | |
1191 errors = errors + " 'startColumn' should be less then 'endColumn' if 'startLine' == 'endLine' in (" + String16::number(i + 1) + ")."; | |
1192 if (i > 0) { | |
1193 SourceRange* prevRange = ranges->get(i - 1); | |
1194 if (prevRange->getEndLine() > range->getStartLine() || (prevRange->g etEndLine() == range->getStartLine() && prevRange->getEndColumn() > range->getSt artColumn())) | |
1195 errors = errors + " Records in ranges array should be sorted and disjoint."; | |
1196 } | |
1197 } | |
1198 if (!errors.isEmpty()) { | |
1199 *errorString = errors; | |
1200 return; | |
1201 } | |
1202 Vector<std::pair<int, int>> blackboxedRanges(ranges->length() * 2); | |
1203 for (size_t i = 0; i < ranges->length(); ++i) { | |
1204 SourceRange* range = ranges->get(i); | |
1205 blackboxedRanges[i * 2] = std::make_pair(range->getStartLine(), range->g etStartColumn()); | |
1206 blackboxedRanges[i * 2 + 1] = std::make_pair(range->getEndLine(), range- >getEndColumn()); | |
1207 } | |
1208 idToBlackboxRanges.set(id, blackboxedRanges); | |
1209 stateMap->setArray(id, ranges->serialize()); | |
1089 } | 1210 } |
1090 | 1211 |
1091 void V8DebuggerAgentImpl::willExecuteScript(int scriptId) | 1212 void V8DebuggerAgentImpl::willExecuteScript(int scriptId) |
1092 { | 1213 { |
1093 changeJavaScriptRecursionLevel(+1); | 1214 changeJavaScriptRecursionLevel(+1); |
1094 // Fast return. | 1215 // Fast return. |
1095 if (m_scheduledDebuggerStep != StepInto) | 1216 if (m_scheduledDebuggerStep != StepInto) |
1096 return; | 1217 return; |
1097 // Skip unknown scripts (e.g. InjectedScript). | 1218 // Skip unknown scripts (e.g. InjectedScript). |
1098 if (!m_scripts.contains(String16::number(scriptId))) | 1219 if (!m_scripts.contains(String16::number(scriptId))) |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1408 { | 1529 { |
1409 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so urce)); | 1530 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so urce)); |
1410 } | 1531 } |
1411 | 1532 |
1412 void V8DebuggerAgentImpl::reset() | 1533 void V8DebuggerAgentImpl::reset() |
1413 { | 1534 { |
1414 if (!enabled()) | 1535 if (!enabled()) |
1415 return; | 1536 return; |
1416 m_scheduledDebuggerStep = NoStep; | 1537 m_scheduledDebuggerStep = NoStep; |
1417 m_scripts.clear(); | 1538 m_scripts.clear(); |
1418 m_blackboxedPositions.clear(); | |
1419 m_breakpointIdToDebuggerBreakpointIds.clear(); | 1539 m_breakpointIdToDebuggerBreakpointIds.clear(); |
1420 allAsyncTasksCanceled(); | 1540 allAsyncTasksCanceled(); |
1421 } | 1541 } |
1422 | 1542 |
1423 } // namespace blink | 1543 } // namespace blink |
OLD | NEW |