Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: third_party/WebKit/Source/platform/v8_inspector/V8DebuggerAgentImpl.cpp

Issue 2205913002: [DevTools] Split a part of V8Inspector into V8Debugger. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v8-inspector-rename
Patch Set: context scope! Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "platform/v8_inspector/JavaScriptCallFrame.h" 11 #include "platform/v8_inspector/JavaScriptCallFrame.h"
12 #include "platform/v8_inspector/RemoteObjectId.h" 12 #include "platform/v8_inspector/RemoteObjectId.h"
13 #include "platform/v8_inspector/ScriptBreakpoint.h" 13 #include "platform/v8_inspector/ScriptBreakpoint.h"
14 #include "platform/v8_inspector/V8Debugger.h"
15 #include "platform/v8_inspector/V8DebuggerScript.h"
14 #include "platform/v8_inspector/V8InspectorImpl.h" 16 #include "platform/v8_inspector/V8InspectorImpl.h"
15 #include "platform/v8_inspector/V8InspectorSessionImpl.h" 17 #include "platform/v8_inspector/V8InspectorSessionImpl.h"
16 #include "platform/v8_inspector/V8Regex.h" 18 #include "platform/v8_inspector/V8Regex.h"
17 #include "platform/v8_inspector/V8RuntimeAgentImpl.h" 19 #include "platform/v8_inspector/V8RuntimeAgentImpl.h"
18 #include "platform/v8_inspector/V8StackTraceImpl.h" 20 #include "platform/v8_inspector/V8StackTraceImpl.h"
19 #include "platform/v8_inspector/V8StringUtil.h" 21 #include "platform/v8_inspector/V8StringUtil.h"
20 #include "platform/v8_inspector/public/V8InspectorClient.h" 22 #include "platform/v8_inspector/public/V8InspectorClient.h"
21 23
22 #include <algorithm> 24 #include <algorithm>
23 25
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(const String16& scriptId, int lineNumber, int columnNumber) 89 static std::unique_ptr<protocol::Debugger::Location> buildProtocolLocation(const String16& scriptId, int lineNumber, int columnNumber)
88 { 90 {
89 return protocol::Debugger::Location::create() 91 return protocol::Debugger::Location::create()
90 .setScriptId(scriptId) 92 .setScriptId(scriptId)
91 .setLineNumber(lineNumber) 93 .setLineNumber(lineNumber)
92 .setColumnNumber(columnNumber).build(); 94 .setColumnNumber(columnNumber).build();
93 } 95 }
94 96
95 V8DebuggerAgentImpl::V8DebuggerAgentImpl(V8InspectorSessionImpl* session, protoc ol::FrontendChannel* frontendChannel, protocol::DictionaryValue* state) 97 V8DebuggerAgentImpl::V8DebuggerAgentImpl(V8InspectorSessionImpl* session, protoc ol::FrontendChannel* frontendChannel, protocol::DictionaryValue* state)
96 : m_inspector(session->inspector()) 98 : m_inspector(session->inspector())
99 , m_debugger(m_inspector->debugger())
97 , m_session(session) 100 , m_session(session)
98 , m_enabled(false) 101 , m_enabled(false)
99 , m_state(state) 102 , m_state(state)
100 , m_frontend(frontendChannel) 103 , m_frontend(frontendChannel)
101 , m_isolate(m_inspector->isolate()) 104 , m_isolate(m_inspector->isolate())
102 , m_breakReason(protocol::Debugger::Paused::ReasonEnum::Other) 105 , m_breakReason(protocol::Debugger::Paused::ReasonEnum::Other)
103 , m_scheduledDebuggerStep(NoStep) 106 , m_scheduledDebuggerStep(NoStep)
104 , m_skipNextDebuggerStepOut(false) 107 , m_skipNextDebuggerStepOut(false)
105 , m_javaScriptPauseScheduled(false) 108 , m_javaScriptPauseScheduled(false)
106 , m_steppingFromFramework(false) 109 , m_steppingFromFramework(false)
(...skipping 17 matching lines...) Expand all
124 *errorString = "Debugger agent is not enabled"; 127 *errorString = "Debugger agent is not enabled";
125 return false; 128 return false;
126 } 129 }
127 130
128 void V8DebuggerAgentImpl::enable() 131 void V8DebuggerAgentImpl::enable()
129 { 132 {
130 // m_inspector->addListener may result in reporting all parsed scripts to 133 // m_inspector->addListener may result in reporting all parsed scripts to
131 // the agent so it should already be in enabled state by then. 134 // the agent so it should already be in enabled state by then.
132 m_enabled = true; 135 m_enabled = true;
133 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, true); 136 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, true);
134 m_inspector->debuggerAgentEnabled(); 137 m_debugger->enable();
135 138
136 std::vector<std::unique_ptr<V8DebuggerScript>> compiledScripts; 139 std::vector<std::unique_ptr<V8DebuggerScript>> compiledScripts;
137 m_inspector->getCompiledScripts(m_session->contextGroupId(), compiledScripts ); 140 m_debugger->getCompiledScripts(m_session->contextGroupId(), compiledScripts) ;
138 for (size_t i = 0; i < compiledScripts.size(); i++) 141 for (size_t i = 0; i < compiledScripts.size(); i++)
139 didParseSource(std::move(compiledScripts[i]), true); 142 didParseSource(std::move(compiledScripts[i]), true);
140 143
141 // FIXME(WK44513): breakpoints activated flag should be synchronized between all front-ends 144 // FIXME(WK44513): breakpoints activated flag should be synchronized between all front-ends
142 m_inspector->setBreakpointsActivated(true); 145 m_debugger->setBreakpointsActivated(true);
143 } 146 }
144 147
145 bool V8DebuggerAgentImpl::enabled() 148 bool V8DebuggerAgentImpl::enabled()
146 { 149 {
147 return m_enabled; 150 return m_enabled;
148 } 151 }
149 152
150 void V8DebuggerAgentImpl::enable(ErrorString* errorString) 153 void V8DebuggerAgentImpl::enable(ErrorString* errorString)
151 { 154 {
152 if (enabled()) 155 if (enabled())
153 return; 156 return;
154 157
155 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) { 158 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) {
156 *errorString = "Script execution is prohibited"; 159 *errorString = "Script execution is prohibited";
157 return; 160 return;
158 } 161 }
159 162
160 enable(); 163 enable();
161 } 164 }
162 165
163 void V8DebuggerAgentImpl::disable(ErrorString*) 166 void V8DebuggerAgentImpl::disable(ErrorString*)
164 { 167 {
165 if (!enabled()) 168 if (!enabled())
166 return; 169 return;
167 170
168 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create()); 171 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, protocol::Dict ionaryValue::create());
169 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, V8InspectorI mpl::DontPauseOnExceptions); 172 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, V8Debugger:: DontPauseOnExceptions);
170 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0); 173 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, 0);
171 174
172 if (!m_pausedContext.IsEmpty()) 175 if (!m_pausedContext.IsEmpty())
173 m_inspector->continueProgram(); 176 m_debugger->continueProgram();
174 m_inspector->debuggerAgentDisabled(); 177 m_debugger->disable();
175 m_pausedContext.Reset(); 178 m_pausedContext.Reset();
176 JavaScriptCallFrames emptyCallFrames; 179 JavaScriptCallFrames emptyCallFrames;
177 m_pausedCallFrames.swap(emptyCallFrames); 180 m_pausedCallFrames.swap(emptyCallFrames);
178 m_scripts.clear(); 181 m_scripts.clear();
179 m_blackboxedPositions.clear(); 182 m_blackboxedPositions.clear();
180 m_breakpointIdToDebuggerBreakpointIds.clear(); 183 m_breakpointIdToDebuggerBreakpointIds.clear();
181 m_inspector->setAsyncCallStackDepth(this, 0); 184 m_debugger->setAsyncCallStackDepth(this, 0);
182 m_continueToLocationBreakpointId = String16(); 185 m_continueToLocationBreakpointId = String16();
183 clearBreakDetails(); 186 clearBreakDetails();
184 m_scheduledDebuggerStep = NoStep; 187 m_scheduledDebuggerStep = NoStep;
185 m_skipNextDebuggerStepOut = false; 188 m_skipNextDebuggerStepOut = false;
186 m_javaScriptPauseScheduled = false; 189 m_javaScriptPauseScheduled = false;
187 m_steppingFromFramework = false; 190 m_steppingFromFramework = false;
188 m_pausingOnNativeEvent = false; 191 m_pausingOnNativeEvent = false;
189 m_skippedStepFrameCount = 0; 192 m_skippedStepFrameCount = 0;
190 m_recursionLevelForStepFrame = 0; 193 m_recursionLevelForStepFrame = 0;
191 m_skipAllPauses = false; 194 m_skipAllPauses = false;
192 m_blackboxPattern = nullptr; 195 m_blackboxPattern = nullptr;
193 m_state->remove(DebuggerAgentState::blackboxPattern); 196 m_state->remove(DebuggerAgentState::blackboxPattern);
194 m_enabled = false; 197 m_enabled = false;
195 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, false); 198 m_state->setBoolean(DebuggerAgentState::debuggerEnabled, false);
196 } 199 }
197 200
198 void V8DebuggerAgentImpl::restore() 201 void V8DebuggerAgentImpl::restore()
199 { 202 {
200 DCHECK(!m_enabled); 203 DCHECK(!m_enabled);
201 if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false)) 204 if (!m_state->booleanProperty(DebuggerAgentState::debuggerEnabled, false))
202 return; 205 return;
203 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId())) 206 if (!m_inspector->client()->canExecuteScripts(m_session->contextGroupId()))
204 return; 207 return;
205 208
206 enable(); 209 enable();
207 ErrorString error; 210 ErrorString error;
208 211
209 int pauseState = V8InspectorImpl::DontPauseOnExceptions; 212 int pauseState = V8Debugger::DontPauseOnExceptions;
210 m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState) ; 213 m_state->getInteger(DebuggerAgentState::pauseOnExceptionsState, &pauseState) ;
211 setPauseOnExceptionsImpl(&error, pauseState); 214 setPauseOnExceptionsImpl(&error, pauseState);
212 DCHECK(error.isEmpty()); 215 DCHECK(error.isEmpty());
213 216
214 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false); 217 m_skipAllPauses = m_state->booleanProperty(DebuggerAgentState::skipAllPauses , false);
215 218
216 int asyncCallStackDepth = 0; 219 int asyncCallStackDepth = 0;
217 m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, &asyncCallStack Depth); 220 m_state->getInteger(DebuggerAgentState::asyncCallStackDepth, &asyncCallStack Depth);
218 m_inspector->setAsyncCallStackDepth(this, asyncCallStackDepth); 221 m_debugger->setAsyncCallStackDepth(this, asyncCallStackDepth);
219 222
220 String16 blackboxPattern; 223 String16 blackboxPattern;
221 if (m_state->getString(DebuggerAgentState::blackboxPattern, &blackboxPattern )) { 224 if (m_state->getString(DebuggerAgentState::blackboxPattern, &blackboxPattern )) {
222 if (!setBlackboxPattern(&error, blackboxPattern)) 225 if (!setBlackboxPattern(&error, blackboxPattern))
223 NOTREACHED(); 226 NOTREACHED();
224 } 227 }
225 } 228 }
226 229
227 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive) 230 void V8DebuggerAgentImpl::setBreakpointsActive(ErrorString* errorString, bool ac tive)
228 { 231 {
229 if (!checkEnabled(errorString)) 232 if (!checkEnabled(errorString))
230 return; 233 return;
231 m_inspector->setBreakpointsActivated(active); 234 m_debugger->setBreakpointsActivated(active);
232 } 235 }
233 236
234 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped) 237 void V8DebuggerAgentImpl::setSkipAllPauses(ErrorString*, bool skipped)
235 { 238 {
236 m_skipAllPauses = skipped; 239 m_skipAllPauses = skipped;
237 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses); 240 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses);
238 } 241 }
239 242
240 static std::unique_ptr<protocol::DictionaryValue> buildObjectForBreakpointCookie (const String16& url, int lineNumber, int columnNumber, const String16& conditio n, bool isRegex) 243 static std::unique_ptr<protocol::DictionaryValue> buildObjectForBreakpointCookie (const String16& url, int lineNumber, int columnNumber, const String16& conditio n, bool isRegex)
241 { 244 {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId) 362 void V8DebuggerAgentImpl::removeBreakpoint(const String16& breakpointId)
360 { 363 {
361 DCHECK(enabled()); 364 DCHECK(enabled());
362 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId); 365 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId);
363 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd()) 366 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd())
364 return; 367 return;
365 const std::vector<String16>& ids = debuggerBreakpointIdsIterator->second; 368 const std::vector<String16>& ids = debuggerBreakpointIdsIterator->second;
366 for (size_t i = 0; i < ids.size(); ++i) { 369 for (size_t i = 0; i < ids.size(); ++i) {
367 const String16& debuggerBreakpointId = ids[i]; 370 const String16& debuggerBreakpointId = ids[i];
368 371
369 m_inspector->removeBreakpoint(debuggerBreakpointId); 372 m_debugger->removeBreakpoint(debuggerBreakpointId);
370 m_serverBreakpoints.erase(debuggerBreakpointId); 373 m_serverBreakpoints.erase(debuggerBreakpointId);
371 } 374 }
372 m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId); 375 m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId);
373 } 376 }
374 377
375 void V8DebuggerAgentImpl::continueToLocation(ErrorString* errorString, 378 void V8DebuggerAgentImpl::continueToLocation(ErrorString* errorString,
376 std::unique_ptr<protocol::Debugger::Location> location, 379 std::unique_ptr<protocol::Debugger::Location> location,
377 const protocol::Maybe<bool>& interstateLocationOpt) 380 const protocol::Maybe<bool>& interstateLocationOpt)
378 { 381 {
379 if (!checkEnabled(errorString)) 382 if (!checkEnabled(errorString))
380 return; 383 return;
381 if (!m_continueToLocationBreakpointId.isEmpty()) { 384 if (!m_continueToLocationBreakpointId.isEmpty()) {
382 m_inspector->removeBreakpoint(m_continueToLocationBreakpointId); 385 m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
383 m_continueToLocationBreakpointId = ""; 386 m_continueToLocationBreakpointId = "";
384 } 387 }
385 388
386 String16 scriptId; 389 String16 scriptId;
387 int lineNumber; 390 int lineNumber;
388 int columnNumber; 391 int columnNumber;
389 392
390 if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber, &columnNumber)) 393 if (!parseLocation(errorString, std::move(location), &scriptId, &lineNumber, &columnNumber))
391 return; 394 return;
392 395
393 ScriptBreakpoint breakpoint(lineNumber, columnNumber, ""); 396 ScriptBreakpoint breakpoint(lineNumber, columnNumber, "");
394 m_continueToLocationBreakpointId = m_inspector->setBreakpoint(scriptId, brea kpoint, &lineNumber, &columnNumber, interstateLocationOpt.fromMaybe(false)); 397 m_continueToLocationBreakpointId = m_debugger->setBreakpoint(scriptId, break point, &lineNumber, &columnNumber, interstateLocationOpt.fromMaybe(false));
395 resume(errorString); 398 resume(errorString);
396 } 399 }
397 400
398 void V8DebuggerAgentImpl::getBacktrace(ErrorString* errorString, std::unique_ptr <Array<CallFrame>>* callFrames, Maybe<StackTrace>* asyncStackTrace) 401 void V8DebuggerAgentImpl::getBacktrace(ErrorString* errorString, std::unique_ptr <Array<CallFrame>>* callFrames, Maybe<StackTrace>* asyncStackTrace)
399 { 402 {
400 if (!assertPaused(errorString)) 403 if (!assertPaused(errorString))
401 return; 404 return;
402 JavaScriptCallFrames frames = m_inspector->currentCallFrames(); 405 JavaScriptCallFrames frames = m_debugger->currentCallFrames();
403 m_pausedCallFrames.swap(frames); 406 m_pausedCallFrames.swap(frames);
404 *callFrames = currentCallFrames(errorString); 407 *callFrames = currentCallFrames(errorString);
405 if (!*callFrames) 408 if (!*callFrames)
406 return; 409 return;
407 *asyncStackTrace = currentAsyncStackTrace(); 410 *asyncStackTrace = currentAsyncStackTrace();
408 } 411 }
409 412
410 bool V8DebuggerAgentImpl::isCurrentCallStackEmptyOrBlackboxed() 413 bool V8DebuggerAgentImpl::isCurrentCallStackEmptyOrBlackboxed()
411 { 414 {
412 DCHECK(enabled()); 415 DCHECK(enabled());
413 JavaScriptCallFrames callFrames = m_inspector->currentCallFrames(); 416 JavaScriptCallFrames callFrames = m_debugger->currentCallFrames();
414 for (size_t index = 0; index < callFrames.size(); ++index) { 417 for (size_t index = 0; index < callFrames.size(); ++index) {
415 if (!isCallFrameWithUnknownScriptOrBlackboxed(callFrames[index].get())) 418 if (!isCallFrameWithUnknownScriptOrBlackboxed(callFrames[index].get()))
416 return false; 419 return false;
417 } 420 }
418 return true; 421 return true;
419 } 422 }
420 423
421 bool V8DebuggerAgentImpl::isTopPausedCallFrameBlackboxed() 424 bool V8DebuggerAgentImpl::isTopPausedCallFrameBlackboxed()
422 { 425 {
423 DCHECK(enabled()); 426 DCHECK(enabled());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 CHECK(!breakpointId.isEmpty()); 494 CHECK(!breakpointId.isEmpty());
492 CHECK(!scriptId.isEmpty()); 495 CHECK(!scriptId.isEmpty());
493 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId); 496 ScriptsMap::iterator scriptIterator = m_scripts.find(scriptId);
494 if (scriptIterator == m_scripts.end()) 497 if (scriptIterator == m_scripts.end())
495 return nullptr; 498 return nullptr;
496 if (breakpoint.lineNumber < scriptIterator->second->startLine() || scriptIte rator->second->endLine() < breakpoint.lineNumber) 499 if (breakpoint.lineNumber < scriptIterator->second->startLine() || scriptIte rator->second->endLine() < breakpoint.lineNumber)
497 return nullptr; 500 return nullptr;
498 501
499 int actualLineNumber; 502 int actualLineNumber;
500 int actualColumnNumber; 503 int actualColumnNumber;
501 String16 debuggerBreakpointId = m_inspector->setBreakpoint(scriptId, breakpo int, &actualLineNumber, &actualColumnNumber, false); 504 String16 debuggerBreakpointId = m_debugger->setBreakpoint(scriptId, breakpoi nt, &actualLineNumber, &actualColumnNumber, false);
502 if (debuggerBreakpointId.isEmpty()) 505 if (debuggerBreakpointId.isEmpty())
503 return nullptr; 506 return nullptr;
504 507
505 m_serverBreakpoints[debuggerBreakpointId] = std::make_pair(breakpointId, sou rce); 508 m_serverBreakpoints[debuggerBreakpointId] = std::make_pair(breakpointId, sou rce);
506 CHECK(!breakpointId.isEmpty()); 509 CHECK(!breakpointId.isEmpty());
507 510
508 m_breakpointIdToDebuggerBreakpointIds[breakpointId].push_back(debuggerBreakp ointId); 511 m_breakpointIdToDebuggerBreakpointIds[breakpointId].push_back(debuggerBreakp ointId);
509 return buildProtocolLocation(scriptId, actualLineNumber, actualColumnNumber) ; 512 return buildProtocolLocation(scriptId, actualLineNumber, actualColumnNumber) ;
510 } 513 }
511 514
(...skipping 22 matching lines...) Expand all
534 Maybe<protocol::Array<protocol::Debugger::CallFrame>>* newCallFrames, 537 Maybe<protocol::Array<protocol::Debugger::CallFrame>>* newCallFrames,
535 Maybe<bool>* stackChanged, 538 Maybe<bool>* stackChanged,
536 Maybe<StackTrace>* asyncStackTrace, 539 Maybe<StackTrace>* asyncStackTrace,
537 Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError) 540 Maybe<protocol::Runtime::ExceptionDetails>* optOutCompileError)
538 { 541 {
539 if (!checkEnabled(errorString)) 542 if (!checkEnabled(errorString))
540 return; 543 return;
541 544
542 v8::HandleScope handles(m_isolate); 545 v8::HandleScope handles(m_isolate);
543 v8::Local<v8::String> newSource = toV8String(m_isolate, newContent); 546 v8::Local<v8::String> newSource = toV8String(m_isolate, newContent);
544 if (!m_inspector->setScriptSource(scriptId, newSource, preview.fromMaybe(fal se), errorString, optOutCompileError, &m_pausedCallFrames, stackChanged)) 547 if (!m_debugger->setScriptSource(scriptId, newSource, preview.fromMaybe(fals e), errorString, optOutCompileError, &m_pausedCallFrames, stackChanged))
545 return; 548 return;
546 549
547 ScriptsMap::iterator it = m_scripts.find(scriptId); 550 ScriptsMap::iterator it = m_scripts.find(scriptId);
548 if (it != m_scripts.end()) 551 if (it != m_scripts.end())
549 it->second->setSource(m_isolate, newSource); 552 it->second->setSource(m_isolate, newSource);
550 553
551 std::unique_ptr<Array<CallFrame>> callFrames = currentCallFrames(errorString ); 554 std::unique_ptr<Array<CallFrame>> callFrames = currentCallFrames(errorString );
552 if (!callFrames) 555 if (!callFrames)
553 return; 556 return;
554 *newCallFrames = std::move(callFrames); 557 *newCallFrames = std::move(callFrames);
(...skipping 14 matching lines...) Expand all
569 *errorString = "Could not find call frame with given id"; 572 *errorString = "Could not find call frame with given id";
570 return; 573 return;
571 } 574 }
572 575
573 v8::Local<v8::Value> resultValue; 576 v8::Local<v8::Value> resultValue;
574 v8::Local<v8::Boolean> result; 577 v8::Local<v8::Boolean> result;
575 if (!m_pausedCallFrames[scope.frameOrdinal()]->restart().ToLocal(&resultValu e) || scope.tryCatch().HasCaught() || !resultValue->ToBoolean(scope.context()).T oLocal(&result) || !result->Value()) { 578 if (!m_pausedCallFrames[scope.frameOrdinal()]->restart().ToLocal(&resultValu e) || scope.tryCatch().HasCaught() || !resultValue->ToBoolean(scope.context()).T oLocal(&result) || !result->Value()) {
576 *errorString = "Internal error"; 579 *errorString = "Internal error";
577 return; 580 return;
578 } 581 }
579 JavaScriptCallFrames frames = m_inspector->currentCallFrames(); 582 JavaScriptCallFrames frames = m_debugger->currentCallFrames();
580 m_pausedCallFrames.swap(frames); 583 m_pausedCallFrames.swap(frames);
581 584
582 *newCallFrames = currentCallFrames(errorString); 585 *newCallFrames = currentCallFrames(errorString);
583 if (!*newCallFrames) 586 if (!*newCallFrames)
584 return; 587 return;
585 *asyncStackTrace = currentAsyncStackTrace(); 588 *asyncStackTrace = currentAsyncStackTrace();
586 } 589 }
587 590
588 void V8DebuggerAgentImpl::getScriptSource(ErrorString* error, const String16& sc riptId, String16* scriptSource) 591 void V8DebuggerAgentImpl::getScriptSource(ErrorString* error, const String16& sc riptId, String16* scriptSource)
589 { 592 {
590 if (!checkEnabled(error)) 593 if (!checkEnabled(error))
591 return; 594 return;
592 ScriptsMap::iterator it = m_scripts.find(scriptId); 595 ScriptsMap::iterator it = m_scripts.find(scriptId);
593 if (it == m_scripts.end()) { 596 if (it == m_scripts.end()) {
594 *error = "No script for id: " + scriptId; 597 *error = "No script for id: " + scriptId;
595 return; 598 return;
596 } 599 }
597 v8::HandleScope handles(m_isolate); 600 v8::HandleScope handles(m_isolate);
598 *scriptSource = toProtocolString(it->second->source(m_isolate)); 601 *scriptSource = toProtocolString(it->second->source(m_isolate));
599 } 602 }
600 603
601 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String16& breakReas on, std::unique_ptr<protocol::DictionaryValue> data) 604 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String16& breakReas on, std::unique_ptr<protocol::DictionaryValue> data)
602 { 605 {
603 if (!enabled() || m_scheduledDebuggerStep == StepInto || m_javaScriptPauseSc heduled || m_inspector->isPaused() || !m_inspector->breakpointsActivated()) 606 if (!enabled() || m_scheduledDebuggerStep == StepInto || m_javaScriptPauseSc heduled || m_debugger->isPaused() || !m_debugger->breakpointsActivated())
604 return; 607 return;
605 m_breakReason = breakReason; 608 m_breakReason = breakReason;
606 m_breakAuxData = std::move(data); 609 m_breakAuxData = std::move(data);
607 m_pausingOnNativeEvent = true; 610 m_pausingOnNativeEvent = true;
608 m_skipNextDebuggerStepOut = false; 611 m_skipNextDebuggerStepOut = false;
609 m_inspector->setPauseOnNextStatement(true); 612 m_debugger->setPauseOnNextStatement(true);
610 } 613 }
611 614
612 void V8DebuggerAgentImpl::schedulePauseOnNextStatementIfSteppingInto() 615 void V8DebuggerAgentImpl::schedulePauseOnNextStatementIfSteppingInto()
613 { 616 {
614 DCHECK(enabled()); 617 DCHECK(enabled());
615 if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || m_i nspector->isPaused()) 618 if (m_scheduledDebuggerStep != StepInto || m_javaScriptPauseScheduled || m_d ebugger->isPaused())
616 return; 619 return;
617 clearBreakDetails(); 620 clearBreakDetails();
618 m_pausingOnNativeEvent = false; 621 m_pausingOnNativeEvent = false;
619 m_skippedStepFrameCount = 0; 622 m_skippedStepFrameCount = 0;
620 m_recursionLevelForStepFrame = 0; 623 m_recursionLevelForStepFrame = 0;
621 m_inspector->setPauseOnNextStatement(true); 624 m_debugger->setPauseOnNextStatement(true);
622 } 625 }
623 626
624 void V8DebuggerAgentImpl::cancelPauseOnNextStatement() 627 void V8DebuggerAgentImpl::cancelPauseOnNextStatement()
625 { 628 {
626 if (m_javaScriptPauseScheduled || m_inspector->isPaused()) 629 if (m_javaScriptPauseScheduled || m_debugger->isPaused())
627 return; 630 return;
628 clearBreakDetails(); 631 clearBreakDetails();
629 m_pausingOnNativeEvent = false; 632 m_pausingOnNativeEvent = false;
630 m_inspector->setPauseOnNextStatement(false); 633 m_debugger->setPauseOnNextStatement(false);
631 } 634 }
632 635
633 void V8DebuggerAgentImpl::pause(ErrorString* errorString) 636 void V8DebuggerAgentImpl::pause(ErrorString* errorString)
634 { 637 {
635 if (!checkEnabled(errorString)) 638 if (!checkEnabled(errorString))
636 return; 639 return;
637 if (m_javaScriptPauseScheduled || m_inspector->isPaused()) 640 if (m_javaScriptPauseScheduled || m_debugger->isPaused())
638 return; 641 return;
639 clearBreakDetails(); 642 clearBreakDetails();
640 m_javaScriptPauseScheduled = true; 643 m_javaScriptPauseScheduled = true;
641 m_scheduledDebuggerStep = NoStep; 644 m_scheduledDebuggerStep = NoStep;
642 m_skippedStepFrameCount = 0; 645 m_skippedStepFrameCount = 0;
643 m_steppingFromFramework = false; 646 m_steppingFromFramework = false;
644 m_inspector->setPauseOnNextStatement(true); 647 m_debugger->setPauseOnNextStatement(true);
645 } 648 }
646 649
647 void V8DebuggerAgentImpl::resume(ErrorString* errorString) 650 void V8DebuggerAgentImpl::resume(ErrorString* errorString)
648 { 651 {
649 if (!assertPaused(errorString)) 652 if (!assertPaused(errorString))
650 return; 653 return;
651 m_scheduledDebuggerStep = NoStep; 654 m_scheduledDebuggerStep = NoStep;
652 m_steppingFromFramework = false; 655 m_steppingFromFramework = false;
653 m_session->releaseObjectGroup(backtraceObjectGroup); 656 m_session->releaseObjectGroup(backtraceObjectGroup);
654 m_inspector->continueProgram(); 657 m_debugger->continueProgram();
655 } 658 }
656 659
657 void V8DebuggerAgentImpl::stepOver(ErrorString* errorString) 660 void V8DebuggerAgentImpl::stepOver(ErrorString* errorString)
658 { 661 {
659 if (!assertPaused(errorString)) 662 if (!assertPaused(errorString))
660 return; 663 return;
661 // StepOver at function return point should fallback to StepInto. 664 // StepOver at function return point should fallback to StepInto.
662 JavaScriptCallFrame* frame = !m_pausedCallFrames.empty() ? m_pausedCallFrame s[0].get() : nullptr; 665 JavaScriptCallFrame* frame = !m_pausedCallFrames.empty() ? m_pausedCallFrame s[0].get() : nullptr;
663 if (frame && frame->isAtReturn()) { 666 if (frame && frame->isAtReturn()) {
664 stepInto(errorString); 667 stepInto(errorString);
665 return; 668 return;
666 } 669 }
667 m_scheduledDebuggerStep = StepOver; 670 m_scheduledDebuggerStep = StepOver;
668 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 671 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
669 m_session->releaseObjectGroup(backtraceObjectGroup); 672 m_session->releaseObjectGroup(backtraceObjectGroup);
670 m_inspector->stepOverStatement(); 673 m_debugger->stepOverStatement();
671 } 674 }
672 675
673 void V8DebuggerAgentImpl::stepInto(ErrorString* errorString) 676 void V8DebuggerAgentImpl::stepInto(ErrorString* errorString)
674 { 677 {
675 if (!assertPaused(errorString)) 678 if (!assertPaused(errorString))
676 return; 679 return;
677 m_scheduledDebuggerStep = StepInto; 680 m_scheduledDebuggerStep = StepInto;
678 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 681 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
679 m_session->releaseObjectGroup(backtraceObjectGroup); 682 m_session->releaseObjectGroup(backtraceObjectGroup);
680 m_inspector->stepIntoStatement(); 683 m_debugger->stepIntoStatement();
681 } 684 }
682 685
683 void V8DebuggerAgentImpl::stepOut(ErrorString* errorString) 686 void V8DebuggerAgentImpl::stepOut(ErrorString* errorString)
684 { 687 {
685 if (!assertPaused(errorString)) 688 if (!assertPaused(errorString))
686 return; 689 return;
687 m_scheduledDebuggerStep = StepOut; 690 m_scheduledDebuggerStep = StepOut;
688 m_skipNextDebuggerStepOut = false; 691 m_skipNextDebuggerStepOut = false;
689 m_recursionLevelForStepOut = 1; 692 m_recursionLevelForStepOut = 1;
690 m_steppingFromFramework = isTopPausedCallFrameBlackboxed(); 693 m_steppingFromFramework = isTopPausedCallFrameBlackboxed();
691 m_session->releaseObjectGroup(backtraceObjectGroup); 694 m_session->releaseObjectGroup(backtraceObjectGroup);
692 m_inspector->stepOutOfFunction(); 695 m_debugger->stepOutOfFunction();
693 } 696 }
694 697
695 void V8DebuggerAgentImpl::setPauseOnExceptions(ErrorString* errorString, const S tring16& stringPauseState) 698 void V8DebuggerAgentImpl::setPauseOnExceptions(ErrorString* errorString, const S tring16& stringPauseState)
696 { 699 {
697 if (!checkEnabled(errorString)) 700 if (!checkEnabled(errorString))
698 return; 701 return;
699 V8InspectorImpl::PauseOnExceptionsState pauseState; 702 V8Debugger::PauseOnExceptionsState pauseState;
700 if (stringPauseState == "none") { 703 if (stringPauseState == "none") {
701 pauseState = V8InspectorImpl::DontPauseOnExceptions; 704 pauseState = V8Debugger::DontPauseOnExceptions;
702 } else if (stringPauseState == "all") { 705 } else if (stringPauseState == "all") {
703 pauseState = V8InspectorImpl::PauseOnAllExceptions; 706 pauseState = V8Debugger::PauseOnAllExceptions;
704 } else if (stringPauseState == "uncaught") { 707 } else if (stringPauseState == "uncaught") {
705 pauseState = V8InspectorImpl::PauseOnUncaughtExceptions; 708 pauseState = V8Debugger::PauseOnUncaughtExceptions;
706 } else { 709 } else {
707 *errorString = "Unknown pause on exceptions mode: " + stringPauseState; 710 *errorString = "Unknown pause on exceptions mode: " + stringPauseState;
708 return; 711 return;
709 } 712 }
710 setPauseOnExceptionsImpl(errorString, pauseState); 713 setPauseOnExceptionsImpl(errorString, pauseState);
711 } 714 }
712 715
713 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(ErrorString* errorString, int pauseState) 716 void V8DebuggerAgentImpl::setPauseOnExceptionsImpl(ErrorString* errorString, int pauseState)
714 { 717 {
715 m_inspector->setPauseOnExceptionsState(static_cast<V8InspectorImpl::PauseOnE xceptionsState>(pauseState)); 718 m_debugger->setPauseOnExceptionsState(static_cast<V8Debugger::PauseOnExcepti onsState>(pauseState));
716 if (m_inspector->getPauseOnExceptionsState() != pauseState) 719 if (m_debugger->getPauseOnExceptionsState() != pauseState)
717 *errorString = "Internal error. Could not change pause on exceptions sta te"; 720 *errorString = "Internal error. Could not change pause on exceptions sta te";
718 else 721 else
719 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseSta te); 722 m_state->setInteger(DebuggerAgentState::pauseOnExceptionsState, pauseSta te);
720 } 723 }
721 724
722 void V8DebuggerAgentImpl::evaluateOnCallFrame(ErrorString* errorString, 725 void V8DebuggerAgentImpl::evaluateOnCallFrame(ErrorString* errorString,
723 const String16& callFrameId, 726 const String16& callFrameId,
724 const String16& expression, 727 const String16& expression,
725 const Maybe<String16>& objectGroup, 728 const Maybe<String16>& objectGroup,
726 const Maybe<bool>& includeCommandLineAPI, 729 const Maybe<bool>& includeCommandLineAPI,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 *errorString = "Internal error"; 792 *errorString = "Internal error";
790 return; 793 return;
791 } 794 }
792 } 795 }
793 796
794 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth) 797 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth)
795 { 798 {
796 if (!checkEnabled(errorString)) 799 if (!checkEnabled(errorString))
797 return; 800 return;
798 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, depth); 801 m_state->setInteger(DebuggerAgentState::asyncCallStackDepth, depth);
799 m_inspector->setAsyncCallStackDepth(this, depth); 802 m_debugger->setAsyncCallStackDepth(this, depth);
800 } 803 }
801 804
802 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* errorString, std::uni que_ptr<protocol::Array<String16>> patterns) 805 void V8DebuggerAgentImpl::setBlackboxPatterns(ErrorString* errorString, std::uni que_ptr<protocol::Array<String16>> patterns)
803 { 806 {
804 if (!patterns->length()) { 807 if (!patterns->length()) {
805 m_blackboxPattern = nullptr; 808 m_blackboxPattern = nullptr;
806 m_state->remove(DebuggerAgentState::blackboxPattern); 809 m_state->remove(DebuggerAgentState::blackboxPattern);
807 return; 810 return;
808 } 811 }
809 812
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 schedulePauseOnNextStatementIfSteppingInto(); 884 schedulePauseOnNextStatementIfSteppingInto();
882 } 885 }
883 886
884 void V8DebuggerAgentImpl::didExecuteScript() 887 void V8DebuggerAgentImpl::didExecuteScript()
885 { 888 {
886 changeJavaScriptRecursionLevel(-1); 889 changeJavaScriptRecursionLevel(-1);
887 } 890 }
888 891
889 void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step) 892 void V8DebuggerAgentImpl::changeJavaScriptRecursionLevel(int step)
890 { 893 {
891 if (m_javaScriptPauseScheduled && !m_skipAllPauses && !m_inspector->isPaused ()) { 894 if (m_javaScriptPauseScheduled && !m_skipAllPauses && !m_debugger->isPaused( )) {
892 // Do not ever loose user's pause request until we have actually paused. 895 // Do not ever loose user's pause request until we have actually paused.
893 m_inspector->setPauseOnNextStatement(true); 896 m_debugger->setPauseOnNextStatement(true);
894 } 897 }
895 if (m_scheduledDebuggerStep == StepOut) { 898 if (m_scheduledDebuggerStep == StepOut) {
896 m_recursionLevelForStepOut += step; 899 m_recursionLevelForStepOut += step;
897 if (!m_recursionLevelForStepOut) { 900 if (!m_recursionLevelForStepOut) {
898 // When StepOut crosses a task boundary (i.e. js -> blink_c++) from where it was requested, 901 // When StepOut crosses a task boundary (i.e. js -> blink_c++) from where it was requested,
899 // switch stepping to step into a next JS task, as if we exited to a blackboxed framework. 902 // switch stepping to step into a next JS task, as if we exited to a blackboxed framework.
900 m_scheduledDebuggerStep = StepInto; 903 m_scheduledDebuggerStep = StepInto;
901 m_skipNextDebuggerStepOut = false; 904 m_skipNextDebuggerStepOut = false;
902 } 905 }
903 } 906 }
904 if (m_recursionLevelForStepFrame) { 907 if (m_recursionLevelForStepFrame) {
905 m_recursionLevelForStepFrame += step; 908 m_recursionLevelForStepFrame += step;
906 if (!m_recursionLevelForStepFrame) { 909 if (!m_recursionLevelForStepFrame) {
907 // We have walked through a blackboxed framework and got back to whe re we started. 910 // We have walked through a blackboxed framework and got back to whe re we started.
908 // If there was no stepping scheduled, we should cancel the stepping explicitly, 911 // If there was no stepping scheduled, we should cancel the stepping explicitly,
909 // since there may be a scheduled StepFrame left. 912 // since there may be a scheduled StepFrame left.
910 // Otherwise, if we were stepping in/over, the StepFrame will stop a t the right location, 913 // Otherwise, if we were stepping in/over, the StepFrame will stop a t the right location,
911 // whereas if we were stepping out, we should continue doing so afte r debugger pauses 914 // whereas if we were stepping out, we should continue doing so afte r debugger pauses
912 // from the old StepFrame. 915 // from the old StepFrame.
913 m_skippedStepFrameCount = 0; 916 m_skippedStepFrameCount = 0;
914 if (m_scheduledDebuggerStep == NoStep) 917 if (m_scheduledDebuggerStep == NoStep)
915 m_inspector->clearStepping(); 918 m_debugger->clearStepping();
916 else if (m_scheduledDebuggerStep == StepOut) 919 else if (m_scheduledDebuggerStep == StepOut)
917 m_skipNextDebuggerStepOut = true; 920 m_skipNextDebuggerStepOut = true;
918 } 921 }
919 } 922 }
920 } 923 }
921 924
922 std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(ErrorSt ring* errorString) 925 std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames(ErrorSt ring* errorString)
923 { 926 {
924 if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) 927 if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size())
925 return Array<CallFrame>::create(); 928 return Array<CallFrame>::create();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 std::unique_ptr<Array<CallFrame>> callFrames = Array<CallFrame>::parse(toPro tocolValue(debuggerContext, objects).get(), &errorSupport); 980 std::unique_ptr<Array<CallFrame>> callFrames = Array<CallFrame>::parse(toPro tocolValue(debuggerContext, objects).get(), &errorSupport);
978 if (hasInternalError(errorString, !callFrames)) 981 if (hasInternalError(errorString, !callFrames))
979 return Array<CallFrame>::create(); 982 return Array<CallFrame>::create();
980 return callFrames; 983 return callFrames;
981 } 984 }
982 985
983 std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace() 986 std::unique_ptr<StackTrace> V8DebuggerAgentImpl::currentAsyncStackTrace()
984 { 987 {
985 if (m_pausedContext.IsEmpty()) 988 if (m_pausedContext.IsEmpty())
986 return nullptr; 989 return nullptr;
987 V8StackTraceImpl* stackTrace = m_inspector->currentAsyncCallChain(); 990 V8StackTraceImpl* stackTrace = m_debugger->currentAsyncCallChain();
988 return stackTrace ? stackTrace->buildInspectorObjectForTail(m_inspector) : n ullptr; 991 return stackTrace ? stackTrace->buildInspectorObjectForTail(m_debugger) : nu llptr;
989 } 992 }
990 993
991 void V8DebuggerAgentImpl::didParseSource(std::unique_ptr<V8DebuggerScript> scrip t, bool success) 994 void V8DebuggerAgentImpl::didParseSource(std::unique_ptr<V8DebuggerScript> scrip t, bool success)
992 { 995 {
993 v8::HandleScope handles(m_isolate); 996 v8::HandleScope handles(m_isolate);
994 String16 scriptSource = toProtocolString(script->source(m_isolate)); 997 String16 scriptSource = toProtocolString(script->source(m_isolate));
995 bool isDeprecatedSourceURL = false; 998 bool isDeprecatedSourceURL = false;
996 if (!success) 999 if (!success)
997 script->setSourceURL(findSourceURL(scriptSource, false, &isDeprecatedSou rceURL)); 1000 script->setSourceURL(findSourceURL(scriptSource, false, &isDeprecatedSou rceURL));
998 else if (script->hasSourceURL()) 1001 else if (script->hasSourceURL())
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 breakpointObject->getInteger(DebuggerAgentState::columnNumber, &breakpoi nt.columnNumber); 1049 breakpointObject->getInteger(DebuggerAgentState::columnNumber, &breakpoi nt.columnNumber);
1047 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition); 1050 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition);
1048 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(cookie.first, scriptId, breakpoint, UserBreakpointSource); 1051 std::unique_ptr<protocol::Debugger::Location> location = resolveBreakpoi nt(cookie.first, scriptId, breakpoint, UserBreakpointSource);
1049 if (location) 1052 if (location)
1050 m_frontend.breakpointResolved(cookie.first, std::move(location)); 1053 m_frontend.breakpointResolved(cookie.first, std::move(location));
1051 } 1054 }
1052 } 1055 }
1053 1056
1054 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(v8::Local<v8 ::Context> context, v8::Local<v8::Value> exception, const std::vector<String16>& hitBreakpoints, bool isPromiseRejection) 1057 V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause(v8::Local<v8 ::Context> context, v8::Local<v8::Value> exception, const std::vector<String16>& hitBreakpoints, bool isPromiseRejection)
1055 { 1058 {
1056 JavaScriptCallFrames callFrames = m_inspector->currentCallFrames(1); 1059 JavaScriptCallFrames callFrames = m_debugger->currentCallFrames(1);
1057 JavaScriptCallFrame* topCallFrame = !callFrames.empty() ? callFrames.begin() ->get() : nullptr; 1060 JavaScriptCallFrame* topCallFrame = !callFrames.empty() ? callFrames.begin() ->get() : nullptr;
1058 1061
1059 // Skip pause in internal scripts (e.g. InjectedScriptSource.js). 1062 // Skip pause in internal scripts (e.g. InjectedScriptSource.js).
1060 if (topCallFrame) { 1063 if (topCallFrame) {
1061 ScriptsMap::iterator it = m_scripts.find(String16::fromInteger(topCallFr ame->sourceID())); 1064 ScriptsMap::iterator it = m_scripts.find(String16::fromInteger(topCallFr ame->sourceID()));
1062 if (it != m_scripts.end() && it->second->isInternalScript()) 1065 if (it != m_scripts.end() && it->second->isInternalScript())
1063 return RequestStepFrame; 1066 return RequestStepFrame;
1064 } 1067 }
1065 1068
1066 V8DebuggerAgentImpl::SkipPauseRequest result; 1069 V8DebuggerAgentImpl::SkipPauseRequest result;
1067 if (m_skipAllPauses) 1070 if (m_skipAllPauses)
1068 result = RequestContinue; 1071 result = RequestContinue;
1069 else if (!hitBreakpoints.empty()) 1072 else if (!hitBreakpoints.empty())
1070 result = RequestNoSkip; // Don't skip explicit breakpoints even if set i n frameworks. 1073 result = RequestNoSkip; // Don't skip explicit breakpoints even if set i n frameworks.
1071 else if (!exception.IsEmpty()) 1074 else if (!exception.IsEmpty())
1072 result = shouldSkipExceptionPause(topCallFrame); 1075 result = shouldSkipExceptionPause(topCallFrame);
1073 else if (m_scheduledDebuggerStep != NoStep || m_javaScriptPauseScheduled || m_pausingOnNativeEvent) 1076 else if (m_scheduledDebuggerStep != NoStep || m_javaScriptPauseScheduled || m_pausingOnNativeEvent)
1074 result = shouldSkipStepPause(topCallFrame); 1077 result = shouldSkipStepPause(topCallFrame);
1075 else 1078 else
1076 result = RequestNoSkip; 1079 result = RequestNoSkip;
1077 1080
1078 m_skipNextDebuggerStepOut = false; 1081 m_skipNextDebuggerStepOut = false;
1079 if (result != RequestNoSkip) 1082 if (result != RequestNoSkip)
1080 return result; 1083 return result;
1081 // Skip pauses inside V8 internal scripts and on syntax errors. 1084 // Skip pauses inside V8 internal scripts and on syntax errors.
1082 if (!topCallFrame) 1085 if (!topCallFrame)
1083 return RequestContinue; 1086 return RequestContinue;
1084 1087
1085 DCHECK(m_pausedContext.IsEmpty()); 1088 DCHECK(m_pausedContext.IsEmpty());
1086 JavaScriptCallFrames frames = m_inspector->currentCallFrames(); 1089 JavaScriptCallFrames frames = m_debugger->currentCallFrames();
1087 m_pausedCallFrames.swap(frames); 1090 m_pausedCallFrames.swap(frames);
1088 m_pausedContext.Reset(m_isolate, context); 1091 m_pausedContext.Reset(m_isolate, context);
1089 v8::HandleScope handles(m_isolate); 1092 v8::HandleScope handles(m_isolate);
1090 1093
1091 if (!exception.IsEmpty()) { 1094 if (!exception.IsEmpty()) {
1092 ErrorString ignored; 1095 ErrorString ignored;
1093 InjectedScript* injectedScript = m_session->findInjectedScript(&ignored, V8InspectorImpl::contextId(context)); 1096 InjectedScript* injectedScript = m_session->findInjectedScript(&ignored, V8Debugger::contextId(context));
1094 if (injectedScript) { 1097 if (injectedScript) {
1095 m_breakReason = isPromiseRejection ? protocol::Debugger::Paused::Rea sonEnum::PromiseRejection : protocol::Debugger::Paused::ReasonEnum::Exception; 1098 m_breakReason = isPromiseRejection ? protocol::Debugger::Paused::Rea sonEnum::PromiseRejection : protocol::Debugger::Paused::ReasonEnum::Exception;
1096 ErrorString errorString; 1099 ErrorString errorString;
1097 auto obj = injectedScript->wrapObject(&errorString, exception, backt raceObjectGroup); 1100 auto obj = injectedScript->wrapObject(&errorString, exception, backt raceObjectGroup);
1098 m_breakAuxData = obj ? obj->serialize() : nullptr; 1101 m_breakAuxData = obj ? obj->serialize() : nullptr;
1099 // m_breakAuxData might be null after this. 1102 // m_breakAuxData might be null after this.
1100 } 1103 }
1101 } 1104 }
1102 1105
1103 std::unique_ptr<Array<String16>> hitBreakpointIds = Array<String16>::create( ); 1106 std::unique_ptr<Array<String16>> hitBreakpointIds = Array<String16>::create( );
(...skipping 13 matching lines...) Expand all
1117 ErrorString errorString; 1120 ErrorString errorString;
1118 m_frontend.paused(currentCallFrames(&errorString), m_breakReason, std::move( m_breakAuxData), std::move(hitBreakpointIds), currentAsyncStackTrace()); 1121 m_frontend.paused(currentCallFrames(&errorString), m_breakReason, std::move( m_breakAuxData), std::move(hitBreakpointIds), currentAsyncStackTrace());
1119 m_scheduledDebuggerStep = NoStep; 1122 m_scheduledDebuggerStep = NoStep;
1120 m_javaScriptPauseScheduled = false; 1123 m_javaScriptPauseScheduled = false;
1121 m_steppingFromFramework = false; 1124 m_steppingFromFramework = false;
1122 m_pausingOnNativeEvent = false; 1125 m_pausingOnNativeEvent = false;
1123 m_skippedStepFrameCount = 0; 1126 m_skippedStepFrameCount = 0;
1124 m_recursionLevelForStepFrame = 0; 1127 m_recursionLevelForStepFrame = 0;
1125 1128
1126 if (!m_continueToLocationBreakpointId.isEmpty()) { 1129 if (!m_continueToLocationBreakpointId.isEmpty()) {
1127 m_inspector->removeBreakpoint(m_continueToLocationBreakpointId); 1130 m_debugger->removeBreakpoint(m_continueToLocationBreakpointId);
1128 m_continueToLocationBreakpointId = ""; 1131 m_continueToLocationBreakpointId = "";
1129 } 1132 }
1130 return result; 1133 return result;
1131 } 1134 }
1132 1135
1133 void V8DebuggerAgentImpl::didContinue() 1136 void V8DebuggerAgentImpl::didContinue()
1134 { 1137 {
1135 m_pausedContext.Reset(); 1138 m_pausedContext.Reset();
1136 JavaScriptCallFrames emptyCallFrames; 1139 JavaScriptCallFrames emptyCallFrames;
1137 m_pausedCallFrames.swap(emptyCallFrames); 1140 m_pausedCallFrames.swap(emptyCallFrames);
1138 clearBreakDetails(); 1141 clearBreakDetails();
1139 m_frontend.resumed(); 1142 m_frontend.resumed();
1140 } 1143 }
1141 1144
1142 void V8DebuggerAgentImpl::breakProgram(const String16& breakReason, std::unique_ ptr<protocol::DictionaryValue> data) 1145 void V8DebuggerAgentImpl::breakProgram(const String16& breakReason, std::unique_ ptr<protocol::DictionaryValue> data)
1143 { 1146 {
1144 if (!enabled() || m_skipAllPauses || !m_pausedContext.IsEmpty() || isCurrent CallStackEmptyOrBlackboxed() || !m_inspector->breakpointsActivated()) 1147 if (!enabled() || m_skipAllPauses || !m_pausedContext.IsEmpty() || isCurrent CallStackEmptyOrBlackboxed() || !m_debugger->breakpointsActivated())
1145 return; 1148 return;
1146 m_breakReason = breakReason; 1149 m_breakReason = breakReason;
1147 m_breakAuxData = std::move(data); 1150 m_breakAuxData = std::move(data);
1148 m_scheduledDebuggerStep = NoStep; 1151 m_scheduledDebuggerStep = NoStep;
1149 m_steppingFromFramework = false; 1152 m_steppingFromFramework = false;
1150 m_pausingOnNativeEvent = false; 1153 m_pausingOnNativeEvent = false;
1151 m_inspector->breakProgram(); 1154 m_debugger->breakProgram();
1152 } 1155 }
1153 1156
1154 void V8DebuggerAgentImpl::breakProgramOnException(const String16& breakReason, s td::unique_ptr<protocol::DictionaryValue> data) 1157 void V8DebuggerAgentImpl::breakProgramOnException(const String16& breakReason, s td::unique_ptr<protocol::DictionaryValue> data)
1155 { 1158 {
1156 if (!enabled() || m_inspector->getPauseOnExceptionsState() == V8InspectorImp l::DontPauseOnExceptions) 1159 if (!enabled() || m_debugger->getPauseOnExceptionsState() == V8Debugger::Don tPauseOnExceptions)
1157 return; 1160 return;
1158 breakProgram(breakReason, std::move(data)); 1161 breakProgram(breakReason, std::move(data));
1159 } 1162 }
1160 1163
1161 bool V8DebuggerAgentImpl::assertPaused(ErrorString* errorString) 1164 bool V8DebuggerAgentImpl::assertPaused(ErrorString* errorString)
1162 { 1165 {
1163 if (m_pausedContext.IsEmpty()) { 1166 if (m_pausedContext.IsEmpty()) {
1164 *errorString = "Can only perform operation while paused."; 1167 *errorString = "Can only perform operation while paused.";
1165 return false; 1168 return false;
1166 } 1169 }
(...skipping 22 matching lines...) Expand all
1189 { 1192 {
1190 if (!enabled()) 1193 if (!enabled())
1191 return; 1194 return;
1192 m_scheduledDebuggerStep = NoStep; 1195 m_scheduledDebuggerStep = NoStep;
1193 m_scripts.clear(); 1196 m_scripts.clear();
1194 m_blackboxedPositions.clear(); 1197 m_blackboxedPositions.clear();
1195 m_breakpointIdToDebuggerBreakpointIds.clear(); 1198 m_breakpointIdToDebuggerBreakpointIds.clear();
1196 } 1199 }
1197 1200
1198 } // namespace blink 1201 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698