diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index e386e678a47c..4031fb27cf30 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -132,6 +132,7 @@ void AtomBrowserMainParts::PostEarlyInitialization() { // Create the global environment. node::Environment* env = node_bindings_->CreateEnvironment(js_env_->context()); + node_env_.reset(new NodeEnvironment(env)); // Make sure node can get correct environment when debugging. if (node_debugger_->IsRunning()) diff --git a/atom/browser/atom_browser_main_parts.h b/atom/browser/atom_browser_main_parts.h index 0d8619f6865a..71adc43d5e65 100644 --- a/atom/browser/atom_browser_main_parts.h +++ b/atom/browser/atom_browser_main_parts.h @@ -22,6 +22,7 @@ class Browser; class JavascriptEnvironment; class NodeBindings; class NodeDebugger; +class NodeEnvironment; class BridgeTaskRunner; class AtomBrowserMainParts : public brightray::BrowserMainParts { @@ -79,6 +80,7 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts { std::unique_ptr browser_; std::unique_ptr js_env_; + std::unique_ptr node_env_; std::unique_ptr node_bindings_; std::unique_ptr atom_bindings_; std::unique_ptr node_debugger_; diff --git a/atom/browser/javascript_environment.cc b/atom/browser/javascript_environment.cc index 3cdd2c771ee6..b3e01c1c3009 100644 --- a/atom/browser/javascript_environment.cc +++ b/atom/browser/javascript_environment.cc @@ -12,6 +12,8 @@ #include "gin/array_buffer.h" #include "gin/v8_initializer.h" +#include "atom/common/node_includes.h" + namespace atom { JavascriptEnvironment::JavascriptEnvironment() @@ -46,4 +48,11 @@ bool JavascriptEnvironment::Initialize() { return true; } +NodeEnvironment::NodeEnvironment(node::Environment* env) : env_(env) { +} + +NodeEnvironment::~NodeEnvironment() { + node::FreeEnvironment(env_); +} + } // namespace atom diff --git a/atom/browser/javascript_environment.h b/atom/browser/javascript_environment.h index 1f4d2f453478..046ba3e29c8f 100644 --- a/atom/browser/javascript_environment.h +++ b/atom/browser/javascript_environment.h @@ -8,8 +8,13 @@ #include "base/macros.h" #include "gin/public/isolate_holder.h" +namespace node { +class Environment; +} + namespace atom { +// Manage the V8 isolate and context automatically. class JavascriptEnvironment { public: JavascriptEnvironment(); @@ -37,6 +42,18 @@ class JavascriptEnvironment { DISALLOW_COPY_AND_ASSIGN(JavascriptEnvironment); }; +// Manage the Node Environment automatically. +class NodeEnvironment { + public: + NodeEnvironment(node::Environment* env); + ~NodeEnvironment(); + + private: + node::Environment* env_; + + DISALLOW_COPY_AND_ASSIGN(NodeEnvironment); +}; + } // namespace atom #endif // ATOM_BROWSER_JAVASCRIPT_ENVIRONMENT_H_