electron/shell/browser/node_debugger.cc
Shelley Vohr aa211c6c50 chore: update to Node.js v12.4.0 (#18924)
* chore: update to node 12.4.0

* chore: fix js2c compilation and usage

* update branch reference

* chore: roll node

* refactor: use the new node::options_parser::Parse method

* fix: make node create our context for us so that everything is initialized correctly

* fix: let node do it's thing to the all contexts

We need to let node know about all the contexts that Chromium creates for the renderer processes so that it does not crash when trying to access primordials.  Similar to node::NewContext but with an existing context

* chore: roll node

* chore: roll node

* chore: roll node

* chore: roll node

* fix: ensure that _noBrowserGlobals is set before the node bootstrapper runs

Co-authored-by: Jeremy Apthorp <jeremya@chromium.org>
2019-07-15 18:58:39 -07:00

67 lines
1.8 KiB
C++

// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "shell/browser/node_debugger.h"
#include <memory>
#include <string>
#include <vector>
#include "base/command_line.h"
#include "base/logging.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "libplatform/libplatform.h"
#include "native_mate/dictionary.h"
#include "shell/common/node_includes.h"
namespace electron {
NodeDebugger::NodeDebugger(node::Environment* env) : env_(env) {}
NodeDebugger::~NodeDebugger() {}
void NodeDebugger::Start() {
auto* inspector = env_->inspector_agent();
if (inspector == nullptr)
return;
std::vector<std::string> args;
for (auto& arg : base::CommandLine::ForCurrentProcess()->argv()) {
#if defined(OS_WIN)
args.push_back(base::UTF16ToUTF8(arg));
#else
args.push_back(arg);
#endif
}
node::DebugOptions options;
std::vector<std::string> exec_args;
std::vector<std::string> v8_args;
std::vector<std::string> errors;
node::options_parser::Parse(&args, &exec_args, &v8_args, &options,
node::options_parser::kDisallowedInEnvironment,
&errors);
if (!errors.empty()) {
// TODO(jeremy): what's the appropriate behaviour here?
LOG(ERROR) << "Error parsing node options: "
<< base::JoinString(errors, " ");
}
const char* path = "";
if (inspector->Start(path, options,
std::make_shared<node::HostPort>(options.host_port),
true /* is_main */))
DCHECK(env_->inspector_agent()->IsListening());
}
void NodeDebugger::Stop() {
auto* inspector = env_->inspector_agent();
if (inspector && inspector->IsListening())
inspector->Stop();
}
} // namespace electron