1f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// Copyright 2016 the V8 project authors. All rights reserved. 2f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// found in the LICENSE file. 4f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 5f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#ifndef V8_INSPECTOR_V8CONSOLEMESSAGE_H_ 6f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#define V8_INSPECTOR_V8CONSOLEMESSAGE_H_ 7f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 8f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include <deque> 9f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "include/v8.h" 10f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/inspector/protocol/Console.h" 11f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/inspector/protocol/Forward.h" 12f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/inspector/protocol/Runtime.h" 13f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 14f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochnamespace v8_inspector { 15f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 16f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass InspectedContext; 17f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8InspectorImpl; 18f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8InspectorSessionImpl; 19f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8StackTraceImpl; 20f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 21f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochenum class V8MessageOrigin { kConsole, kException, kRevokedException }; 22f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 23f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochenum class ConsoleAPIType { 24f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kLog, 25f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kDebug, 26f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kInfo, 27f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kError, 28f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kWarning, 29f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kDir, 30f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kDirXML, 31f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kTable, 32f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kTrace, 33f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kStartGroup, 34f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kStartGroupCollapsed, 35f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kEndGroup, 36f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kClear, 37f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kAssert, 38f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kTimeEnd, 39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch kCount 40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}; 41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 42f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8ConsoleMessage { 43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ~V8ConsoleMessage(); 45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 46f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static std::unique_ptr<V8ConsoleMessage> createForConsoleAPI( 47f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch double timestamp, ConsoleAPIType, 48f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const std::vector<v8::Local<v8::Value>>& arguments, 49f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<V8StackTraceImpl>, InspectedContext*); 50f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 51f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static std::unique_ptr<V8ConsoleMessage> createForException( 52f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch double timestamp, const String16& detailedMessage, const String16& url, 53f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned lineNumber, unsigned columnNumber, 54f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<V8StackTraceImpl>, int scriptId, v8::Isolate*, 55f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const String16& message, int contextId, v8::Local<v8::Value> exception, 56f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned exceptionId); 57f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 58f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static std::unique_ptr<V8ConsoleMessage> createForRevokedException( 59f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch double timestamp, const String16& message, unsigned revokedExceptionId); 60f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 61f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8MessageOrigin origin() const; 62f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void reportToFrontend(protocol::Console::Frontend*) const; 63f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void reportToFrontend(protocol::Runtime::Frontend*, V8InspectorSessionImpl*, 64f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bool generatePreview) const; 65f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ConsoleAPIType type() const; 66f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void contextDestroyed(int contextId); 67f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 6862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int estimatedSize() const { 6962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch return m_v8Size + static_cast<int>(m_message.length() * sizeof(UChar)); 7062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch } 7162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 72f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch private: 73f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8ConsoleMessage(V8MessageOrigin, double timestamp, const String16& message); 74f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 75f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch using Arguments = std::vector<std::unique_ptr<v8::Global<v8::Value>>>; 76f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> 77f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch wrapArguments(V8InspectorSessionImpl*, bool generatePreview) const; 78f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<protocol::Runtime::RemoteObject> wrapException( 79f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8InspectorSessionImpl*, bool generatePreview) const; 80f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void setLocation(const String16& url, unsigned lineNumber, 81f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned columnNumber, std::unique_ptr<V8StackTraceImpl>, 82f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch int scriptId); 83f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 84f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8MessageOrigin m_origin; 85f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch double m_timestamp; 86f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch String16 m_message; 87f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch String16 m_url; 88f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned m_lineNumber; 89f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned m_columnNumber; 90f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::unique_ptr<V8StackTraceImpl> m_stackTrace; 91f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch int m_scriptId; 92f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch int m_contextId; 93f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ConsoleAPIType m_type; 94f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned m_exceptionId; 95f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned m_revokedExceptionId; 9662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int m_v8Size = 0; 97f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch Arguments m_arguments; 98f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch String16 m_detailedMessage; 99f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}; 100f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 101f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8ConsoleMessageStorage { 102f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 103f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8ConsoleMessageStorage(V8InspectorImpl*, int contextGroupId); 104f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ~V8ConsoleMessageStorage(); 105f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 106f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch int contextGroupId() { return m_contextGroupId; } 107f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const std::deque<std::unique_ptr<V8ConsoleMessage>>& messages() const { 108f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch return m_messages; 109f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 110f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 111f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void addMessage(std::unique_ptr<V8ConsoleMessage>); 112f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void contextDestroyed(int contextId); 113f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch void clear(); 114f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 115f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch private: 116f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch V8InspectorImpl* m_inspector; 117f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch int m_contextGroupId; 11862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int m_estimatedSize = 0; 119f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch std::deque<std::unique_ptr<V8ConsoleMessage>> m_messages; 120f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}; 121f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 122f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch} // namespace v8_inspector 123f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 124f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#endif // V8_INSPECTOR_V8CONSOLEMESSAGE_H_ 125