From 34129b83a471cbe2aa4de153c1af084a1cd8be83 Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Thu, 17 Feb 2022 06:56:53 +0100 Subject: [PATCH] chore: error catching in node_bindings (#32858) --- shell/common/node_bindings.cc | 37 +++++++++++++++++------------------ 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/shell/common/node_bindings.cc b/shell/common/node_bindings.cc index b29e4bcccd19f..99b017dc425fe 100644 --- a/shell/common/node_bindings.cc +++ b/shell/common/node_bindings.cc @@ -462,8 +462,7 @@ node::Environment* NodeBindings::CreateEnvironment( args.insert(args.begin() + 1, init_script); - isolate_data_ = - node::CreateIsolateData(context->GetIsolate(), uv_loop_, platform); + isolate_data_ = node::CreateIsolateData(isolate, uv_loop_, platform); node::Environment* env; uint64_t flags = node::EnvironmentFlags::kDefaultFlags | @@ -476,25 +475,25 @@ node::Environment* NodeBindings::CreateEnvironment( // not to register its handler (overriding blinks) in non-browser processes. flags |= node::EnvironmentFlags::kNoRegisterESMLoader | node::EnvironmentFlags::kNoInitializeInspector; - v8::TryCatch try_catch(context->GetIsolate()); - env = node::CreateEnvironment( - isolate_data_, context, args, exec_args, - static_cast(flags)); - DCHECK(env); - - // This will only be caught when something has gone terrible wrong as all - // electron scripts are wrapped in a try {} catch {} by webpack - if (try_catch.HasCaught()) { - LOG(ERROR) << "Failed to initialize node environment in process: " - << process_type; - } - } else { - env = node::CreateEnvironment( - isolate_data_, context, args, exec_args, - static_cast(flags)); - DCHECK(env); } + v8::TryCatch try_catch(isolate); + env = node::CreateEnvironment( + isolate_data_, context, args, exec_args, + static_cast(flags)); + + if (try_catch.HasCaught()) { + std::string err_msg = + "Failed to initialize node environment in process: " + process_type; + v8::Local message = try_catch.Message(); + std::string msg; + if (!message.IsEmpty() && gin::ConvertFromV8(isolate, message->Get(), &msg)) + err_msg += " , with error: " + msg; + LOG(ERROR) << err_msg; + } + + DCHECK(env); + // Clean up the global _noBrowserGlobals that we unironically injected into // the global scope if (browser_env_ != BrowserEnvironment::kBrowser) {