| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/V8Debugger.h" | 5 #include "platform/v8_inspector/V8Debugger.h" |
| 6 | 6 |
| 7 #include "platform/v8_inspector/DebuggerScript.h" | 7 #include "platform/v8_inspector/DebuggerScript.h" |
| 8 #include "platform/v8_inspector/ScriptBreakpoint.h" | 8 #include "platform/v8_inspector/ScriptBreakpoint.h" |
| 9 #include "platform/v8_inspector/V8Compat.h" | 9 #include "platform/v8_inspector/V8Compat.h" |
| 10 #include "platform/v8_inspector/V8DebuggerAgentImpl.h" | 10 #include "platform/v8_inspector/V8DebuggerAgentImpl.h" |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 void V8Debugger::clearStepping() | 295 void V8Debugger::clearStepping() |
| 296 { | 296 { |
| 297 DCHECK(enabled()); | 297 DCHECK(enabled()); |
| 298 v8::HandleScope scope(m_isolate); | 298 v8::HandleScope scope(m_isolate); |
| 299 v8::Context::Scope contextScope(debuggerContext()); | 299 v8::Context::Scope contextScope(debuggerContext()); |
| 300 | 300 |
| 301 v8::Local<v8::Value> argv[] = { v8::Undefined(m_isolate) }; | 301 v8::Local<v8::Value> argv[] = { v8::Undefined(m_isolate) }; |
| 302 callDebuggerMethod("clearStepping", 0, argv); | 302 callDebuggerMethod("clearStepping", 0, argv); |
| 303 } | 303 } |
| 304 | 304 |
| 305 bool V8Debugger::setScriptSource(const String16& sourceID, v8::Local<v8::String>
newSource, bool preview, ErrorString* error, Maybe<protocol::Runtime::Exception
Details>* exceptionDetails, JavaScriptCallFrames* newCallFrames, Maybe<bool>* st
ackChanged) | 305 bool V8Debugger::setScriptSource(const String16& sourceID, v8::Local<v8::String>
newSource, bool dryRun, ErrorString* error, Maybe<protocol::Runtime::ExceptionD
etails>* exceptionDetails, JavaScriptCallFrames* newCallFrames, Maybe<bool>* sta
ckChanged) |
| 306 { | 306 { |
| 307 class EnableLiveEditScope { | 307 class EnableLiveEditScope { |
| 308 public: | 308 public: |
| 309 explicit EnableLiveEditScope(v8::Isolate* isolate) : m_isolate(isolate) | 309 explicit EnableLiveEditScope(v8::Isolate* isolate) : m_isolate(isolate) |
| 310 { | 310 { |
| 311 v8::Debug::SetLiveEditEnabled(m_isolate, true); | 311 v8::Debug::SetLiveEditEnabled(m_isolate, true); |
| 312 inLiveEditScope = true; | 312 inLiveEditScope = true; |
| 313 } | 313 } |
| 314 ~EnableLiveEditScope() | 314 ~EnableLiveEditScope() |
| 315 { | 315 { |
| 316 v8::Debug::SetLiveEditEnabled(m_isolate, false); | 316 v8::Debug::SetLiveEditEnabled(m_isolate, false); |
| 317 inLiveEditScope = false; | 317 inLiveEditScope = false; |
| 318 } | 318 } |
| 319 private: | 319 private: |
| 320 v8::Isolate* m_isolate; | 320 v8::Isolate* m_isolate; |
| 321 }; | 321 }; |
| 322 | 322 |
| 323 DCHECK(enabled()); | 323 DCHECK(enabled()); |
| 324 v8::HandleScope scope(m_isolate); | 324 v8::HandleScope scope(m_isolate); |
| 325 | 325 |
| 326 std::unique_ptr<v8::Context::Scope> contextScope; | 326 std::unique_ptr<v8::Context::Scope> contextScope; |
| 327 if (!isPaused()) | 327 if (!isPaused()) |
| 328 contextScope = wrapUnique(new v8::Context::Scope(debuggerContext())); | 328 contextScope = wrapUnique(new v8::Context::Scope(debuggerContext())); |
| 329 | 329 |
| 330 v8::Local<v8::Value> argv[] = { toV8String(m_isolate, sourceID), newSource,
v8Boolean(preview, m_isolate) }; | 330 v8::Local<v8::Value> argv[] = { toV8String(m_isolate, sourceID), newSource,
v8Boolean(dryRun, m_isolate) }; |
| 331 | 331 |
| 332 v8::Local<v8::Value> v8result; | 332 v8::Local<v8::Value> v8result; |
| 333 { | 333 { |
| 334 EnableLiveEditScope enableLiveEditScope(m_isolate); | 334 EnableLiveEditScope enableLiveEditScope(m_isolate); |
| 335 v8::TryCatch tryCatch(m_isolate); | 335 v8::TryCatch tryCatch(m_isolate); |
| 336 tryCatch.SetVerbose(false); | 336 tryCatch.SetVerbose(false); |
| 337 v8::MaybeLocal<v8::Value> maybeResult = callDebuggerMethod("liveEditScri
ptSource", 3, argv); | 337 v8::MaybeLocal<v8::Value> maybeResult = callDebuggerMethod("liveEditScri
ptSource", 3, argv); |
| 338 if (tryCatch.HasCaught()) { | 338 if (tryCatch.HasCaught()) { |
| 339 v8::Local<v8::Message> message = tryCatch.Message(); | 339 v8::Local<v8::Message> message = tryCatch.Message(); |
| 340 if (!message.IsEmpty()) | 340 if (!message.IsEmpty()) |
| 341 *error = toProtocolStringWithTypeCheck(message->Get()); | 341 *error = toProtocolStringWithTypeCheck(message->Get()); |
| 342 else | 342 else |
| 343 *error = "Unknown error."; | 343 *error = "Unknown error."; |
| 344 return false; | 344 return false; |
| 345 } | 345 } |
| 346 v8result = maybeResult.ToLocalChecked(); | 346 v8result = maybeResult.ToLocalChecked(); |
| 347 } | 347 } |
| 348 DCHECK(!v8result.IsEmpty()); | 348 DCHECK(!v8result.IsEmpty()); |
| 349 v8::Local<v8::Object> resultTuple = v8result->ToObject(m_isolate); | 349 v8::Local<v8::Object> resultTuple = v8result->ToObject(m_isolate); |
| 350 int code = static_cast<int>(resultTuple->Get(0)->ToInteger(m_isolate)->Value
()); | 350 int code = static_cast<int>(resultTuple->Get(0)->ToInteger(m_isolate)->Value
()); |
| 351 switch (code) { | 351 switch (code) { |
| 352 case 0: | 352 case 0: |
| 353 { | 353 { |
| 354 *stackChanged = resultTuple->Get(1)->BooleanValue(); | 354 *stackChanged = resultTuple->Get(1)->BooleanValue(); |
| 355 // Call stack may have changed after if the edited function was on t
he stack. | 355 // Call stack may have changed after if the edited function was on t
he stack. |
| 356 if (!preview && isPaused()) { | 356 if (!dryRun && isPaused()) { |
| 357 JavaScriptCallFrames frames = currentCallFrames(); | 357 JavaScriptCallFrames frames = currentCallFrames(); |
| 358 newCallFrames->swap(frames); | 358 newCallFrames->swap(frames); |
| 359 } | 359 } |
| 360 return true; | 360 return true; |
| 361 } | 361 } |
| 362 // Compile error. | 362 // Compile error. |
| 363 case 1: | 363 case 1: |
| 364 { | 364 { |
| 365 *exceptionDetails = protocol::Runtime::ExceptionDetails::create() | 365 *exceptionDetails = protocol::Runtime::ExceptionDetails::create() |
| 366 .setText(toProtocolStringWithTypeCheck(resultTuple->Get(2))) | 366 .setText(toProtocolStringWithTypeCheck(resultTuple->Get(2))) |
| (...skipping 463 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 830 return nullptr; | 830 return nullptr; |
| 831 | 831 |
| 832 size_t stackSize = fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture :
1; | 832 size_t stackSize = fullStack ? V8StackTraceImpl::maxCallStackSizeToCapture :
1; |
| 833 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId)) | 833 if (m_inspector->enabledRuntimeAgentForGroup(contextGroupId)) |
| 834 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture; | 834 stackSize = V8StackTraceImpl::maxCallStackSizeToCapture; |
| 835 | 835 |
| 836 return V8StackTraceImpl::capture(this, contextGroupId, stackSize); | 836 return V8StackTraceImpl::capture(this, contextGroupId, stackSize); |
| 837 } | 837 } |
| 838 | 838 |
| 839 } // namespace v8_inspector | 839 } // namespace v8_inspector |
| OLD | NEW |