| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010-2011 Google Inc. All rights reserved. | 2 * Copyright (c) 2010-2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 void ScriptDebugServer::breakProgramCallback(const v8::FunctionCallbackInfo<v8::
Value>& info) | 425 void ScriptDebugServer::breakProgramCallback(const v8::FunctionCallbackInfo<v8::
Value>& info) |
| 426 { | 426 { |
| 427 ASSERT(2 == info.Length()); | 427 ASSERT(2 == info.Length()); |
| 428 ScriptDebugServer* thisPtr = toScriptDebugServer(info.Data()); | 428 ScriptDebugServer* thisPtr = toScriptDebugServer(info.Data()); |
| 429 ScriptState* pausedScriptState = ScriptState::current(thisPtr->m_isolate); | 429 ScriptState* pausedScriptState = ScriptState::current(thisPtr->m_isolate); |
| 430 v8::Handle<v8::Value> exception; | 430 v8::Handle<v8::Value> exception; |
| 431 v8::Handle<v8::Array> hitBreakpoints; | 431 v8::Handle<v8::Array> hitBreakpoints; |
| 432 thisPtr->handleProgramBreak(pausedScriptState, v8::Handle<v8::Object>::Cast(
info[0]), exception, hitBreakpoints); | 432 thisPtr->handleProgramBreak(pausedScriptState, v8::Handle<v8::Object>::Cast(
info[0]), exception, hitBreakpoints); |
| 433 } | 433 } |
| 434 | 434 |
| 435 void ScriptDebugServer::handleProgramBreak(ScriptState* pausedScriptState, v8::H
andle<v8::Object> executionState, v8::Handle<v8::Value> exception, v8::Handle<v8
::Array> hitBreakpointNumbers) | 435 void ScriptDebugServer::handleProgramBreak(ScriptState* pausedScriptState, v8::H
andle<v8::Object> executionState, v8::Handle<v8::Value> exception, v8::Handle<v8
::Array> hitBreakpointNumbers, bool isPromiseRejection) |
| 436 { | 436 { |
| 437 // Don't allow nested breaks. | 437 // Don't allow nested breaks. |
| 438 if (m_runningNestedMessageLoop) | 438 if (m_runningNestedMessageLoop) |
| 439 return; | 439 return; |
| 440 | 440 |
| 441 ScriptDebugListener* listener = getDebugListenerForContext(pausedScriptState
->context()); | 441 ScriptDebugListener* listener = getDebugListenerForContext(pausedScriptState
->context()); |
| 442 if (!listener) | 442 if (!listener) |
| 443 return; | 443 return; |
| 444 | 444 |
| 445 Vector<String> breakpointIds; | 445 Vector<String> breakpointIds; |
| 446 if (!hitBreakpointNumbers.IsEmpty()) { | 446 if (!hitBreakpointNumbers.IsEmpty()) { |
| 447 breakpointIds.resize(hitBreakpointNumbers->Length()); | 447 breakpointIds.resize(hitBreakpointNumbers->Length()); |
| 448 for (size_t i = 0; i < hitBreakpointNumbers->Length(); i++) { | 448 for (size_t i = 0; i < hitBreakpointNumbers->Length(); i++) { |
| 449 v8::Handle<v8::Value> hitBreakpointNumber = hitBreakpointNumbers->Ge
t(i); | 449 v8::Handle<v8::Value> hitBreakpointNumber = hitBreakpointNumbers->Ge
t(i); |
| 450 ASSERT(!hitBreakpointNumber.IsEmpty() && hitBreakpointNumber->IsInt3
2()); | 450 ASSERT(!hitBreakpointNumber.IsEmpty() && hitBreakpointNumber->IsInt3
2()); |
| 451 breakpointIds[i] = String::number(hitBreakpointNumber->Int32Value())
; | 451 breakpointIds[i] = String::number(hitBreakpointNumber->Int32Value())
; |
| 452 } | 452 } |
| 453 } | 453 } |
| 454 | 454 |
| 455 m_pausedScriptState = pausedScriptState; | 455 m_pausedScriptState = pausedScriptState; |
| 456 m_executionState = executionState; | 456 m_executionState = executionState; |
| 457 ScriptDebugListener::SkipPauseRequest result = listener->didPause(pausedScri
ptState, currentCallFrames(), ScriptValue(pausedScriptState, exception), breakpo
intIds); | 457 ScriptDebugListener::SkipPauseRequest result = listener->didPause(pausedScri
ptState, currentCallFrames(), ScriptValue(pausedScriptState, exception), breakpo
intIds, isPromiseRejection); |
| 458 if (result == ScriptDebugListener::NoSkip) { | 458 if (result == ScriptDebugListener::NoSkip) { |
| 459 m_runningNestedMessageLoop = true; | 459 m_runningNestedMessageLoop = true; |
| 460 runMessageLoopOnPause(pausedScriptState->context()); | 460 runMessageLoopOnPause(pausedScriptState->context()); |
| 461 m_runningNestedMessageLoop = false; | 461 m_runningNestedMessageLoop = false; |
| 462 } | 462 } |
| 463 m_pausedScriptState.clear(); | 463 m_pausedScriptState.clear(); |
| 464 m_executionState.Clear(); | 464 m_executionState.Clear(); |
| 465 | 465 |
| 466 if (result == ScriptDebugListener::StepInto) { | 466 if (result == ScriptDebugListener::StepInto) { |
| 467 v8::Handle<v8::Value> argv[] = { executionState }; | 467 v8::Handle<v8::Value> argv[] = { executionState }; |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 } else if (event == v8::AfterCompile || event == v8::CompileError) { | 509 } else if (event == v8::AfterCompile || event == v8::CompileError) { |
| 510 v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); | 510 v8::Context::Scope contextScope(v8::Debug::GetDebugContext()); |
| 511 v8::Handle<v8::Value> argv[] = { eventDetails.GetEventData() }; | 511 v8::Handle<v8::Value> argv[] = { eventDetails.GetEventData() }; |
| 512 v8::Handle<v8::Value> value = callDebuggerMethod("getAfterCompileScr
ipt", 1, argv); | 512 v8::Handle<v8::Value> value = callDebuggerMethod("getAfterCompileScr
ipt", 1, argv); |
| 513 ASSERT(value->IsObject()); | 513 ASSERT(value->IsObject()); |
| 514 v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value); | 514 v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value); |
| 515 dispatchDidParseSource(listener, object, event != v8::AfterCompile ?
CompileError : CompileSuccess); | 515 dispatchDidParseSource(listener, object, event != v8::AfterCompile ?
CompileError : CompileSuccess); |
| 516 } else if (event == v8::Exception) { | 516 } else if (event == v8::Exception) { |
| 517 v8::Handle<v8::Object> eventData = eventDetails.GetEventData(); | 517 v8::Handle<v8::Object> eventData = eventDetails.GetEventData(); |
| 518 v8::Handle<v8::Value> exception = callInternalGetterFunction(eventDa
ta, "exception", m_isolate); | 518 v8::Handle<v8::Value> exception = callInternalGetterFunction(eventDa
ta, "exception", m_isolate); |
| 519 handleProgramBreak(ScriptState::from(eventContext), eventDetails.Get
ExecutionState(), exception, v8::Handle<v8::Array>()); | 519 v8::Handle<v8::Value> promise = callInternalGetterFunction(eventData
, "promise", m_isolate); |
| 520 bool isPromiseRejection = !promise.IsEmpty() && promise->IsObject(); |
| 521 handleProgramBreak(ScriptState::from(eventContext), eventDetails.Get
ExecutionState(), exception, v8::Handle<v8::Array>(), isPromiseRejection); |
| 520 } else if (event == v8::Break) { | 522 } else if (event == v8::Break) { |
| 521 v8::Handle<v8::Value> argv[] = { eventDetails.GetEventData() }; | 523 v8::Handle<v8::Value> argv[] = { eventDetails.GetEventData() }; |
| 522 v8::Handle<v8::Value> hitBreakpoints = callDebuggerMethod("getBreakp
ointNumbers", 1, argv); | 524 v8::Handle<v8::Value> hitBreakpoints = callDebuggerMethod("getBreakp
ointNumbers", 1, argv); |
| 523 ASSERT(hitBreakpoints->IsArray()); | 525 ASSERT(hitBreakpoints->IsArray()); |
| 524 handleProgramBreak(ScriptState::from(eventContext), eventDetails.Get
ExecutionState(), v8::Handle<v8::Value>(), hitBreakpoints.As<v8::Array>()); | 526 handleProgramBreak(ScriptState::from(eventContext), eventDetails.Get
ExecutionState(), v8::Handle<v8::Value>(), hitBreakpoints.As<v8::Array>()); |
| 525 } else if (event == v8::AsyncTaskEvent) { | 527 } else if (event == v8::AsyncTaskEvent) { |
| 526 if (listener->v8AsyncTaskEventsEnabled()) | 528 if (listener->v8AsyncTaskEventsEnabled()) |
| 527 handleV8AsyncTaskEvent(listener, ScriptState::from(eventContext)
, eventDetails.GetExecutionState(), eventDetails.GetEventData()); | 529 handleV8AsyncTaskEvent(listener, ScriptState::from(eventContext)
, eventDetails.GetExecutionState(), eventDetails.GetEventData()); |
| 528 } else if (event == v8::PromiseEvent) { | 530 } else if (event == v8::PromiseEvent) { |
| 529 if (listener->v8PromiseEventsEnabled()) | 531 if (listener->v8PromiseEventsEnabled()) |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 { | 718 { |
| 717 return PassOwnPtr<ScriptSourceCode>(); | 719 return PassOwnPtr<ScriptSourceCode>(); |
| 718 } | 720 } |
| 719 | 721 |
| 720 String ScriptDebugServer::preprocessEventListener(LocalFrame*, const String& sou
rce, const String& url, const String& functionName) | 722 String ScriptDebugServer::preprocessEventListener(LocalFrame*, const String& sou
rce, const String& url, const String& functionName) |
| 721 { | 723 { |
| 722 return source; | 724 return source; |
| 723 } | 725 } |
| 724 | 726 |
| 725 } // namespace blink | 727 } // namespace blink |
| OLD | NEW |