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_INSPECTED_CONTEXT_H_
6#define V8_INSPECTOR_INSPECTED_CONTEXT_H_
7
8#include <memory>
9#include <unordered_map>
10#include <unordered_set>
11
12#include "include/v8-local-handle.h"
13#include "include/v8-persistent-handle.h"
14#include "src/base/macros.h"
15#include "src/debug/debug-interface.h"
16#include "src/inspector/string-16.h"
17#include "src/inspector/v8-debugger-id.h"
18
19namespace v8 {
20class Context;
21class Object;
22}  // namespace v8
23
24namespace v8_inspector {
25
26class InjectedScript;
27class InjectedScriptHost;
28class V8ContextInfo;
29class V8InspectorImpl;
30
31enum class V8InternalValueType { kNone, kEntry, kScope, kScopeList };
32
33class InspectedContext {
34 public:
35  ~InspectedContext();
36  InspectedContext(const InspectedContext&) = delete;
37  InspectedContext& operator=(const InspectedContext&) = delete;
38
39  static int contextId(v8::Local<v8::Context>);
40
41  v8::Local<v8::Context> context() const;
42  int contextId() const { return m_contextId; }
43  int contextGroupId() const { return m_contextGroupId; }
44  String16 origin() const { return m_origin; }
45  String16 humanReadableName() const { return m_humanReadableName; }
46  internal::V8DebuggerId uniqueId() const { return m_uniqueId; }
47  String16 auxData() const { return m_auxData; }
48
49  bool isReported(int sessionId) const;
50  void setReported(int sessionId, bool reported);
51
52  v8::Isolate* isolate() const;
53  V8InspectorImpl* inspector() const { return m_inspector; }
54
55  InjectedScript* getInjectedScript(int sessionId);
56  InjectedScript* createInjectedScript(int sessionId);
57  void discardInjectedScript(int sessionId);
58
59  bool addInternalObject(v8::Local<v8::Object> object,
60                         V8InternalValueType type);
61  V8InternalValueType getInternalType(v8::Local<v8::Object> object);
62
63 private:
64  friend class V8InspectorImpl;
65  InspectedContext(V8InspectorImpl*, const V8ContextInfo&, int contextId);
66
67  class WeakCallbackData;
68
69  V8InspectorImpl* m_inspector;
70  v8::Global<v8::Context> m_context;
71  int m_contextId;
72  int m_contextGroupId;
73  const String16 m_origin;
74  const String16 m_humanReadableName;
75  const String16 m_auxData;
76  const internal::V8DebuggerId m_uniqueId;
77  std::unordered_set<int> m_reportedSessionIds;
78  std::unordered_map<int, std::unique_ptr<InjectedScript>> m_injectedScripts;
79  WeakCallbackData* m_weakCallbackData;
80  v8::Global<v8::debug::EphemeronTable> m_internalObjects;
81};
82
83}  // namespace v8_inspector
84
85#endif  // V8_INSPECTOR_INSPECTED_CONTEXT_H_
86