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