Files
electron/patches/node/fix_allow_preventing_initializeinspector_in_env.patch
2020-09-22 07:11:56 -07:00

83 lines
3.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shelley Vohr <shelley.vohr@gmail.com>
Date: Tue, 1 Sep 2020 19:30:08 -0700
Subject: fix: allow preventing InitializeInspector in env
https://github.com/nodejs/node/commit/8c5ad1392f30cfe6b107e9bd85f4cb918ba04aab
made it such that env->InitializeInspector was called in CreateEnvironment
no matter what, which creates an issue for embedders seeking to manage
the InspectorAgent themselves as Electron does. This adds a new
EnvironmentFlags option which allows preventing that invocation.
This will be upstreamed.
diff --git a/src/api/environment.cc b/src/api/environment.cc
index 4fa2d4175fb318f560b7b9a8ed8baa091d3ed6a2..7bd899c5933ac2e6178d650632699e19e85c00c9 100644
--- a/src/api/environment.cc
+++ b/src/api/environment.cc
@@ -358,12 +358,14 @@ Environment* CreateEnvironment(
thread_id);
#if HAVE_INSPECTOR
- if (inspector_parent_handle) {
- env->InitializeInspector(
- std::move(static_cast<InspectorParentHandleImpl*>(
- inspector_parent_handle.get())->impl));
- } else {
- env->InitializeInspector({});
+ if (!env->should_not_initialize_inspector()) {
+ if (inspector_parent_handle) {
+ env->InitializeInspector(
+ std::move(static_cast<InspectorParentHandleImpl*>(
+ inspector_parent_handle.get())->impl));
+ } else {
+ env->InitializeInspector({});
+ }
}
#endif
diff --git a/src/env-inl.h b/src/env-inl.h
index 623e9d4e429c03bb267539a318166f3ef3b9c501..8fc5f720764dd4ca536ae01ca78b2c7e3e9fd007 100644
--- a/src/env-inl.h
+++ b/src/env-inl.h
@@ -833,6 +833,10 @@ inline bool Environment::owns_inspector() const {
return flags_ & EnvironmentFlags::kOwnsInspector;
}
+inline bool Environment::should_not_initialize_inspector() const {
+ return flags_ & EnvironmentFlags::kNoInitializeInspector;
+}
+
inline bool Environment::tracks_unmanaged_fds() const {
return flags_ & EnvironmentFlags::kTrackUnmanagedFds;
}
diff --git a/src/env.h b/src/env.h
index 38d17f4e18aa38fde2c2f59a9816c8fb0f65fd51..4b9c2780f9736cb8bde60f40abb9aac9d53160a1 100644
--- a/src/env.h
+++ b/src/env.h
@@ -1019,6 +1019,7 @@ class Environment : public MemoryRetainer {
inline bool is_main_thread() const;
inline bool should_not_register_esm_loader() const;
+ inline bool should_not_initialize_inspector() const;
inline bool owns_process_state() const;
inline bool owns_inspector() const;
inline bool tracks_unmanaged_fds() const;
diff --git a/src/node.h b/src/node.h
index 80acb3f9f04ef8e6c363cf31384af4037abeeb87..6b657f6941b8f96da08b6397e01e19a2763edf8f 100644
--- a/src/node.h
+++ b/src/node.h
@@ -424,7 +424,11 @@ enum Flags : uint64_t {
kNoRegisterESMLoader = 1 << 3,
// Set this flag to make Node.js track "raw" file descriptors, i.e. managed
// by fs.open() and fs.close(), and close them during FreeEnvironment().
- kTrackUnmanagedFds = 1 << 4
+ kTrackUnmanagedFds = 1 << 4,
+ // This flag should be set to prevent InspectorAgent initialization from
+ // within the environment. This is used by embedders who wish to manage the
+ // InspectorAgent themselves.
+ kNoInitializeInspector = 1 << 5
};
} // namespace EnvironmentFlags