#include "src/inspector/v8-runtime-agent-impl.h"
#include <inttypes.h>
#include <memory>
#include "../../third_party/inspector_protocol/crdtp/json.h"
#include "include/v8-container.h"
#include "include/v8-context.h"
#include "include/v8-function.h"
#include "include/v8-inspector.h"
#include "include/v8-microtask-queue.h"
#include "src/debug/debug-interface.h"
#include "src/inspector/injected-script.h"
#include "src/inspector/inspected-context.h"
#include "src/inspector/protocol/Protocol.h"
#include "src/inspector/protocol/Runtime.h"
#include "src/inspector/remote-object-id.h"
#include "src/inspector/v8-console-message.h"
#include "src/inspector/v8-debugger-agent-impl.h"
#include "src/inspector/v8-debugger.h"
#include "src/inspector/v8-inspector-impl.h"
#include "src/inspector/v8-inspector-session-impl.h"
#include "src/inspector/v8-stack-trace-impl.h"
#include "src/inspector/v8-value-utils.h"
#include "src/tracing/trace-event.h"
namespace v8_inspector {
namespace V8RuntimeAgentImplState {
static const char customObjectFormatterEnabled[] = …;
static const char maxCallStackSizeToCapture[] = …;
static const char runtimeEnabled[] = …;
static const char bindings[] = …;
static const char globalBindingsKey[] = …;
}
RemoteObject;
namespace {
template <typename ProtocolCallback>
class EvaluateCallbackWrapper : public EvaluateCallback { … };
template <typename ProtocolCallback>
bool wrapEvaluateResultAsync(InjectedScript* injectedScript,
v8::MaybeLocal<v8::Value> maybeResultValue,
const v8::TryCatch& tryCatch,
const String16& objectGroup,
const WrapOptions& wrapOptions,
bool throwOnSideEffect,
ProtocolCallback* callback) { … }
void innerCallFunctionOn(
V8InspectorSessionImpl* session, InjectedScript::Scope& scope,
v8::Local<v8::Value> recv, const String16& expression,
Maybe<protocol::Array<protocol::Runtime::CallArgument>> optionalArguments,
bool silent, std::unique_ptr<WrapOptions> wrapOptions, bool userGesture,
bool awaitPromise, const String16& objectGroup, bool throwOnSideEffect,
std::unique_ptr<V8RuntimeAgentImpl::CallFunctionOnCallback> callback) { … }
Response ensureContext(V8InspectorImpl* inspector, int contextGroupId,
Maybe<int> executionContextId,
Maybe<String16> uniqueContextId, int* contextId) { … }
Response parseAdditionalSerializationParameters(
protocol::DictionaryValue* additionalParameters, v8::Isolate* isolate,
v8::Local<v8::Object>* result) { … }
Response getWrapOptions(
Maybe<bool> returnByValue, Maybe<bool> generatePreview,
Maybe<protocol::Runtime::SerializationOptions> maybeSerializationOptions,
v8::Isolate* isolate, std::unique_ptr<WrapOptions>* result) { … }
Response getWrapOptions(Maybe<bool> returnByValue, Maybe<bool> generatePreview,
v8::Isolate* isolate,
std::unique_ptr<WrapOptions>* result) { … }
}
V8RuntimeAgentImpl::V8RuntimeAgentImpl(
V8InspectorSessionImpl* session, protocol::FrontendChannel* FrontendChannel,
protocol::DictionaryValue* state,
std::shared_ptr<V8DebuggerBarrier> debuggerBarrier)
: … { … }
V8RuntimeAgentImpl::~V8RuntimeAgentImpl() = default;
void V8RuntimeAgentImpl::evaluate(
const String16& expression, Maybe<String16> objectGroup,
Maybe<bool> includeCommandLineAPI, Maybe<bool> silent,
Maybe<int> executionContextId, Maybe<bool> returnByValue,
Maybe<bool> generatePreview, Maybe<bool> userGesture,
Maybe<bool> maybeAwaitPromise, Maybe<bool> throwOnSideEffect,
Maybe<double> timeout, Maybe<bool> disableBreaks, Maybe<bool> maybeReplMode,
Maybe<bool> allowUnsafeEvalBlockedByCSP, Maybe<String16> uniqueContextId,
Maybe<protocol::Runtime::SerializationOptions> serializationOptions,
std::unique_ptr<EvaluateCallback> callback) { … }
void V8RuntimeAgentImpl::awaitPromise(
const String16& promiseObjectId, Maybe<bool> returnByValue,
Maybe<bool> generatePreview,
std::unique_ptr<AwaitPromiseCallback> callback) { … }
void V8RuntimeAgentImpl::callFunctionOn(
const String16& expression, Maybe<String16> objectId,
Maybe<protocol::Array<protocol::Runtime::CallArgument>> optionalArguments,
Maybe<bool> silent, Maybe<bool> returnByValue, Maybe<bool> generatePreview,
Maybe<bool> userGesture, Maybe<bool> awaitPromise,
Maybe<int> executionContextId, Maybe<String16> objectGroup,
Maybe<bool> throwOnSideEffect, Maybe<String16> uniqueContextId,
Maybe<protocol::Runtime::SerializationOptions> serializationOptions,
std::unique_ptr<CallFunctionOnCallback> callback) { … }
Response V8RuntimeAgentImpl::getProperties(
const String16& objectId, Maybe<bool> ownProperties,
Maybe<bool> accessorPropertiesOnly, Maybe<bool> generatePreview,
Maybe<bool> nonIndexedPropertiesOnly,
std::unique_ptr<protocol::Array<protocol::Runtime::PropertyDescriptor>>*
result,
Maybe<protocol::Array<protocol::Runtime::InternalPropertyDescriptor>>*
internalProperties,
Maybe<protocol::Array<protocol::Runtime::PrivatePropertyDescriptor>>*
privateProperties,
Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) { … }
Response V8RuntimeAgentImpl::releaseObject(const String16& objectId) { … }
Response V8RuntimeAgentImpl::releaseObjectGroup(const String16& objectGroup) { … }
Response V8RuntimeAgentImpl::runIfWaitingForDebugger() { … }
Response V8RuntimeAgentImpl::setCustomObjectFormatterEnabled(bool enabled) { … }
Response V8RuntimeAgentImpl::setMaxCallStackSizeToCapture(int size) { … }
Response V8RuntimeAgentImpl::discardConsoleEntries() { … }
Response V8RuntimeAgentImpl::compileScript(
const String16& expression, const String16& sourceURL, bool persistScript,
Maybe<int> executionContextId, Maybe<String16>* scriptId,
Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) { … }
void V8RuntimeAgentImpl::runScript(
const String16& scriptId, Maybe<int> executionContextId,
Maybe<String16> objectGroup, Maybe<bool> silent,
Maybe<bool> includeCommandLineAPI, Maybe<bool> returnByValue,
Maybe<bool> generatePreview, Maybe<bool> awaitPromise,
std::unique_ptr<RunScriptCallback> callback) { … }
Response V8RuntimeAgentImpl::queryObjects(
const String16& prototypeObjectId, Maybe<String16> objectGroup,
std::unique_ptr<protocol::Runtime::RemoteObject>* objects) { … }
Response V8RuntimeAgentImpl::globalLexicalScopeNames(
Maybe<int> executionContextId,
std::unique_ptr<protocol::Array<String16>>* outNames) { … }
Response V8RuntimeAgentImpl::getIsolateId(String16* outIsolateId) { … }
Response V8RuntimeAgentImpl::getHeapUsage(double* out_usedSize,
double* out_totalSize) { … }
void V8RuntimeAgentImpl::terminateExecution(
std::unique_ptr<TerminateExecutionCallback> callback) { … }
namespace {
protocol::DictionaryValue* getOrCreateDictionary(
protocol::DictionaryValue* dict, const String16& key) { … }
}
Response V8RuntimeAgentImpl::addBinding(const String16& name,
Maybe<int> executionContextId,
Maybe<String16> executionContextName) { … }
void V8RuntimeAgentImpl::bindingCallback(
const v8::FunctionCallbackInfo<v8::Value>& info) { … }
void V8RuntimeAgentImpl::addBinding(InspectedContext* context,
const String16& name) { … }
Response V8RuntimeAgentImpl::removeBinding(const String16& name) { … }
Response V8RuntimeAgentImpl::getExceptionDetails(
const String16& errorObjectId,
Maybe<protocol::Runtime::ExceptionDetails>* out_exceptionDetails) { … }
void V8RuntimeAgentImpl::bindingCalled(const String16& name,
const String16& payload,
int executionContextId) { … }
void V8RuntimeAgentImpl::addBindings(InspectedContext* context) { … }
void V8RuntimeAgentImpl::restore() { … }
Response V8RuntimeAgentImpl::enable() { … }
Response V8RuntimeAgentImpl::disable() { … }
void V8RuntimeAgentImpl::reset() { … }
void V8RuntimeAgentImpl::reportExecutionContextCreated(
InspectedContext* context) { … }
void V8RuntimeAgentImpl::reportExecutionContextDestroyed(
InspectedContext* context) { … }
void V8RuntimeAgentImpl::inspect(
std::unique_ptr<protocol::Runtime::RemoteObject> objectToInspect,
std::unique_ptr<protocol::DictionaryValue> hints, int executionContextId) { … }
void V8RuntimeAgentImpl::messageAdded(V8ConsoleMessage* message) { … }
bool V8RuntimeAgentImpl::reportMessage(V8ConsoleMessage* message,
bool generatePreview) { … }
}