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