void V8ConsoleMessage::appendArguments(protocol::Console::ConsoleMessage* result, V8InspectorSessionImpl* session, bool generatePreview) const { if (!m_arguments.size() || !m_contextId) return; InspectedContext* inspectedContext = session->debugger()->getContext(session->contextGroupId(), m_contextId); if (!inspectedContext) return; v8::Isolate* isolate = inspectedContext->isolate(); v8::HandleScope handles(isolate); v8::Local<v8::Context> context = inspectedContext->context(); std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> args = protocol::Array<protocol::Runtime::RemoteObject>::create(); if (m_type == TableMessageType && generatePreview) { v8::Local<v8::Value> table = m_arguments[0]->Get(isolate); v8::Local<v8::Value> columns = m_arguments.size() > 1 ? m_arguments[1]->Get(isolate) : v8::Local<v8::Value>(); std::unique_ptr<protocol::Runtime::RemoteObject> wrapped = session->wrapTable(context, table, columns); if (wrapped) args->addItem(std::move(wrapped)); else args = nullptr; } else { for (size_t i = 0; i < m_arguments.size(); ++i) { std::unique_ptr<protocol::Runtime::RemoteObject> wrapped = session->wrapObject(context, m_arguments[i]->Get(isolate), "console", generatePreview); if (!wrapped) { args = nullptr; break; } args->addItem(std::move(wrapped)); } } if (args) result->setParameters(std::move(args)); }
std::unique_ptr<protocol::Runtime::RemoteObject> V8ConsoleMessage::wrapException(V8InspectorSessionImpl* session, bool generatePreview) const { if (!m_arguments.size() || !m_contextId) return nullptr; DCHECK_EQ(1u, m_arguments.size()); InspectedContext* inspectedContext = session->debugger()->getContext(session->contextGroupId(), m_contextId); if (!inspectedContext) return nullptr; v8::Isolate* isolate = inspectedContext->isolate(); v8::HandleScope handles(isolate); // TODO(dgozman): should we use different object group? return session->wrapObject(inspectedContext->context(), m_arguments[0]->Get(isolate), "console", generatePreview); }