Index: src/inspector/v8-debugger-agent-impl.cc |
diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc |
index f318619b35bf2b37a0696f9af59bef791840af77..94b7f9417757d4ce64a13540cf0ee05cd3f8a08c 100644 |
--- a/src/inspector/v8-debugger-agent-impl.cc |
+++ b/src/inspector/v8-debugger-agent-impl.cc |
@@ -22,6 +22,7 @@ |
#include "src/inspector/v8-regex.h" |
#include "src/inspector/v8-runtime-agent-impl.h" |
#include "src/inspector/v8-stack-trace-impl.h" |
+#include "src/inspector/v8-value-copier.h" |
#include "include/v8-inspector.h" |
@@ -560,9 +561,13 @@ void V8DebuggerAgentImpl::restartFrame( |
std::unique_ptr<Array<CallFrame>>* newCallFrames, |
Maybe<StackTrace>* asyncStackTrace) { |
if (!assertPaused(errorString)) return; |
- InjectedScript::CallFrameScope scope( |
- errorString, m_inspector, m_session->contextGroupId(), callFrameId); |
- if (!scope.initialize()) return; |
+ InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(), |
+ callFrameId); |
+ Response response = scope.initialize(); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
+ return; |
+ } |
if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { |
*errorString = "Could not find call frame with given id"; |
return; |
@@ -715,16 +720,19 @@ void V8DebuggerAgentImpl::evaluateOnCallFrame( |
std::unique_ptr<RemoteObject>* result, |
Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) { |
if (!assertPaused(errorString)) return; |
- InjectedScript::CallFrameScope scope( |
- errorString, m_inspector, m_session->contextGroupId(), callFrameId); |
- if (!scope.initialize()) return; |
+ InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(), |
+ callFrameId); |
+ Response response = scope.initialize(); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
+ return; |
+ } |
if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { |
*errorString = "Could not find call frame with given id"; |
return; |
} |
- if (includeCommandLineAPI.fromMaybe(false) && !scope.installCommandLineAPI()) |
- return; |
+ if (includeCommandLineAPI.fromMaybe(false)) scope.installCommandLineAPI(); |
if (silent.fromMaybe(false)) scope.ignoreExceptionsAndMuteConsole(); |
v8::MaybeLocal<v8::Value> maybeResultValue = |
@@ -733,11 +741,16 @@ void V8DebuggerAgentImpl::evaluateOnCallFrame( |
// Re-initialize after running client's code, as it could have destroyed |
// context or session. |
- if (!scope.initialize()) return; |
- scope.injectedScript()->wrapEvaluateResult( |
- errorString, maybeResultValue, scope.tryCatch(), |
- objectGroup.fromMaybe(""), returnByValue.fromMaybe(false), |
- generatePreview.fromMaybe(false), result, exceptionDetails); |
+ response = scope.initialize(); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
+ return; |
+ } |
+ response = scope.injectedScript()->wrapEvaluateResult( |
+ maybeResultValue, scope.tryCatch(), objectGroup.fromMaybe(""), |
+ returnByValue.fromMaybe(false), generatePreview.fromMaybe(false), result, |
+ exceptionDetails); |
+ if (!response.isSuccess()) *errorString = response.errorMessage(); |
} |
void V8DebuggerAgentImpl::setVariableValue( |
@@ -746,15 +759,20 @@ void V8DebuggerAgentImpl::setVariableValue( |
const String16& callFrameId) { |
if (!checkEnabled(errorString)) return; |
if (!assertPaused(errorString)) return; |
- InjectedScript::CallFrameScope scope( |
- errorString, m_inspector, m_session->contextGroupId(), callFrameId); |
- if (!scope.initialize()) return; |
- |
+ InjectedScript::CallFrameScope scope(m_inspector, m_session->contextGroupId(), |
+ callFrameId); |
+ Response response = scope.initialize(); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
+ return; |
+ } |
v8::Local<v8::Value> newValue; |
- if (!scope.injectedScript() |
- ->resolveCallArgument(errorString, newValueArgument.get()) |
- .ToLocal(&newValue)) |
+ response = scope.injectedScript()->resolveCallArgument(newValueArgument.get(), |
+ &newValue); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
return; |
+ } |
if (scope.frameOrdinal() >= m_pausedCallFrames.size()) { |
*errorString = "Could not find call frame with given id"; |
@@ -907,7 +925,6 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames( |
ErrorString* errorString) { |
if (m_pausedContext.IsEmpty() || !m_pausedCallFrames.size()) |
return Array<CallFrame>::create(); |
- ErrorString ignored; |
v8::HandleScope handles(m_isolate); |
v8::Local<v8::Context> debuggerContext = |
v8::DebugInterface::GetDebugContext(m_isolate); |
@@ -925,9 +942,9 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames( |
return Array<CallFrame>::create(); |
int contextId = currentCallFrame->contextId(); |
- InjectedScript* injectedScript = |
- contextId ? m_session->findInjectedScript(&ignored, contextId) |
- : nullptr; |
+ |
+ InjectedScript* injectedScript = nullptr; |
+ if (contextId) m_session->findInjectedScript(contextId, injectedScript); |
String16 callFrameId = |
RemoteCallFrameId::serialize(contextId, static_cast<int>(frameOrdinal)); |
@@ -950,24 +967,31 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames( |
!scopeChain->IsArray())) |
return Array<CallFrame>::create(); |
v8::Local<v8::Array> scopeChainArray = scopeChain.As<v8::Array>(); |
- if (!injectedScript->wrapPropertyInArray( |
- errorString, scopeChainArray, |
- toV8StringInternalized(m_isolate, "object"), |
- backtraceObjectGroup)) |
+ Response response = injectedScript->wrapPropertyInArray( |
+ scopeChainArray, toV8StringInternalized(m_isolate, "object"), |
+ backtraceObjectGroup); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
return Array<CallFrame>::create(); |
- if (!injectedScript->wrapObjectProperty( |
- errorString, details, toV8StringInternalized(m_isolate, "this"), |
- backtraceObjectGroup)) |
+ } |
+ response = injectedScript->wrapObjectProperty( |
+ details, toV8StringInternalized(m_isolate, "this"), |
+ backtraceObjectGroup); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
return Array<CallFrame>::create(); |
+ } |
if (details |
->Has(debuggerContext, |
toV8StringInternalized(m_isolate, "returnValue")) |
.FromMaybe(false)) { |
- if (!injectedScript->wrapObjectProperty( |
- errorString, details, |
- toV8StringInternalized(m_isolate, "returnValue"), |
- backtraceObjectGroup)) |
+ response = injectedScript->wrapObjectProperty( |
+ details, toV8StringInternalized(m_isolate, "returnValue"), |
+ backtraceObjectGroup); |
+ if (!response.isSuccess()) { |
+ *errorString = response.errorMessage(); |
return Array<CallFrame>::create(); |
+ } |
} |
} else { |
if (hasInternalError(errorString, !details |
@@ -1010,9 +1034,9 @@ std::unique_ptr<Array<CallFrame>> V8DebuggerAgentImpl::currentCallFrames( |
return Array<CallFrame>::create(); |
} |
- std::unique_ptr<protocol::Value> protocolValue = |
- toProtocolValue(errorString, debuggerContext, objects); |
- if (!protocolValue) return Array<CallFrame>::create(); |
+ std::unique_ptr<protocol::Value> protocolValue; |
+ Response response = toProtocolValue(debuggerContext, objects, &protocolValue); |
+ if (!response.isSuccess()) return Array<CallFrame>::create(); |
protocol::ErrorSupport errorSupport; |
std::unique_ptr<Array<CallFrame>> callFrames = |
Array<CallFrame>::parse(protocolValue.get(), &errorSupport); |
@@ -1127,17 +1151,17 @@ V8DebuggerAgentImpl::SkipPauseRequest V8DebuggerAgentImpl::didPause( |
v8::HandleScope handles(m_isolate); |
if (!exception.IsEmpty()) { |
- ErrorString ignored; |
- InjectedScript* injectedScript = |
- m_session->findInjectedScript(&ignored, V8Debugger::contextId(context)); |
+ InjectedScript* injectedScript = nullptr; |
+ m_session->findInjectedScript(V8Debugger::contextId(context), |
+ injectedScript); |
if (injectedScript) { |
m_breakReason = |
isPromiseRejection |
? protocol::Debugger::Paused::ReasonEnum::PromiseRejection |
: protocol::Debugger::Paused::ReasonEnum::Exception; |
- ErrorString errorString; |
- auto obj = injectedScript->wrapObject(&errorString, exception, |
- backtraceObjectGroup); |
+ std::unique_ptr<protocol::Runtime::RemoteObject> obj; |
+ injectedScript->wrapObject(exception, backtraceObjectGroup, false, false, |
+ &obj); |
m_breakAuxData = obj ? obj->serialize() : nullptr; |
// m_breakAuxData might be null after this. |
} |