Chromium Code Reviews| 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 16 matching lines...) Expand all Loading... | |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "config.h" | 31 #include "config.h" |
| 32 #include "bindings/v8/ScriptDebugServer.h" | 32 #include "bindings/v8/ScriptDebugServer.h" |
| 33 | 33 |
| 34 #include "DebuggerScriptSource.h" | 34 #include "DebuggerScriptSource.h" |
| 35 #include "V8JavaScriptCallFrame.h" | 35 #include "V8JavaScriptCallFrame.h" |
| 36 #include "bindings/v8/ScopedPersistent.h" | 36 #include "bindings/v8/ScopedPersistent.h" |
| 37 #include "bindings/v8/ScriptCallStackFactory.h" | |
| 37 #include "bindings/v8/ScriptController.h" | 38 #include "bindings/v8/ScriptController.h" |
| 38 #include "bindings/v8/ScriptObject.h" | 39 #include "bindings/v8/ScriptObject.h" |
| 39 #include "bindings/v8/ScriptSourceCode.h" | 40 #include "bindings/v8/ScriptSourceCode.h" |
| 40 #include "bindings/v8/V8Binding.h" | 41 #include "bindings/v8/V8Binding.h" |
| 41 #include "bindings/v8/V8ScriptRunner.h" | 42 #include "bindings/v8/V8ScriptRunner.h" |
| 42 #include "core/inspector/JavaScriptCallFrame.h" | 43 #include "core/inspector/JavaScriptCallFrame.h" |
| 43 #include "core/inspector/ScriptDebugListener.h" | 44 #include "core/inspector/ScriptDebugListener.h" |
| 44 #include "platform/JSONValues.h" | 45 #include "platform/JSONValues.h" |
| 45 #include "wtf/StdLibExtras.h" | 46 #include "wtf/StdLibExtras.h" |
| 46 #include "wtf/Vector.h" | 47 #include "wtf/Vector.h" |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 }; | 594 }; |
| 594 return callDebuggerMethod("setFunctionVariableValue", 4, argv); | 595 return callDebuggerMethod("setFunctionVariableValue", 4, argv); |
| 595 } | 596 } |
| 596 | 597 |
| 597 | 598 |
| 598 bool ScriptDebugServer::isPaused() | 599 bool ScriptDebugServer::isPaused() |
| 599 { | 600 { |
| 600 return !m_executionState.isEmpty(); | 601 return !m_executionState.isEmpty(); |
| 601 } | 602 } |
| 602 | 603 |
| 603 void ScriptDebugServer::compileScript(ScriptState* scriptState, const String& ex pression, const String& sourceURL, String* scriptId, String* exceptionMessage) | 604 void ScriptDebugServer::compileScript(ScriptState* scriptState, const String& ex pression, const String& sourceURL, String* scriptId, String* exceptionDetailsTex t, int* lineNumber, int* columnNumber, RefPtr<ScriptCallStack>* stackTrace) |
| 604 { | 605 { |
| 605 if (scriptState->contextIsEmpty()) | 606 if (scriptState->contextIsEmpty()) |
| 606 return; | 607 return; |
| 607 ScriptState::Scope scope(scriptState); | 608 ScriptState::Scope scope(scriptState); |
| 608 | 609 |
| 609 v8::Handle<v8::String> source = v8String(m_isolate, expression); | 610 v8::Handle<v8::String> source = v8String(m_isolate, expression); |
| 610 v8::TryCatch tryCatch; | 611 v8::TryCatch tryCatch; |
| 611 v8::Local<v8::Script> script = V8ScriptRunner::compileScript(source, sourceU RL, TextPosition(), 0, m_isolate); | 612 v8::Local<v8::Script> script = V8ScriptRunner::compileScript(source, sourceU RL, TextPosition(), 0, m_isolate); |
| 612 if (tryCatch.HasCaught()) { | 613 if (tryCatch.HasCaught()) { |
| 613 v8::Local<v8::Message> message = tryCatch.Message(); | 614 v8::Local<v8::Message> message = tryCatch.Message(); |
| 614 if (!message.IsEmpty()) | 615 if (!message.IsEmpty()) { |
| 615 *exceptionMessage = toCoreStringWithUndefinedOrNullCheck(message->Ge t()); | 616 *exceptionDetailsText = toCoreStringWithUndefinedOrNullCheck(message ->Get()); |
| 617 *lineNumber = message->GetLineNumber(); | |
| 618 *columnNumber = message->GetStartColumn(); | |
| 619 *stackTrace = createScriptCallStack(message->GetStackTrace(), Script CallStack::maxCallStackSizeToCapture, m_isolate); | |
|
yurys
2014/06/05 08:46:43
We should pass message->GetStackTrace()->GetFrameC
| |
| 620 } | |
| 616 return; | 621 return; |
| 617 } | 622 } |
| 618 if (script.IsEmpty()) | 623 if (script.IsEmpty()) |
| 619 return; | 624 return; |
| 620 | 625 |
| 621 *scriptId = String::number(script->GetId()); | 626 *scriptId = String::number(script->GetId()); |
| 622 m_compiledScripts.set(*scriptId, adoptPtr(new ScopedPersistent<v8::Script>(m _isolate, script))); | 627 m_compiledScripts.set(*scriptId, adoptPtr(new ScopedPersistent<v8::Script>(m _isolate, script))); |
| 623 } | 628 } |
| 624 | 629 |
| 625 void ScriptDebugServer::clearCompiledScripts() | 630 void ScriptDebugServer::clearCompiledScripts() |
| 626 { | 631 { |
| 627 m_compiledScripts.clear(); | 632 m_compiledScripts.clear(); |
| 628 } | 633 } |
| 629 | 634 |
| 630 void ScriptDebugServer::runScript(ScriptState* scriptState, const String& script Id, ScriptValue* result, bool* wasThrown, String* exceptionMessage) | 635 void ScriptDebugServer::runScript(ScriptState* scriptState, const String& script Id, ScriptValue* result, bool* wasThrown, String* exceptionDetailsText, int* lin eNumber, int* columnNumber, RefPtr<ScriptCallStack>* stackTrace) |
| 631 { | 636 { |
| 632 if (!m_compiledScripts.contains(scriptId)) | 637 if (!m_compiledScripts.contains(scriptId)) |
| 633 return; | 638 return; |
| 634 v8::HandleScope handleScope(m_isolate); | 639 v8::HandleScope handleScope(m_isolate); |
| 635 ScopedPersistent<v8::Script>* scriptHandle = m_compiledScripts.get(scriptId) ; | 640 ScopedPersistent<v8::Script>* scriptHandle = m_compiledScripts.get(scriptId) ; |
| 636 v8::Local<v8::Script> script = scriptHandle->newLocal(m_isolate); | 641 v8::Local<v8::Script> script = scriptHandle->newLocal(m_isolate); |
| 637 m_compiledScripts.remove(scriptId); | 642 m_compiledScripts.remove(scriptId); |
| 638 if (script.IsEmpty()) | 643 if (script.IsEmpty()) |
| 639 return; | 644 return; |
| 640 | 645 |
| 641 if (scriptState->contextIsEmpty()) | 646 if (scriptState->contextIsEmpty()) |
| 642 return; | 647 return; |
| 643 ScriptState::Scope scope(scriptState); | 648 ScriptState::Scope scope(scriptState); |
| 644 v8::TryCatch tryCatch; | 649 v8::TryCatch tryCatch; |
| 645 v8::Local<v8::Value> value = V8ScriptRunner::runCompiledScript(script, scrip tState->executionContext(), m_isolate); | 650 v8::Local<v8::Value> value = V8ScriptRunner::runCompiledScript(script, scrip tState->executionContext(), m_isolate); |
| 646 *wasThrown = false; | 651 *wasThrown = false; |
| 647 if (tryCatch.HasCaught()) { | 652 if (tryCatch.HasCaught()) { |
| 648 *wasThrown = true; | 653 *wasThrown = true; |
| 649 *result = ScriptValue(scriptState, tryCatch.Exception()); | 654 *result = ScriptValue(scriptState, tryCatch.Exception()); |
| 650 v8::Local<v8::Message> message = tryCatch.Message(); | 655 v8::Local<v8::Message> message = tryCatch.Message(); |
| 651 if (!message.IsEmpty()) | 656 if (!message.IsEmpty()) { |
| 652 *exceptionMessage = toCoreStringWithUndefinedOrNullCheck(message->Ge t()); | 657 *exceptionDetailsText = toCoreStringWithUndefinedOrNullCheck(message ->Get()); |
| 658 *lineNumber = message->GetLineNumber(); | |
| 659 *columnNumber = message->GetStartColumn(); | |
| 660 *stackTrace = createScriptCallStack(message->GetStackTrace(), Script CallStack::maxCallStackSizeToCapture, m_isolate); | |
|
yurys
2014/06/05 08:46:43
ditto
| |
| 661 } | |
| 653 } else { | 662 } else { |
| 654 *result = ScriptValue(scriptState, value); | 663 *result = ScriptValue(scriptState, value); |
| 655 } | 664 } |
| 656 } | 665 } |
| 657 | 666 |
| 658 PassOwnPtr<ScriptSourceCode> ScriptDebugServer::preprocess(LocalFrame*, const Sc riptSourceCode&) | 667 PassOwnPtr<ScriptSourceCode> ScriptDebugServer::preprocess(LocalFrame*, const Sc riptSourceCode&) |
| 659 { | 668 { |
| 660 return PassOwnPtr<ScriptSourceCode>(); | 669 return PassOwnPtr<ScriptSourceCode>(); |
| 661 } | 670 } |
| 662 | 671 |
| 663 String ScriptDebugServer::preprocessEventListener(LocalFrame*, const String& sou rce, const String& url, const String& functionName) | 672 String ScriptDebugServer::preprocessEventListener(LocalFrame*, const String& sou rce, const String& url, const String& functionName) |
| 664 { | 673 { |
| 665 return source; | 674 return source; |
| 666 } | 675 } |
| 667 | 676 |
| 668 } // namespace WebCore | 677 } // namespace WebCore |
| OLD | NEW |