diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 24c8063bc8da..f3955d2d03ab 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -270,12 +270,14 @@ v8::Local App::DefaultSession(v8::Isolate* isolate) { } bool App::MakeSingleInstance(v8::Local callback) { + auto browser = Browser::Get(); single_instance_callback_ = callback; + browser->InitializeSingleInstance(); + ProcessSingleton::NotificationCallback cb; mate::Converter::FromV8(isolate(), single_instance_callback_, &cb); - auto browser = Browser::Get(); browser->SetSingleInstanceCallback(cb); switch(browser->GetSingleInstanceResult()) { diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index 84b149330a65..5c12a0d338f8 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -112,17 +112,6 @@ void Browser::Activate(bool has_visible_windows) { } void Browser::WillFinishLaunching() { - base::FilePath userDir; - PathService::Get(brightray::DIR_USER_DATA, &userDir); - - auto no_refcount_this = base::Unretained(this); - process_singleton_.reset(new AtomProcessSingleton( - userDir, - base::Bind(&Browser::OnProcessSingletonNotification, no_refcount_this))); - - LOG(ERROR) << "Setting up Process Singleton: " << userDir.value(); - process_notify_result_ = process_singleton_->NotifyOtherProcessOrCreate(); - FOR_EACH_OBSERVER(BrowserObserver, observers_, OnWillFinishLaunching()); } @@ -154,7 +143,7 @@ void Browser::NotifyAndShutdown() { is_quiting_ = false; return; } - + process_singleton_->Cleanup(); Shutdown(); } @@ -168,6 +157,18 @@ bool Browser::HandleBeforeQuit() { return !prevent_default; } +void Browser::InitializeSingleInstance() { + base::FilePath userDir; + PathService::Get(brightray::DIR_USER_DATA, &userDir); + + auto no_refcount_this = base::Unretained(this); + process_singleton_.reset(new AtomProcessSingleton( + userDir, + base::Bind(&Browser::OnProcessSingletonNotification, no_refcount_this))); + + process_notify_result_ = process_singleton_->NotifyOtherProcessOrCreate(); +} + ProcessSingleton::NotifyResult Browser::GetSingleInstanceResult() { LOG(ERROR) << "Process Notify Result: " << process_notify_result_; return process_notify_result_; diff --git a/atom/browser/browser.h b/atom/browser/browser.h index b3de4d169ac9..9113c58dd12d 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -66,6 +66,7 @@ class Browser : public WindowListObserver { // Clear the recent documents list. void ClearRecentDocuments(); + void InitializeSingleInstance(); ProcessSingleton::NotifyResult GetSingleInstanceResult(); void SetSingleInstanceCallback(ProcessSingleton::NotificationCallback callback); @@ -157,7 +158,7 @@ class Browser : public WindowListObserver { // WindowListObserver implementations: void OnWindowCloseCancelled(NativeWindow* window) override; void OnWindowAllClosed() override; - + bool OnProcessSingletonNotification( const base::CommandLine& command_line, const base::FilePath& current_directory);