OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2013 Google Inc. All rights reserved. | 3 * Copyright (C) 2013 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 { | 115 { |
116 return scriptId + ':' + String::number(lineNumber) + ':' + String::number(co
lumnNumber) + breakpointIdSuffix(source); | 116 return scriptId + ':' + String::number(lineNumber) + ':' + String::number(co
lumnNumber) + breakpointIdSuffix(source); |
117 } | 117 } |
118 | 118 |
119 InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedSc
riptManager) | 119 InspectorDebuggerAgent::InspectorDebuggerAgent(InjectedScriptManager* injectedSc
riptManager) |
120 : InspectorBaseAgent<InspectorDebuggerAgent>("Debugger") | 120 : InspectorBaseAgent<InspectorDebuggerAgent>("Debugger") |
121 , m_injectedScriptManager(injectedScriptManager) | 121 , m_injectedScriptManager(injectedScriptManager) |
122 , m_frontend(0) | 122 , m_frontend(0) |
123 , m_pausedScriptState(nullptr) | 123 , m_pausedScriptState(nullptr) |
124 , m_breakReason(InspectorFrontend::Debugger::Reason::Other) | 124 , m_breakReason(InspectorFrontend::Debugger::Reason::Other) |
| 125 , m_scheduledDebuggerStep(NoStep) |
125 , m_javaScriptPauseScheduled(false) | 126 , m_javaScriptPauseScheduled(false) |
126 , m_debuggerStepScheduled(false) | |
127 , m_steppingFromFramework(false) | 127 , m_steppingFromFramework(false) |
128 , m_pausingOnNativeEvent(false) | 128 , m_pausingOnNativeEvent(false) |
129 , m_listener(nullptr) | 129 , m_listener(nullptr) |
130 , m_skippedStepInCount(0) | 130 , m_skippedStepInCount(0) |
131 , m_minFrameCountForSkip(0) | 131 , m_minFrameCountForSkip(0) |
132 , m_skipAllPauses(false) | 132 , m_skipAllPauses(false) |
133 , m_skipContentScripts(false) | 133 , m_skipContentScripts(false) |
134 , m_asyncCallStackTracker(adoptPtrWillBeNoop(new AsyncCallStackTracker())) | 134 , m_asyncCallStackTracker(adoptPtrWillBeNoop(new AsyncCallStackTracker())) |
135 , m_promiseTracker(PromiseTracker::create()) | 135 , m_promiseTracker(PromiseTracker::create()) |
136 { | 136 { |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForOb
jectId(objectId); | 714 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptForOb
jectId(objectId); |
715 if (injectedScript.isEmpty()) { | 715 if (injectedScript.isEmpty()) { |
716 *errorString = "Inspected frame has gone"; | 716 *errorString = "Inspected frame has gone"; |
717 return; | 717 return; |
718 } | 718 } |
719 injectedScript.getCollectionEntries(errorString, objectId, &entries); | 719 injectedScript.getCollectionEntries(errorString, objectId, &entries); |
720 } | 720 } |
721 | 721 |
722 void InspectorDebuggerAgent::schedulePauseOnNextStatement(InspectorFrontend::Deb
ugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) | 722 void InspectorDebuggerAgent::schedulePauseOnNextStatement(InspectorFrontend::Deb
ugger::Reason::Enum breakReason, PassRefPtr<JSONObject> data) |
723 { | 723 { |
724 if (m_javaScriptPauseScheduled || isPaused()) | 724 if (m_scheduledDebuggerStep == StepInto || m_javaScriptPauseScheduled || isP
aused()) |
725 return; | 725 return; |
726 m_breakReason = breakReason; | 726 m_breakReason = breakReason; |
727 m_breakAuxData = data; | 727 m_breakAuxData = data; |
728 m_pausingOnNativeEvent = true; | 728 m_pausingOnNativeEvent = true; |
729 scriptDebugServer().setPauseOnNextStatement(true); | 729 scriptDebugServer().setPauseOnNextStatement(true); |
730 } | 730 } |
731 | 731 |
| 732 void InspectorDebuggerAgent::schedulePauseOnNextStatementIfSteppingInto() |
| 733 { |
| 734 if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || isP
aused()) |
| 735 return; |
| 736 clearBreakDetails(); |
| 737 m_pausingOnNativeEvent = false; |
| 738 m_skippedStepInCount = 0; |
| 739 scriptDebugServer().setPauseOnNextStatement(true); |
| 740 } |
| 741 |
732 void InspectorDebuggerAgent::cancelPauseOnNextStatement() | 742 void InspectorDebuggerAgent::cancelPauseOnNextStatement() |
733 { | 743 { |
734 if (m_javaScriptPauseScheduled || isPaused()) | 744 if (m_javaScriptPauseScheduled || isPaused()) |
735 return; | 745 return; |
736 clearBreakDetails(); | 746 clearBreakDetails(); |
737 m_pausingOnNativeEvent = false; | 747 m_pausingOnNativeEvent = false; |
738 scriptDebugServer().setPauseOnNextStatement(false); | 748 scriptDebugServer().setPauseOnNextStatement(false); |
739 } | 749 } |
740 | 750 |
741 void InspectorDebuggerAgent::didInstallTimer(ExecutionContext* context, int time
rId, int timeout, bool singleShot) | 751 void InspectorDebuggerAgent::didInstallTimer(ExecutionContext* context, int time
rId, int timeout, bool singleShot) |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
954 return; | 964 return; |
955 clearBreakDetails(); | 965 clearBreakDetails(); |
956 m_javaScriptPauseScheduled = true; | 966 m_javaScriptPauseScheduled = true; |
957 scriptDebugServer().setPauseOnNextStatement(true); | 967 scriptDebugServer().setPauseOnNextStatement(true); |
958 } | 968 } |
959 | 969 |
960 void InspectorDebuggerAgent::resume(ErrorString* errorString) | 970 void InspectorDebuggerAgent::resume(ErrorString* errorString) |
961 { | 971 { |
962 if (!assertPaused(errorString)) | 972 if (!assertPaused(errorString)) |
963 return; | 973 return; |
964 m_debuggerStepScheduled = false; | 974 m_scheduledDebuggerStep = NoStep; |
965 m_steppingFromFramework = false; | 975 m_steppingFromFramework = false; |
966 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); | 976 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); |
967 scriptDebugServer().continueProgram(); | 977 scriptDebugServer().continueProgram(); |
968 } | 978 } |
969 | 979 |
970 void InspectorDebuggerAgent::stepOver(ErrorString* errorString) | 980 void InspectorDebuggerAgent::stepOver(ErrorString* errorString) |
971 { | 981 { |
972 if (!assertPaused(errorString)) | 982 if (!assertPaused(errorString)) |
973 return; | 983 return; |
974 m_debuggerStepScheduled = true; | 984 m_scheduledDebuggerStep = StepOver; |
975 m_steppingFromFramework = isTopCallFrameInFramework(); | 985 m_steppingFromFramework = isTopCallFrameInFramework(); |
976 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); | 986 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); |
977 scriptDebugServer().stepOverStatement(); | 987 scriptDebugServer().stepOverStatement(); |
978 } | 988 } |
979 | 989 |
980 void InspectorDebuggerAgent::stepInto(ErrorString* errorString) | 990 void InspectorDebuggerAgent::stepInto(ErrorString* errorString) |
981 { | 991 { |
982 if (!assertPaused(errorString)) | 992 if (!assertPaused(errorString)) |
983 return; | 993 return; |
984 m_debuggerStepScheduled = true; | 994 m_scheduledDebuggerStep = StepInto; |
985 m_steppingFromFramework = isTopCallFrameInFramework(); | 995 m_steppingFromFramework = isTopCallFrameInFramework(); |
986 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); | 996 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); |
987 scriptDebugServer().stepIntoStatement(); | 997 scriptDebugServer().stepIntoStatement(); |
988 if (m_listener) | |
989 m_listener->stepInto(); | |
990 } | 998 } |
991 | 999 |
992 void InspectorDebuggerAgent::stepOut(ErrorString* errorString) | 1000 void InspectorDebuggerAgent::stepOut(ErrorString* errorString) |
993 { | 1001 { |
994 if (!assertPaused(errorString)) | 1002 if (!assertPaused(errorString)) |
995 return; | 1003 return; |
996 m_debuggerStepScheduled = true; | 1004 m_scheduledDebuggerStep = StepOut; |
997 m_steppingFromFramework = isTopCallFrameInFramework(); | 1005 m_steppingFromFramework = isTopCallFrameInFramework(); |
998 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); | 1006 m_injectedScriptManager->releaseObjectGroup(InspectorDebuggerAgent::backtrac
eObjectGroup); |
999 scriptDebugServer().stepOutOfFunction(); | 1007 scriptDebugServer().stepOutOfFunction(); |
1000 } | 1008 } |
1001 | 1009 |
1002 void InspectorDebuggerAgent::setPauseOnExceptions(ErrorString* errorString, cons
t String& stringPauseState) | 1010 void InspectorDebuggerAgent::setPauseOnExceptions(ErrorString* errorString, cons
t String& stringPauseState) |
1003 { | 1011 { |
1004 ScriptDebugServer::PauseOnExceptionsState pauseState; | 1012 ScriptDebugServer::PauseOnExceptionsState pauseState; |
1005 if (stringPauseState == "none") | 1013 if (stringPauseState == "none") |
1006 pauseState = ScriptDebugServer::DontPauseOnExceptions; | 1014 pauseState = ScriptDebugServer::DontPauseOnExceptions; |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1229 | 1237 |
1230 void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String& directive
Text) | 1238 void InspectorDebuggerAgent::scriptExecutionBlockedByCSP(const String& directive
Text) |
1231 { | 1239 { |
1232 if (scriptDebugServer().pauseOnExceptionsState() != ScriptDebugServer::DontP
auseOnExceptions) { | 1240 if (scriptDebugServer().pauseOnExceptionsState() != ScriptDebugServer::DontP
auseOnExceptions) { |
1233 RefPtr<JSONObject> directive = JSONObject::create(); | 1241 RefPtr<JSONObject> directive = JSONObject::create(); |
1234 directive->setString("directiveText", directiveText); | 1242 directive->setString("directiveText", directiveText); |
1235 breakProgram(InspectorFrontend::Debugger::Reason::CSPViolation, directiv
e.release()); | 1243 breakProgram(InspectorFrontend::Debugger::Reason::CSPViolation, directiv
e.release()); |
1236 } | 1244 } |
1237 } | 1245 } |
1238 | 1246 |
| 1247 void InspectorDebuggerAgent::willCallFunction(ExecutionContext*, int scriptId, c
onst String&, int) |
| 1248 { |
| 1249 // Skip unknown scripts (i.e. InjectedScript). |
| 1250 if (!m_scripts.contains(String::number(scriptId))) |
| 1251 return; |
| 1252 schedulePauseOnNextStatementIfSteppingInto(); |
| 1253 } |
| 1254 |
| 1255 void InspectorDebuggerAgent::willEvaluateScript(LocalFrame*, const String&, int) |
| 1256 { |
| 1257 schedulePauseOnNextStatementIfSteppingInto(); |
| 1258 } |
| 1259 |
1239 PassRefPtr<Array<CallFrame> > InspectorDebuggerAgent::currentCallFrames() | 1260 PassRefPtr<Array<CallFrame> > InspectorDebuggerAgent::currentCallFrames() |
1240 { | 1261 { |
1241 if (!m_pausedScriptState || m_currentCallStack.isEmpty()) | 1262 if (!m_pausedScriptState || m_currentCallStack.isEmpty()) |
1242 return Array<CallFrame>::create(); | 1263 return Array<CallFrame>::create(); |
1243 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m
_pausedScriptState.get()); | 1264 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(m
_pausedScriptState.get()); |
1244 if (injectedScript.isEmpty()) { | 1265 if (injectedScript.isEmpty()) { |
1245 ASSERT_NOT_REACHED(); | 1266 ASSERT_NOT_REACHED(); |
1246 return Array<CallFrame>::create(); | 1267 return Array<CallFrame>::create(); |
1247 } | 1268 } |
1248 return injectedScript.wrapCallFrames(m_currentCallStack, 0); | 1269 return injectedScript.wrapCallFrames(m_currentCallStack, 0); |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1395 if (callFrames.isEmpty()) | 1416 if (callFrames.isEmpty()) |
1396 result = ScriptDebugListener::Continue; // Skip pauses inside V8 interna
l scripts and on syntax errors. | 1417 result = ScriptDebugListener::Continue; // Skip pauses inside V8 interna
l scripts and on syntax errors. |
1397 else if (m_javaScriptPauseScheduled) | 1418 else if (m_javaScriptPauseScheduled) |
1398 result = ScriptDebugListener::NoSkip; // Don't skip explicit pause reque
sts from front-end. | 1419 result = ScriptDebugListener::NoSkip; // Don't skip explicit pause reque
sts from front-end. |
1399 else if (m_skipAllPauses) | 1420 else if (m_skipAllPauses) |
1400 result = ScriptDebugListener::Continue; | 1421 result = ScriptDebugListener::Continue; |
1401 else if (!hitBreakpoints.isEmpty()) | 1422 else if (!hitBreakpoints.isEmpty()) |
1402 result = ScriptDebugListener::NoSkip; // Don't skip explicit breakpoints
even if set in frameworks. | 1423 result = ScriptDebugListener::NoSkip; // Don't skip explicit breakpoints
even if set in frameworks. |
1403 else if (!exception.isEmpty()) | 1424 else if (!exception.isEmpty()) |
1404 result = shouldSkipExceptionPause(); | 1425 result = shouldSkipExceptionPause(); |
1405 else if (m_debuggerStepScheduled || m_pausingOnNativeEvent) | 1426 else if (m_scheduledDebuggerStep != NoStep || m_pausingOnNativeEvent) |
1406 result = shouldSkipStepPause(); | 1427 result = shouldSkipStepPause(); |
1407 else | 1428 else |
1408 result = ScriptDebugListener::NoSkip; | 1429 result = ScriptDebugListener::NoSkip; |
1409 | 1430 |
1410 if (result != ScriptDebugListener::NoSkip) | 1431 if (result != ScriptDebugListener::NoSkip) |
1411 return result; | 1432 return result; |
1412 | 1433 |
1413 ASSERT(scriptState && !m_pausedScriptState); | 1434 ASSERT(scriptState && !m_pausedScriptState); |
1414 m_pausedScriptState = scriptState; | 1435 m_pausedScriptState = scriptState; |
1415 m_currentCallStack = callFrames; | 1436 m_currentCallStack = callFrames; |
(...skipping 15 matching lines...) Expand all Loading... |
1431 const String& localId = breakpointIterator->value.first; | 1452 const String& localId = breakpointIterator->value.first; |
1432 hitBreakpointIds->addItem(localId); | 1453 hitBreakpointIds->addItem(localId); |
1433 | 1454 |
1434 BreakpointSource source = breakpointIterator->value.second; | 1455 BreakpointSource source = breakpointIterator->value.second; |
1435 if (m_breakReason == InspectorFrontend::Debugger::Reason::Other && s
ource == DebugCommandBreakpointSource) | 1456 if (m_breakReason == InspectorFrontend::Debugger::Reason::Other && s
ource == DebugCommandBreakpointSource) |
1436 m_breakReason = InspectorFrontend::Debugger::Reason::DebugComman
d; | 1457 m_breakReason = InspectorFrontend::Debugger::Reason::DebugComman
d; |
1437 } | 1458 } |
1438 } | 1459 } |
1439 | 1460 |
1440 m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBr
eakpointIds, currentAsyncStackTrace()); | 1461 m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBr
eakpointIds, currentAsyncStackTrace()); |
| 1462 m_scheduledDebuggerStep = NoStep; |
1441 m_javaScriptPauseScheduled = false; | 1463 m_javaScriptPauseScheduled = false; |
1442 m_debuggerStepScheduled = false; | |
1443 m_steppingFromFramework = false; | 1464 m_steppingFromFramework = false; |
1444 m_pausingOnNativeEvent = false; | 1465 m_pausingOnNativeEvent = false; |
1445 m_skippedStepInCount = 0; | 1466 m_skippedStepInCount = 0; |
1446 | 1467 |
1447 if (!m_continueToLocationBreakpointId.isEmpty()) { | 1468 if (!m_continueToLocationBreakpointId.isEmpty()) { |
1448 scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId); | 1469 scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId); |
1449 m_continueToLocationBreakpointId = ""; | 1470 m_continueToLocationBreakpointId = ""; |
1450 } | 1471 } |
1451 if (m_listener) | |
1452 m_listener->didPause(); | |
1453 return result; | 1472 return result; |
1454 } | 1473 } |
1455 | 1474 |
1456 void InspectorDebuggerAgent::didContinue() | 1475 void InspectorDebuggerAgent::didContinue() |
1457 { | 1476 { |
1458 m_pausedScriptState = nullptr; | 1477 m_pausedScriptState = nullptr; |
1459 m_currentCallStack = ScriptValue(); | 1478 m_currentCallStack = ScriptValue(); |
1460 clearBreakDetails(); | 1479 clearBreakDetails(); |
1461 m_frontend->resumed(); | 1480 m_frontend->resumed(); |
1462 } | 1481 } |
1463 | 1482 |
1464 bool InspectorDebuggerAgent::canBreakProgram() | 1483 bool InspectorDebuggerAgent::canBreakProgram() |
1465 { | 1484 { |
1466 return scriptDebugServer().canBreakProgram(); | 1485 return scriptDebugServer().canBreakProgram(); |
1467 } | 1486 } |
1468 | 1487 |
1469 void InspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reason::E
num breakReason, PassRefPtr<JSONObject> data) | 1488 void InspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reason::E
num breakReason, PassRefPtr<JSONObject> data) |
1470 { | 1489 { |
1471 if (m_skipAllPauses) | 1490 if (m_skipAllPauses) |
1472 return; | 1491 return; |
1473 m_breakReason = breakReason; | 1492 m_breakReason = breakReason; |
1474 m_breakAuxData = data; | 1493 m_breakAuxData = data; |
1475 m_debuggerStepScheduled = false; | 1494 m_scheduledDebuggerStep = NoStep; |
1476 m_steppingFromFramework = false; | 1495 m_steppingFromFramework = false; |
1477 m_pausingOnNativeEvent = false; | 1496 m_pausingOnNativeEvent = false; |
1478 scriptDebugServer().breakProgram(); | 1497 scriptDebugServer().breakProgram(); |
1479 } | 1498 } |
1480 | 1499 |
1481 void InspectorDebuggerAgent::clear() | 1500 void InspectorDebuggerAgent::clear() |
1482 { | 1501 { |
1483 m_pausedScriptState = nullptr; | 1502 m_pausedScriptState = nullptr; |
1484 m_currentCallStack = ScriptValue(); | 1503 m_currentCallStack = ScriptValue(); |
1485 m_scripts.clear(); | 1504 m_scripts.clear(); |
1486 m_breakpointIdToDebugServerBreakpointIds.clear(); | 1505 m_breakpointIdToDebugServerBreakpointIds.clear(); |
1487 asyncCallStackTracker().clear(); | 1506 asyncCallStackTracker().clear(); |
1488 promiseTracker().clear(); | 1507 promiseTracker().clear(); |
1489 m_continueToLocationBreakpointId = String(); | 1508 m_continueToLocationBreakpointId = String(); |
1490 clearBreakDetails(); | 1509 clearBreakDetails(); |
| 1510 m_scheduledDebuggerStep = NoStep; |
1491 m_javaScriptPauseScheduled = false; | 1511 m_javaScriptPauseScheduled = false; |
1492 m_debuggerStepScheduled = false; | |
1493 m_steppingFromFramework = false; | 1512 m_steppingFromFramework = false; |
1494 m_pausingOnNativeEvent = false; | 1513 m_pausingOnNativeEvent = false; |
1495 ErrorString error; | 1514 ErrorString error; |
1496 setOverlayMessage(&error, 0); | 1515 setOverlayMessage(&error, 0); |
1497 } | 1516 } |
1498 | 1517 |
1499 bool InspectorDebuggerAgent::assertPaused(ErrorString* errorString) | 1518 bool InspectorDebuggerAgent::assertPaused(ErrorString* errorString) |
1500 { | 1519 { |
1501 if (!m_pausedScriptState) { | 1520 if (!m_pausedScriptState) { |
1502 *errorString = "Can only perform operation while paused."; | 1521 *errorString = "Can only perform operation while paused."; |
(...skipping 15 matching lines...) Expand all Loading... |
1518 resolveBreakpoint(breakpointId, scriptId, breakpoint, source); | 1537 resolveBreakpoint(breakpointId, scriptId, breakpoint, source); |
1519 } | 1538 } |
1520 | 1539 |
1521 void InspectorDebuggerAgent::removeBreakpoint(const String& scriptId, int lineNu
mber, int columnNumber, BreakpointSource source) | 1540 void InspectorDebuggerAgent::removeBreakpoint(const String& scriptId, int lineNu
mber, int columnNumber, BreakpointSource source) |
1522 { | 1541 { |
1523 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so
urce)); | 1542 removeBreakpoint(generateBreakpointId(scriptId, lineNumber, columnNumber, so
urce)); |
1524 } | 1543 } |
1525 | 1544 |
1526 void InspectorDebuggerAgent::reset() | 1545 void InspectorDebuggerAgent::reset() |
1527 { | 1546 { |
| 1547 m_scheduledDebuggerStep = NoStep; |
1528 m_scripts.clear(); | 1548 m_scripts.clear(); |
1529 m_breakpointIdToDebugServerBreakpointIds.clear(); | 1549 m_breakpointIdToDebugServerBreakpointIds.clear(); |
1530 asyncCallStackTracker().clear(); | 1550 asyncCallStackTracker().clear(); |
1531 promiseTracker().clear(); | 1551 promiseTracker().clear(); |
1532 if (m_frontend) | 1552 if (m_frontend) |
1533 m_frontend->globalObjectCleared(); | 1553 m_frontend->globalObjectCleared(); |
1534 } | 1554 } |
1535 | 1555 |
1536 void InspectorDebuggerAgent::trace(Visitor* visitor) | 1556 void InspectorDebuggerAgent::trace(Visitor* visitor) |
1537 { | 1557 { |
1538 visitor->trace(m_injectedScriptManager); | 1558 visitor->trace(m_injectedScriptManager); |
1539 visitor->trace(m_listener); | 1559 visitor->trace(m_listener); |
1540 visitor->trace(m_asyncCallStackTracker); | 1560 visitor->trace(m_asyncCallStackTracker); |
1541 #if ENABLE(OILPAN) | 1561 #if ENABLE(OILPAN) |
1542 visitor->trace(m_promiseTracker); | 1562 visitor->trace(m_promiseTracker); |
1543 #endif | 1563 #endif |
1544 InspectorBaseAgent::trace(visitor); | 1564 InspectorBaseAgent::trace(visitor); |
1545 } | 1565 } |
1546 | 1566 |
1547 } // namespace blink | 1567 } // namespace blink |
OLD | NEW |