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

Side by Side Diff: src/inspector/v8-debugger.cc

Issue 2549133002: [debug] Remove DebugInterface class (Closed)
Patch Set: Created 4 years 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 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project 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 "src/inspector/v8-debugger.h" 5 #include "src/inspector/v8-debugger.h"
6 6
7 #include "src/inspector/debugger-script.h" 7 #include "src/inspector/debugger-script.h"
8 #include "src/inspector/protocol/Protocol.h" 8 #include "src/inspector/protocol/Protocol.h"
9 #include "src/inspector/script-breakpoint.h" 9 #include "src/inspector/script-breakpoint.h"
10 #include "src/inspector/string-util.h" 10 #include "src/inspector/string-util.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 V8Debugger::V8Debugger(v8::Isolate* isolate, V8InspectorImpl* inspector) 50 V8Debugger::V8Debugger(v8::Isolate* isolate, V8InspectorImpl* inspector)
51 : m_isolate(isolate), 51 : m_isolate(isolate),
52 m_inspector(inspector), 52 m_inspector(inspector),
53 m_lastContextId(0), 53 m_lastContextId(0),
54 m_enableCount(0), 54 m_enableCount(0),
55 m_breakpointsActivated(true), 55 m_breakpointsActivated(true),
56 m_runningNestedMessageLoop(false), 56 m_runningNestedMessageLoop(false),
57 m_ignoreScriptParsedEventsCounter(0), 57 m_ignoreScriptParsedEventsCounter(0),
58 m_maxAsyncCallStackDepth(0), 58 m_maxAsyncCallStackDepth(0),
59 m_pauseOnExceptionsState(v8::DebugInterface::NoBreakOnException), 59 m_pauseOnExceptionsState(v8::debug::NoBreakOnException),
60 m_wasmTranslation(isolate, this) {} 60 m_wasmTranslation(isolate, this) {}
61 61
62 V8Debugger::~V8Debugger() {} 62 V8Debugger::~V8Debugger() {}
63 63
64 void V8Debugger::enable() { 64 void V8Debugger::enable() {
65 if (m_enableCount++) return; 65 if (m_enableCount++) return;
66 DCHECK(!enabled()); 66 DCHECK(!enabled());
67 v8::HandleScope scope(m_isolate); 67 v8::HandleScope scope(m_isolate);
68 v8::DebugInterface::SetDebugEventListener(m_isolate, 68 v8::debug::DebugInterface::SetDebugEventListener(
69 &V8Debugger::v8DebugEventCallback, 69 m_isolate, &V8Debugger::v8DebugEventCallback,
70 v8::External::New(m_isolate, this)); 70 v8::External::New(m_isolate, this));
71 m_debuggerContext.Reset(m_isolate, 71 m_debuggerContext.Reset(
72 v8::DebugInterface::GetDebugContext(m_isolate)); 72 m_isolate, v8::debug::DebugInterface::GetDebugContext(m_isolate));
73 v8::DebugInterface::ChangeBreakOnException( 73 v8::debug::DebugInterface::ChangeBreakOnException(
74 m_isolate, v8::DebugInterface::NoBreakOnException); 74 m_isolate, v8::debug::NoBreakOnException);
75 m_pauseOnExceptionsState = v8::DebugInterface::NoBreakOnException; 75 m_pauseOnExceptionsState = v8::debug::NoBreakOnException;
76 compileDebuggerScript(); 76 compileDebuggerScript();
77 } 77 }
78 78
79 void V8Debugger::disable() { 79 void V8Debugger::disable() {
80 if (--m_enableCount) return; 80 if (--m_enableCount) return;
81 DCHECK(enabled()); 81 DCHECK(enabled());
82 clearBreakpoints(); 82 clearBreakpoints();
83 m_debuggerScript.Reset(); 83 m_debuggerScript.Reset();
84 m_debuggerContext.Reset(); 84 m_debuggerContext.Reset();
85 allAsyncTasksCanceled(); 85 allAsyncTasksCanceled();
86 m_wasmTranslation.Clear(); 86 m_wasmTranslation.Clear();
87 v8::DebugInterface::SetDebugEventListener(m_isolate, nullptr); 87 v8::debug::DebugInterface::SetDebugEventListener(m_isolate, nullptr);
88 } 88 }
89 89
90 bool V8Debugger::enabled() const { return !m_debuggerScript.IsEmpty(); } 90 bool V8Debugger::enabled() const { return !m_debuggerScript.IsEmpty(); }
91 91
92 // static 92 // static
93 int V8Debugger::contextId(v8::Local<v8::Context> context) { 93 int V8Debugger::contextId(v8::Local<v8::Context> context) {
94 v8::Local<v8::Value> data = 94 v8::Local<v8::Value> data =
95 context->GetEmbedderData(static_cast<int>(v8::Context::kDebugIdIndex)); 95 context->GetEmbedderData(static_cast<int>(v8::Context::kDebugIdIndex));
96 if (data.IsEmpty() || !data->IsString()) return 0; 96 if (data.IsEmpty() || !data->IsString()) return 0;
97 String16 dataString = toProtocolString(data.As<v8::String>()); 97 String16 dataString = toProtocolString(data.As<v8::String>());
(...skipping 15 matching lines...) Expand all
113 if (dataString.isEmpty()) return 0; 113 if (dataString.isEmpty()) return 0;
114 size_t commaPos = dataString.find(","); 114 size_t commaPos = dataString.find(",");
115 if (commaPos == String16::kNotFound) return 0; 115 if (commaPos == String16::kNotFound) return 0;
116 return dataString.substring(0, commaPos).toInteger(); 116 return dataString.substring(0, commaPos).toInteger();
117 } 117 }
118 118
119 void V8Debugger::getCompiledScripts( 119 void V8Debugger::getCompiledScripts(
120 int contextGroupId, 120 int contextGroupId,
121 std::vector<std::unique_ptr<V8DebuggerScript>>& result) { 121 std::vector<std::unique_ptr<V8DebuggerScript>>& result) {
122 v8::HandleScope scope(m_isolate); 122 v8::HandleScope scope(m_isolate);
123 v8::PersistentValueVector<v8::DebugInterface::Script> scripts(m_isolate); 123 v8::PersistentValueVector<v8::debug::Script> scripts(m_isolate);
124 v8::DebugInterface::GetLoadedScripts(m_isolate, scripts); 124 v8::debug::DebugInterface::GetLoadedScripts(m_isolate, scripts);
125 String16 contextPrefix = String16::fromInteger(contextGroupId) + ","; 125 String16 contextPrefix = String16::fromInteger(contextGroupId) + ",";
126 for (size_t i = 0; i < scripts.Size(); ++i) { 126 for (size_t i = 0; i < scripts.Size(); ++i) {
127 v8::Local<v8::DebugInterface::Script> script = scripts.Get(i); 127 v8::Local<v8::debug::Script> script = scripts.Get(i);
128 if (!script->WasCompiled()) continue; 128 if (!script->WasCompiled()) continue;
129 v8::Local<v8::String> v8ContextData; 129 v8::Local<v8::String> v8ContextData;
130 if (!script->ContextData().ToLocal(&v8ContextData)) continue; 130 if (!script->ContextData().ToLocal(&v8ContextData)) continue;
131 String16 contextData = toProtocolString(v8ContextData); 131 String16 contextData = toProtocolString(v8ContextData);
132 if (contextData.find(contextPrefix) != 0) continue; 132 if (contextData.find(contextPrefix) != 0) continue;
133 result.push_back(std::unique_ptr<V8DebuggerScript>( 133 result.push_back(std::unique_ptr<V8DebuggerScript>(
134 new V8DebuggerScript(m_isolate, script, false))); 134 new V8DebuggerScript(m_isolate, script, false)));
135 } 135 }
136 } 136 }
137 137
(...skipping 22 matching lines...) Expand all
160 success = info->Set(context, toV8StringInternalized(m_isolate, "condition"), 160 success = info->Set(context, toV8StringInternalized(m_isolate, "condition"),
161 toV8String(m_isolate, breakpoint.condition)) 161 toV8String(m_isolate, breakpoint.condition))
162 .FromMaybe(false); 162 .FromMaybe(false);
163 DCHECK(success); 163 DCHECK(success);
164 164
165 v8::Local<v8::Function> setBreakpointFunction = v8::Local<v8::Function>::Cast( 165 v8::Local<v8::Function> setBreakpointFunction = v8::Local<v8::Function>::Cast(
166 m_debuggerScript.Get(m_isolate) 166 m_debuggerScript.Get(m_isolate)
167 ->Get(context, toV8StringInternalized(m_isolate, "setBreakpoint")) 167 ->Get(context, toV8StringInternalized(m_isolate, "setBreakpoint"))
168 .ToLocalChecked()); 168 .ToLocalChecked());
169 v8::Local<v8::Value> breakpointId = 169 v8::Local<v8::Value> breakpointId =
170 v8::DebugInterface::Call(debuggerContext(), setBreakpointFunction, info) 170 v8::debug::DebugInterface::Call(debuggerContext(), setBreakpointFunction,
171 info)
171 .ToLocalChecked(); 172 .ToLocalChecked();
172 if (!breakpointId->IsString()) return ""; 173 if (!breakpointId->IsString()) return "";
173 *actualLineNumber = 174 *actualLineNumber =
174 info->Get(context, toV8StringInternalized(m_isolate, "lineNumber")) 175 info->Get(context, toV8StringInternalized(m_isolate, "lineNumber"))
175 .ToLocalChecked() 176 .ToLocalChecked()
176 ->Int32Value(context) 177 ->Int32Value(context)
177 .FromJust(); 178 .FromJust();
178 *actualColumnNumber = 179 *actualColumnNumber =
179 info->Get(context, toV8StringInternalized(m_isolate, "columnNumber")) 180 info->Get(context, toV8StringInternalized(m_isolate, "columnNumber"))
180 .ToLocalChecked() 181 .ToLocalChecked()
(...skipping 14 matching lines...) Expand all
195 toV8String(m_isolate, breakpointId)) 196 toV8String(m_isolate, breakpointId))
196 .FromMaybe(false); 197 .FromMaybe(false);
197 DCHECK(success); 198 DCHECK(success);
198 199
199 v8::Local<v8::Function> removeBreakpointFunction = 200 v8::Local<v8::Function> removeBreakpointFunction =
200 v8::Local<v8::Function>::Cast( 201 v8::Local<v8::Function>::Cast(
201 m_debuggerScript.Get(m_isolate) 202 m_debuggerScript.Get(m_isolate)
202 ->Get(context, 203 ->Get(context,
203 toV8StringInternalized(m_isolate, "removeBreakpoint")) 204 toV8StringInternalized(m_isolate, "removeBreakpoint"))
204 .ToLocalChecked()); 205 .ToLocalChecked());
205 v8::DebugInterface::Call(debuggerContext(), removeBreakpointFunction, info) 206 v8::debug::DebugInterface::Call(debuggerContext(), removeBreakpointFunction,
207 info)
206 .ToLocalChecked(); 208 .ToLocalChecked();
207 } 209 }
208 210
209 void V8Debugger::clearBreakpoints() { 211 void V8Debugger::clearBreakpoints() {
210 v8::HandleScope scope(m_isolate); 212 v8::HandleScope scope(m_isolate);
211 v8::Local<v8::Context> context = debuggerContext(); 213 v8::Local<v8::Context> context = debuggerContext();
212 v8::Context::Scope contextScope(context); 214 v8::Context::Scope contextScope(context);
213 215
214 v8::Local<v8::Function> clearBreakpoints = v8::Local<v8::Function>::Cast( 216 v8::Local<v8::Function> clearBreakpoints = v8::Local<v8::Function>::Cast(
215 m_debuggerScript.Get(m_isolate) 217 m_debuggerScript.Get(m_isolate)
216 ->Get(context, toV8StringInternalized(m_isolate, "clearBreakpoints")) 218 ->Get(context, toV8StringInternalized(m_isolate, "clearBreakpoints"))
217 .ToLocalChecked()); 219 .ToLocalChecked());
218 v8::DebugInterface::Call(debuggerContext(), clearBreakpoints) 220 v8::debug::DebugInterface::Call(debuggerContext(), clearBreakpoints)
219 .ToLocalChecked(); 221 .ToLocalChecked();
220 } 222 }
221 223
222 void V8Debugger::setBreakpointsActivated(bool activated) { 224 void V8Debugger::setBreakpointsActivated(bool activated) {
223 if (!enabled()) { 225 if (!enabled()) {
224 UNREACHABLE(); 226 UNREACHABLE();
225 return; 227 return;
226 } 228 }
227 v8::HandleScope scope(m_isolate); 229 v8::HandleScope scope(m_isolate);
228 v8::Local<v8::Context> context = debuggerContext(); 230 v8::Local<v8::Context> context = debuggerContext();
229 v8::Context::Scope contextScope(context); 231 v8::Context::Scope contextScope(context);
230 232
231 v8::Local<v8::Object> info = v8::Object::New(m_isolate); 233 v8::Local<v8::Object> info = v8::Object::New(m_isolate);
232 bool success = false; 234 bool success = false;
233 success = info->Set(context, toV8StringInternalized(m_isolate, "enabled"), 235 success = info->Set(context, toV8StringInternalized(m_isolate, "enabled"),
234 v8::Boolean::New(m_isolate, activated)) 236 v8::Boolean::New(m_isolate, activated))
235 .FromMaybe(false); 237 .FromMaybe(false);
236 DCHECK(success); 238 DCHECK(success);
237 v8::Local<v8::Function> setBreakpointsActivated = 239 v8::Local<v8::Function> setBreakpointsActivated =
238 v8::Local<v8::Function>::Cast( 240 v8::Local<v8::Function>::Cast(
239 m_debuggerScript.Get(m_isolate) 241 m_debuggerScript.Get(m_isolate)
240 ->Get(context, toV8StringInternalized(m_isolate, 242 ->Get(context, toV8StringInternalized(m_isolate,
241 "setBreakpointsActivated")) 243 "setBreakpointsActivated"))
242 .ToLocalChecked()); 244 .ToLocalChecked());
243 v8::DebugInterface::Call(debuggerContext(), setBreakpointsActivated, info) 245 v8::debug::DebugInterface::Call(debuggerContext(), setBreakpointsActivated,
246 info)
244 .ToLocalChecked(); 247 .ToLocalChecked();
245 248
246 m_breakpointsActivated = activated; 249 m_breakpointsActivated = activated;
247 } 250 }
248 251
249 v8::DebugInterface::ExceptionBreakState 252 v8::debug::ExceptionBreakState V8Debugger::getPauseOnExceptionsState() {
250 V8Debugger::getPauseOnExceptionsState() {
251 DCHECK(enabled()); 253 DCHECK(enabled());
252 return m_pauseOnExceptionsState; 254 return m_pauseOnExceptionsState;
253 } 255 }
254 256
255 void V8Debugger::setPauseOnExceptionsState( 257 void V8Debugger::setPauseOnExceptionsState(
256 v8::DebugInterface::ExceptionBreakState pauseOnExceptionsState) { 258 v8::debug::ExceptionBreakState pauseOnExceptionsState) {
257 DCHECK(enabled()); 259 DCHECK(enabled());
258 if (m_pauseOnExceptionsState == pauseOnExceptionsState) return; 260 if (m_pauseOnExceptionsState == pauseOnExceptionsState) return;
259 v8::DebugInterface::ChangeBreakOnException(m_isolate, pauseOnExceptionsState); 261 v8::debug::DebugInterface::ChangeBreakOnException(m_isolate,
262 pauseOnExceptionsState);
260 m_pauseOnExceptionsState = pauseOnExceptionsState; 263 m_pauseOnExceptionsState = pauseOnExceptionsState;
261 } 264 }
262 265
263 void V8Debugger::setPauseOnNextStatement(bool pause) { 266 void V8Debugger::setPauseOnNextStatement(bool pause) {
264 if (m_runningNestedMessageLoop) return; 267 if (m_runningNestedMessageLoop) return;
265 if (pause) 268 if (pause)
266 v8::DebugInterface::DebugBreak(m_isolate); 269 v8::debug::DebugInterface::DebugBreak(m_isolate);
267 else 270 else
268 v8::DebugInterface::CancelDebugBreak(m_isolate); 271 v8::debug::DebugInterface::CancelDebugBreak(m_isolate);
269 } 272 }
270 273
271 bool V8Debugger::canBreakProgram() { 274 bool V8Debugger::canBreakProgram() {
272 if (!m_breakpointsActivated) return false; 275 if (!m_breakpointsActivated) return false;
273 return m_isolate->InContext(); 276 return m_isolate->InContext();
274 } 277 }
275 278
276 void V8Debugger::breakProgram() { 279 void V8Debugger::breakProgram() {
277 if (isPaused()) { 280 if (isPaused()) {
278 DCHECK(!m_runningNestedMessageLoop); 281 DCHECK(!m_runningNestedMessageLoop);
279 v8::Local<v8::Value> exception; 282 v8::Local<v8::Value> exception;
280 v8::Local<v8::Array> hitBreakpoints; 283 v8::Local<v8::Array> hitBreakpoints;
281 handleProgramBreak(m_pausedContext, m_executionState, exception, 284 handleProgramBreak(m_pausedContext, m_executionState, exception,
282 hitBreakpoints); 285 hitBreakpoints);
283 return; 286 return;
284 } 287 }
285 288
286 if (!canBreakProgram()) return; 289 if (!canBreakProgram()) return;
287 290
288 v8::HandleScope scope(m_isolate); 291 v8::HandleScope scope(m_isolate);
289 v8::Local<v8::Function> breakFunction; 292 v8::Local<v8::Function> breakFunction;
290 if (!v8::Function::New(m_isolate->GetCurrentContext(), 293 if (!v8::Function::New(m_isolate->GetCurrentContext(),
291 &V8Debugger::breakProgramCallback, 294 &V8Debugger::breakProgramCallback,
292 v8::External::New(m_isolate, this), 0, 295 v8::External::New(m_isolate, this), 0,
293 v8::ConstructorBehavior::kThrow) 296 v8::ConstructorBehavior::kThrow)
294 .ToLocal(&breakFunction)) 297 .ToLocal(&breakFunction))
295 return; 298 return;
296 v8::DebugInterface::Call(debuggerContext(), breakFunction).ToLocalChecked(); 299 v8::debug::DebugInterface::Call(debuggerContext(), breakFunction)
300 .ToLocalChecked();
297 } 301 }
298 302
299 void V8Debugger::continueProgram() { 303 void V8Debugger::continueProgram() {
300 if (isPaused()) m_inspector->client()->quitMessageLoopOnPause(); 304 if (isPaused()) m_inspector->client()->quitMessageLoopOnPause();
301 m_pausedContext.Clear(); 305 m_pausedContext.Clear();
302 m_executionState.Clear(); 306 m_executionState.Clear();
303 } 307 }
304 308
305 void V8Debugger::stepIntoStatement() { 309 void V8Debugger::stepIntoStatement() {
306 DCHECK(isPaused()); 310 DCHECK(isPaused());
307 DCHECK(!m_executionState.IsEmpty()); 311 DCHECK(!m_executionState.IsEmpty());
308 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepIn); 312 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepIn);
309 continueProgram(); 313 continueProgram();
310 } 314 }
311 315
312 void V8Debugger::stepOverStatement() { 316 void V8Debugger::stepOverStatement() {
313 DCHECK(isPaused()); 317 DCHECK(isPaused());
314 DCHECK(!m_executionState.IsEmpty()); 318 DCHECK(!m_executionState.IsEmpty());
315 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepNext); 319 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepNext);
316 continueProgram(); 320 continueProgram();
317 } 321 }
318 322
319 void V8Debugger::stepOutOfFunction() { 323 void V8Debugger::stepOutOfFunction() {
320 DCHECK(isPaused()); 324 DCHECK(isPaused());
321 DCHECK(!m_executionState.IsEmpty()); 325 DCHECK(!m_executionState.IsEmpty());
322 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepOut); 326 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepOut);
323 continueProgram(); 327 continueProgram();
324 } 328 }
325 329
326 void V8Debugger::clearStepping() { 330 void V8Debugger::clearStepping() {
327 DCHECK(enabled()); 331 DCHECK(enabled());
328 v8::DebugInterface::ClearStepping(m_isolate); 332 v8::debug::DebugInterface::ClearStepping(m_isolate);
329 } 333 }
330 334
331 Response V8Debugger::setScriptSource( 335 Response V8Debugger::setScriptSource(
332 const String16& sourceID, v8::Local<v8::String> newSource, bool dryRun, 336 const String16& sourceID, v8::Local<v8::String> newSource, bool dryRun,
333 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails, 337 Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails,
334 JavaScriptCallFrames* newCallFrames, Maybe<bool>* stackChanged, 338 JavaScriptCallFrames* newCallFrames, Maybe<bool>* stackChanged,
335 bool* compileError) { 339 bool* compileError) {
336 class EnableLiveEditScope { 340 class EnableLiveEditScope {
337 public: 341 public:
338 explicit EnableLiveEditScope(v8::Isolate* isolate) : m_isolate(isolate) { 342 explicit EnableLiveEditScope(v8::Isolate* isolate) : m_isolate(isolate) {
339 v8::DebugInterface::SetLiveEditEnabled(m_isolate, true); 343 v8::debug::DebugInterface::SetLiveEditEnabled(m_isolate, true);
340 inLiveEditScope = true; 344 inLiveEditScope = true;
341 } 345 }
342 ~EnableLiveEditScope() { 346 ~EnableLiveEditScope() {
343 v8::DebugInterface::SetLiveEditEnabled(m_isolate, false); 347 v8::debug::DebugInterface::SetLiveEditEnabled(m_isolate, false);
344 inLiveEditScope = false; 348 inLiveEditScope = false;
345 } 349 }
346 350
347 private: 351 private:
348 v8::Isolate* m_isolate; 352 v8::Isolate* m_isolate;
349 }; 353 };
350 354
351 *compileError = false; 355 *compileError = false;
352 DCHECK(enabled()); 356 DCHECK(enabled());
353 v8::HandleScope scope(m_isolate); 357 v8::HandleScope scope(m_isolate);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 JavaScriptCallFrames V8Debugger::currentCallFrames(int limit) { 432 JavaScriptCallFrames V8Debugger::currentCallFrames(int limit) {
429 if (!m_isolate->InContext()) return JavaScriptCallFrames(); 433 if (!m_isolate->InContext()) return JavaScriptCallFrames();
430 v8::Local<v8::Value> currentCallFramesV8; 434 v8::Local<v8::Value> currentCallFramesV8;
431 if (m_executionState.IsEmpty()) { 435 if (m_executionState.IsEmpty()) {
432 v8::Local<v8::Function> currentCallFramesFunction = 436 v8::Local<v8::Function> currentCallFramesFunction =
433 v8::Local<v8::Function>::Cast( 437 v8::Local<v8::Function>::Cast(
434 m_debuggerScript.Get(m_isolate) 438 m_debuggerScript.Get(m_isolate)
435 ->Get(debuggerContext(), 439 ->Get(debuggerContext(),
436 toV8StringInternalized(m_isolate, "currentCallFrames")) 440 toV8StringInternalized(m_isolate, "currentCallFrames"))
437 .ToLocalChecked()); 441 .ToLocalChecked());
438 currentCallFramesV8 = 442 currentCallFramesV8 = v8::debug::DebugInterface::Call(
439 v8::DebugInterface::Call(debuggerContext(), currentCallFramesFunction, 443 debuggerContext(), currentCallFramesFunction,
440 v8::Integer::New(m_isolate, limit)) 444 v8::Integer::New(m_isolate, limit))
441 .ToLocalChecked(); 445 .ToLocalChecked();
442 } else { 446 } else {
443 v8::Local<v8::Value> argv[] = {m_executionState, 447 v8::Local<v8::Value> argv[] = {m_executionState,
444 v8::Integer::New(m_isolate, limit)}; 448 v8::Integer::New(m_isolate, limit)};
445 currentCallFramesV8 = 449 currentCallFramesV8 =
446 callDebuggerMethod("currentCallFrames", arraysize(argv), argv) 450 callDebuggerMethod("currentCallFrames", arraysize(argv), argv)
447 .ToLocalChecked(); 451 .ToLocalChecked();
448 } 452 }
449 DCHECK(!currentCallFramesV8.IsEmpty()); 453 DCHECK(!currentCallFramesV8.IsEmpty());
450 if (!currentCallFramesV8->IsArray()) return JavaScriptCallFrames(); 454 if (!currentCallFramesV8->IsArray()) return JavaScriptCallFrames();
451 v8::Local<v8::Array> callFramesArray = currentCallFramesV8.As<v8::Array>(); 455 v8::Local<v8::Array> callFramesArray = currentCallFramesV8.As<v8::Array>();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 // The agent may have been removed in the nested loop. 521 // The agent may have been removed in the nested loop.
518 agent = 522 agent =
519 m_inspector->enabledDebuggerAgentForGroup(getGroupId(pausedContext)); 523 m_inspector->enabledDebuggerAgentForGroup(getGroupId(pausedContext));
520 if (agent) agent->didContinue(); 524 if (agent) agent->didContinue();
521 m_runningNestedMessageLoop = false; 525 m_runningNestedMessageLoop = false;
522 } 526 }
523 m_pausedContext.Clear(); 527 m_pausedContext.Clear();
524 m_executionState.Clear(); 528 m_executionState.Clear();
525 529
526 if (result == V8DebuggerAgentImpl::RequestStepFrame) { 530 if (result == V8DebuggerAgentImpl::RequestStepFrame) {
527 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepFrame); 531 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepFrame);
528 } else if (result == V8DebuggerAgentImpl::RequestStepInto) { 532 } else if (result == V8DebuggerAgentImpl::RequestStepInto) {
529 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepIn); 533 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepIn);
530 } else if (result == V8DebuggerAgentImpl::RequestStepOut) { 534 } else if (result == V8DebuggerAgentImpl::RequestStepOut) {
531 v8::DebugInterface::PrepareStep(m_isolate, v8::DebugInterface::StepOut); 535 v8::debug::DebugInterface::PrepareStep(m_isolate, v8::debug::StepOut);
532 } 536 }
533 } 537 }
534 538
535 void V8Debugger::v8DebugEventCallback( 539 void V8Debugger::v8DebugEventCallback(
536 const v8::DebugInterface::EventDetails& eventDetails) { 540 const v8::debug::EventDetails& eventDetails) {
537 V8Debugger* thisPtr = toV8Debugger(eventDetails.GetCallbackData()); 541 V8Debugger* thisPtr = toV8Debugger(eventDetails.GetCallbackData());
538 thisPtr->handleV8DebugEvent(eventDetails); 542 thisPtr->handleV8DebugEvent(eventDetails);
539 } 543 }
540 544
541 v8::Local<v8::Value> V8Debugger::callInternalGetterFunction( 545 v8::Local<v8::Value> V8Debugger::callInternalGetterFunction(
542 v8::Local<v8::Object> object, const char* functionName) { 546 v8::Local<v8::Object> object, const char* functionName) {
543 v8::MicrotasksScope microtasks(m_isolate, 547 v8::MicrotasksScope microtasks(m_isolate,
544 v8::MicrotasksScope::kDoNotRunMicrotasks); 548 v8::MicrotasksScope::kDoNotRunMicrotasks);
545 v8::Local<v8::Value> getterValue = 549 v8::Local<v8::Value> getterValue =
546 object 550 object
547 ->Get(m_isolate->GetCurrentContext(), 551 ->Get(m_isolate->GetCurrentContext(),
548 toV8StringInternalized(m_isolate, functionName)) 552 toV8StringInternalized(m_isolate, functionName))
549 .ToLocalChecked(); 553 .ToLocalChecked();
550 DCHECK(!getterValue.IsEmpty() && getterValue->IsFunction()); 554 DCHECK(!getterValue.IsEmpty() && getterValue->IsFunction());
551 return v8::Local<v8::Function>::Cast(getterValue) 555 return v8::Local<v8::Function>::Cast(getterValue)
552 ->Call(m_isolate->GetCurrentContext(), object, 0, nullptr) 556 ->Call(m_isolate->GetCurrentContext(), object, 0, nullptr)
553 .ToLocalChecked(); 557 .ToLocalChecked();
554 } 558 }
555 559
556 void V8Debugger::handleV8DebugEvent( 560 void V8Debugger::handleV8DebugEvent(
557 const v8::DebugInterface::EventDetails& eventDetails) { 561 const v8::debug::EventDetails& eventDetails) {
558 if (!enabled()) return; 562 if (!enabled()) return;
559 v8::DebugEvent event = eventDetails.GetEvent(); 563 v8::DebugEvent event = eventDetails.GetEvent();
560 if (event != v8::AsyncTaskEvent && event != v8::Break && 564 if (event != v8::AsyncTaskEvent && event != v8::Break &&
561 event != v8::Exception && event != v8::AfterCompile && 565 event != v8::Exception && event != v8::AfterCompile &&
562 event != v8::CompileError) 566 event != v8::CompileError)
563 return; 567 return;
564 568
565 v8::Local<v8::Context> eventContext = eventDetails.GetEventContext(); 569 v8::Local<v8::Context> eventContext = eventDetails.GetEventContext();
566 DCHECK(!eventContext.IsEmpty()); 570 DCHECK(!eventContext.IsEmpty());
567 571
(...skipping 11 matching lines...) Expand all
579 v8::HandleScope scope(m_isolate); 583 v8::HandleScope scope(m_isolate);
580 if (event == v8::AfterCompile || event == v8::CompileError) { 584 if (event == v8::AfterCompile || event == v8::CompileError) {
581 v8::Context::Scope contextScope(debuggerContext()); 585 v8::Context::Scope contextScope(debuggerContext());
582 // Determine if the script is a wasm script. 586 // Determine if the script is a wasm script.
583 v8::Local<v8::Value> scriptMirror = 587 v8::Local<v8::Value> scriptMirror =
584 callInternalGetterFunction(eventDetails.GetEventData(), "script"); 588 callInternalGetterFunction(eventDetails.GetEventData(), "script");
585 DCHECK(scriptMirror->IsObject()); 589 DCHECK(scriptMirror->IsObject());
586 v8::Local<v8::Value> scriptWrapper = 590 v8::Local<v8::Value> scriptWrapper =
587 callInternalGetterFunction(scriptMirror.As<v8::Object>(), "value"); 591 callInternalGetterFunction(scriptMirror.As<v8::Object>(), "value");
588 DCHECK(scriptWrapper->IsObject()); 592 DCHECK(scriptWrapper->IsObject());
589 v8::Local<v8::DebugInterface::Script> script; 593 v8::Local<v8::debug::Script> script;
590 if (!v8::DebugInterface::Script::Wrap(m_isolate, 594 if (!v8::debug::Script::Wrap(m_isolate, scriptWrapper.As<v8::Object>())
591 scriptWrapper.As<v8::Object>())
592 .ToLocal(&script)) { 595 .ToLocal(&script)) {
593 return; 596 return;
594 } 597 }
595 if (script->IsWasm()) { 598 if (script->IsWasm()) {
596 m_wasmTranslation.AddScript(scriptWrapper.As<v8::Object>()); 599 m_wasmTranslation.AddScript(scriptWrapper.As<v8::Object>());
597 } else if (m_ignoreScriptParsedEventsCounter == 0) { 600 } else if (m_ignoreScriptParsedEventsCounter == 0) {
598 agent->didParseSource( 601 agent->didParseSource(
599 std::unique_ptr<V8DebuggerScript>( 602 std::unique_ptr<V8DebuggerScript>(
600 new V8DebuggerScript(m_isolate, script, inLiveEditScope)), 603 new V8DebuggerScript(m_isolate, script, inLiveEditScope)),
601 event == v8::AfterCompile); 604 event == v8::AfterCompile);
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 } 735 }
733 736
734 v8::MaybeLocal<v8::Value> V8Debugger::generatorScopes( 737 v8::MaybeLocal<v8::Value> V8Debugger::generatorScopes(
735 v8::Local<v8::Context> context, v8::Local<v8::Value> generator) { 738 v8::Local<v8::Context> context, v8::Local<v8::Value> generator) {
736 return getTargetScopes(context, generator, GENERATOR); 739 return getTargetScopes(context, generator, GENERATOR);
737 } 740 }
738 741
739 v8::MaybeLocal<v8::Array> V8Debugger::internalProperties( 742 v8::MaybeLocal<v8::Array> V8Debugger::internalProperties(
740 v8::Local<v8::Context> context, v8::Local<v8::Value> value) { 743 v8::Local<v8::Context> context, v8::Local<v8::Value> value) {
741 v8::Local<v8::Array> properties; 744 v8::Local<v8::Array> properties;
742 if (!v8::DebugInterface::GetInternalProperties(m_isolate, value) 745 if (!v8::debug::DebugInterface::GetInternalProperties(m_isolate, value)
743 .ToLocal(&properties)) 746 .ToLocal(&properties))
744 return v8::MaybeLocal<v8::Array>(); 747 return v8::MaybeLocal<v8::Array>();
745 if (value->IsFunction()) { 748 if (value->IsFunction()) {
746 v8::Local<v8::Function> function = value.As<v8::Function>(); 749 v8::Local<v8::Function> function = value.As<v8::Function>();
747 v8::Local<v8::Value> location = functionLocation(context, function); 750 v8::Local<v8::Value> location = functionLocation(context, function);
748 if (location->IsObject()) { 751 if (location->IsObject()) {
749 createDataProperty( 752 createDataProperty(
750 context, properties, properties->Length(), 753 context, properties, properties->Length(),
751 toV8StringInternalized(m_isolate, "[[FunctionLocation]]")); 754 toV8StringInternalized(m_isolate, "[[FunctionLocation]]"));
752 createDataProperty(context, properties, properties->Length(), location); 755 createDataProperty(context, properties, properties->Length(), location);
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 1013
1011 size_t stackSize = 1014 size_t stackSize =
1012 fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture : 1; 1015 fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture : 1;
1013 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId)) 1016 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId))
1014 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture; 1017 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture;
1015 1018
1016 return V8StackTraceImpl::capture(this, contextGroupId, stackSize); 1019 return V8StackTraceImpl::capture(this, contextGroupId, stackSize);
1017 } 1020 }
1018 1021
1019 } // namespace v8_inspector 1022 } // namespace v8_inspector
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698