From 1b9d415f0d8052ccacf918abdd823d3cf246286a Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Tue, 9 May 2023 11:22:46 -0700 Subject: [PATCH 1/5] chore: Remove unused V8 inspector sources These sources are already compiled into the V8 artifacts, and are not compiled as part of the runtime. --- .../src/inspector/protocol/Console.cpp | 231 --- .../src/inspector/protocol/Debugger.cpp | 1748 ----------------- .../src/inspector/protocol/HeapProfiler.cpp | 666 ------- .../src/inspector/protocol/Profiler.cpp | 659 ------- .../src/inspector/protocol/Protocol.cpp | 727 ------- .../src/inspector/protocol/Runtime.cpp | 1629 --------------- .../src/inspector/protocol/Schema.cpp | 160 -- .../inspector/protocol/base_string_adapter.cc | 121 -- 8 files changed, 5941 deletions(-) delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp delete mode 100644 test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/base_string_adapter.cc diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp deleted file mode 100644 index 1417dc0b4..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Console.cpp +++ /dev/null @@ -1,231 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Console.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace Console { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "Console"; -const char Metainfo::commandPrefix[] = "Console."; -const char Metainfo::version[] = "1.3"; - - -const char* ConsoleMessage::SourceEnum::Xml = "xml"; -const char* ConsoleMessage::SourceEnum::Javascript = "javascript"; -const char* ConsoleMessage::SourceEnum::Network = "network"; -const char* ConsoleMessage::SourceEnum::ConsoleApi = "console-api"; -const char* ConsoleMessage::SourceEnum::Storage = "storage"; -const char* ConsoleMessage::SourceEnum::Appcache = "appcache"; -const char* ConsoleMessage::SourceEnum::Rendering = "rendering"; -const char* ConsoleMessage::SourceEnum::Security = "security"; -const char* ConsoleMessage::SourceEnum::Other = "other"; -const char* ConsoleMessage::SourceEnum::Deprecation = "deprecation"; -const char* ConsoleMessage::SourceEnum::Worker = "worker"; - -const char* ConsoleMessage::LevelEnum::Log = "log"; -const char* ConsoleMessage::LevelEnum::Warning = "warning"; -const char* ConsoleMessage::LevelEnum::Error = "error"; -const char* ConsoleMessage::LevelEnum::Debug = "debug"; -const char* ConsoleMessage::LevelEnum::Info = "info"; -V8_CRDTP_BEGIN_DESERIALIZER(ConsoleMessage) - V8_CRDTP_DESERIALIZE_FIELD_OPT("column", m_column), - V8_CRDTP_DESERIALIZE_FIELD("level", m_level), - V8_CRDTP_DESERIALIZE_FIELD_OPT("line", m_line), - V8_CRDTP_DESERIALIZE_FIELD("source", m_source), - V8_CRDTP_DESERIALIZE_FIELD("text", m_text), - V8_CRDTP_DESERIALIZE_FIELD_OPT("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ConsoleMessage) - V8_CRDTP_SERIALIZE_FIELD("source", m_source); - V8_CRDTP_SERIALIZE_FIELD("level", m_level); - V8_CRDTP_SERIALIZE_FIELD("text", m_text); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("line", m_line); - V8_CRDTP_SERIALIZE_FIELD("column", m_column); -V8_CRDTP_END_SERIALIZER(); - - -// ------------- Enum values from params. - - -// ------------- Frontend notifications. - -void Frontend::messageAdded(std::unique_ptr message) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("message"), message); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Console.messageAdded", serializer.Finish())); -} - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void clearMessages(const v8_crdtp::Dispatchable& dispatchable); - void disable(const v8_crdtp::Dispatchable& dispatchable); - void enable(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("clearMessages"), - &DomainDispatcherImpl::clearMessages - }, - { - v8_crdtp::SpanFrom("disable"), - &DomainDispatcherImpl::disable - }, - { - v8_crdtp::SpanFrom("enable"), - &DomainDispatcherImpl::enable - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -namespace { - - -} // namespace - -void DomainDispatcherImpl::clearMessages(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->clearMessages(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Console.clearMessages"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::disable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->disable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Console.disable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::enable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->enable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Console.enable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("Console"), SortedRedirects(), std::move(dispatcher)); -} - -} // Console -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp deleted file mode 100644 index 8e28bbd8d..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Debugger.cpp +++ /dev/null @@ -1,1748 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Debugger.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace Debugger { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "Debugger"; -const char Metainfo::commandPrefix[] = "Debugger."; -const char Metainfo::version[] = "1.3"; - - - -V8_CRDTP_BEGIN_DESERIALIZER(Location) - V8_CRDTP_DESERIALIZE_FIELD_OPT("columnNumber", m_columnNumber), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(Location) - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(ScriptPosition) - V8_CRDTP_DESERIALIZE_FIELD("columnNumber", m_columnNumber), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ScriptPosition) - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(LocationRange) - V8_CRDTP_DESERIALIZE_FIELD("end", m_end), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD("start", m_start), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(LocationRange) - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("start", m_start); - V8_CRDTP_SERIALIZE_FIELD("end", m_end); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(CallFrame) - V8_CRDTP_DESERIALIZE_FIELD("callFrameId", m_callFrameId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("canBeRestarted", m_canBeRestarted), - V8_CRDTP_DESERIALIZE_FIELD_OPT("functionLocation", m_functionLocation), - V8_CRDTP_DESERIALIZE_FIELD("functionName", m_functionName), - V8_CRDTP_DESERIALIZE_FIELD("location", m_location), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnValue", m_returnValue), - V8_CRDTP_DESERIALIZE_FIELD("scopeChain", m_scopeChain), - V8_CRDTP_DESERIALIZE_FIELD("this", m_this), - V8_CRDTP_DESERIALIZE_FIELD("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(CallFrame) - V8_CRDTP_SERIALIZE_FIELD("callFrameId", m_callFrameId); - V8_CRDTP_SERIALIZE_FIELD("functionName", m_functionName); - V8_CRDTP_SERIALIZE_FIELD("functionLocation", m_functionLocation); - V8_CRDTP_SERIALIZE_FIELD("location", m_location); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("scopeChain", m_scopeChain); - V8_CRDTP_SERIALIZE_FIELD("this", m_this); - V8_CRDTP_SERIALIZE_FIELD("returnValue", m_returnValue); - V8_CRDTP_SERIALIZE_FIELD("canBeRestarted", m_canBeRestarted); -V8_CRDTP_END_SERIALIZER(); - - - -const char* Scope::TypeEnum::Global = "global"; -const char* Scope::TypeEnum::Local = "local"; -const char* Scope::TypeEnum::With = "with"; -const char* Scope::TypeEnum::Closure = "closure"; -const char* Scope::TypeEnum::Catch = "catch"; -const char* Scope::TypeEnum::Block = "block"; -const char* Scope::TypeEnum::Script = "script"; -const char* Scope::TypeEnum::Eval = "eval"; -const char* Scope::TypeEnum::Module = "module"; -const char* Scope::TypeEnum::WasmExpressionStack = "wasm-expression-stack"; -V8_CRDTP_BEGIN_DESERIALIZER(Scope) - V8_CRDTP_DESERIALIZE_FIELD_OPT("endLocation", m_endLocation), - V8_CRDTP_DESERIALIZE_FIELD_OPT("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD("object", m_object), - V8_CRDTP_DESERIALIZE_FIELD_OPT("startLocation", m_startLocation), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(Scope) - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("object", m_object); - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("startLocation", m_startLocation); - V8_CRDTP_SERIALIZE_FIELD("endLocation", m_endLocation); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(SearchMatch) - V8_CRDTP_DESERIALIZE_FIELD("lineContent", m_lineContent), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(SearchMatch) - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("lineContent", m_lineContent); -V8_CRDTP_END_SERIALIZER(); - -// static -std::unique_ptr API::SearchMatch::fromBinary(const uint8_t* data, size_t length) -{ - return protocol::Debugger::SearchMatch::FromBinary(data, length); -} - - -const char* BreakLocation::TypeEnum::DebuggerStatement = "debuggerStatement"; -const char* BreakLocation::TypeEnum::Call = "call"; -const char* BreakLocation::TypeEnum::Return = "return"; -V8_CRDTP_BEGIN_DESERIALIZER(BreakLocation) - V8_CRDTP_DESERIALIZE_FIELD_OPT("columnNumber", m_columnNumber), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("type", m_type), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(BreakLocation) - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber); - V8_CRDTP_SERIALIZE_FIELD("type", m_type); -V8_CRDTP_END_SERIALIZER(); - - -namespace ScriptLanguageEnum { -const char JavaScript[] = "JavaScript"; -const char WebAssembly[] = "WebAssembly"; -} // namespace ScriptLanguageEnum - - - -const char* DebugSymbols::TypeEnum::None = "None"; -const char* DebugSymbols::TypeEnum::SourceMap = "SourceMap"; -const char* DebugSymbols::TypeEnum::EmbeddedDWARF = "EmbeddedDWARF"; -const char* DebugSymbols::TypeEnum::ExternalDWARF = "ExternalDWARF"; -V8_CRDTP_BEGIN_DESERIALIZER(DebugSymbols) - V8_CRDTP_DESERIALIZE_FIELD_OPT("externalURL", m_externalURL), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(DebugSymbols) - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("externalURL", m_externalURL); -V8_CRDTP_END_SERIALIZER(); - - -// ------------- Enum values from params. - - -namespace ContinueToLocation { -namespace TargetCallFramesEnum { -const char* Any = "any"; -const char* Current = "current"; -} // namespace TargetCallFramesEnum -} // namespace ContinueToLocation - -namespace SetInstrumentationBreakpoint { -namespace InstrumentationEnum { -const char* BeforeScriptExecution = "beforeScriptExecution"; -const char* BeforeScriptWithSourceMapExecution = "beforeScriptWithSourceMapExecution"; -} // namespace InstrumentationEnum -} // namespace SetInstrumentationBreakpoint - -namespace SetPauseOnExceptions { -namespace StateEnum { -const char* None = "none"; -const char* Uncaught = "uncaught"; -const char* All = "all"; -} // namespace StateEnum -} // namespace SetPauseOnExceptions - -namespace Paused { -namespace ReasonEnum { -const char* Ambiguous = "ambiguous"; -const char* Assert = "assert"; -const char* CSPViolation = "CSPViolation"; -const char* DebugCommand = "debugCommand"; -const char* DOM = "DOM"; -const char* EventListener = "EventListener"; -const char* Exception = "exception"; -const char* Instrumentation = "instrumentation"; -const char* OOM = "OOM"; -const char* Other = "other"; -const char* PromiseRejection = "promiseRejection"; -const char* XHR = "XHR"; -} // namespace ReasonEnum -} // namespace Paused - -namespace API { -namespace Paused { -namespace ReasonEnum { -const char* Ambiguous = "ambiguous"; -const char* Assert = "assert"; -const char* CSPViolation = "CSPViolation"; -const char* DebugCommand = "debugCommand"; -const char* DOM = "DOM"; -const char* EventListener = "EventListener"; -const char* Exception = "exception"; -const char* Instrumentation = "instrumentation"; -const char* OOM = "OOM"; -const char* Other = "other"; -const char* PromiseRejection = "promiseRejection"; -const char* XHR = "XHR"; -} // namespace ReasonEnum -} // namespace Paused -} // namespace API - -// ------------- Frontend notifications. - -void Frontend::breakpointResolved(const String& breakpointId, std::unique_ptr location) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("breakpointId"), breakpointId); - serializer.AddField(v8_crdtp::MakeSpan("location"), location); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Debugger.breakpointResolved", serializer.Finish())); -} - -void Frontend::paused(std::unique_ptr> callFrames, const String& reason, Maybe data, Maybe> hitBreakpoints, Maybe asyncStackTrace, Maybe asyncStackTraceId, Maybe asyncCallStackTraceId) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("callFrames"), callFrames); - serializer.AddField(v8_crdtp::MakeSpan("reason"), reason); - serializer.AddField(v8_crdtp::MakeSpan("data"), data); - serializer.AddField(v8_crdtp::MakeSpan("hitBreakpoints"), hitBreakpoints); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTrace"), asyncStackTrace); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTraceId"), asyncStackTraceId); - serializer.AddField(v8_crdtp::MakeSpan("asyncCallStackTraceId"), asyncCallStackTraceId); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Debugger.paused", serializer.Finish())); -} - -void Frontend::resumed() -{ - if (!frontend_channel_) - return; - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Debugger.resumed")); -} - -void Frontend::scriptFailedToParse(const String& scriptId, const String& url, int startLine, int startColumn, int endLine, int endColumn, int executionContextId, const String& hash, Maybe executionContextAuxData, Maybe sourceMapURL, Maybe hasSourceURL, Maybe isModule, Maybe length, Maybe stackTrace, Maybe codeOffset, Maybe scriptLanguage, Maybe embedderName) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("scriptId"), scriptId); - serializer.AddField(v8_crdtp::MakeSpan("url"), url); - serializer.AddField(v8_crdtp::MakeSpan("startLine"), startLine); - serializer.AddField(v8_crdtp::MakeSpan("startColumn"), startColumn); - serializer.AddField(v8_crdtp::MakeSpan("endLine"), endLine); - serializer.AddField(v8_crdtp::MakeSpan("endColumn"), endColumn); - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - serializer.AddField(v8_crdtp::MakeSpan("hash"), hash); - serializer.AddField(v8_crdtp::MakeSpan("executionContextAuxData"), executionContextAuxData); - serializer.AddField(v8_crdtp::MakeSpan("sourceMapURL"), sourceMapURL); - serializer.AddField(v8_crdtp::MakeSpan("hasSourceURL"), hasSourceURL); - serializer.AddField(v8_crdtp::MakeSpan("isModule"), isModule); - serializer.AddField(v8_crdtp::MakeSpan("length"), length); - serializer.AddField(v8_crdtp::MakeSpan("stackTrace"), stackTrace); - serializer.AddField(v8_crdtp::MakeSpan("codeOffset"), codeOffset); - serializer.AddField(v8_crdtp::MakeSpan("scriptLanguage"), scriptLanguage); - serializer.AddField(v8_crdtp::MakeSpan("embedderName"), embedderName); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Debugger.scriptFailedToParse", serializer.Finish())); -} - -void Frontend::scriptParsed(const String& scriptId, const String& url, int startLine, int startColumn, int endLine, int endColumn, int executionContextId, const String& hash, Maybe executionContextAuxData, Maybe isLiveEdit, Maybe sourceMapURL, Maybe hasSourceURL, Maybe isModule, Maybe length, Maybe stackTrace, Maybe codeOffset, Maybe scriptLanguage, Maybe debugSymbols, Maybe embedderName) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("scriptId"), scriptId); - serializer.AddField(v8_crdtp::MakeSpan("url"), url); - serializer.AddField(v8_crdtp::MakeSpan("startLine"), startLine); - serializer.AddField(v8_crdtp::MakeSpan("startColumn"), startColumn); - serializer.AddField(v8_crdtp::MakeSpan("endLine"), endLine); - serializer.AddField(v8_crdtp::MakeSpan("endColumn"), endColumn); - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - serializer.AddField(v8_crdtp::MakeSpan("hash"), hash); - serializer.AddField(v8_crdtp::MakeSpan("executionContextAuxData"), executionContextAuxData); - serializer.AddField(v8_crdtp::MakeSpan("isLiveEdit"), isLiveEdit); - serializer.AddField(v8_crdtp::MakeSpan("sourceMapURL"), sourceMapURL); - serializer.AddField(v8_crdtp::MakeSpan("hasSourceURL"), hasSourceURL); - serializer.AddField(v8_crdtp::MakeSpan("isModule"), isModule); - serializer.AddField(v8_crdtp::MakeSpan("length"), length); - serializer.AddField(v8_crdtp::MakeSpan("stackTrace"), stackTrace); - serializer.AddField(v8_crdtp::MakeSpan("codeOffset"), codeOffset); - serializer.AddField(v8_crdtp::MakeSpan("scriptLanguage"), scriptLanguage); - serializer.AddField(v8_crdtp::MakeSpan("debugSymbols"), debugSymbols); - serializer.AddField(v8_crdtp::MakeSpan("embedderName"), embedderName); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Debugger.scriptParsed", serializer.Finish())); -} - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void continueToLocation(const v8_crdtp::Dispatchable& dispatchable); - void disable(const v8_crdtp::Dispatchable& dispatchable); - void enable(const v8_crdtp::Dispatchable& dispatchable); - void evaluateOnCallFrame(const v8_crdtp::Dispatchable& dispatchable); - void getPossibleBreakpoints(const v8_crdtp::Dispatchable& dispatchable); - void getScriptSource(const v8_crdtp::Dispatchable& dispatchable); - void getWasmBytecode(const v8_crdtp::Dispatchable& dispatchable); - void getStackTrace(const v8_crdtp::Dispatchable& dispatchable); - void pause(const v8_crdtp::Dispatchable& dispatchable); - void pauseOnAsyncCall(const v8_crdtp::Dispatchable& dispatchable); - void removeBreakpoint(const v8_crdtp::Dispatchable& dispatchable); - void restartFrame(const v8_crdtp::Dispatchable& dispatchable); - void resume(const v8_crdtp::Dispatchable& dispatchable); - void searchInContent(const v8_crdtp::Dispatchable& dispatchable); - void setAsyncCallStackDepth(const v8_crdtp::Dispatchable& dispatchable); - void setBlackboxPatterns(const v8_crdtp::Dispatchable& dispatchable); - void setBlackboxedRanges(const v8_crdtp::Dispatchable& dispatchable); - void setBreakpoint(const v8_crdtp::Dispatchable& dispatchable); - void setInstrumentationBreakpoint(const v8_crdtp::Dispatchable& dispatchable); - void setBreakpointByUrl(const v8_crdtp::Dispatchable& dispatchable); - void setBreakpointOnFunctionCall(const v8_crdtp::Dispatchable& dispatchable); - void setBreakpointsActive(const v8_crdtp::Dispatchable& dispatchable); - void setPauseOnExceptions(const v8_crdtp::Dispatchable& dispatchable); - void setReturnValue(const v8_crdtp::Dispatchable& dispatchable); - void setScriptSource(const v8_crdtp::Dispatchable& dispatchable); - void setSkipAllPauses(const v8_crdtp::Dispatchable& dispatchable); - void setVariableValue(const v8_crdtp::Dispatchable& dispatchable); - void stepInto(const v8_crdtp::Dispatchable& dispatchable); - void stepOut(const v8_crdtp::Dispatchable& dispatchable); - void stepOver(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("continueToLocation"), - &DomainDispatcherImpl::continueToLocation - }, - { - v8_crdtp::SpanFrom("disable"), - &DomainDispatcherImpl::disable - }, - { - v8_crdtp::SpanFrom("enable"), - &DomainDispatcherImpl::enable - }, - { - v8_crdtp::SpanFrom("evaluateOnCallFrame"), - &DomainDispatcherImpl::evaluateOnCallFrame - }, - { - v8_crdtp::SpanFrom("getPossibleBreakpoints"), - &DomainDispatcherImpl::getPossibleBreakpoints - }, - { - v8_crdtp::SpanFrom("getScriptSource"), - &DomainDispatcherImpl::getScriptSource - }, - { - v8_crdtp::SpanFrom("getStackTrace"), - &DomainDispatcherImpl::getStackTrace - }, - { - v8_crdtp::SpanFrom("getWasmBytecode"), - &DomainDispatcherImpl::getWasmBytecode - }, - { - v8_crdtp::SpanFrom("pause"), - &DomainDispatcherImpl::pause - }, - { - v8_crdtp::SpanFrom("pauseOnAsyncCall"), - &DomainDispatcherImpl::pauseOnAsyncCall - }, - { - v8_crdtp::SpanFrom("removeBreakpoint"), - &DomainDispatcherImpl::removeBreakpoint - }, - { - v8_crdtp::SpanFrom("restartFrame"), - &DomainDispatcherImpl::restartFrame - }, - { - v8_crdtp::SpanFrom("resume"), - &DomainDispatcherImpl::resume - }, - { - v8_crdtp::SpanFrom("searchInContent"), - &DomainDispatcherImpl::searchInContent - }, - { - v8_crdtp::SpanFrom("setAsyncCallStackDepth"), - &DomainDispatcherImpl::setAsyncCallStackDepth - }, - { - v8_crdtp::SpanFrom("setBlackboxPatterns"), - &DomainDispatcherImpl::setBlackboxPatterns - }, - { - v8_crdtp::SpanFrom("setBlackboxedRanges"), - &DomainDispatcherImpl::setBlackboxedRanges - }, - { - v8_crdtp::SpanFrom("setBreakpoint"), - &DomainDispatcherImpl::setBreakpoint - }, - { - v8_crdtp::SpanFrom("setBreakpointByUrl"), - &DomainDispatcherImpl::setBreakpointByUrl - }, - { - v8_crdtp::SpanFrom("setBreakpointOnFunctionCall"), - &DomainDispatcherImpl::setBreakpointOnFunctionCall - }, - { - v8_crdtp::SpanFrom("setBreakpointsActive"), - &DomainDispatcherImpl::setBreakpointsActive - }, - { - v8_crdtp::SpanFrom("setInstrumentationBreakpoint"), - &DomainDispatcherImpl::setInstrumentationBreakpoint - }, - { - v8_crdtp::SpanFrom("setPauseOnExceptions"), - &DomainDispatcherImpl::setPauseOnExceptions - }, - { - v8_crdtp::SpanFrom("setReturnValue"), - &DomainDispatcherImpl::setReturnValue - }, - { - v8_crdtp::SpanFrom("setScriptSource"), - &DomainDispatcherImpl::setScriptSource - }, - { - v8_crdtp::SpanFrom("setSkipAllPauses"), - &DomainDispatcherImpl::setSkipAllPauses - }, - { - v8_crdtp::SpanFrom("setVariableValue"), - &DomainDispatcherImpl::setVariableValue - }, - { - v8_crdtp::SpanFrom("stepInto"), - &DomainDispatcherImpl::stepInto - }, - { - v8_crdtp::SpanFrom("stepOut"), - &DomainDispatcherImpl::stepOut - }, - { - v8_crdtp::SpanFrom("stepOver"), - &DomainDispatcherImpl::stepOver - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -namespace { - -struct continueToLocationParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr location; - Maybe targetCallFrames; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(continueToLocationParams) - V8_CRDTP_DESERIALIZE_FIELD("location", location), - V8_CRDTP_DESERIALIZE_FIELD_OPT("targetCallFrames", targetCallFrames), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::continueToLocation(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - continueToLocationParams params; - continueToLocationParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->continueToLocation(std::move(params.location), std::move(params.targetCallFrames)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.continueToLocation"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::disable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->disable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.disable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct enableParams : public v8_crdtp::DeserializableProtocolObject { - Maybe maxScriptsCacheSize; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(enableParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("maxScriptsCacheSize", maxScriptsCacheSize), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::enable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - enableParams params; - enableParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_debuggerId; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->enable(std::move(params.maxScriptsCacheSize), &out_debuggerId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.enable"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("debuggerId"), out_debuggerId); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct evaluateOnCallFrameParams : public v8_crdtp::DeserializableProtocolObject { - String callFrameId; - String expression; - Maybe objectGroup; - Maybe includeCommandLineAPI; - Maybe silent; - Maybe returnByValue; - Maybe generatePreview; - Maybe throwOnSideEffect; - Maybe timeout; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(evaluateOnCallFrameParams) - V8_CRDTP_DESERIALIZE_FIELD("callFrameId", callFrameId), - V8_CRDTP_DESERIALIZE_FIELD("expression", expression), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("includeCommandLineAPI", includeCommandLineAPI), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnByValue", returnByValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("silent", silent), - V8_CRDTP_DESERIALIZE_FIELD_OPT("throwOnSideEffect", throwOnSideEffect), - V8_CRDTP_DESERIALIZE_FIELD_OPT("timeout", timeout), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::evaluateOnCallFrame(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - evaluateOnCallFrameParams params; - evaluateOnCallFrameParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr out_result; - Maybe out_exceptionDetails; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->evaluateOnCallFrame(params.callFrameId, params.expression, std::move(params.objectGroup), std::move(params.includeCommandLineAPI), std::move(params.silent), std::move(params.returnByValue), std::move(params.generatePreview), std::move(params.throwOnSideEffect), std::move(params.timeout), &out_result, &out_exceptionDetails); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.evaluateOnCallFrame"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), out_exceptionDetails); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getPossibleBreakpointsParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr start; - Maybe end; - Maybe restrictToFunction; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getPossibleBreakpointsParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("end", end), - V8_CRDTP_DESERIALIZE_FIELD_OPT("restrictToFunction", restrictToFunction), - V8_CRDTP_DESERIALIZE_FIELD("start", start), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getPossibleBreakpoints(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getPossibleBreakpointsParams params; - getPossibleBreakpointsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr> out_locations; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getPossibleBreakpoints(std::move(params.start), std::move(params.end), std::move(params.restrictToFunction), &out_locations); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.getPossibleBreakpoints"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("locations"), out_locations); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getScriptSourceParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getScriptSourceParams) - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getScriptSource(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getScriptSourceParams params; - getScriptSourceParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_scriptSource; - Maybe out_bytecode; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getScriptSource(params.scriptId, &out_scriptSource, &out_bytecode); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.getScriptSource"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("scriptSource"), out_scriptSource); - serializer.AddField(v8_crdtp::MakeSpan("bytecode"), out_bytecode); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getWasmBytecodeParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getWasmBytecodeParams) - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getWasmBytecode(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getWasmBytecodeParams params; - getWasmBytecodeParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - Binary out_bytecode; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getWasmBytecode(params.scriptId, &out_bytecode); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.getWasmBytecode"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("bytecode"), out_bytecode); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getStackTraceParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr stackTraceId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getStackTraceParams) - V8_CRDTP_DESERIALIZE_FIELD("stackTraceId", stackTraceId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getStackTrace(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getStackTraceParams params; - getStackTraceParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr out_stackTrace; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getStackTrace(std::move(params.stackTraceId), &out_stackTrace); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.getStackTrace"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("stackTrace"), out_stackTrace); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::pause(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->pause(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.pause"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct pauseOnAsyncCallParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr parentStackTraceId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(pauseOnAsyncCallParams) - V8_CRDTP_DESERIALIZE_FIELD("parentStackTraceId", parentStackTraceId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::pauseOnAsyncCall(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - pauseOnAsyncCallParams params; - pauseOnAsyncCallParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->pauseOnAsyncCall(std::move(params.parentStackTraceId)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.pauseOnAsyncCall"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct removeBreakpointParams : public v8_crdtp::DeserializableProtocolObject { - String breakpointId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(removeBreakpointParams) - V8_CRDTP_DESERIALIZE_FIELD("breakpointId", breakpointId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::removeBreakpoint(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - removeBreakpointParams params; - removeBreakpointParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->removeBreakpoint(params.breakpointId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.removeBreakpoint"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct restartFrameParams : public v8_crdtp::DeserializableProtocolObject { - String callFrameId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(restartFrameParams) - V8_CRDTP_DESERIALIZE_FIELD("callFrameId", callFrameId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::restartFrame(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - restartFrameParams params; - restartFrameParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr> out_callFrames; - Maybe out_asyncStackTrace; - Maybe out_asyncStackTraceId; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->restartFrame(params.callFrameId, &out_callFrames, &out_asyncStackTrace, &out_asyncStackTraceId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.restartFrame"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("callFrames"), out_callFrames); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTrace"), out_asyncStackTrace); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTraceId"), out_asyncStackTraceId); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct resumeParams : public v8_crdtp::DeserializableProtocolObject { - Maybe terminateOnResume; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(resumeParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("terminateOnResume", terminateOnResume), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::resume(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - resumeParams params; - resumeParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->resume(std::move(params.terminateOnResume)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.resume"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct searchInContentParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - String query; - Maybe caseSensitive; - Maybe isRegex; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(searchInContentParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("caseSensitive", caseSensitive), - V8_CRDTP_DESERIALIZE_FIELD_OPT("isRegex", isRegex), - V8_CRDTP_DESERIALIZE_FIELD("query", query), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::searchInContent(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - searchInContentParams params; - searchInContentParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr> out_result; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->searchInContent(params.scriptId, params.query, std::move(params.caseSensitive), std::move(params.isRegex), &out_result); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.searchInContent"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setAsyncCallStackDepthParams : public v8_crdtp::DeserializableProtocolObject { - int maxDepth; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setAsyncCallStackDepthParams) - V8_CRDTP_DESERIALIZE_FIELD("maxDepth", maxDepth), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setAsyncCallStackDepth(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setAsyncCallStackDepthParams params; - setAsyncCallStackDepthParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setAsyncCallStackDepth(params.maxDepth); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setAsyncCallStackDepth"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setBlackboxPatternsParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr> patterns; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBlackboxPatternsParams) - V8_CRDTP_DESERIALIZE_FIELD("patterns", patterns), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBlackboxPatterns(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBlackboxPatternsParams params; - setBlackboxPatternsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBlackboxPatterns(std::move(params.patterns)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBlackboxPatterns"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setBlackboxedRangesParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - std::unique_ptr> positions; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBlackboxedRangesParams) - V8_CRDTP_DESERIALIZE_FIELD("positions", positions), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBlackboxedRanges(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBlackboxedRangesParams params; - setBlackboxedRangesParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBlackboxedRanges(params.scriptId, std::move(params.positions)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBlackboxedRanges"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setBreakpointParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr location; - Maybe condition; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBreakpointParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("condition", condition), - V8_CRDTP_DESERIALIZE_FIELD("location", location), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBreakpoint(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBreakpointParams params; - setBreakpointParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_breakpointId; - std::unique_ptr out_actualLocation; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBreakpoint(std::move(params.location), std::move(params.condition), &out_breakpointId, &out_actualLocation); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBreakpoint"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("breakpointId"), out_breakpointId); - serializer.AddField(v8_crdtp::MakeSpan("actualLocation"), out_actualLocation); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setInstrumentationBreakpointParams : public v8_crdtp::DeserializableProtocolObject { - String instrumentation; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setInstrumentationBreakpointParams) - V8_CRDTP_DESERIALIZE_FIELD("instrumentation", instrumentation), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setInstrumentationBreakpoint(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setInstrumentationBreakpointParams params; - setInstrumentationBreakpointParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_breakpointId; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setInstrumentationBreakpoint(params.instrumentation, &out_breakpointId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setInstrumentationBreakpoint"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("breakpointId"), out_breakpointId); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setBreakpointByUrlParams : public v8_crdtp::DeserializableProtocolObject { - int lineNumber; - Maybe url; - Maybe urlRegex; - Maybe scriptHash; - Maybe columnNumber; - Maybe condition; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBreakpointByUrlParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("columnNumber", columnNumber), - V8_CRDTP_DESERIALIZE_FIELD_OPT("condition", condition), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", lineNumber), - V8_CRDTP_DESERIALIZE_FIELD_OPT("scriptHash", scriptHash), - V8_CRDTP_DESERIALIZE_FIELD_OPT("url", url), - V8_CRDTP_DESERIALIZE_FIELD_OPT("urlRegex", urlRegex), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBreakpointByUrl(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBreakpointByUrlParams params; - setBreakpointByUrlParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_breakpointId; - std::unique_ptr> out_locations; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBreakpointByUrl(params.lineNumber, std::move(params.url), std::move(params.urlRegex), std::move(params.scriptHash), std::move(params.columnNumber), std::move(params.condition), &out_breakpointId, &out_locations); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBreakpointByUrl"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("breakpointId"), out_breakpointId); - serializer.AddField(v8_crdtp::MakeSpan("locations"), out_locations); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setBreakpointOnFunctionCallParams : public v8_crdtp::DeserializableProtocolObject { - String objectId; - Maybe condition; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBreakpointOnFunctionCallParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("condition", condition), - V8_CRDTP_DESERIALIZE_FIELD("objectId", objectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBreakpointOnFunctionCall(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBreakpointOnFunctionCallParams params; - setBreakpointOnFunctionCallParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_breakpointId; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBreakpointOnFunctionCall(params.objectId, std::move(params.condition), &out_breakpointId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBreakpointOnFunctionCall"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("breakpointId"), out_breakpointId); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setBreakpointsActiveParams : public v8_crdtp::DeserializableProtocolObject { - bool active; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setBreakpointsActiveParams) - V8_CRDTP_DESERIALIZE_FIELD("active", active), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setBreakpointsActive(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setBreakpointsActiveParams params; - setBreakpointsActiveParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setBreakpointsActive(params.active); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setBreakpointsActive"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setPauseOnExceptionsParams : public v8_crdtp::DeserializableProtocolObject { - String state; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setPauseOnExceptionsParams) - V8_CRDTP_DESERIALIZE_FIELD("state", state), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setPauseOnExceptions(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setPauseOnExceptionsParams params; - setPauseOnExceptionsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setPauseOnExceptions(params.state); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setPauseOnExceptions"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setReturnValueParams : public v8_crdtp::DeserializableProtocolObject { - std::unique_ptr newValue; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setReturnValueParams) - V8_CRDTP_DESERIALIZE_FIELD("newValue", newValue), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setReturnValue(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setReturnValueParams params; - setReturnValueParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setReturnValue(std::move(params.newValue)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setReturnValue"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setScriptSourceParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - String scriptSource; - Maybe dryRun; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setScriptSourceParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("dryRun", dryRun), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), - V8_CRDTP_DESERIALIZE_FIELD("scriptSource", scriptSource), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setScriptSource(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setScriptSourceParams params; - setScriptSourceParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - Maybe> out_callFrames; - Maybe out_stackChanged; - Maybe out_asyncStackTrace; - Maybe out_asyncStackTraceId; - Maybe out_exceptionDetails; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setScriptSource(params.scriptId, params.scriptSource, std::move(params.dryRun), &out_callFrames, &out_stackChanged, &out_asyncStackTrace, &out_asyncStackTraceId, &out_exceptionDetails); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setScriptSource"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("callFrames"), out_callFrames); - serializer.AddField(v8_crdtp::MakeSpan("stackChanged"), out_stackChanged); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTrace"), out_asyncStackTrace); - serializer.AddField(v8_crdtp::MakeSpan("asyncStackTraceId"), out_asyncStackTraceId); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), out_exceptionDetails); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setSkipAllPausesParams : public v8_crdtp::DeserializableProtocolObject { - bool skip; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setSkipAllPausesParams) - V8_CRDTP_DESERIALIZE_FIELD("skip", skip), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setSkipAllPauses(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setSkipAllPausesParams params; - setSkipAllPausesParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setSkipAllPauses(params.skip); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setSkipAllPauses"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setVariableValueParams : public v8_crdtp::DeserializableProtocolObject { - int scopeNumber; - String variableName; - std::unique_ptr newValue; - String callFrameId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setVariableValueParams) - V8_CRDTP_DESERIALIZE_FIELD("callFrameId", callFrameId), - V8_CRDTP_DESERIALIZE_FIELD("newValue", newValue), - V8_CRDTP_DESERIALIZE_FIELD("scopeNumber", scopeNumber), - V8_CRDTP_DESERIALIZE_FIELD("variableName", variableName), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setVariableValue(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setVariableValueParams params; - setVariableValueParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setVariableValue(params.scopeNumber, params.variableName, std::move(params.newValue), params.callFrameId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.setVariableValue"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct stepIntoParams : public v8_crdtp::DeserializableProtocolObject { - Maybe breakOnAsyncCall; - Maybe> skipList; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(stepIntoParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("breakOnAsyncCall", breakOnAsyncCall), - V8_CRDTP_DESERIALIZE_FIELD_OPT("skipList", skipList), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::stepInto(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - stepIntoParams params; - stepIntoParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stepInto(std::move(params.breakOnAsyncCall), std::move(params.skipList)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.stepInto"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::stepOut(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stepOut(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.stepOut"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct stepOverParams : public v8_crdtp::DeserializableProtocolObject { - Maybe> skipList; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(stepOverParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("skipList", skipList), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::stepOver(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - stepOverParams params; - stepOverParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stepOver(std::move(params.skipList)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Debugger.stepOver"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("Debugger"), SortedRedirects(), std::move(dispatcher)); -} - -} // Debugger -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp deleted file mode 100644 index a6a725b6d..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/HeapProfiler.cpp +++ /dev/null @@ -1,666 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/HeapProfiler.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace HeapProfiler { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "HeapProfiler"; -const char Metainfo::commandPrefix[] = "HeapProfiler."; -const char Metainfo::version[] = "1.3"; - - -V8_CRDTP_BEGIN_DESERIALIZER(SamplingHeapProfileNode) - V8_CRDTP_DESERIALIZE_FIELD("callFrame", m_callFrame), - V8_CRDTP_DESERIALIZE_FIELD("children", m_children), - V8_CRDTP_DESERIALIZE_FIELD("id", m_id), - V8_CRDTP_DESERIALIZE_FIELD("selfSize", m_selfSize), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(SamplingHeapProfileNode) - V8_CRDTP_SERIALIZE_FIELD("callFrame", m_callFrame); - V8_CRDTP_SERIALIZE_FIELD("selfSize", m_selfSize); - V8_CRDTP_SERIALIZE_FIELD("id", m_id); - V8_CRDTP_SERIALIZE_FIELD("children", m_children); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(SamplingHeapProfileSample) - V8_CRDTP_DESERIALIZE_FIELD("nodeId", m_nodeId), - V8_CRDTP_DESERIALIZE_FIELD("ordinal", m_ordinal), - V8_CRDTP_DESERIALIZE_FIELD("size", m_size), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(SamplingHeapProfileSample) - V8_CRDTP_SERIALIZE_FIELD("size", m_size); - V8_CRDTP_SERIALIZE_FIELD("nodeId", m_nodeId); - V8_CRDTP_SERIALIZE_FIELD("ordinal", m_ordinal); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(SamplingHeapProfile) - V8_CRDTP_DESERIALIZE_FIELD("head", m_head), - V8_CRDTP_DESERIALIZE_FIELD("samples", m_samples), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(SamplingHeapProfile) - V8_CRDTP_SERIALIZE_FIELD("head", m_head); - V8_CRDTP_SERIALIZE_FIELD("samples", m_samples); -V8_CRDTP_END_SERIALIZER(); - - -// ------------- Enum values from params. - - -// ------------- Frontend notifications. - -void Frontend::addHeapSnapshotChunk(const String& chunk) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("chunk"), chunk); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("HeapProfiler.addHeapSnapshotChunk", serializer.Finish())); -} - -void Frontend::heapStatsUpdate(std::unique_ptr> statsUpdate) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("statsUpdate"), statsUpdate); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("HeapProfiler.heapStatsUpdate", serializer.Finish())); -} - -void Frontend::lastSeenObjectId(int lastSeenObjectId, double timestamp) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("lastSeenObjectId"), lastSeenObjectId); - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), timestamp); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("HeapProfiler.lastSeenObjectId", serializer.Finish())); -} - -void Frontend::reportHeapSnapshotProgress(int done, int total, Maybe finished) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("done"), done); - serializer.AddField(v8_crdtp::MakeSpan("total"), total); - serializer.AddField(v8_crdtp::MakeSpan("finished"), finished); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("HeapProfiler.reportHeapSnapshotProgress", serializer.Finish())); -} - -void Frontend::resetProfiles() -{ - if (!frontend_channel_) - return; - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("HeapProfiler.resetProfiles")); -} - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void addInspectedHeapObject(const v8_crdtp::Dispatchable& dispatchable); - void collectGarbage(const v8_crdtp::Dispatchable& dispatchable); - void disable(const v8_crdtp::Dispatchable& dispatchable); - void enable(const v8_crdtp::Dispatchable& dispatchable); - void getHeapObjectId(const v8_crdtp::Dispatchable& dispatchable); - void getObjectByHeapObjectId(const v8_crdtp::Dispatchable& dispatchable); - void getSamplingProfile(const v8_crdtp::Dispatchable& dispatchable); - void startSampling(const v8_crdtp::Dispatchable& dispatchable); - void startTrackingHeapObjects(const v8_crdtp::Dispatchable& dispatchable); - void stopSampling(const v8_crdtp::Dispatchable& dispatchable); - void stopTrackingHeapObjects(const v8_crdtp::Dispatchable& dispatchable); - void takeHeapSnapshot(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("addInspectedHeapObject"), - &DomainDispatcherImpl::addInspectedHeapObject - }, - { - v8_crdtp::SpanFrom("collectGarbage"), - &DomainDispatcherImpl::collectGarbage - }, - { - v8_crdtp::SpanFrom("disable"), - &DomainDispatcherImpl::disable - }, - { - v8_crdtp::SpanFrom("enable"), - &DomainDispatcherImpl::enable - }, - { - v8_crdtp::SpanFrom("getHeapObjectId"), - &DomainDispatcherImpl::getHeapObjectId - }, - { - v8_crdtp::SpanFrom("getObjectByHeapObjectId"), - &DomainDispatcherImpl::getObjectByHeapObjectId - }, - { - v8_crdtp::SpanFrom("getSamplingProfile"), - &DomainDispatcherImpl::getSamplingProfile - }, - { - v8_crdtp::SpanFrom("startSampling"), - &DomainDispatcherImpl::startSampling - }, - { - v8_crdtp::SpanFrom("startTrackingHeapObjects"), - &DomainDispatcherImpl::startTrackingHeapObjects - }, - { - v8_crdtp::SpanFrom("stopSampling"), - &DomainDispatcherImpl::stopSampling - }, - { - v8_crdtp::SpanFrom("stopTrackingHeapObjects"), - &DomainDispatcherImpl::stopTrackingHeapObjects - }, - { - v8_crdtp::SpanFrom("takeHeapSnapshot"), - &DomainDispatcherImpl::takeHeapSnapshot - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -namespace { - -struct addInspectedHeapObjectParams : public v8_crdtp::DeserializableProtocolObject { - String heapObjectId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(addInspectedHeapObjectParams) - V8_CRDTP_DESERIALIZE_FIELD("heapObjectId", heapObjectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::addInspectedHeapObject(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - addInspectedHeapObjectParams params; - addInspectedHeapObjectParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->addInspectedHeapObject(params.heapObjectId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.addInspectedHeapObject"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -class CollectGarbageCallbackImpl : public Backend::CollectGarbageCallback, public DomainDispatcher::Callback { -public: - CollectGarbageCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("HeapProfiler.collectGarbage"), message) { } - - void sendSuccess() override - { - v8_crdtp::ObjectSerializer serializer; - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - - -} // namespace - -void DomainDispatcherImpl::collectGarbage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - m_backend->collectGarbage(std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::disable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->disable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.disable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::enable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->enable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.enable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct getHeapObjectIdParams : public v8_crdtp::DeserializableProtocolObject { - String objectId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getHeapObjectIdParams) - V8_CRDTP_DESERIALIZE_FIELD("objectId", objectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getHeapObjectId(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getHeapObjectIdParams params; - getHeapObjectIdParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - String out_heapSnapshotObjectId; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getHeapObjectId(params.objectId, &out_heapSnapshotObjectId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.getHeapObjectId"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("heapSnapshotObjectId"), out_heapSnapshotObjectId); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getObjectByHeapObjectIdParams : public v8_crdtp::DeserializableProtocolObject { - String objectId; - Maybe objectGroup; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getObjectByHeapObjectIdParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD("objectId", objectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getObjectByHeapObjectId(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getObjectByHeapObjectIdParams params; - getObjectByHeapObjectIdParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr out_result; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getObjectByHeapObjectId(params.objectId, std::move(params.objectGroup), &out_result); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.getObjectByHeapObjectId"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::getSamplingProfile(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr out_profile; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getSamplingProfile(&out_profile); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.getSamplingProfile"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("profile"), out_profile); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct startSamplingParams : public v8_crdtp::DeserializableProtocolObject { - Maybe samplingInterval; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(startSamplingParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("samplingInterval", samplingInterval), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::startSampling(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - startSamplingParams params; - startSamplingParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->startSampling(std::move(params.samplingInterval)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.startSampling"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct startTrackingHeapObjectsParams : public v8_crdtp::DeserializableProtocolObject { - Maybe trackAllocations; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(startTrackingHeapObjectsParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("trackAllocations", trackAllocations), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::startTrackingHeapObjects(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - startTrackingHeapObjectsParams params; - startTrackingHeapObjectsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->startTrackingHeapObjects(std::move(params.trackAllocations)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.startTrackingHeapObjects"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::stopSampling(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr out_profile; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stopSampling(&out_profile); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.stopSampling"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("profile"), out_profile); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct stopTrackingHeapObjectsParams : public v8_crdtp::DeserializableProtocolObject { - Maybe reportProgress; - Maybe treatGlobalObjectsAsRoots; - Maybe captureNumericValue; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(stopTrackingHeapObjectsParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("captureNumericValue", captureNumericValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("reportProgress", reportProgress), - V8_CRDTP_DESERIALIZE_FIELD_OPT("treatGlobalObjectsAsRoots", treatGlobalObjectsAsRoots), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::stopTrackingHeapObjects(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - stopTrackingHeapObjectsParams params; - stopTrackingHeapObjectsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stopTrackingHeapObjects(std::move(params.reportProgress), std::move(params.treatGlobalObjectsAsRoots), std::move(params.captureNumericValue)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.stopTrackingHeapObjects"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct takeHeapSnapshotParams : public v8_crdtp::DeserializableProtocolObject { - Maybe reportProgress; - Maybe treatGlobalObjectsAsRoots; - Maybe captureNumericValue; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(takeHeapSnapshotParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("captureNumericValue", captureNumericValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("reportProgress", reportProgress), - V8_CRDTP_DESERIALIZE_FIELD_OPT("treatGlobalObjectsAsRoots", treatGlobalObjectsAsRoots), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::takeHeapSnapshot(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - takeHeapSnapshotParams params; - takeHeapSnapshotParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->takeHeapSnapshot(std::move(params.reportProgress), std::move(params.treatGlobalObjectsAsRoots), std::move(params.captureNumericValue)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("HeapProfiler.takeHeapSnapshot"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("HeapProfiler"), SortedRedirects(), std::move(dispatcher)); -} - -} // HeapProfiler -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp deleted file mode 100644 index 1be0233c2..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Profiler.cpp +++ /dev/null @@ -1,659 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Profiler.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace Profiler { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "Profiler"; -const char Metainfo::commandPrefix[] = "Profiler."; -const char Metainfo::version[] = "1.3"; - -V8_CRDTP_BEGIN_DESERIALIZER(ProfileNode) - V8_CRDTP_DESERIALIZE_FIELD("callFrame", m_callFrame), - V8_CRDTP_DESERIALIZE_FIELD_OPT("children", m_children), - V8_CRDTP_DESERIALIZE_FIELD_OPT("deoptReason", m_deoptReason), - V8_CRDTP_DESERIALIZE_FIELD_OPT("hitCount", m_hitCount), - V8_CRDTP_DESERIALIZE_FIELD("id", m_id), - V8_CRDTP_DESERIALIZE_FIELD_OPT("positionTicks", m_positionTicks), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ProfileNode) - V8_CRDTP_SERIALIZE_FIELD("id", m_id); - V8_CRDTP_SERIALIZE_FIELD("callFrame", m_callFrame); - V8_CRDTP_SERIALIZE_FIELD("hitCount", m_hitCount); - V8_CRDTP_SERIALIZE_FIELD("children", m_children); - V8_CRDTP_SERIALIZE_FIELD("deoptReason", m_deoptReason); - V8_CRDTP_SERIALIZE_FIELD("positionTicks", m_positionTicks); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(Profile) - V8_CRDTP_DESERIALIZE_FIELD("endTime", m_endTime), - V8_CRDTP_DESERIALIZE_FIELD("nodes", m_nodes), - V8_CRDTP_DESERIALIZE_FIELD_OPT("samples", m_samples), - V8_CRDTP_DESERIALIZE_FIELD("startTime", m_startTime), - V8_CRDTP_DESERIALIZE_FIELD_OPT("timeDeltas", m_timeDeltas), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(Profile) - V8_CRDTP_SERIALIZE_FIELD("nodes", m_nodes); - V8_CRDTP_SERIALIZE_FIELD("startTime", m_startTime); - V8_CRDTP_SERIALIZE_FIELD("endTime", m_endTime); - V8_CRDTP_SERIALIZE_FIELD("samples", m_samples); - V8_CRDTP_SERIALIZE_FIELD("timeDeltas", m_timeDeltas); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(PositionTickInfo) - V8_CRDTP_DESERIALIZE_FIELD("line", m_line), - V8_CRDTP_DESERIALIZE_FIELD("ticks", m_ticks), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(PositionTickInfo) - V8_CRDTP_SERIALIZE_FIELD("line", m_line); - V8_CRDTP_SERIALIZE_FIELD("ticks", m_ticks); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(CoverageRange) - V8_CRDTP_DESERIALIZE_FIELD("count", m_count), - V8_CRDTP_DESERIALIZE_FIELD("endOffset", m_endOffset), - V8_CRDTP_DESERIALIZE_FIELD("startOffset", m_startOffset), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(CoverageRange) - V8_CRDTP_SERIALIZE_FIELD("startOffset", m_startOffset); - V8_CRDTP_SERIALIZE_FIELD("endOffset", m_endOffset); - V8_CRDTP_SERIALIZE_FIELD("count", m_count); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(FunctionCoverage) - V8_CRDTP_DESERIALIZE_FIELD("functionName", m_functionName), - V8_CRDTP_DESERIALIZE_FIELD("isBlockCoverage", m_isBlockCoverage), - V8_CRDTP_DESERIALIZE_FIELD("ranges", m_ranges), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(FunctionCoverage) - V8_CRDTP_SERIALIZE_FIELD("functionName", m_functionName); - V8_CRDTP_SERIALIZE_FIELD("ranges", m_ranges); - V8_CRDTP_SERIALIZE_FIELD("isBlockCoverage", m_isBlockCoverage); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(ScriptCoverage) - V8_CRDTP_DESERIALIZE_FIELD("functions", m_functions), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ScriptCoverage) - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("functions", m_functions); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(TypeObject) - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(TypeObject) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(TypeProfileEntry) - V8_CRDTP_DESERIALIZE_FIELD("offset", m_offset), - V8_CRDTP_DESERIALIZE_FIELD("types", m_types), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(TypeProfileEntry) - V8_CRDTP_SERIALIZE_FIELD("offset", m_offset); - V8_CRDTP_SERIALIZE_FIELD("types", m_types); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(ScriptTypeProfile) - V8_CRDTP_DESERIALIZE_FIELD("entries", m_entries), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ScriptTypeProfile) - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("entries", m_entries); -V8_CRDTP_END_SERIALIZER(); - - -// ------------- Enum values from params. - - -// ------------- Frontend notifications. - -void Frontend::consoleProfileFinished(const String& id, std::unique_ptr location, std::unique_ptr profile, Maybe title) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("id"), id); - serializer.AddField(v8_crdtp::MakeSpan("location"), location); - serializer.AddField(v8_crdtp::MakeSpan("profile"), profile); - serializer.AddField(v8_crdtp::MakeSpan("title"), title); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Profiler.consoleProfileFinished", serializer.Finish())); -} - -void Frontend::consoleProfileStarted(const String& id, std::unique_ptr location, Maybe title) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("id"), id); - serializer.AddField(v8_crdtp::MakeSpan("location"), location); - serializer.AddField(v8_crdtp::MakeSpan("title"), title); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Profiler.consoleProfileStarted", serializer.Finish())); -} - -void Frontend::preciseCoverageDeltaUpdate(double timestamp, const String& occasion, std::unique_ptr> result) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), timestamp); - serializer.AddField(v8_crdtp::MakeSpan("occasion"), occasion); - serializer.AddField(v8_crdtp::MakeSpan("result"), result); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Profiler.preciseCoverageDeltaUpdate", serializer.Finish())); -} - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void disable(const v8_crdtp::Dispatchable& dispatchable); - void enable(const v8_crdtp::Dispatchable& dispatchable); - void getBestEffortCoverage(const v8_crdtp::Dispatchable& dispatchable); - void setSamplingInterval(const v8_crdtp::Dispatchable& dispatchable); - void start(const v8_crdtp::Dispatchable& dispatchable); - void startPreciseCoverage(const v8_crdtp::Dispatchable& dispatchable); - void startTypeProfile(const v8_crdtp::Dispatchable& dispatchable); - void stop(const v8_crdtp::Dispatchable& dispatchable); - void stopPreciseCoverage(const v8_crdtp::Dispatchable& dispatchable); - void stopTypeProfile(const v8_crdtp::Dispatchable& dispatchable); - void takePreciseCoverage(const v8_crdtp::Dispatchable& dispatchable); - void takeTypeProfile(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("disable"), - &DomainDispatcherImpl::disable - }, - { - v8_crdtp::SpanFrom("enable"), - &DomainDispatcherImpl::enable - }, - { - v8_crdtp::SpanFrom("getBestEffortCoverage"), - &DomainDispatcherImpl::getBestEffortCoverage - }, - { - v8_crdtp::SpanFrom("setSamplingInterval"), - &DomainDispatcherImpl::setSamplingInterval - }, - { - v8_crdtp::SpanFrom("start"), - &DomainDispatcherImpl::start - }, - { - v8_crdtp::SpanFrom("startPreciseCoverage"), - &DomainDispatcherImpl::startPreciseCoverage - }, - { - v8_crdtp::SpanFrom("startTypeProfile"), - &DomainDispatcherImpl::startTypeProfile - }, - { - v8_crdtp::SpanFrom("stop"), - &DomainDispatcherImpl::stop - }, - { - v8_crdtp::SpanFrom("stopPreciseCoverage"), - &DomainDispatcherImpl::stopPreciseCoverage - }, - { - v8_crdtp::SpanFrom("stopTypeProfile"), - &DomainDispatcherImpl::stopTypeProfile - }, - { - v8_crdtp::SpanFrom("takePreciseCoverage"), - &DomainDispatcherImpl::takePreciseCoverage - }, - { - v8_crdtp::SpanFrom("takeTypeProfile"), - &DomainDispatcherImpl::takeTypeProfile - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -namespace { - - -} // namespace - -void DomainDispatcherImpl::disable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->disable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.disable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::enable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->enable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.enable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::getBestEffortCoverage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr> out_result; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getBestEffortCoverage(&out_result); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.getBestEffortCoverage"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct setSamplingIntervalParams : public v8_crdtp::DeserializableProtocolObject { - int interval; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setSamplingIntervalParams) - V8_CRDTP_DESERIALIZE_FIELD("interval", interval), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setSamplingInterval(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setSamplingIntervalParams params; - setSamplingIntervalParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setSamplingInterval(params.interval); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.setSamplingInterval"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::start(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->start(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.start"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct startPreciseCoverageParams : public v8_crdtp::DeserializableProtocolObject { - Maybe callCount; - Maybe detailed; - Maybe allowTriggeredUpdates; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(startPreciseCoverageParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("allowTriggeredUpdates", allowTriggeredUpdates), - V8_CRDTP_DESERIALIZE_FIELD_OPT("callCount", callCount), - V8_CRDTP_DESERIALIZE_FIELD_OPT("detailed", detailed), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::startPreciseCoverage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - startPreciseCoverageParams params; - startPreciseCoverageParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - double out_timestamp; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->startPreciseCoverage(std::move(params.callCount), std::move(params.detailed), std::move(params.allowTriggeredUpdates), &out_timestamp); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.startPreciseCoverage"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), out_timestamp); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::startTypeProfile(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->startTypeProfile(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.startTypeProfile"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::stop(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr out_profile; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stop(&out_profile); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.stop"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("profile"), out_profile); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::stopPreciseCoverage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stopPreciseCoverage(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.stopPreciseCoverage"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::stopTypeProfile(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->stopTypeProfile(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.stopTypeProfile"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::takePreciseCoverage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr> out_result; - double out_timestamp; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->takePreciseCoverage(&out_result, &out_timestamp); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.takePreciseCoverage"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), out_timestamp); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::takeTypeProfile(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr> out_result; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->takeTypeProfile(&out_result); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Profiler.takeTypeProfile"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("Profiler"), SortedRedirects(), std::move(dispatcher)); -} - -} // Profiler -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp deleted file mode 100644 index c8d18b096..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Protocol.cpp +++ /dev/null @@ -1,727 +0,0 @@ -// This file is generated by Protocol_cpp.template. - -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Protocol.h" - -#include -#include -#include -#include - - -// This file is generated by Values_cpp.template. - -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -//#include "Values.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" - -namespace v8_inspector { -namespace protocol { - -namespace { -using v8_crdtp::Status; -using v8_crdtp::ParserHandler; -using v8_crdtp::span; -namespace cbor { -using v8_crdtp::cbor::ParseCBOR; -using v8_crdtp::cbor::EncodeBinary; -using v8_crdtp::cbor::EncodeDouble; -using v8_crdtp::cbor::EncodeFalse; -using v8_crdtp::cbor::EncodeFromLatin1; -using v8_crdtp::cbor::EncodeFromUTF16; -using v8_crdtp::cbor::EncodeIndefiniteLengthArrayStart; -using v8_crdtp::cbor::EncodeIndefiniteLengthMapStart; -using v8_crdtp::cbor::EncodeInt32; -using v8_crdtp::cbor::EncodeNull; -using v8_crdtp::cbor::EncodeStop; -using v8_crdtp::cbor::EncodeString8; -using v8_crdtp::cbor::EncodeTrue; -using v8_crdtp::cbor::EnvelopeEncoder; -using v8_crdtp::cbor::InitialByteForEnvelope; -} // namespace cbor - -// Uses the parsing events received from driver of |ParserHandler| -// (e.g. cbor::ParseCBOR) into a protocol::Value instance. -class ValueParserHandler : public ParserHandler { - public: - // Provides the parsed protocol::Value. - std::unique_ptr ReleaseRoot() { return std::move(root_); } - - // The first parsing error encountered; |status().ok()| is the default. - Status status() const { return status_; } - - private: - // - // Implementation of ParserHandler. - // - void HandleMapBegin() override { - if (!status_.ok()) return; - std::unique_ptr dict = DictionaryValue::create(); - DictionaryValue* dict_ptr = dict.get(); - AddValueToParent(std::move(dict)); - stack_.emplace_back(dict_ptr); - } - - void HandleMapEnd() override { - if (!status_.ok()) return; - DCHECK(!stack_.empty()); - DCHECK(stack_.back().is_dict); - stack_.pop_back(); - } - - void HandleArrayBegin() override { - if (!status_.ok()) return; - std::unique_ptr list = ListValue::create(); - ListValue* list_ptr = list.get(); - AddValueToParent(std::move(list)); - stack_.emplace_back(list_ptr); - } - - void HandleArrayEnd() override { - if (!status_.ok()) return; - DCHECK(!stack_.empty()); - DCHECK(!stack_.back().is_dict); - stack_.pop_back(); - } - - void HandleString8(span chars) override { - AddStringToParent(StringUtil::fromUTF8(chars.data(), chars.size())); - } - - void HandleString16(span chars) override { - AddStringToParent( - StringUtil::fromUTF16LE(chars.data(), chars.size())); - } - - void HandleBinary(span bytes) override { - AddValueToParent( - BinaryValue::create(Binary::fromSpan(bytes.data(), bytes.size()))); - } - - void HandleDouble(double value) override { - AddValueToParent(FundamentalValue::create(value)); - } - - void HandleInt32(int32_t value) override { - AddValueToParent(FundamentalValue::create(value)); - } - - void HandleBool(bool value) override { - AddValueToParent(FundamentalValue::create(value)); - } - - void HandleNull() override { - AddValueToParent(Value::null()); - } - - void HandleError(Status error) override { - status_ = error; - } - - // - // Adding strings and values to the parent value. - // Strings are handled separately because they can be keys for - // dictionary values. - // - void AddStringToParent(String str) { - if (!status_.ok()) return; - if (!root_) { - DCHECK(!key_is_pending_); - root_ = StringValue::create(str); - } else if (stack_.back().is_dict) { - // If we already have a pending key, then this is the value of the - // key/value pair. Otherwise, it's the new pending key. - if (key_is_pending_) { - stack_.back().dict->setString(pending_key_, str); - key_is_pending_ = false; - } else { - pending_key_ = std::move(str); - key_is_pending_ = true; - } - } else { // Top of the stack is a list. - DCHECK(!key_is_pending_); - stack_.back().list->pushValue(StringValue::create(str)); - } - } - - void AddValueToParent(std::unique_ptr value) { - if (!status_.ok()) return; - if (!root_) { - DCHECK(!key_is_pending_); - root_ = std::move(value); - } else if (stack_.back().is_dict) { - DCHECK(key_is_pending_); - stack_.back().dict->setValue(pending_key_, std::move(value)); - key_is_pending_ = false; - } else { // Top of the stack is a list. - DCHECK(!key_is_pending_); - stack_.back().list->pushValue(std::move(value)); - } - } - - // |status_.ok()| is the default; if we receive an error event - // we keep the first one and stop modifying any other state. - Status status_; - - // The root of the parsed protocol::Value tree. - std::unique_ptr root_; - - // If root_ is a list or a dictionary, this stack keeps track of - // the container we're currently parsing as well as its ancestors. - struct ContainerState { - ContainerState(DictionaryValue* dict) : is_dict(true), dict(dict) {} - ContainerState(ListValue* list) : is_dict(false), list(list) {} - - bool is_dict; - union { - DictionaryValue* dict; - ListValue* list; - }; - }; - std::vector stack_; - - // For maps, keys and values are alternating events, so we keep the - // key around and process it when the value arrives. - bool key_is_pending_ = false; - String pending_key_; -}; -} // anonymous namespace - -// static -std::unique_ptr Value::parseBinary(const uint8_t* data, size_t size) { - ValueParserHandler handler; - cbor::ParseCBOR(span(data, size), &handler); - // TODO(johannes): We have decent error info in handler.status(); provide - // a richer interface that makes this available to client code. - if (handler.status().ok()) - return handler.ReleaseRoot(); - return nullptr; -} - -bool Value::asBoolean(bool*) const -{ - return false; -} - -bool Value::asDouble(double*) const -{ - return false; -} - -bool Value::asInteger(int*) const -{ - return false; -} - -bool Value::asString(String*) const -{ - return false; -} - -bool Value::asBinary(Binary*) const -{ - return false; -} - -void Value::AppendSerialized(std::vector* bytes) const { - DCHECK(m_type == TypeNull); - bytes->push_back(cbor::EncodeNull()); -} - -std::unique_ptr Value::clone() const -{ - return Value::null(); -} - -bool FundamentalValue::asBoolean(bool* output) const -{ - if (type() != TypeBoolean) - return false; - *output = m_boolValue; - return true; -} - -bool FundamentalValue::asDouble(double* output) const -{ - if (type() == TypeDouble) { - *output = m_doubleValue; - return true; - } - if (type() == TypeInteger) { - *output = m_integerValue; - return true; - } - return false; -} - -bool FundamentalValue::asInteger(int* output) const -{ - if (type() != TypeInteger) - return false; - *output = m_integerValue; - return true; -} - -void FundamentalValue::AppendSerialized(std::vector* bytes) const { - switch (type()) { - case TypeDouble: - cbor::EncodeDouble(m_doubleValue, bytes); - return; - case TypeInteger: - cbor::EncodeInt32(m_integerValue, bytes); - return; - case TypeBoolean: - bytes->push_back(m_boolValue ? cbor::EncodeTrue() : cbor::EncodeFalse()); - return; - default: - DCHECK(false); - } -} - -std::unique_ptr FundamentalValue::clone() const -{ - switch (type()) { - case TypeDouble: return FundamentalValue::create(m_doubleValue); - case TypeInteger: return FundamentalValue::create(m_integerValue); - case TypeBoolean: return FundamentalValue::create(m_boolValue); - default: - DCHECK(false); - } - return nullptr; -} - -bool StringValue::asString(String* output) const -{ - *output = m_stringValue; - return true; -} - -namespace { -// This routine distinguishes between the current encoding for a given -// string |s|, and calls encoding routines that will -// - Ensure that all ASCII strings end up being encoded as UTF8 in -// the wire format - e.g., EncodeFromUTF16 will detect ASCII and -// do the (trivial) transcode to STRING8 on the wire, but if it's -// not ASCII it'll do STRING16. -// - Select a format that's cheap to convert to. E.g., we don't -// have LATIN1 on the wire, so we call EncodeFromLatin1 which -// transcodes to UTF8 if needed. -void EncodeString(const String& s, std::vector* out) { - if (StringUtil::CharacterCount(s) == 0) { - cbor::EncodeString8(span(nullptr, 0), out); // Empty string. - } else if (StringUtil::CharactersLatin1(s)) { - cbor::EncodeFromLatin1(span(StringUtil::CharactersLatin1(s), - StringUtil::CharacterCount(s)), - out); - } else if (StringUtil::CharactersUTF16(s)) { - cbor::EncodeFromUTF16(span(StringUtil::CharactersUTF16(s), - StringUtil::CharacterCount(s)), - out); - } else if (StringUtil::CharactersUTF8(s)) { - cbor::EncodeString8(span(StringUtil::CharactersUTF8(s), - StringUtil::CharacterCount(s)), - out); - } -} -} // namespace -void StringValue::AppendSerialized(std::vector* bytes) const { - EncodeString(m_stringValue, bytes); -} - -std::unique_ptr StringValue::clone() const -{ - return StringValue::create(m_stringValue); -} - -bool BinaryValue::asBinary(Binary* output) const -{ - *output = m_binaryValue; - return true; -} - -void BinaryValue::AppendSerialized(std::vector* bytes) const { - cbor::EncodeBinary(span(m_binaryValue.data(), - m_binaryValue.size()), bytes); -} - -std::unique_ptr BinaryValue::clone() const -{ - return BinaryValue::create(m_binaryValue); -} - - -DictionaryValue::~DictionaryValue() -{ -} - -void DictionaryValue::setBoolean(const String& name, bool value) -{ - setValue(name, FundamentalValue::create(value)); -} - -void DictionaryValue::setInteger(const String& name, int value) -{ - setValue(name, FundamentalValue::create(value)); -} - -void DictionaryValue::setDouble(const String& name, double value) -{ - setValue(name, FundamentalValue::create(value)); -} - -void DictionaryValue::setString(const String& name, const String& value) -{ - setValue(name, StringValue::create(value)); -} - -void DictionaryValue::setValue(const String& name, std::unique_ptr value) -{ - set(name, value); -} - -void DictionaryValue::setObject(const String& name, std::unique_ptr value) -{ - set(name, value); -} - -void DictionaryValue::setArray(const String& name, std::unique_ptr value) -{ - set(name, value); -} - -bool DictionaryValue::getBoolean(const String& name, bool* output) const -{ - protocol::Value* value = get(name); - if (!value) - return false; - return value->asBoolean(output); -} - -bool DictionaryValue::getInteger(const String& name, int* output) const -{ - Value* value = get(name); - if (!value) - return false; - return value->asInteger(output); -} - -bool DictionaryValue::getDouble(const String& name, double* output) const -{ - Value* value = get(name); - if (!value) - return false; - return value->asDouble(output); -} - -bool DictionaryValue::getString(const String& name, String* output) const -{ - protocol::Value* value = get(name); - if (!value) - return false; - return value->asString(output); -} - -DictionaryValue* DictionaryValue::getObject(const String& name) const -{ - return DictionaryValue::cast(get(name)); -} - -protocol::ListValue* DictionaryValue::getArray(const String& name) const -{ - return ListValue::cast(get(name)); -} - -protocol::Value* DictionaryValue::get(const String& name) const -{ - Dictionary::const_iterator it = m_data.find(name); - if (it == m_data.end()) - return nullptr; - return it->second.get(); -} - -DictionaryValue::Entry DictionaryValue::at(size_t index) const -{ - const String key = m_order[index]; - return std::make_pair(key, m_data.find(key)->second.get()); -} - -bool DictionaryValue::booleanProperty(const String& name, bool defaultValue) const -{ - bool result = defaultValue; - getBoolean(name, &result); - return result; -} - -int DictionaryValue::integerProperty(const String& name, int defaultValue) const -{ - int result = defaultValue; - getInteger(name, &result); - return result; -} - -double DictionaryValue::doubleProperty(const String& name, double defaultValue) const -{ - double result = defaultValue; - getDouble(name, &result); - return result; -} - -void DictionaryValue::remove(const String& name) -{ - m_data.erase(name); - m_order.erase(std::remove(m_order.begin(), m_order.end(), name), m_order.end()); -} - -void DictionaryValue::AppendSerialized(std::vector* bytes) const { - cbor::EnvelopeEncoder encoder; - encoder.EncodeStart(bytes); - bytes->push_back(cbor::EncodeIndefiniteLengthMapStart()); - for (size_t i = 0; i < m_order.size(); ++i) { - const String& key = m_order[i]; - Dictionary::const_iterator value = m_data.find(key); - DCHECK(value != m_data.cend() && value->second); - EncodeString(key, bytes); - value->second->AppendSerialized(bytes); - } - bytes->push_back(cbor::EncodeStop()); - encoder.EncodeStop(bytes); -} - -std::unique_ptr DictionaryValue::clone() const -{ - std::unique_ptr result = DictionaryValue::create(); - for (size_t i = 0; i < m_order.size(); ++i) { - String key = m_order[i]; - Dictionary::const_iterator value = m_data.find(key); - DCHECK(value != m_data.cend() && value->second); - result->setValue(key, value->second->clone()); - } - return result; -} - -DictionaryValue::DictionaryValue() - : Value(TypeObject) -{ -} - -ListValue::~ListValue() -{ -} - -void ListValue::AppendSerialized(std::vector* bytes) const { - cbor::EnvelopeEncoder encoder; - encoder.EncodeStart(bytes); - bytes->push_back(cbor::EncodeIndefiniteLengthArrayStart()); - for (size_t i = 0; i < m_data.size(); ++i) { - m_data[i]->AppendSerialized(bytes); - } - bytes->push_back(cbor::EncodeStop()); - encoder.EncodeStop(bytes); -} - -std::unique_ptr ListValue::clone() const -{ - std::unique_ptr result = ListValue::create(); - for (const std::unique_ptr& value : m_data) - result->pushValue(value->clone()); - return result; -} - -ListValue::ListValue() - : Value(TypeArray) -{ -} - -void ListValue::pushValue(std::unique_ptr value) -{ - DCHECK(value); - m_data.push_back(std::move(value)); -} - -protocol::Value* ListValue::at(size_t index) -{ - DCHECK_LT(index, m_data.size()); - return m_data[index].get(); -} - -} // namespace v8_inspector -} // namespace protocol - - -// This file is generated by Object_cpp.template. - -// Copyright 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -//#include "Object.h" - -namespace v8_inspector { -namespace protocol { - -std::unique_ptr Object::fromValue(protocol::Value* value, ErrorSupport* errors) -{ - protocol::DictionaryValue* dictionary = DictionaryValue::cast(value); - if (!dictionary) { - errors->AddError("object expected"); - return nullptr; - } - dictionary = static_cast(dictionary->clone().release()); - return std::unique_ptr(new Object(std::unique_ptr(dictionary))); -} - -// Implements Serializable. -void Object::AppendSerialized(std::vector* out) const { - m_object->AppendSerialized(out); -} - -std::unique_ptr Object::toValue() const -{ - return DictionaryValue::cast(m_object->clone()); -} - -std::unique_ptr Object::clone() const -{ - return std::unique_ptr(new Object(DictionaryValue::cast(m_object->clone()))); -} - -Object::Object(std::unique_ptr object) : m_object(std::move(object)) { } - -Object::~Object() { } - -} // namespace v8_inspector -} // namespace protocol - - -// This file is generated by ValueConversions_cpp.template. - -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Protocol.h" - -#include -#include -#include - -//#include "ValueConversions.h" -//#include "Values.h" - -namespace v8_inspector { -namespace protocol { - -} // namespace -} // namespace - - -namespace v8_crdtp { - -namespace { - -using v8_inspector::protocol::Binary; -using v8_inspector::protocol::Object; -using v8_inspector::protocol::Value; -using v8_inspector::protocol::String; -using v8_inspector::protocol::DictionaryValue; -using v8_inspector::protocol::FundamentalValue; -using v8_inspector::protocol::StringValue; -using v8_inspector::protocol::StringUtil; -//using v8_inspector::protocol::EncodeString; - -std::unique_ptr ReadValue(DeserializerState* state) { - cbor::CBORTokenizer* tokenizer = state->tokenizer(); - switch (tokenizer->TokenTag()) { - case cbor::CBORTokenTag::TRUE_VALUE: - return FundamentalValue::create(true); - case cbor::CBORTokenTag::FALSE_VALUE: - return FundamentalValue::create(false); - case cbor::CBORTokenTag::NULL_VALUE: - return Value::null(); - case cbor::CBORTokenTag::INT32: - return FundamentalValue::create(tokenizer->GetInt32()); - case cbor::CBORTokenTag::DOUBLE: - return FundamentalValue::create(tokenizer->GetDouble()); - case cbor::CBORTokenTag::STRING8: { - const auto str = tokenizer->GetString8(); - return StringValue::create(StringUtil::fromUTF8(str.data(), str.size())); - } - case cbor::CBORTokenTag::STRING16: { - const auto str = tokenizer->GetString16WireRep(); - return StringValue::create(StringUtil::fromUTF16LE(reinterpret_cast(str.data()), str.size() / 2)); - } - case cbor::CBORTokenTag::ENVELOPE: { - const auto env = tokenizer->GetEnvelope(); - return Value::parseBinary(env.data(), env.size()); - } - // Intentionally not supported. - case cbor::CBORTokenTag::BINARY: - // Should not be encountered outside of envelope. - case cbor::CBORTokenTag::MAP_START: - case cbor::CBORTokenTag::ARRAY_START: - default: - state->RegisterError(Error::CBOR_UNSUPPORTED_VALUE); - return nullptr; - } -} - -} // namespace - -// static -bool ProtocolTypeTraits>::Deserialize( - DeserializerState* state, std::unique_ptr* value) { - auto result = ReadValue(state); - if (!result) - return false; - *value = std::move(result); - return true; -} - -// static -void ProtocolTypeTraits>::Serialize( - const std::unique_ptr& value, std::vector* bytes) { - value->AppendSerialized(bytes); -} - -// static -bool ProtocolTypeTraits>::Deserialize( - DeserializerState* state, std::unique_ptr* value) { - std::unique_ptr res; - if (!ProtocolTypeTraits>::Deserialize(state, &res)) - return false; - if (res->type() != Value::TypeObject) { - state->RegisterError(Error::BINDINGS_DICTIONARY_VALUE_EXPECTED); - return false; - } - *value = DictionaryValue::cast(std::move(res)); - return true; -} - -// static -void ProtocolTypeTraits>::Serialize( - const std::unique_ptr& value, std::vector* bytes) { - value->AppendSerialized(bytes); -} - -// static -bool ProtocolTypeTraits>::Deserialize(DeserializerState* state, std::unique_ptr* value) { - auto res = DictionaryValue::create(); - if (ProtocolTypeTraits>::Deserialize(state, &res)) { - *value = std::make_unique(std::move(res)); - return true; - } - return false; -} - -void ProtocolTypeTraits>::Serialize(const std::unique_ptr& value, std::vector* bytes) { - value->AppendSerialized(bytes); -} - -} // namespace v8_crdtp diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp deleted file mode 100644 index 474b32c11..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Runtime.cpp +++ /dev/null @@ -1,1629 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Runtime.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace Runtime { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "Runtime"; -const char Metainfo::commandPrefix[] = "Runtime."; -const char Metainfo::version[] = "1.3"; - - - -const char* WebDriverValue::TypeEnum::Undefined = "undefined"; -const char* WebDriverValue::TypeEnum::Null = "null"; -const char* WebDriverValue::TypeEnum::String = "string"; -const char* WebDriverValue::TypeEnum::Number = "number"; -const char* WebDriverValue::TypeEnum::Boolean = "boolean"; -const char* WebDriverValue::TypeEnum::Bigint = "bigint"; -const char* WebDriverValue::TypeEnum::Regexp = "regexp"; -const char* WebDriverValue::TypeEnum::Date = "date"; -const char* WebDriverValue::TypeEnum::Symbol = "symbol"; -const char* WebDriverValue::TypeEnum::Array = "array"; -const char* WebDriverValue::TypeEnum::Object = "object"; -const char* WebDriverValue::TypeEnum::Function = "function"; -const char* WebDriverValue::TypeEnum::Map = "map"; -const char* WebDriverValue::TypeEnum::Set = "set"; -const char* WebDriverValue::TypeEnum::Weakmap = "weakmap"; -const char* WebDriverValue::TypeEnum::Weakset = "weakset"; -const char* WebDriverValue::TypeEnum::Error = "error"; -const char* WebDriverValue::TypeEnum::Proxy = "proxy"; -const char* WebDriverValue::TypeEnum::Promise = "promise"; -const char* WebDriverValue::TypeEnum::Typedarray = "typedarray"; -const char* WebDriverValue::TypeEnum::Arraybuffer = "arraybuffer"; -const char* WebDriverValue::TypeEnum::Node = "node"; -const char* WebDriverValue::TypeEnum::Window = "window"; -V8_CRDTP_BEGIN_DESERIALIZER(WebDriverValue) - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectId", m_objectId), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(WebDriverValue) - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("objectId", m_objectId); -V8_CRDTP_END_SERIALIZER(); - - - - - -const char* RemoteObject::TypeEnum::Object = "object"; -const char* RemoteObject::TypeEnum::Function = "function"; -const char* RemoteObject::TypeEnum::Undefined = "undefined"; -const char* RemoteObject::TypeEnum::String = "string"; -const char* RemoteObject::TypeEnum::Number = "number"; -const char* RemoteObject::TypeEnum::Boolean = "boolean"; -const char* RemoteObject::TypeEnum::Symbol = "symbol"; -const char* RemoteObject::TypeEnum::Bigint = "bigint"; - -const char* RemoteObject::SubtypeEnum::Array = "array"; -const char* RemoteObject::SubtypeEnum::Null = "null"; -const char* RemoteObject::SubtypeEnum::Node = "node"; -const char* RemoteObject::SubtypeEnum::Regexp = "regexp"; -const char* RemoteObject::SubtypeEnum::Date = "date"; -const char* RemoteObject::SubtypeEnum::Map = "map"; -const char* RemoteObject::SubtypeEnum::Set = "set"; -const char* RemoteObject::SubtypeEnum::Weakmap = "weakmap"; -const char* RemoteObject::SubtypeEnum::Weakset = "weakset"; -const char* RemoteObject::SubtypeEnum::Iterator = "iterator"; -const char* RemoteObject::SubtypeEnum::Generator = "generator"; -const char* RemoteObject::SubtypeEnum::Error = "error"; -const char* RemoteObject::SubtypeEnum::Proxy = "proxy"; -const char* RemoteObject::SubtypeEnum::Promise = "promise"; -const char* RemoteObject::SubtypeEnum::Typedarray = "typedarray"; -const char* RemoteObject::SubtypeEnum::Arraybuffer = "arraybuffer"; -const char* RemoteObject::SubtypeEnum::Dataview = "dataview"; -const char* RemoteObject::SubtypeEnum::Webassemblymemory = "webassemblymemory"; -const char* RemoteObject::SubtypeEnum::Wasmvalue = "wasmvalue"; -V8_CRDTP_BEGIN_DESERIALIZER(RemoteObject) - V8_CRDTP_DESERIALIZE_FIELD_OPT("className", m_className), - V8_CRDTP_DESERIALIZE_FIELD_OPT("customPreview", m_customPreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("description", m_description), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectId", m_objectId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("preview", m_preview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("subtype", m_subtype), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), - V8_CRDTP_DESERIALIZE_FIELD_OPT("unserializableValue", m_unserializableValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), - V8_CRDTP_DESERIALIZE_FIELD_OPT("webDriverValue", m_webDriverValue), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(RemoteObject) - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("subtype", m_subtype); - V8_CRDTP_SERIALIZE_FIELD("className", m_className); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("unserializableValue", m_unserializableValue); - V8_CRDTP_SERIALIZE_FIELD("description", m_description); - V8_CRDTP_SERIALIZE_FIELD("webDriverValue", m_webDriverValue); - V8_CRDTP_SERIALIZE_FIELD("objectId", m_objectId); - V8_CRDTP_SERIALIZE_FIELD("preview", m_preview); - V8_CRDTP_SERIALIZE_FIELD("customPreview", m_customPreview); -V8_CRDTP_END_SERIALIZER(); - -// static -std::unique_ptr API::RemoteObject::fromBinary(const uint8_t* data, size_t length) -{ - return protocol::Runtime::RemoteObject::FromBinary(data, length); -} - -V8_CRDTP_BEGIN_DESERIALIZER(CustomPreview) - V8_CRDTP_DESERIALIZE_FIELD_OPT("bodyGetterId", m_bodyGetterId), - V8_CRDTP_DESERIALIZE_FIELD("header", m_header), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(CustomPreview) - V8_CRDTP_SERIALIZE_FIELD("header", m_header); - V8_CRDTP_SERIALIZE_FIELD("bodyGetterId", m_bodyGetterId); -V8_CRDTP_END_SERIALIZER(); - - - -const char* ObjectPreview::TypeEnum::Object = "object"; -const char* ObjectPreview::TypeEnum::Function = "function"; -const char* ObjectPreview::TypeEnum::Undefined = "undefined"; -const char* ObjectPreview::TypeEnum::String = "string"; -const char* ObjectPreview::TypeEnum::Number = "number"; -const char* ObjectPreview::TypeEnum::Boolean = "boolean"; -const char* ObjectPreview::TypeEnum::Symbol = "symbol"; -const char* ObjectPreview::TypeEnum::Bigint = "bigint"; - -const char* ObjectPreview::SubtypeEnum::Array = "array"; -const char* ObjectPreview::SubtypeEnum::Null = "null"; -const char* ObjectPreview::SubtypeEnum::Node = "node"; -const char* ObjectPreview::SubtypeEnum::Regexp = "regexp"; -const char* ObjectPreview::SubtypeEnum::Date = "date"; -const char* ObjectPreview::SubtypeEnum::Map = "map"; -const char* ObjectPreview::SubtypeEnum::Set = "set"; -const char* ObjectPreview::SubtypeEnum::Weakmap = "weakmap"; -const char* ObjectPreview::SubtypeEnum::Weakset = "weakset"; -const char* ObjectPreview::SubtypeEnum::Iterator = "iterator"; -const char* ObjectPreview::SubtypeEnum::Generator = "generator"; -const char* ObjectPreview::SubtypeEnum::Error = "error"; -const char* ObjectPreview::SubtypeEnum::Proxy = "proxy"; -const char* ObjectPreview::SubtypeEnum::Promise = "promise"; -const char* ObjectPreview::SubtypeEnum::Typedarray = "typedarray"; -const char* ObjectPreview::SubtypeEnum::Arraybuffer = "arraybuffer"; -const char* ObjectPreview::SubtypeEnum::Dataview = "dataview"; -const char* ObjectPreview::SubtypeEnum::Webassemblymemory = "webassemblymemory"; -const char* ObjectPreview::SubtypeEnum::Wasmvalue = "wasmvalue"; -V8_CRDTP_BEGIN_DESERIALIZER(ObjectPreview) - V8_CRDTP_DESERIALIZE_FIELD_OPT("description", m_description), - V8_CRDTP_DESERIALIZE_FIELD_OPT("entries", m_entries), - V8_CRDTP_DESERIALIZE_FIELD("overflow", m_overflow), - V8_CRDTP_DESERIALIZE_FIELD("properties", m_properties), - V8_CRDTP_DESERIALIZE_FIELD_OPT("subtype", m_subtype), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ObjectPreview) - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("subtype", m_subtype); - V8_CRDTP_SERIALIZE_FIELD("description", m_description); - V8_CRDTP_SERIALIZE_FIELD("overflow", m_overflow); - V8_CRDTP_SERIALIZE_FIELD("properties", m_properties); - V8_CRDTP_SERIALIZE_FIELD("entries", m_entries); -V8_CRDTP_END_SERIALIZER(); - - - -const char* PropertyPreview::TypeEnum::Object = "object"; -const char* PropertyPreview::TypeEnum::Function = "function"; -const char* PropertyPreview::TypeEnum::Undefined = "undefined"; -const char* PropertyPreview::TypeEnum::String = "string"; -const char* PropertyPreview::TypeEnum::Number = "number"; -const char* PropertyPreview::TypeEnum::Boolean = "boolean"; -const char* PropertyPreview::TypeEnum::Symbol = "symbol"; -const char* PropertyPreview::TypeEnum::Accessor = "accessor"; -const char* PropertyPreview::TypeEnum::Bigint = "bigint"; - -const char* PropertyPreview::SubtypeEnum::Array = "array"; -const char* PropertyPreview::SubtypeEnum::Null = "null"; -const char* PropertyPreview::SubtypeEnum::Node = "node"; -const char* PropertyPreview::SubtypeEnum::Regexp = "regexp"; -const char* PropertyPreview::SubtypeEnum::Date = "date"; -const char* PropertyPreview::SubtypeEnum::Map = "map"; -const char* PropertyPreview::SubtypeEnum::Set = "set"; -const char* PropertyPreview::SubtypeEnum::Weakmap = "weakmap"; -const char* PropertyPreview::SubtypeEnum::Weakset = "weakset"; -const char* PropertyPreview::SubtypeEnum::Iterator = "iterator"; -const char* PropertyPreview::SubtypeEnum::Generator = "generator"; -const char* PropertyPreview::SubtypeEnum::Error = "error"; -const char* PropertyPreview::SubtypeEnum::Proxy = "proxy"; -const char* PropertyPreview::SubtypeEnum::Promise = "promise"; -const char* PropertyPreview::SubtypeEnum::Typedarray = "typedarray"; -const char* PropertyPreview::SubtypeEnum::Arraybuffer = "arraybuffer"; -const char* PropertyPreview::SubtypeEnum::Dataview = "dataview"; -const char* PropertyPreview::SubtypeEnum::Webassemblymemory = "webassemblymemory"; -const char* PropertyPreview::SubtypeEnum::Wasmvalue = "wasmvalue"; -V8_CRDTP_BEGIN_DESERIALIZER(PropertyPreview) - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD_OPT("subtype", m_subtype), - V8_CRDTP_DESERIALIZE_FIELD("type", m_type), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), - V8_CRDTP_DESERIALIZE_FIELD_OPT("valuePreview", m_valuePreview), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(PropertyPreview) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("type", m_type); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("valuePreview", m_valuePreview); - V8_CRDTP_SERIALIZE_FIELD("subtype", m_subtype); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(EntryPreview) - V8_CRDTP_DESERIALIZE_FIELD_OPT("key", m_key), - V8_CRDTP_DESERIALIZE_FIELD("value", m_value), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(EntryPreview) - V8_CRDTP_SERIALIZE_FIELD("key", m_key); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(PropertyDescriptor) - V8_CRDTP_DESERIALIZE_FIELD("configurable", m_configurable), - V8_CRDTP_DESERIALIZE_FIELD("enumerable", m_enumerable), - V8_CRDTP_DESERIALIZE_FIELD_OPT("get", m_get), - V8_CRDTP_DESERIALIZE_FIELD_OPT("isOwn", m_isOwn), - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD_OPT("set", m_set), - V8_CRDTP_DESERIALIZE_FIELD_OPT("symbol", m_symbol), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), - V8_CRDTP_DESERIALIZE_FIELD_OPT("wasThrown", m_wasThrown), - V8_CRDTP_DESERIALIZE_FIELD_OPT("writable", m_writable), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(PropertyDescriptor) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("writable", m_writable); - V8_CRDTP_SERIALIZE_FIELD("get", m_get); - V8_CRDTP_SERIALIZE_FIELD("set", m_set); - V8_CRDTP_SERIALIZE_FIELD("configurable", m_configurable); - V8_CRDTP_SERIALIZE_FIELD("enumerable", m_enumerable); - V8_CRDTP_SERIALIZE_FIELD("wasThrown", m_wasThrown); - V8_CRDTP_SERIALIZE_FIELD("isOwn", m_isOwn); - V8_CRDTP_SERIALIZE_FIELD("symbol", m_symbol); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(InternalPropertyDescriptor) - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(InternalPropertyDescriptor) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(PrivatePropertyDescriptor) - V8_CRDTP_DESERIALIZE_FIELD_OPT("get", m_get), - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD_OPT("set", m_set), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(PrivatePropertyDescriptor) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("get", m_get); - V8_CRDTP_SERIALIZE_FIELD("set", m_set); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(CallArgument) - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectId", m_objectId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("unserializableValue", m_unserializableValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("value", m_value), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(CallArgument) - V8_CRDTP_SERIALIZE_FIELD("value", m_value); - V8_CRDTP_SERIALIZE_FIELD("unserializableValue", m_unserializableValue); - V8_CRDTP_SERIALIZE_FIELD("objectId", m_objectId); -V8_CRDTP_END_SERIALIZER(); - - - -V8_CRDTP_BEGIN_DESERIALIZER(ExecutionContextDescription) - V8_CRDTP_DESERIALIZE_FIELD_OPT("auxData", m_auxData), - V8_CRDTP_DESERIALIZE_FIELD("id", m_id), - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD("origin", m_origin), - V8_CRDTP_DESERIALIZE_FIELD("uniqueId", m_uniqueId), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ExecutionContextDescription) - V8_CRDTP_SERIALIZE_FIELD("id", m_id); - V8_CRDTP_SERIALIZE_FIELD("origin", m_origin); - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("uniqueId", m_uniqueId); - V8_CRDTP_SERIALIZE_FIELD("auxData", m_auxData); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(ExceptionDetails) - V8_CRDTP_DESERIALIZE_FIELD("columnNumber", m_columnNumber), - V8_CRDTP_DESERIALIZE_FIELD_OPT("exception", m_exception), - V8_CRDTP_DESERIALIZE_FIELD("exceptionId", m_exceptionId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("exceptionMetaData", m_exceptionMetaData), - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", m_executionContextId), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), - V8_CRDTP_DESERIALIZE_FIELD_OPT("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("stackTrace", m_stackTrace), - V8_CRDTP_DESERIALIZE_FIELD("text", m_text), - V8_CRDTP_DESERIALIZE_FIELD_OPT("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(ExceptionDetails) - V8_CRDTP_SERIALIZE_FIELD("exceptionId", m_exceptionId); - V8_CRDTP_SERIALIZE_FIELD("text", m_text); - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber); - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("stackTrace", m_stackTrace); - V8_CRDTP_SERIALIZE_FIELD("exception", m_exception); - V8_CRDTP_SERIALIZE_FIELD("executionContextId", m_executionContextId); - V8_CRDTP_SERIALIZE_FIELD("exceptionMetaData", m_exceptionMetaData); -V8_CRDTP_END_SERIALIZER(); - - - - -V8_CRDTP_BEGIN_DESERIALIZER(CallFrame) - V8_CRDTP_DESERIALIZE_FIELD("columnNumber", m_columnNumber), - V8_CRDTP_DESERIALIZE_FIELD("functionName", m_functionName), - V8_CRDTP_DESERIALIZE_FIELD("lineNumber", m_lineNumber), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", m_scriptId), - V8_CRDTP_DESERIALIZE_FIELD("url", m_url), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(CallFrame) - V8_CRDTP_SERIALIZE_FIELD("functionName", m_functionName); - V8_CRDTP_SERIALIZE_FIELD("scriptId", m_scriptId); - V8_CRDTP_SERIALIZE_FIELD("url", m_url); - V8_CRDTP_SERIALIZE_FIELD("lineNumber", m_lineNumber); - V8_CRDTP_SERIALIZE_FIELD("columnNumber", m_columnNumber); -V8_CRDTP_END_SERIALIZER(); - - -V8_CRDTP_BEGIN_DESERIALIZER(StackTrace) - V8_CRDTP_DESERIALIZE_FIELD("callFrames", m_callFrames), - V8_CRDTP_DESERIALIZE_FIELD_OPT("description", m_description), - V8_CRDTP_DESERIALIZE_FIELD_OPT("parent", m_parent), - V8_CRDTP_DESERIALIZE_FIELD_OPT("parentId", m_parentId), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(StackTrace) - V8_CRDTP_SERIALIZE_FIELD("description", m_description); - V8_CRDTP_SERIALIZE_FIELD("callFrames", m_callFrames); - V8_CRDTP_SERIALIZE_FIELD("parent", m_parent); - V8_CRDTP_SERIALIZE_FIELD("parentId", m_parentId); -V8_CRDTP_END_SERIALIZER(); - -// static -std::unique_ptr API::StackTrace::fromBinary(const uint8_t* data, size_t length) -{ - return protocol::Runtime::StackTrace::FromBinary(data, length); -} - - -V8_CRDTP_BEGIN_DESERIALIZER(StackTraceId) - V8_CRDTP_DESERIALIZE_FIELD_OPT("debuggerId", m_debuggerId), - V8_CRDTP_DESERIALIZE_FIELD("id", m_id), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(StackTraceId) - V8_CRDTP_SERIALIZE_FIELD("id", m_id); - V8_CRDTP_SERIALIZE_FIELD("debuggerId", m_debuggerId); -V8_CRDTP_END_SERIALIZER(); - -// static -std::unique_ptr API::StackTraceId::fromBinary(const uint8_t* data, size_t length) -{ - return protocol::Runtime::StackTraceId::FromBinary(data, length); -} - -// ------------- Enum values from params. - - -namespace ConsoleAPICalled { -namespace TypeEnum { -const char* Log = "log"; -const char* Debug = "debug"; -const char* Info = "info"; -const char* Error = "error"; -const char* Warning = "warning"; -const char* Dir = "dir"; -const char* Dirxml = "dirxml"; -const char* Table = "table"; -const char* Trace = "trace"; -const char* Clear = "clear"; -const char* StartGroup = "startGroup"; -const char* StartGroupCollapsed = "startGroupCollapsed"; -const char* EndGroup = "endGroup"; -const char* Assert = "assert"; -const char* Profile = "profile"; -const char* ProfileEnd = "profileEnd"; -const char* Count = "count"; -const char* TimeEnd = "timeEnd"; -} // namespace TypeEnum -} // namespace ConsoleAPICalled - -// ------------- Frontend notifications. - -void Frontend::bindingCalled(const String& name, const String& payload, int executionContextId) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("name"), name); - serializer.AddField(v8_crdtp::MakeSpan("payload"), payload); - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.bindingCalled", serializer.Finish())); -} - -void Frontend::consoleAPICalled(const String& type, std::unique_ptr> args, int executionContextId, double timestamp, Maybe stackTrace, Maybe context) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("type"), type); - serializer.AddField(v8_crdtp::MakeSpan("args"), args); - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), timestamp); - serializer.AddField(v8_crdtp::MakeSpan("stackTrace"), stackTrace); - serializer.AddField(v8_crdtp::MakeSpan("context"), context); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.consoleAPICalled", serializer.Finish())); -} - -void Frontend::exceptionRevoked(const String& reason, int exceptionId) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("reason"), reason); - serializer.AddField(v8_crdtp::MakeSpan("exceptionId"), exceptionId); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.exceptionRevoked", serializer.Finish())); -} - -void Frontend::exceptionThrown(double timestamp, std::unique_ptr exceptionDetails) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("timestamp"), timestamp); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), exceptionDetails); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.exceptionThrown", serializer.Finish())); -} - -void Frontend::executionContextCreated(std::unique_ptr context) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("context"), context); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.executionContextCreated", serializer.Finish())); -} - -void Frontend::executionContextDestroyed(int executionContextId) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.executionContextDestroyed", serializer.Finish())); -} - -void Frontend::executionContextsCleared() -{ - if (!frontend_channel_) - return; - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.executionContextsCleared")); -} - -void Frontend::inspectRequested(std::unique_ptr object, std::unique_ptr hints, Maybe executionContextId) -{ - if (!frontend_channel_) - return; - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("object"), object); - serializer.AddField(v8_crdtp::MakeSpan("hints"), hints); - serializer.AddField(v8_crdtp::MakeSpan("executionContextId"), executionContextId); - frontend_channel_->SendProtocolNotification(v8_crdtp::CreateNotification("Runtime.inspectRequested", serializer.Finish())); -} - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void awaitPromise(const v8_crdtp::Dispatchable& dispatchable); - void callFunctionOn(const v8_crdtp::Dispatchable& dispatchable); - void compileScript(const v8_crdtp::Dispatchable& dispatchable); - void disable(const v8_crdtp::Dispatchable& dispatchable); - void discardConsoleEntries(const v8_crdtp::Dispatchable& dispatchable); - void enable(const v8_crdtp::Dispatchable& dispatchable); - void evaluate(const v8_crdtp::Dispatchable& dispatchable); - void getIsolateId(const v8_crdtp::Dispatchable& dispatchable); - void getHeapUsage(const v8_crdtp::Dispatchable& dispatchable); - void getProperties(const v8_crdtp::Dispatchable& dispatchable); - void globalLexicalScopeNames(const v8_crdtp::Dispatchable& dispatchable); - void queryObjects(const v8_crdtp::Dispatchable& dispatchable); - void releaseObject(const v8_crdtp::Dispatchable& dispatchable); - void releaseObjectGroup(const v8_crdtp::Dispatchable& dispatchable); - void runIfWaitingForDebugger(const v8_crdtp::Dispatchable& dispatchable); - void runScript(const v8_crdtp::Dispatchable& dispatchable); - void setCustomObjectFormatterEnabled(const v8_crdtp::Dispatchable& dispatchable); - void setMaxCallStackSizeToCapture(const v8_crdtp::Dispatchable& dispatchable); - void terminateExecution(const v8_crdtp::Dispatchable& dispatchable); - void addBinding(const v8_crdtp::Dispatchable& dispatchable); - void removeBinding(const v8_crdtp::Dispatchable& dispatchable); - void getExceptionDetails(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("addBinding"), - &DomainDispatcherImpl::addBinding - }, - { - v8_crdtp::SpanFrom("awaitPromise"), - &DomainDispatcherImpl::awaitPromise - }, - { - v8_crdtp::SpanFrom("callFunctionOn"), - &DomainDispatcherImpl::callFunctionOn - }, - { - v8_crdtp::SpanFrom("compileScript"), - &DomainDispatcherImpl::compileScript - }, - { - v8_crdtp::SpanFrom("disable"), - &DomainDispatcherImpl::disable - }, - { - v8_crdtp::SpanFrom("discardConsoleEntries"), - &DomainDispatcherImpl::discardConsoleEntries - }, - { - v8_crdtp::SpanFrom("enable"), - &DomainDispatcherImpl::enable - }, - { - v8_crdtp::SpanFrom("evaluate"), - &DomainDispatcherImpl::evaluate - }, - { - v8_crdtp::SpanFrom("getExceptionDetails"), - &DomainDispatcherImpl::getExceptionDetails - }, - { - v8_crdtp::SpanFrom("getHeapUsage"), - &DomainDispatcherImpl::getHeapUsage - }, - { - v8_crdtp::SpanFrom("getIsolateId"), - &DomainDispatcherImpl::getIsolateId - }, - { - v8_crdtp::SpanFrom("getProperties"), - &DomainDispatcherImpl::getProperties - }, - { - v8_crdtp::SpanFrom("globalLexicalScopeNames"), - &DomainDispatcherImpl::globalLexicalScopeNames - }, - { - v8_crdtp::SpanFrom("queryObjects"), - &DomainDispatcherImpl::queryObjects - }, - { - v8_crdtp::SpanFrom("releaseObject"), - &DomainDispatcherImpl::releaseObject - }, - { - v8_crdtp::SpanFrom("releaseObjectGroup"), - &DomainDispatcherImpl::releaseObjectGroup - }, - { - v8_crdtp::SpanFrom("removeBinding"), - &DomainDispatcherImpl::removeBinding - }, - { - v8_crdtp::SpanFrom("runIfWaitingForDebugger"), - &DomainDispatcherImpl::runIfWaitingForDebugger - }, - { - v8_crdtp::SpanFrom("runScript"), - &DomainDispatcherImpl::runScript - }, - { - v8_crdtp::SpanFrom("setCustomObjectFormatterEnabled"), - &DomainDispatcherImpl::setCustomObjectFormatterEnabled - }, - { - v8_crdtp::SpanFrom("setMaxCallStackSizeToCapture"), - &DomainDispatcherImpl::setMaxCallStackSizeToCapture - }, - { - v8_crdtp::SpanFrom("terminateExecution"), - &DomainDispatcherImpl::terminateExecution - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -class AwaitPromiseCallbackImpl : public Backend::AwaitPromiseCallback, public DomainDispatcher::Callback { -public: - AwaitPromiseCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("Runtime.awaitPromise"), message) { } - - void sendSuccess(std::unique_ptr result, Maybe exceptionDetails) override - { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), result); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), exceptionDetails); - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - -struct awaitPromiseParams : public v8_crdtp::DeserializableProtocolObject { - String promiseObjectId; - Maybe returnByValue; - Maybe generatePreview; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(awaitPromiseParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD("promiseObjectId", promiseObjectId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnByValue", returnByValue), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::awaitPromise(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - awaitPromiseParams params; - awaitPromiseParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - m_backend->awaitPromise(params.promiseObjectId, std::move(params.returnByValue), std::move(params.generatePreview), std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -class CallFunctionOnCallbackImpl : public Backend::CallFunctionOnCallback, public DomainDispatcher::Callback { -public: - CallFunctionOnCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("Runtime.callFunctionOn"), message) { } - - void sendSuccess(std::unique_ptr result, Maybe exceptionDetails) override - { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), result); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), exceptionDetails); - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - -struct callFunctionOnParams : public v8_crdtp::DeserializableProtocolObject { - String functionDeclaration; - Maybe objectId; - Maybe> arguments; - Maybe silent; - Maybe returnByValue; - Maybe generatePreview; - Maybe userGesture; - Maybe awaitPromise; - Maybe executionContextId; - Maybe objectGroup; - Maybe throwOnSideEffect; - Maybe generateWebDriverValue; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(callFunctionOnParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("arguments", arguments), - V8_CRDTP_DESERIALIZE_FIELD_OPT("awaitPromise", awaitPromise), - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", executionContextId), - V8_CRDTP_DESERIALIZE_FIELD("functionDeclaration", functionDeclaration), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generateWebDriverValue", generateWebDriverValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectId", objectId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnByValue", returnByValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("silent", silent), - V8_CRDTP_DESERIALIZE_FIELD_OPT("throwOnSideEffect", throwOnSideEffect), - V8_CRDTP_DESERIALIZE_FIELD_OPT("userGesture", userGesture), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::callFunctionOn(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - callFunctionOnParams params; - callFunctionOnParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - m_backend->callFunctionOn(params.functionDeclaration, std::move(params.objectId), std::move(params.arguments), std::move(params.silent), std::move(params.returnByValue), std::move(params.generatePreview), std::move(params.userGesture), std::move(params.awaitPromise), std::move(params.executionContextId), std::move(params.objectGroup), std::move(params.throwOnSideEffect), std::move(params.generateWebDriverValue), std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -namespace { - -struct compileScriptParams : public v8_crdtp::DeserializableProtocolObject { - String expression; - String sourceURL; - bool persistScript; - Maybe executionContextId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(compileScriptParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", executionContextId), - V8_CRDTP_DESERIALIZE_FIELD("expression", expression), - V8_CRDTP_DESERIALIZE_FIELD("persistScript", persistScript), - V8_CRDTP_DESERIALIZE_FIELD("sourceURL", sourceURL), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::compileScript(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - compileScriptParams params; - compileScriptParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - Maybe out_scriptId; - Maybe out_exceptionDetails; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->compileScript(params.expression, params.sourceURL, params.persistScript, std::move(params.executionContextId), &out_scriptId, &out_exceptionDetails); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.compileScript"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("scriptId"), out_scriptId); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), out_exceptionDetails); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::disable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->disable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.disable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::discardConsoleEntries(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->discardConsoleEntries(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.discardConsoleEntries"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::enable(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->enable(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.enable"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -class EvaluateCallbackImpl : public Backend::EvaluateCallback, public DomainDispatcher::Callback { -public: - EvaluateCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("Runtime.evaluate"), message) { } - - void sendSuccess(std::unique_ptr result, Maybe exceptionDetails) override - { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), result); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), exceptionDetails); - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - -struct evaluateParams : public v8_crdtp::DeserializableProtocolObject { - String expression; - Maybe objectGroup; - Maybe includeCommandLineAPI; - Maybe silent; - Maybe contextId; - Maybe returnByValue; - Maybe generatePreview; - Maybe userGesture; - Maybe awaitPromise; - Maybe throwOnSideEffect; - Maybe timeout; - Maybe disableBreaks; - Maybe replMode; - Maybe allowUnsafeEvalBlockedByCSP; - Maybe uniqueContextId; - Maybe generateWebDriverValue; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(evaluateParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("allowUnsafeEvalBlockedByCSP", allowUnsafeEvalBlockedByCSP), - V8_CRDTP_DESERIALIZE_FIELD_OPT("awaitPromise", awaitPromise), - V8_CRDTP_DESERIALIZE_FIELD_OPT("contextId", contextId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("disableBreaks", disableBreaks), - V8_CRDTP_DESERIALIZE_FIELD("expression", expression), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generateWebDriverValue", generateWebDriverValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("includeCommandLineAPI", includeCommandLineAPI), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD_OPT("replMode", replMode), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnByValue", returnByValue), - V8_CRDTP_DESERIALIZE_FIELD_OPT("silent", silent), - V8_CRDTP_DESERIALIZE_FIELD_OPT("throwOnSideEffect", throwOnSideEffect), - V8_CRDTP_DESERIALIZE_FIELD_OPT("timeout", timeout), - V8_CRDTP_DESERIALIZE_FIELD_OPT("uniqueContextId", uniqueContextId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("userGesture", userGesture), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::evaluate(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - evaluateParams params; - evaluateParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - m_backend->evaluate(params.expression, std::move(params.objectGroup), std::move(params.includeCommandLineAPI), std::move(params.silent), std::move(params.contextId), std::move(params.returnByValue), std::move(params.generatePreview), std::move(params.userGesture), std::move(params.awaitPromise), std::move(params.throwOnSideEffect), std::move(params.timeout), std::move(params.disableBreaks), std::move(params.replMode), std::move(params.allowUnsafeEvalBlockedByCSP), std::move(params.uniqueContextId), std::move(params.generateWebDriverValue), std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::getIsolateId(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - String out_id; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getIsolateId(&out_id); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.getIsolateId"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("id"), out_id); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::getHeapUsage(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - double out_usedSize; - double out_totalSize; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getHeapUsage(&out_usedSize, &out_totalSize); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.getHeapUsage"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("usedSize"), out_usedSize); - serializer.AddField(v8_crdtp::MakeSpan("totalSize"), out_totalSize); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct getPropertiesParams : public v8_crdtp::DeserializableProtocolObject { - String objectId; - Maybe ownProperties; - Maybe accessorPropertiesOnly; - Maybe generatePreview; - Maybe nonIndexedPropertiesOnly; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getPropertiesParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("accessorPropertiesOnly", accessorPropertiesOnly), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("nonIndexedPropertiesOnly", nonIndexedPropertiesOnly), - V8_CRDTP_DESERIALIZE_FIELD("objectId", objectId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("ownProperties", ownProperties), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getProperties(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getPropertiesParams params; - getPropertiesParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr> out_result; - Maybe> out_internalProperties; - Maybe> out_privateProperties; - Maybe out_exceptionDetails; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getProperties(params.objectId, std::move(params.ownProperties), std::move(params.accessorPropertiesOnly), std::move(params.generatePreview), std::move(params.nonIndexedPropertiesOnly), &out_result, &out_internalProperties, &out_privateProperties, &out_exceptionDetails); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.getProperties"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), out_result); - serializer.AddField(v8_crdtp::MakeSpan("internalProperties"), out_internalProperties); - serializer.AddField(v8_crdtp::MakeSpan("privateProperties"), out_privateProperties); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), out_exceptionDetails); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct globalLexicalScopeNamesParams : public v8_crdtp::DeserializableProtocolObject { - Maybe executionContextId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(globalLexicalScopeNamesParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", executionContextId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::globalLexicalScopeNames(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - globalLexicalScopeNamesParams params; - globalLexicalScopeNamesParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr> out_names; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->globalLexicalScopeNames(std::move(params.executionContextId), &out_names); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.globalLexicalScopeNames"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("names"), out_names); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct queryObjectsParams : public v8_crdtp::DeserializableProtocolObject { - String prototypeObjectId; - Maybe objectGroup; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(queryObjectsParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD("prototypeObjectId", prototypeObjectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::queryObjects(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - queryObjectsParams params; - queryObjectsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - std::unique_ptr out_objects; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->queryObjects(params.prototypeObjectId, std::move(params.objectGroup), &out_objects); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.queryObjects"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("objects"), out_objects); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { - -struct releaseObjectParams : public v8_crdtp::DeserializableProtocolObject { - String objectId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(releaseObjectParams) - V8_CRDTP_DESERIALIZE_FIELD("objectId", objectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::releaseObject(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - releaseObjectParams params; - releaseObjectParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->releaseObject(params.objectId); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.releaseObject"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct releaseObjectGroupParams : public v8_crdtp::DeserializableProtocolObject { - String objectGroup; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(releaseObjectGroupParams) - V8_CRDTP_DESERIALIZE_FIELD("objectGroup", objectGroup), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::releaseObjectGroup(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - releaseObjectGroupParams params; - releaseObjectGroupParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->releaseObjectGroup(params.objectGroup); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.releaseObjectGroup"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - - -} // namespace - -void DomainDispatcherImpl::runIfWaitingForDebugger(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->runIfWaitingForDebugger(); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.runIfWaitingForDebugger"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -class RunScriptCallbackImpl : public Backend::RunScriptCallback, public DomainDispatcher::Callback { -public: - RunScriptCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("Runtime.runScript"), message) { } - - void sendSuccess(std::unique_ptr result, Maybe exceptionDetails) override - { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("result"), result); - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), exceptionDetails); - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - -struct runScriptParams : public v8_crdtp::DeserializableProtocolObject { - String scriptId; - Maybe executionContextId; - Maybe objectGroup; - Maybe silent; - Maybe includeCommandLineAPI; - Maybe returnByValue; - Maybe generatePreview; - Maybe awaitPromise; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(runScriptParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("awaitPromise", awaitPromise), - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", executionContextId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("generatePreview", generatePreview), - V8_CRDTP_DESERIALIZE_FIELD_OPT("includeCommandLineAPI", includeCommandLineAPI), - V8_CRDTP_DESERIALIZE_FIELD_OPT("objectGroup", objectGroup), - V8_CRDTP_DESERIALIZE_FIELD_OPT("returnByValue", returnByValue), - V8_CRDTP_DESERIALIZE_FIELD("scriptId", scriptId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("silent", silent), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::runScript(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - runScriptParams params; - runScriptParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - m_backend->runScript(params.scriptId, std::move(params.executionContextId), std::move(params.objectGroup), std::move(params.silent), std::move(params.includeCommandLineAPI), std::move(params.returnByValue), std::move(params.generatePreview), std::move(params.awaitPromise), std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -namespace { - -struct setCustomObjectFormatterEnabledParams : public v8_crdtp::DeserializableProtocolObject { - bool enabled; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setCustomObjectFormatterEnabledParams) - V8_CRDTP_DESERIALIZE_FIELD("enabled", enabled), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setCustomObjectFormatterEnabled(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setCustomObjectFormatterEnabledParams params; - setCustomObjectFormatterEnabledParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setCustomObjectFormatterEnabled(params.enabled); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.setCustomObjectFormatterEnabled"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct setMaxCallStackSizeToCaptureParams : public v8_crdtp::DeserializableProtocolObject { - int size; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(setMaxCallStackSizeToCaptureParams) - V8_CRDTP_DESERIALIZE_FIELD("size", size), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::setMaxCallStackSizeToCapture(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - setMaxCallStackSizeToCaptureParams params; - setMaxCallStackSizeToCaptureParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->setMaxCallStackSizeToCapture(params.size); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.setMaxCallStackSizeToCapture"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -class TerminateExecutionCallbackImpl : public Backend::TerminateExecutionCallback, public DomainDispatcher::Callback { -public: - TerminateExecutionCallbackImpl(std::unique_ptr backendImpl, int callId, v8_crdtp::span message) - : DomainDispatcher::Callback(std::move(backendImpl), callId, -v8_crdtp::SpanFrom("Runtime.terminateExecution"), message) { } - - void sendSuccess() override - { - v8_crdtp::ObjectSerializer serializer; - sendIfActive(serializer.Finish(), DispatchResponse::Success()); - } - - void fallThrough() override - { - fallThroughIfActive(); - } - - void sendFailure(const DispatchResponse& response) override - { - DCHECK(response.IsError()); - sendIfActive(nullptr, response); - } -}; - -namespace { - - -} // namespace - -void DomainDispatcherImpl::terminateExecution(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - - m_backend->terminateExecution(std::make_unique(weakPtr(), dispatchable.CallId(), dispatchable.Serialized())); -} - -namespace { - -struct addBindingParams : public v8_crdtp::DeserializableProtocolObject { - String name; - Maybe executionContextId; - Maybe executionContextName; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(addBindingParams) - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextId", executionContextId), - V8_CRDTP_DESERIALIZE_FIELD_OPT("executionContextName", executionContextName), - V8_CRDTP_DESERIALIZE_FIELD("name", name), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::addBinding(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - addBindingParams params; - addBindingParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->addBinding(params.name, std::move(params.executionContextId), std::move(params.executionContextName)); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.addBinding"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct removeBindingParams : public v8_crdtp::DeserializableProtocolObject { - String name; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(removeBindingParams) - V8_CRDTP_DESERIALIZE_FIELD("name", name), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::removeBinding(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - removeBindingParams params; - removeBindingParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->removeBinding(params.name); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.removeBinding"), dispatchable.Serialized()); - return; - } - if (weak->get()) - weak->get()->sendResponse(dispatchable.CallId(), response); - return; -} - -namespace { - -struct getExceptionDetailsParams : public v8_crdtp::DeserializableProtocolObject { - String errorObjectId; - DECLARE_DESERIALIZATION_SUPPORT(); -}; - -V8_CRDTP_BEGIN_DESERIALIZER(getExceptionDetailsParams) - V8_CRDTP_DESERIALIZE_FIELD("errorObjectId", errorObjectId), -V8_CRDTP_END_DESERIALIZER() - -} // namespace - -void DomainDispatcherImpl::getExceptionDetails(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - auto deserializer = v8_crdtp::DeferredMessage::FromSpan(dispatchable.Params())->MakeDeserializer(); - getExceptionDetailsParams params; - getExceptionDetailsParams::Deserialize(&deserializer, ¶ms); - if (MaybeReportInvalidParams(dispatchable, deserializer)) - return; - - // Declare output parameters. - Maybe out_exceptionDetails; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getExceptionDetails(params.errorObjectId, &out_exceptionDetails); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Runtime.getExceptionDetails"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("exceptionDetails"), out_exceptionDetails); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - { v8_crdtp::SpanFrom("Runtime.setAsyncCallStackDepth"), v8_crdtp::SpanFrom("Debugger.setAsyncCallStackDepth") }, - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("Runtime"), SortedRedirects(), std::move(dispatcher)); -} - -} // Runtime -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp deleted file mode 100644 index 5a0310e06..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/Schema.cpp +++ /dev/null @@ -1,160 +0,0 @@ -// This file is generated by TypeBuilder_cpp.template. - -// Copyright (c) 2016 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/Schema.h" - -#include "src/inspector/protocol/Protocol.h" - -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/find_by_first.h" -#include "third_party/inspector_protocol/crdtp/span.h" - -namespace v8_inspector { -namespace protocol { -namespace Schema { - -using v8_crdtp::DeserializerState; -using v8_crdtp::ProtocolTypeTraits; - -// ------------- Enum values from types. - -const char Metainfo::domainName[] = "Schema"; -const char Metainfo::commandPrefix[] = "Schema."; -const char Metainfo::version[] = "1.3"; - -V8_CRDTP_BEGIN_DESERIALIZER(Domain) - V8_CRDTP_DESERIALIZE_FIELD("name", m_name), - V8_CRDTP_DESERIALIZE_FIELD("version", m_version), -V8_CRDTP_END_DESERIALIZER() - -V8_CRDTP_BEGIN_SERIALIZER(Domain) - V8_CRDTP_SERIALIZE_FIELD("name", m_name); - V8_CRDTP_SERIALIZE_FIELD("version", m_version); -V8_CRDTP_END_SERIALIZER(); - -// static -std::unique_ptr API::Domain::fromBinary(const uint8_t* data, size_t length) -{ - return protocol::Schema::Domain::FromBinary(data, length); -} - -// ------------- Enum values from params. - - -// ------------- Frontend notifications. - -void Frontend::flush() -{ - frontend_channel_->FlushProtocolNotifications(); -} - -void Frontend::sendRawNotification(std::unique_ptr notification) -{ - frontend_channel_->SendProtocolNotification(std::move(notification)); -} - -// --------------------- Dispatcher. - -class DomainDispatcherImpl : public protocol::DomainDispatcher { -public: - DomainDispatcherImpl(FrontendChannel* frontendChannel, Backend* backend) - : DomainDispatcher(frontendChannel) - , m_backend(backend) {} - ~DomainDispatcherImpl() override { } - - using CallHandler = void (DomainDispatcherImpl::*)(const v8_crdtp::Dispatchable& dispatchable); - - std::function Dispatch(v8_crdtp::span command_name) override; - - void getDomains(const v8_crdtp::Dispatchable& dispatchable); - protected: - Backend* m_backend; -}; - -namespace { -// This helper method with a static map of command methods (instance methods -// of DomainDispatcherImpl declared just above) by their name is used immediately below, -// in the DomainDispatcherImpl::Dispatch method. -DomainDispatcherImpl::CallHandler CommandByName(v8_crdtp::span command_name) { - static auto* commands = [](){ - auto* commands = new std::vector, - DomainDispatcherImpl::CallHandler>>{ - { - v8_crdtp::SpanFrom("getDomains"), - &DomainDispatcherImpl::getDomains - }, - }; - return commands; - }(); - return v8_crdtp::FindByFirst(*commands, command_name, nullptr); -} -} // namespace - -std::function DomainDispatcherImpl::Dispatch(v8_crdtp::span command_name) { - CallHandler handler = CommandByName(command_name); - if (!handler) return nullptr; - - return [this, handler](const v8_crdtp::Dispatchable& dispatchable) { - (this->*handler)(dispatchable); - }; -} - - -namespace { - - -} // namespace - -void DomainDispatcherImpl::getDomains(const v8_crdtp::Dispatchable& dispatchable) -{ - // Prepare input parameters. - - // Declare output parameters. - std::unique_ptr> out_domains; - - std::unique_ptr weak = weakPtr(); - DispatchResponse response = m_backend->getDomains(&out_domains); - if (response.IsFallThrough()) { - channel()->FallThrough(dispatchable.CallId(), v8_crdtp::SpanFrom("Schema.getDomains"), dispatchable.Serialized()); - return; - } - if (weak->get()) { - std::unique_ptr result; - if (response.IsSuccess()) { - v8_crdtp::ObjectSerializer serializer; - serializer.AddField(v8_crdtp::MakeSpan("domains"), out_domains); - result = serializer.Finish(); - } else { - result = Serializable::From({}); - } - weak->get()->sendResponse(dispatchable.CallId(), response, std::move(result)); - } - return; -} - -namespace { -// This helper method (with a static map of redirects) is used from Dispatcher::wire -// immediately below. -const std::vector, v8_crdtp::span>>& SortedRedirects() { - static auto* redirects = [](){ - auto* redirects = new std::vector, v8_crdtp::span>>{ - }; - return redirects; - }(); - return *redirects; -} -} // namespace - -// static -void Dispatcher::wire(UberDispatcher* uber, Backend* backend) -{ - auto dispatcher = std::make_unique(uber->channel(), backend); - uber->WireBackend(v8_crdtp::SpanFrom("Schema"), SortedRedirects(), std::move(dispatcher)); -} - -} // Schema -} // namespace v8_inspector -} // namespace protocol diff --git a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/base_string_adapter.cc b/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/base_string_adapter.cc deleted file mode 100644 index c9ae3626f..000000000 --- a/test-app/runtime/src/main/cpp/v8_inspector/src/inspector/protocol/base_string_adapter.cc +++ /dev/null @@ -1,121 +0,0 @@ -// This file is generated by base_string_adapter_cc.template. - -// Copyright 2019 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "src/inspector/protocol/base_string_adapter.h" -#include "src/inspector/protocol/Protocol.h" - -#include -#include "base/base64.h" -#include "base/json/json_reader.h" -#include "base/memory/ptr_util.h" -#include "base/strings/stringprintf.h" -#include "base/strings/utf_string_conversions.h" -#include "base/values.h" -#include "third_party/inspector_protocol/crdtp/cbor.h" -#include "third_party/inspector_protocol/crdtp/protocol_core.h" - -using namespace v8_crdtp; - -using v8_inspector::protocol::Binary; -using v8_inspector::protocol::String; -using v8_inspector::protocol::StringUtil; - -namespace v8_inspector { -namespace protocol { - -// In Chromium, we do not support big endian architectures, so no conversion is needed -// to interpret UTF16LE. -// static -String StringUtil::fromUTF16LE(const uint16_t* data, size_t length) { - std::string utf8; - base::UTF16ToUTF8(reinterpret_cast(data), length, &utf8); - return utf8; -} - -std::unique_ptr toProtocolValue( - const base::Value& value, int depth) { - if (!depth) - return nullptr; - if (value.is_none()) - return protocol::Value::null(); - if (value.is_bool()) - return protocol::FundamentalValue::create(value.GetBool()); - if (value.is_int()) - return protocol::FundamentalValue::create(value.GetInt()); - if (value.is_double()) - return protocol::FundamentalValue::create(value.GetDouble()); - if (value.is_string()) - return protocol::StringValue::create(value.GetString()); - if (value.is_list()) { - auto result = protocol::ListValue::create(); - for (const base::Value& item : value.GetList()) { - if (auto converted = toProtocolValue(item, depth - 1)) { - result->pushValue(std::move(converted)); - } - } - return result; - } - if (value.is_dict()) { - auto result = protocol::DictionaryValue::create(); - for (auto kv : value.DictItems()) { - if (auto converted = toProtocolValue(kv.second, depth - 1)) { - result->setValue(kv.first, std::move(converted)); - } - } - return result; - } - return nullptr; -} - -base::Value toBaseValue(Value* value, int depth) { - if (!value || !depth) - return base::Value(); - if (value->type() == Value::TypeBoolean) { - bool inner; - value->asBoolean(&inner); - return base::Value(inner); - } - if (value->type() == Value::TypeInteger) { - int inner; - value->asInteger(&inner); - return base::Value(inner); - } - if (value->type() == Value::TypeDouble) { - double inner; - value->asDouble(&inner); - return base::Value(inner); - } - if (value->type() == Value::TypeString) { - std::string inner; - value->asString(&inner); - return base::Value(inner); - } - if (value->type() == Value::TypeArray) { - ListValue* list = ListValue::cast(value); - base::Value result(base::Value::Type::LIST); - for (size_t i = 0; i < list->size(); i++) { - base::Value converted = toBaseValue(list->at(i), depth - 1); - if (!converted.is_none()) - result.Append(std::move(converted)); - } - return result; - } - if (value->type() == Value::TypeObject) { - DictionaryValue* dict = DictionaryValue::cast(value); - base::Value result(base::Value::Type::DICTIONARY); - for (size_t i = 0; i < dict->size(); i++) { - DictionaryValue::Entry entry = dict->at(i); - base::Value converted = toBaseValue(entry.second, depth - 1); - if (!converted.is_none()) - result.SetKey(entry.first, std::move(converted)); - } - return result; - } - return base::Value(); -} - -} // namespace v8_inspector { -} // namespace protocol { From 325019fb9e0a5031693412f3aa9ecbfb847e396b Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Thu, 25 May 2023 16:08:31 -0700 Subject: [PATCH 2/5] chore: Remove duplicate code This line shadows a v8::Context already present in the outer scope, so it's not necessary. --- test-app/runtime/src/main/cpp/MetadataNode.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test-app/runtime/src/main/cpp/MetadataNode.cpp b/test-app/runtime/src/main/cpp/MetadataNode.cpp index e858d6d34..f1b74a05e 100644 --- a/test-app/runtime/src/main/cpp/MetadataNode.cpp +++ b/test-app/runtime/src/main/cpp/MetadataNode.cpp @@ -1053,7 +1053,6 @@ Local MetadataNode::GetConstructorFunctionTemplate(Isolate* is // insert isolate-specific persistent function handle node->m_poCtorCachePerIsolate.insert({isolate, new Persistent(isolate, wrappedCtorFunc)}); if (!baseCtorFunc.IsEmpty()) { - auto context = isolate->GetCurrentContext(); wrappedCtorFunc->SetPrototype(context, baseCtorFunc); } From 9e4faf89aea2d0294b3f80c2dd4a9af5e6538022 Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Tue, 30 May 2023 14:33:57 -0700 Subject: [PATCH 3/5] chore: Make MetadataNode::tryGetExtensionMethodCallbackData more efficient Two changes suggested by Android Studio. We avoid copying the string argument, and we check quicker whether the map is empty without having to count all the entries. --- test-app/runtime/src/main/cpp/MetadataNode.cpp | 4 ++-- test-app/runtime/src/main/cpp/MetadataNode.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test-app/runtime/src/main/cpp/MetadataNode.cpp b/test-app/runtime/src/main/cpp/MetadataNode.cpp index f1b74a05e..f5dc703ab 100644 --- a/test-app/runtime/src/main/cpp/MetadataNode.cpp +++ b/test-app/runtime/src/main/cpp/MetadataNode.cpp @@ -671,9 +671,9 @@ vector MetadataNode::SetInstanceMethodsFromS MetadataNode::MethodCallbackData *MetadataNode::tryGetExtensionMethodCallbackData( std::unordered_map collectedMethodCallbackDatas, - std::string lookupName) { + const std::string& lookupName) { - if (collectedMethodCallbackDatas.size() < 1) { + if (collectedMethodCallbackDatas.empty()) { return nullptr; } diff --git a/test-app/runtime/src/main/cpp/MetadataNode.h b/test-app/runtime/src/main/cpp/MetadataNode.h index 7be68409f..c0de8da0a 100644 --- a/test-app/runtime/src/main/cpp/MetadataNode.h +++ b/test-app/runtime/src/main/cpp/MetadataNode.h @@ -97,7 +97,7 @@ class MetadataNode { MetadataTreeNode* treeNode); static MethodCallbackData* tryGetExtensionMethodCallbackData( std::unordered_map collectedMethodCallbackDatas, - std::string lookupName); + const std::string& lookupName); void SetInstanceFieldsFromStaticMetadata( v8::Isolate* isolate, PrototypeTemplateFiller& protoFiller, MetadataTreeNode* treeNode); From 477319289aab658bcb3b460036f7137bed62118f Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Thu, 24 Aug 2023 17:59:00 -0700 Subject: [PATCH 4/5] chore: Remove ObjectManager dead code JSWrapperConstructorCallback isn't used anywhere. --- test-app/runtime/src/main/cpp/ObjectManager.cpp | 4 ---- test-app/runtime/src/main/cpp/ObjectManager.h | 2 -- 2 files changed, 6 deletions(-) diff --git a/test-app/runtime/src/main/cpp/ObjectManager.cpp b/test-app/runtime/src/main/cpp/ObjectManager.cpp index fe134660c..e9575805b 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.cpp +++ b/test-app/runtime/src/main/cpp/ObjectManager.cpp @@ -287,10 +287,6 @@ Local ObjectManager::GetEmptyObject(Isolate *isolate) { return m_wrapperObjectTemplate.Get(isolate)->NewInstance(context).ToLocalChecked(); } -void ObjectManager::JSWrapperConstructorCallback(const v8::FunctionCallbackInfo &info) { - assert(info.IsConstructCall()); -} - void ObjectManager::ReleaseNativeCounterpart(v8::Local &object) { if(!object->IsObject()){ diff --git a/test-app/runtime/src/main/cpp/ObjectManager.h b/test-app/runtime/src/main/cpp/ObjectManager.h index 1b5244b10..912183fdb 100644 --- a/test-app/runtime/src/main/cpp/ObjectManager.h +++ b/test-app/runtime/src/main/cpp/ObjectManager.h @@ -80,8 +80,6 @@ class ObjectManager { static void DeleteWeakGlobalRefCallback(const jweak& object, void* state); - static void JSWrapperConstructorCallback(const v8::FunctionCallbackInfo& info); - static bool IsJsRuntimeObject(const v8::Local& object); jobject m_javaRuntimeObject; From 0cd405e314d42f445f7994427be54c88f546225d Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Wed, 30 Aug 2023 15:10:38 -0700 Subject: [PATCH 5/5] chore: Avoid copy in MetadataNode::IsJavascriptKeyword Noticed while fixing static initialization of keywords set, see next commit. --- test-app/runtime/src/main/cpp/MetadataNode.cpp | 2 +- test-app/runtime/src/main/cpp/MetadataNode.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test-app/runtime/src/main/cpp/MetadataNode.cpp b/test-app/runtime/src/main/cpp/MetadataNode.cpp index f5dc703ab..73a82f02a 100644 --- a/test-app/runtime/src/main/cpp/MetadataNode.cpp +++ b/test-app/runtime/src/main/cpp/MetadataNode.cpp @@ -2038,7 +2038,7 @@ void MetadataNode::EnableProfiler(bool enableProfiler) { s_profilerEnabled = enableProfiler; } -bool MetadataNode::IsJavascriptKeyword(std::string word) { +bool MetadataNode::IsJavascriptKeyword(const std::string& word) { static set keywords{ "abstract", "arguments", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "debugger", "default", "delete", "do", "double", "else", "enum", "eval", "export", "extends", "false", "final", "finally", "float", "for", "function", "goto", "if", "implements", diff --git a/test-app/runtime/src/main/cpp/MetadataNode.h b/test-app/runtime/src/main/cpp/MetadataNode.h index c0de8da0a..f954f0557 100644 --- a/test-app/runtime/src/main/cpp/MetadataNode.h +++ b/test-app/runtime/src/main/cpp/MetadataNode.h @@ -74,7 +74,7 @@ class MetadataNode { MetadataNode(MetadataTreeNode* treeNode); - static bool IsJavascriptKeyword(std::string word); + static bool IsJavascriptKeyword(const std::string& word); v8::Local CreatePackageObject(v8::Isolate* isolate); v8::Local GetConstructorFunction(v8::Isolate* isolate);