diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp | 73 |
1 files changed, 38 insertions, 35 deletions
diff --git a/chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp b/chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp index 6a669582b2d..148bb97b7dc 100644 --- a/chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp +++ b/chromium/third_party/WebKit/Source/core/inspector/JavaScriptCallFrame.cpp @@ -33,6 +33,7 @@ #include "bindings/v8/ScriptValue.h" #include "bindings/v8/V8Binding.h" +#include <v8-debug.h> namespace WebCore { @@ -62,47 +63,51 @@ JavaScriptCallFrame* JavaScriptCallFrame::caller() return m_caller.get(); } -int JavaScriptCallFrame::sourceID() const +int JavaScriptCallFrame::callV8FunctionReturnInt(const char* name) const { v8::HandleScope handleScope(m_isolate); - v8::Context::Scope contextScope(m_debuggerContext.newLocal(m_isolate)); - v8::Handle<v8::Value> result = m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "sourceID")); + v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); + v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, name))); + v8::Handle<v8::Value> result = func->Call(callFrame, 0, 0); if (result->IsInt32()) return result->Int32Value(); return 0; } -int JavaScriptCallFrame::line() const +String JavaScriptCallFrame::callV8FunctionReturnString(const char* name) const { v8::HandleScope handleScope(m_isolate); - v8::Context::Scope contextScope(m_debuggerContext.newLocal(m_isolate)); - v8::Handle<v8::Value> result = m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "line")); - if (result->IsInt32()) - return result->Int32Value(); - return 0; + v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); + v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, name))); + v8::Handle<v8::Value> result = func->Call(callFrame, 0, 0); + return toCoreStringWithUndefinedOrNullCheck(result); +} + +int JavaScriptCallFrame::sourceID() const +{ + return callV8FunctionReturnInt("sourceID"); +} + +int JavaScriptCallFrame::line() const +{ + return callV8FunctionReturnInt("line"); } int JavaScriptCallFrame::column() const { - v8::HandleScope handleScope(m_isolate); - v8::Context::Scope contextScope(m_debuggerContext.newLocal(m_isolate)); - v8::Handle<v8::Value> result = m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "column")); - if (result->IsInt32()) - return result->Int32Value(); - return 0; + return callV8FunctionReturnInt("column"); } String JavaScriptCallFrame::functionName() const { - v8::HandleScope handleScope(m_isolate); - v8::Context::Scope contextScope(m_debuggerContext.newLocal(m_isolate)); - v8::Handle<v8::Value> result = m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "functionName")); - return toCoreStringWithUndefinedOrNullCheck(result); + return callV8FunctionReturnString("functionName"); } v8::Handle<v8::Value> JavaScriptCallFrame::scopeChain() const { - v8::Handle<v8::Array> scopeChain = v8::Handle<v8::Array>::Cast(m_callFrame.newLocal(m_isolate)->Get(v8AtomicString(m_isolate, "scopeChain"))); + v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); + v8::Handle<v8::Function> func = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "scopeChain"))); + v8::Handle<v8::Array> scopeChain = v8::Handle<v8::Array>::Cast(func->Call(callFrame, 0, 0)); v8::Handle<v8::Array> result = v8::Array::New(m_isolate, scopeChain->Length()); for (uint32_t i = 0; i < scopeChain->Length(); i++) result->Set(i, scopeChain->Get(i)); @@ -122,10 +127,7 @@ v8::Handle<v8::Value> JavaScriptCallFrame::thisObject() const String JavaScriptCallFrame::stepInPositions() const { - v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); - v8::Handle<v8::Function> stepInPositions = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "stepInPositions"))); - v8::Handle<v8::Value> result = stepInPositions->Call(callFrame, 0, 0); - return toCoreStringWithUndefinedOrNullCheck(result); + return callV8FunctionReturnString("stepInPositions"); } bool JavaScriptCallFrame::isAtReturn() const @@ -148,34 +150,35 @@ v8::Handle<v8::Value> JavaScriptCallFrame::evaluate(const String& expression) v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); v8::Handle<v8::Function> evalFunction = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "evaluate"))); v8::Handle<v8::Value> argv[] = { v8String(m_debuggerContext.newLocal(m_isolate)->GetIsolate(), expression) }; - return evalFunction->Call(callFrame, 1, argv); + return evalFunction->Call(callFrame, WTF_ARRAY_LENGTH(argv), argv); } v8::Handle<v8::Value> JavaScriptCallFrame::restart() { v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); v8::Handle<v8::Function> restartFunction = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "restart"))); - v8::Debug::SetLiveEditEnabled(true); + v8::Debug::SetLiveEditEnabled(m_isolate, true); v8::Handle<v8::Value> result = restartFunction->Call(callFrame, 0, 0); - v8::Debug::SetLiveEditEnabled(false); + v8::Debug::SetLiveEditEnabled(m_isolate, false); return result; } -v8::Handle<v8::Object> JavaScriptCallFrame::innerCallFrame() -{ - return m_callFrame.newLocal(m_isolate); -} - -ScriptValue JavaScriptCallFrame::setVariableValue(int scopeNumber, const String& variableName, const ScriptValue& newValue) +ScriptValue JavaScriptCallFrame::setVariableValue(ScriptState* scriptState, int scopeNumber, const String& variableName, const ScriptValue& newValue) { + ScriptState::Scope scriptScope(scriptState); v8::Handle<v8::Object> callFrame = m_callFrame.newLocal(m_isolate); v8::Handle<v8::Function> setVariableValueFunction = v8::Handle<v8::Function>::Cast(callFrame->Get(v8AtomicString(m_isolate, "setVariableValue"))); v8::Handle<v8::Value> argv[] = { - v8::Handle<v8::Value>(v8::Integer::New(scopeNumber, m_isolate)), + v8::Handle<v8::Value>(v8::Integer::New(m_isolate, scopeNumber)), v8String(m_isolate, variableName), newValue.v8Value() }; - return ScriptValue(setVariableValueFunction->Call(callFrame, 3, argv), m_isolate); + return ScriptValue(scriptState, setVariableValueFunction->Call(callFrame, WTF_ARRAY_LENGTH(argv), argv)); +} + +void JavaScriptCallFrame::trace(Visitor* visitor) +{ + visitor->trace(m_caller); } } // namespace WebCore |