| 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) 2014 Google Inc. All rights reserved. | 3 * Copyright (C) 2014 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 return String(); | 100 return String(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 static String generateBreakpointIdDart(const String& scriptId, int lineNumber, i
nt columnNumber, DartInspectorDebuggerAgent::BreakpointSource source) | 103 static String generateBreakpointIdDart(const String& scriptId, int lineNumber, i
nt columnNumber, DartInspectorDebuggerAgent::BreakpointSource source) |
| 104 { | 104 { |
| 105 return scriptId + ':' + String::number(lineNumber) + ':' + String::number(co
lumnNumber) + breakpointIdSuffixDart(source); | 105 return scriptId + ':' + String::number(lineNumber) + ':' + String::number(co
lumnNumber) + breakpointIdSuffixDart(source); |
| 106 } | 106 } |
| 107 | 107 |
| 108 DartInspectorDebuggerAgent::DartInspectorDebuggerAgent(DartInjectedScriptManager
* injectedScriptManager, InspectorDebuggerAgent* inspectorDebuggerAgent, Inspect
orPageAgent* pageAgent) | 108 DartInspectorDebuggerAgent::DartInspectorDebuggerAgent(DartInjectedScriptManager
* injectedScriptManager, InspectorDebuggerAgent* inspectorDebuggerAgent, Inspect
orPageAgent* pageAgent) |
| 109 : m_injectedScriptManager(injectedScriptManager) | 109 : m_injectedScriptManager(injectedScriptManager) |
| 110 , m_frontend(0) | |
| 111 , m_pausedScriptState(nullptr) | 110 , m_pausedScriptState(nullptr) |
| 112 , m_currentCallStack(0) | 111 , m_currentCallStack(0) |
| 113 , m_javaScriptPauseScheduled(false) | 112 , m_javaScriptPauseScheduled(false) |
| 114 , m_debuggerStepScheduled(false) | 113 , m_debuggerStepScheduled(false) |
| 115 , m_steppingFromFramework(false) | 114 , m_steppingFromFramework(false) |
| 116 , m_pausingOnNativeEvent(false) | 115 , m_pausingOnNativeEvent(false) |
| 117 , m_listener(nullptr) | 116 , m_listener(nullptr) |
| 118 , m_skippedStepInCount(0) | 117 , m_skippedStepInCount(0) |
| 119 , m_skipAllPauses(false) | 118 , m_skipAllPauses(false) |
| 120 , m_inspectorDebuggerAgent(inspectorDebuggerAgent) | 119 , m_inspectorDebuggerAgent(inspectorDebuggerAgent) |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } | 170 } |
| 172 | 171 |
| 173 void DartInspectorDebuggerAgent::enable(ErrorString*) | 172 void DartInspectorDebuggerAgent::enable(ErrorString*) |
| 174 { | 173 { |
| 175 if (enabled()) | 174 if (enabled()) |
| 176 return; | 175 return; |
| 177 | 176 |
| 178 enable(); | 177 enable(); |
| 179 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, true); | 178 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, true); |
| 180 | 179 |
| 181 ASSERT(m_frontend); | 180 ASSERT(frontend()); |
| 182 } | 181 } |
| 183 | 182 |
| 184 void DartInspectorDebuggerAgent::disable(ErrorString*) | 183 void DartInspectorDebuggerAgent::disable(ErrorString*) |
| 185 { | 184 { |
| 186 if (!enabled()) | 185 if (!enabled()) |
| 187 return; | 186 return; |
| 188 | 187 |
| 189 disable(); | 188 disable(); |
| 190 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, false); | 189 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, false); |
| 191 } | 190 } |
| 192 | 191 |
| 193 static PassOwnPtr<ScriptRegexp> compileSkipCallFramePattern(String patternText) | 192 static PassOwnPtr<ScriptRegexp> compileSkipCallFramePattern(String patternText) |
| 194 { | 193 { |
| 195 if (patternText.isEmpty()) | 194 if (patternText.isEmpty()) |
| 196 return nullptr; | 195 return nullptr; |
| 197 OwnPtr<ScriptRegexp> result = adoptPtr(new ScriptRegexp(patternText, TextCas
eSensitive)); | 196 OwnPtr<ScriptRegexp> result = adoptPtr(new ScriptRegexp(patternText, TextCas
eSensitive)); |
| 198 if (!result->isValid()) | 197 if (!result->isValid()) |
| 199 result.clear(); | 198 result.clear(); |
| 200 return result.release(); | 199 return result.release(); |
| 201 } | 200 } |
| 202 | 201 |
| 203 void DartInspectorDebuggerAgent::restore() | 202 void DartInspectorDebuggerAgent::restore() |
| 204 { | 203 { |
| 205 if (enabled()) { | 204 if (enabled()) { |
| 206 m_frontend->globalObjectCleared(); | 205 frontend()->globalObjectCleared(); |
| 207 enable(); | 206 enable(); |
| 208 long pauseState = state()->getLong(DartDebuggerAgentState::pauseOnExcept
ionsState); | 207 long pauseState = state()->getLong(DartDebuggerAgentState::pauseOnExcept
ionsState); |
| 209 String error; | 208 String error; |
| 210 setPauseOnExceptionsImpl(&error, pauseState); | 209 setPauseOnExceptionsImpl(&error, pauseState); |
| 211 m_cachedSkipStackRegExp = compileSkipCallFramePattern(state()->getString
(DartDebuggerAgentState::skipStackPattern)); | 210 m_cachedSkipStackRegExp = compileSkipCallFramePattern(state()->getString
(DartDebuggerAgentState::skipStackPattern)); |
| 212 m_skipAllPauses = state()->getBoolean(DartDebuggerAgentState::skipAllPau
ses); | 211 m_skipAllPauses = state()->getBoolean(DartDebuggerAgentState::skipAllPau
ses); |
| 213 if (m_skipAllPauses && state()->getBoolean(DartDebuggerAgentState::skipA
llPausesExpiresOnReload)) { | 212 if (m_skipAllPauses && state()->getBoolean(DartDebuggerAgentState::skipA
llPausesExpiresOnReload)) { |
| 214 m_skipAllPauses = false; | 213 m_skipAllPauses = false; |
| 215 state()->setBoolean(DartDebuggerAgentState::skipAllPauses, false); | 214 state()->setBoolean(DartDebuggerAgentState::skipAllPauses, false); |
| 216 } | 215 } |
| 217 } | 216 } |
| 218 } | 217 } |
| 219 | 218 |
| 220 void DartInspectorDebuggerAgent::setFrontend(InspectorFrontend* frontend) | 219 InspectorFrontend::Debugger* DartInspectorDebuggerAgent::frontend() |
| 221 { | 220 { |
| 222 m_frontend = InspectorFrontend::Debugger::from(frontend); | 221 return m_inspectorDebuggerAgent->frontend(); |
| 223 } | 222 } |
| 224 | 223 |
| 224 |
| 225 void DartInspectorDebuggerAgent::clearFrontend() | 225 void DartInspectorDebuggerAgent::clearFrontend() |
| 226 { | 226 { |
| 227 m_frontend = 0; | |
| 228 | |
| 229 if (!enabled()) | 227 if (!enabled()) |
| 230 return; | 228 return; |
| 231 | 229 |
| 232 disable(); | 230 disable(); |
| 233 | 231 |
| 234 // FIXME: due to state()->mute() hack in InspectorController, debuggerEnable
d is actually set to false only | 232 // FIXME: due to state()->mute() hack in InspectorController, debuggerEnable
d is actually set to false only |
| 235 // in InspectorState, but not in cookie. That's why after navigation debugge
rEnabled will be true, | 233 // in InspectorState, but not in cookie. That's why after navigation debugge
rEnabled will be true, |
| 236 // but after front-end re-open it will still be false. | 234 // but after front-end re-open it will still be false. |
| 237 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, false); | 235 state()->setBoolean(DartDebuggerAgentState::debuggerEnabled, false); |
| 238 } | 236 } |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 } | 863 } |
| 866 | 864 |
| 867 const bool* isInternalScript = script.isInternalScript ? &script.isInternalS
cript : 0; | 865 const bool* isInternalScript = script.isInternalScript ? &script.isInternalS
cript : 0; |
| 868 bool hasSourceURL = !script.sourceURL.isEmpty(); | 866 bool hasSourceURL = !script.sourceURL.isEmpty(); |
| 869 String scriptURL = hasSourceURL ? script.sourceURL : script.url; | 867 String scriptURL = hasSourceURL ? script.sourceURL : script.url; |
| 870 | 868 |
| 871 String sourceMapURL = sourceMapURLForScript(script, compileResult); | 869 String sourceMapURL = sourceMapURLForScript(script, compileResult); |
| 872 String* sourceMapURLParam = sourceMapURL.isNull() ? 0 : &sourceMapURL; | 870 String* sourceMapURLParam = sourceMapURL.isNull() ? 0 : &sourceMapURL; |
| 873 | 871 |
| 874 bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : 0; | 872 bool* hasSourceURLParam = hasSourceURL ? &hasSourceURL : 0; |
| 873 ASSERT(frontend()); |
| 875 if (!hasSyntaxError) | 874 if (!hasSyntaxError) |
| 876 m_frontend->scriptParsed(scriptId, scriptURL, script.startLine, script.s
tartColumn, script.endLine, script.endColumn, isContentScript, isInternalScript,
sourceMapURLParam, hasSourceURLParam, languageParam, libraryIdParam); | 875 frontend()->scriptParsed(scriptId, scriptURL, script.startLine, script.s
tartColumn, script.endLine, script.endColumn, isContentScript, isInternalScript,
sourceMapURLParam, hasSourceURLParam, languageParam, libraryIdParam); |
| 877 else | 876 else |
| 878 m_frontend->scriptFailedToParse(scriptId, scriptURL, script.startLine, s
cript.startColumn, script.endLine, script.endColumn, isContentScript, isInternal
Script, sourceMapURLParam, hasSourceURLParam, languageParam, libraryIdParam); | 877 frontend()->scriptFailedToParse(scriptId, scriptURL, script.startLine, s
cript.startColumn, script.endLine, script.endColumn, isContentScript, isInternal
Script, sourceMapURLParam, hasSourceURLParam, languageParam, libraryIdParam); |
| 879 | 878 |
| 880 m_scripts.set(scriptId, script); | 879 m_scripts.set(scriptId, script); |
| 881 | 880 |
| 882 if (scriptURL.isEmpty() || hasSyntaxError) | 881 if (scriptURL.isEmpty() || hasSyntaxError) |
| 883 return; | 882 return; |
| 884 | 883 |
| 885 RefPtr<JSONObject> breakpointsCookie = state()->getObject(DartDebuggerAgentS
tate::dartBreakpoints); | 884 RefPtr<JSONObject> breakpointsCookie = state()->getObject(DartDebuggerAgentS
tate::dartBreakpoints); |
| 886 for (JSONObject::iterator it = breakpointsCookie->begin(); it != breakpoints
Cookie->end(); ++it) { | 885 for (JSONObject::iterator it = breakpointsCookie->begin(); it != breakpoints
Cookie->end(); ++it) { |
| 887 RefPtr<JSONObject> breakpointObject = it->value->asObject(); | 886 RefPtr<JSONObject> breakpointObject = it->value->asObject(); |
| 888 bool isAntibreakpoint; | 887 bool isAntibreakpoint; |
| 889 breakpointObject->getBoolean(DartDebuggerAgentState::isAnti, &isAntibrea
kpoint); | 888 breakpointObject->getBoolean(DartDebuggerAgentState::isAnti, &isAntibrea
kpoint); |
| 890 if (isAntibreakpoint) | 889 if (isAntibreakpoint) |
| 891 continue; | 890 continue; |
| 892 bool isRegex; | 891 bool isRegex; |
| 893 breakpointObject->getBoolean(DartDebuggerAgentState::isRegex, &isRegex); | 892 breakpointObject->getBoolean(DartDebuggerAgentState::isRegex, &isRegex); |
| 894 String url; | 893 String url; |
| 895 breakpointObject->getString(DartDebuggerAgentState::url, &url); | 894 breakpointObject->getString(DartDebuggerAgentState::url, &url); |
| 896 if (!matches(scriptURL, url, isRegex)) | 895 if (!matches(scriptURL, url, isRegex)) |
| 897 continue; | 896 continue; |
| 898 ScriptBreakpoint breakpoint; | 897 ScriptBreakpoint breakpoint; |
| 899 breakpointObject->getNumber(DartDebuggerAgentState::lineNumber, &breakpo
int.lineNumber); | 898 breakpointObject->getNumber(DartDebuggerAgentState::lineNumber, &breakpo
int.lineNumber); |
| 900 breakpointObject->getNumber(DartDebuggerAgentState::columnNumber, &break
point.columnNumber); | 899 breakpointObject->getNumber(DartDebuggerAgentState::columnNumber, &break
point.columnNumber); |
| 901 breakpointObject->getString(DartDebuggerAgentState::condition, &breakpoi
nt.condition); | 900 breakpointObject->getString(DartDebuggerAgentState::condition, &breakpoi
nt.condition); |
| 902 RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(it-
>key, scriptId, breakpoint, UserBreakpointSource); | 901 RefPtr<TypeBuilder::Debugger::Location> location = resolveBreakpoint(it-
>key, scriptId, breakpoint, UserBreakpointSource); |
| 903 if (location) | 902 if (location) |
| 904 m_frontend->breakpointResolved(it->key, location); | 903 frontend()->breakpointResolved(it->key, location); |
| 905 } | 904 } |
| 906 } | 905 } |
| 907 | 906 |
| 908 DartScriptDebugListener::SkipPauseRequest DartInspectorDebuggerAgent::didPause(D
artScriptState* scriptState, Dart_StackTrace callFrames, Dart_Handle exception,
const Vector<String>& hitBreakpoints) | 907 DartScriptDebugListener::SkipPauseRequest DartInspectorDebuggerAgent::didPause(D
artScriptState* scriptState, Dart_StackTrace callFrames, Dart_Handle exception,
const Vector<String>& hitBreakpoints) |
| 909 { | 908 { |
| 910 DartScriptDebugListener::SkipPauseRequest result; | 909 DartScriptDebugListener::SkipPauseRequest result; |
| 911 if (!callFrames) | 910 if (!callFrames) |
| 912 result = DartScriptDebugListener::Continue; // Skip pauses inside V8 int
ernal scripts and on syntax errors. | 911 result = DartScriptDebugListener::Continue; // Skip pauses inside V8 int
ernal scripts and on syntax errors. |
| 913 else if (m_javaScriptPauseScheduled) | 912 else if (m_javaScriptPauseScheduled) |
| 914 result = DartScriptDebugListener::NoSkip; // Don't skip explicit pause r
equests from front-end. | 913 result = DartScriptDebugListener::NoSkip; // Don't skip explicit pause r
equests from front-end. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 if (breakpointIterator != m_serverBreakpoints.end()) { | 945 if (breakpointIterator != m_serverBreakpoints.end()) { |
| 947 const String& localId = breakpointIterator->value.first; | 946 const String& localId = breakpointIterator->value.first; |
| 948 hitBreakpointIds->addItem(localId); | 947 hitBreakpointIds->addItem(localId); |
| 949 | 948 |
| 950 BreakpointSource source = breakpointIterator->value.second; | 949 BreakpointSource source = breakpointIterator->value.second; |
| 951 if (m_breakReason == InspectorFrontend::Debugger::Reason::Other && s
ource == DebugCommandBreakpointSource) | 950 if (m_breakReason == InspectorFrontend::Debugger::Reason::Other && s
ource == DebugCommandBreakpointSource) |
| 952 m_breakReason = InspectorFrontend::Debugger::Reason::DebugComman
d; | 951 m_breakReason = InspectorFrontend::Debugger::Reason::DebugComman
d; |
| 953 } | 952 } |
| 954 } | 953 } |
| 955 | 954 |
| 956 m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBr
eakpointIds, nullptr); | 955 frontend()->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBr
eakpointIds, nullptr); |
| 957 m_javaScriptPauseScheduled = false; | 956 m_javaScriptPauseScheduled = false; |
| 958 m_debuggerStepScheduled = false; | 957 m_debuggerStepScheduled = false; |
| 959 m_steppingFromFramework = false; | 958 m_steppingFromFramework = false; |
| 960 m_pausingOnNativeEvent = false; | 959 m_pausingOnNativeEvent = false; |
| 961 m_skippedStepInCount = 0; | 960 m_skippedStepInCount = 0; |
| 962 | 961 |
| 963 if (!m_continueToLocationBreakpointId.isEmpty()) { | 962 if (!m_continueToLocationBreakpointId.isEmpty()) { |
| 964 scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId); | 963 scriptDebugServer().removeBreakpoint(m_continueToLocationBreakpointId); |
| 965 m_continueToLocationBreakpointId = ""; | 964 m_continueToLocationBreakpointId = ""; |
| 966 } | 965 } |
| 967 if (m_listener) | 966 if (m_listener) |
| 968 m_listener->didPause(); | 967 m_listener->didPause(); |
| 969 return result; | 968 return result; |
| 970 } | 969 } |
| 971 | 970 |
| 972 void DartInspectorDebuggerAgent::didContinue() | 971 void DartInspectorDebuggerAgent::didContinue() |
| 973 { | 972 { |
| 974 m_pausedScriptState = nullptr; | 973 m_pausedScriptState = nullptr; |
| 975 m_currentCallStack = 0; | 974 m_currentCallStack = 0; |
| 976 clearBreakDetails(); | 975 clearBreakDetails(); |
| 977 // Already called by InspectorDebuggerAgent? | 976 // Already called by InspectorDebuggerAgent? |
| 978 m_frontend->resumed(); | 977 frontend()->resumed(); |
| 979 } | 978 } |
| 980 | 979 |
| 981 bool DartInspectorDebuggerAgent::canBreakProgram() | 980 bool DartInspectorDebuggerAgent::canBreakProgram() |
| 982 { | 981 { |
| 983 return scriptDebugServer().canBreakProgram(); | 982 return scriptDebugServer().canBreakProgram(); |
| 984 } | 983 } |
| 985 | 984 |
| 986 void DartInspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reaso
n::Enum breakReason, PassRefPtr<JSONObject> data) | 985 void DartInspectorDebuggerAgent::breakProgram(InspectorFrontend::Debugger::Reaso
n::Enum breakReason, PassRefPtr<JSONObject> data) |
| 987 { | 986 { |
| 988 if (m_skipAllPauses) | 987 if (m_skipAllPauses) |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 m_breakpointIdToDebugServerBreakpointIds.clear(); | 1043 m_breakpointIdToDebugServerBreakpointIds.clear(); |
| 1045 } | 1044 } |
| 1046 | 1045 |
| 1047 DartScriptDebugServer& DartInspectorDebuggerAgent::scriptDebugServer() | 1046 DartScriptDebugServer& DartInspectorDebuggerAgent::scriptDebugServer() |
| 1048 { | 1047 { |
| 1049 return DartScriptDebugServer::shared(); | 1048 return DartScriptDebugServer::shared(); |
| 1050 } | 1049 } |
| 1051 | 1050 |
| 1052 } // namespace blink | 1051 } // namespace blink |
| 1053 | 1052 |
| OLD | NEW |