diff --git a/atom/app/node_main.cc b/atom/app/node_main.cc index 3111e9be39a..c1e8dd8aff4 100644 --- a/atom/app/node_main.cc +++ b/atom/app/node_main.cc @@ -46,7 +46,6 @@ int NodeMain(int argc, char *argv[]) { base::TaskScheduler::CreateAndStartWithDefaultParams("Electron"); // Initialize gin::IsolateHolder. - JavascriptEnvironment::Initialize(); JavascriptEnvironment gin_env; int exec_argc; diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index b35ffcbfc2b..39fd59612fa 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -529,8 +529,6 @@ void OnIconDataAvailable(v8::Isolate* isolate, } // namespace App::App(v8::Isolate* isolate) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - static_cast(AtomBrowserClient::Get())->set_delegate(this); Browser::Get()->AddObserver(this); content::GpuDataManager::GetInstance()->AddObserver(this); diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index 8a6bc4278e1..cf3c96ac2c8 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -130,7 +130,27 @@ void AtomBrowserMainParts::PostEarlyInitialization() { // The ProxyResolverV8 has setup a complete V8 environment, in order to // avoid conflicts we only initialize our V8 environment after that. - JavascriptEnvironment::Initialize(); + js_env_.reset(new JavascriptEnvironment); + + node_bindings_->Initialize(); + + // Create the global environment. + node::Environment* env = + node_bindings_->CreateEnvironment(js_env_->context()); + node_env_.reset(new NodeEnvironment(env)); + + // Enable support for v8 inspector + node_debugger_.reset(new NodeDebugger(env)); + node_debugger_->Start(); + + // Add Electron extended APIs. + atom_bindings_->BindTo(js_env_->isolate(), env->process_object()); + + // Load everything. + node_bindings_->LoadEnvironment(env); + + // Wrap the uv loop with global env. + node_bindings_->set_uv_env(env); } int AtomBrowserMainParts::PreCreateThreads() { @@ -195,28 +215,6 @@ void AtomBrowserMainParts::PostMainMessageLoopStart() { base::FilePath user_dir; PathService::Get(brightray::DIR_USER_DATA, &user_dir); process_singleton_.reset(new ProcessSingleton(user_dir)); - - js_env_.reset(new JavascriptEnvironment); - - node_bindings_->Initialize(); - - // Create the global environment. - node::Environment* env = - node_bindings_->CreateEnvironment(js_env_->context()); - node_env_.reset(new NodeEnvironment(env)); - - // Enable support for v8 inspector - node_debugger_.reset(new NodeDebugger(env)); - node_debugger_->Start(); - - // Add Electron extended APIs. - atom_bindings_->BindTo(js_env_->isolate(), env->process_object()); - - // Load everything. - node_bindings_->LoadEnvironment(env); - - // Wrap the uv loop with global env. - node_bindings_->set_uv_env(env); } void AtomBrowserMainParts::PostMainMessageLoopRun() { diff --git a/atom/browser/javascript_environment.cc b/atom/browser/javascript_environment.cc index 2a22c344389..e7a510488a9 100644 --- a/atom/browser/javascript_environment.cc +++ b/atom/browser/javascript_environment.cc @@ -18,22 +18,9 @@ namespace atom { -// static -void JavascriptEnvironment::Initialize() { - auto cmd = base::CommandLine::ForCurrentProcess(); - - // --js-flags. - std::string js_flags = cmd->GetSwitchValueASCII(switches::kJavaScriptFlags); - if (!js_flags.empty()) - v8::V8::SetFlagsFromString(js_flags.c_str(), js_flags.size()); - - gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, - gin::IsolateHolder::kStableV8Extras, - gin::ArrayBufferAllocator::SharedInstance()); -} - JavascriptEnvironment::JavascriptEnvironment() - : isolate_holder_(base::ThreadTaskRunnerHandle::Get()), + : initialized_(Initialize()), + isolate_holder_(base::ThreadTaskRunnerHandle::Get()), isolate_(isolate_holder_.isolate()), isolate_scope_(isolate_), locker_(isolate_), @@ -49,6 +36,21 @@ void JavascriptEnvironment::OnMessageLoopDestroying() { isolate_holder_.RemoveRunMicrotasksObserver(); } +bool JavascriptEnvironment::Initialize() { + auto cmd = base::CommandLine::ForCurrentProcess(); + + // --js-flags. + std::string js_flags = cmd->GetSwitchValueASCII(switches::kJavaScriptFlags); + if (!js_flags.empty()) + v8::V8::SetFlagsFromString(js_flags.c_str(), js_flags.size()); + + gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, + gin::IsolateHolder::kStableV8Extras, + gin::ArrayBufferAllocator::SharedInstance()); + + return true; +} + NodeEnvironment::NodeEnvironment(node::Environment* env) : env_(env) { } diff --git a/atom/browser/javascript_environment.h b/atom/browser/javascript_environment.h index 4a14caafbd4..e515307819c 100644 --- a/atom/browser/javascript_environment.h +++ b/atom/browser/javascript_environment.h @@ -18,8 +18,6 @@ namespace atom { // Manage the V8 isolate and context automatically. class JavascriptEnvironment { public: - static void Initialize(); - JavascriptEnvironment(); void OnMessageLoopCreated(); @@ -32,6 +30,9 @@ class JavascriptEnvironment { } private: + bool Initialize(); + + bool initialized_; gin::IsolateHolder isolate_holder_; v8::Isolate* isolate_; v8::Isolate::Scope isolate_scope_;