| Index: Source/core/inspector/InjectedScriptBase.cpp
|
| diff --git a/Source/core/inspector/InjectedScriptBase.cpp b/Source/core/inspector/InjectedScriptBase.cpp
|
| index 243b0e111caa855d6bfc5a90091eaf26a102aeec..a491df74497199eb3830d42629745969730d621d 100644
|
| --- a/Source/core/inspector/InjectedScriptBase.cpp
|
| +++ b/Source/core/inspector/InjectedScriptBase.cpp
|
| @@ -39,10 +39,57 @@
|
| #include "platform/JSONValues.h"
|
| #include "wtf/text/WTFString.h"
|
|
|
| +using WebCore::TypeBuilder::Array;
|
| using WebCore::TypeBuilder::Runtime::RemoteObject;
|
|
|
| namespace WebCore {
|
|
|
| +static PassRefPtr<TypeBuilder::Debugger::ExceptionDetails> toExceptionDetails(PassRefPtr<JSONObject> object)
|
| +{
|
| + String text;
|
| + if (!object->getString("text", &text))
|
| + return nullptr;
|
| +
|
| + RefPtr<TypeBuilder::Debugger::ExceptionDetails> exceptionDetails = TypeBuilder::Debugger::ExceptionDetails::create().setText(text);
|
| + String url;
|
| + if (object->getString("url", &url))
|
| + exceptionDetails->setUrl(url);
|
| + int line = 0;
|
| + if (object->getNumber("line", &line))
|
| + exceptionDetails->setLine(line);
|
| + int column = 0;
|
| + if (object->getNumber("column", &column))
|
| + exceptionDetails->setColumn(column);
|
| + RefPtr<JSONArray> stackTrace = object->getArray("stackTrace");
|
| + if (stackTrace && stackTrace->length() > 0) {
|
| + RefPtr<TypeBuilder::Array<TypeBuilder::Console::CallFrame> > frames = TypeBuilder::Array<TypeBuilder::Console::CallFrame>::create();
|
| + for (unsigned i = 0; i < stackTrace->length(); ++i) {
|
| + RefPtr<JSONObject> stackFrame = stackTrace->get(i)->asObject();
|
| + int lineNumber = 0;
|
| + stackFrame->getNumber("lineNumber", &lineNumber);
|
| + int column = 0;
|
| + stackFrame->getNumber("column", &column);
|
| + int scriptId = 0;
|
| + stackFrame->getNumber("scriptId", &scriptId);
|
| + String sourceURL;
|
| + stackFrame->getString("scriptNameOrSourceURL", &sourceURL);
|
| + String functionName;
|
| + stackFrame->getString("functionName", &functionName);
|
| +
|
| + RefPtr<TypeBuilder::Console::CallFrame> callFrame = TypeBuilder::Console::CallFrame::create()
|
| + .setFunctionName(functionName)
|
| + .setScriptId(String::number(scriptId))
|
| + .setUrl(sourceURL)
|
| + .setLineNumber(lineNumber)
|
| + .setColumnNumber(column);
|
| +
|
| + frames->addItem(callFrame.release());
|
| + }
|
| + exceptionDetails->setStackTrace(frames.release());
|
| + }
|
| + return exceptionDetails.release();
|
| +}
|
| +
|
| InjectedScriptBase::InjectedScriptBase(const String& name)
|
| : m_name(name)
|
| , m_inspectedStateAccessCheck(0)
|
| @@ -121,7 +168,7 @@ void InjectedScriptBase::makeCall(ScriptFunctionCall& function, RefPtr<JSONValue
|
| }
|
| }
|
|
|
| -void InjectedScriptBase::makeEvalCall(ErrorString* errorString, ScriptFunctionCall& function, RefPtr<TypeBuilder::Runtime::RemoteObject>* objectResult, TypeBuilder::OptOutput<bool>* wasThrown)
|
| +void InjectedScriptBase::makeEvalCall(ErrorString* errorString, ScriptFunctionCall& function, RefPtr<TypeBuilder::Runtime::RemoteObject>* objectResult, TypeBuilder::OptOutput<bool>* wasThrown, RefPtr<TypeBuilder::Debugger::ExceptionDetails>* exceptionDetails)
|
| {
|
| RefPtr<JSONValue> result;
|
| makeCall(function, &result);
|
| @@ -145,6 +192,11 @@ void InjectedScriptBase::makeEvalCall(ErrorString* errorString, ScriptFunctionCa
|
| *errorString = "Internal error: result is not a pair of value and wasThrown flag";
|
| return;
|
| }
|
| + if (wasThrownVal) {
|
| + RefPtr<JSONObject> objectExceptionDetails = resultPair->getObject("exceptionDetails");
|
| + if (objectExceptionDetails)
|
| + *exceptionDetails = toExceptionDetails(objectExceptionDetails.release());
|
| + }
|
| *objectResult = TypeBuilder::Runtime::RemoteObject::runtimeCast(resultObj);
|
| *wasThrown = wasThrownVal;
|
| }
|
|
|