1212#include " atom/common/api/atom_bindings.h"
1313#include " atom/common/crash_reporter/crash_reporter.h"
1414#include " atom/common/native_mate_converters/string16_converter.h"
15+ #include " atom/common/node_bindings.h"
1516#include " base/command_line.h"
1617#include " base/feature_list.h"
1718#include " base/task_scheduler/task_scheduler.h"
@@ -50,14 +51,16 @@ int NodeMain(int argc, char *argv[]) {
5051 // Initialize gin::IsolateHolder.
5152 JavascriptEnvironment gin_env;
5253
54+ // Explicitly register electron's builtin modules.
55+ NodeBindings::RegisterBuiltinModules ();
56+
5357 int exec_argc;
5458 const char ** exec_argv;
5559 node::Init (&argc, const_cast <const char **>(argv), &exec_argc, &exec_argv);
5660
57- node::IsolateData isolate_data (gin_env.isolate (), loop);
5861 node::Environment* env = node::CreateEnvironment (
59- &isolate_data, gin_env.context (), argc, argv ,
60- exec_argc, exec_argv);
62+ node::CreateIsolateData ( gin_env.isolate (), loop, gin_env. platform ()) ,
63+ gin_env. context (), argc, argv, exec_argc, exec_argv);
6164
6265 // Enable support for v8 inspector.
6366 NodeDebugger node_debugger (env);
@@ -79,6 +82,7 @@ int NodeMain(int argc, char *argv[]) {
7982 bool more;
8083 do {
8184 more = uv_run (env->event_loop (), UV_RUN_ONCE);
85+ gin_env.platform ()->DrainBackgroundTasks (env->isolate ());
8286 if (more == false ) {
8387 node::EmitBeforeExit (env);
8488
@@ -92,6 +96,8 @@ int NodeMain(int argc, char *argv[]) {
9296
9397 exit_code = node::EmitExit (env);
9498 node::RunAtExit (env);
99+ gin_env.platform ()->DrainBackgroundTasks (env->isolate ());
100+ gin_env.platform ()->CancelPendingDelayedTasks (env->isolate ());
95101
96102 node::FreeEnvironment (env);
97103 }
0 commit comments