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