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_V8CONSOLE_H_ 6f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#define V8_INSPECTOR_V8CONSOLE_H_ 7f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 8f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/base/macros.h" 9f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 10f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "include/v8.h" 11f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 12f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochnamespace v8_inspector { 13f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 14f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass InspectedContext; 15f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 16f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// Console API 17f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch// https://console.spec.whatwg.org/#console-interface 18f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochclass V8Console { 19f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 20f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static v8::Local<v8::Object> createConsole(InspectedContext*, 21f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bool hasMemoryAttribute); 22f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void clearInspectedContextIfNeeded(v8::Local<v8::Context>, 23f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Object> console); 24f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static v8::Local<v8::Object> createCommandLineAPI(InspectedContext*); 25f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 26f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch class CommandLineAPIScope { 27f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch public: 28f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch CommandLineAPIScope(v8::Local<v8::Context>, 29f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Object> commandLineAPI, 30f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Object> global); 31f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch ~CommandLineAPIScope(); 32f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 33f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch private: 34f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void accessorGetterCallback( 35f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&); 36f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void accessorSetterCallback(v8::Local<v8::Name>, 37f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Value>, 38f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::PropertyCallbackInfo<void>&); 39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Context> m_context; 41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Object> m_commandLineAPI; 42f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Object> m_global; 43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch v8::Local<v8::Set> m_installedMethods; 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch bool m_cleanup; 45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 46f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CommandLineAPIScope); 47f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch }; 48f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 49f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch private: 50f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void debugCallback(const v8::FunctionCallbackInfo<v8::Value>&); 51f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void errorCallback(const v8::FunctionCallbackInfo<v8::Value>&); 52f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void infoCallback(const v8::FunctionCallbackInfo<v8::Value>&); 53f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void logCallback(const v8::FunctionCallbackInfo<v8::Value>&); 54f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void warnCallback(const v8::FunctionCallbackInfo<v8::Value>&); 55f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void dirCallback(const v8::FunctionCallbackInfo<v8::Value>&); 56f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void dirxmlCallback(const v8::FunctionCallbackInfo<v8::Value>&); 57f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void tableCallback(const v8::FunctionCallbackInfo<v8::Value>&); 58f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void traceCallback(const v8::FunctionCallbackInfo<v8::Value>&); 59f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void groupCallback(const v8::FunctionCallbackInfo<v8::Value>&); 60f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void groupCollapsedCallback( 61f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>&); 62f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void groupEndCallback(const v8::FunctionCallbackInfo<v8::Value>&); 63f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void clearCallback(const v8::FunctionCallbackInfo<v8::Value>&); 64f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void countCallback(const v8::FunctionCallbackInfo<v8::Value>&); 65f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void assertCallback(const v8::FunctionCallbackInfo<v8::Value>&); 66f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void markTimelineCallback(const v8::FunctionCallbackInfo<v8::Value>&); 67f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void profileCallback(const v8::FunctionCallbackInfo<v8::Value>&); 68f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void profileEndCallback(const v8::FunctionCallbackInfo<v8::Value>&); 69f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void timelineCallback(const v8::FunctionCallbackInfo<v8::Value>&); 70f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void timelineEndCallback(const v8::FunctionCallbackInfo<v8::Value>&); 71f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void timeCallback(const v8::FunctionCallbackInfo<v8::Value>&); 72f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void timeEndCallback(const v8::FunctionCallbackInfo<v8::Value>&); 73f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void timeStampCallback(const v8::FunctionCallbackInfo<v8::Value>&); 74f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch // TODO(foolip): There is no spec for the Memory Info API, see blink-dev: 75f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch // https://groups.google.com/a/chromium.org/d/msg/blink-dev/g5YRCGpC9vs/b4OJz71NmPwJ 76f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void memoryGetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); 77f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void memorySetterCallback(const v8::FunctionCallbackInfo<v8::Value>&); 78f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 79f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch // CommandLineAPI 80f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void keysCallback(const v8::FunctionCallbackInfo<v8::Value>&); 81f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void valuesCallback(const v8::FunctionCallbackInfo<v8::Value>&); 82f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void debugFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>&); 83f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void undebugFunctionCallback( 84f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>&); 85f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void monitorFunctionCallback( 86f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>&); 87f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void unmonitorFunctionCallback( 88f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>&); 89f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void lastEvaluationResultCallback( 90f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>&); 91f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectCallback(const v8::FunctionCallbackInfo<v8::Value>&); 92f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void copyCallback(const v8::FunctionCallbackInfo<v8::Value>&); 93f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject(const v8::FunctionCallbackInfo<v8::Value>&, 94f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch unsigned num); 95f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject0( 96f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>& info) { 97f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch inspectedObject(info, 0); 98f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 99f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject1( 100f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>& info) { 101f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch inspectedObject(info, 1); 102f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 103f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject2( 104f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>& info) { 105f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch inspectedObject(info, 2); 106f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 107f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject3( 108f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>& info) { 109f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch inspectedObject(info, 3); 110f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 111f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch static void inspectedObject4( 112f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch const v8::FunctionCallbackInfo<v8::Value>& info) { 113f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch inspectedObject(info, 4); 114f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 115f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch}; 116f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 117f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch} // namespace v8_inspector 118f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch 119f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#endif // V8_INSPECTOR_V8CONSOLE_H_ 120