From f928a399ae4a7e7d3025feb5edd801ec7ded9c40 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Thu, 14 Sep 2017 23:08:18 +1000 Subject: [PATCH] Move OnBrowserReady call to PreMainMessageLoopRun to account for timing issues on macOS --- atom/browser/api/atom_api_app.cc | 7 +++++++ atom/browser/api/atom_api_app.h | 4 ++++ atom/browser/atom_browser_main_parts.cc | 3 +++ 3 files changed, 14 insertions(+) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 3f0f952296..c8b937098b 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -522,6 +522,7 @@ App::App(v8::Isolate* isolate) { base::ProcessMetrics::CreateCurrentProcessMetrics())); app_metrics_[pid] = std::move(process_metric); Init(isolate); + App::self_ = this; } App::~App() { @@ -532,6 +533,10 @@ App::~App() { content::BrowserChildProcessObserver::Remove(this); } +App* App::Get() { + return App::self_; +} + void App::OnBeforeQuit(bool* prevent_default) { *prevent_default = Emit("before-quit"); } @@ -577,7 +582,9 @@ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) { media::AudioManager::SetGlobalAppName(Browser::Get()->GetName()); #endif Emit("ready", launch_info); +} +void App::PreMainMessageLoopRun() { if (process_singleton_) { process_singleton_->OnBrowserReady(); } diff --git a/atom/browser/api/atom_api_app.h b/atom/browser/api/atom_api_app.h index 1134046017..17accf9c18 100644 --- a/atom/browser/api/atom_api_app.h +++ b/atom/browser/api/atom_api_app.h @@ -74,6 +74,8 @@ class App : public AtomBrowserClient::Delegate, static void BuildPrototype(v8::Isolate* isolate, v8::Local prototype); + static App* Get(); + // Called when window with disposition needs to be created. void OnCreateWindow( const GURL& target_url, @@ -94,10 +96,12 @@ class App : public AtomBrowserClient::Delegate, base::FilePath GetAppPath() const; void RenderProcessReady(content::RenderProcessHost* host); void RenderProcessDisconnected(base::ProcessId host_pid); + void PreMainMessageLoopRun(); protected: explicit App(v8::Isolate* isolate); ~App() override; + static App* self_ = nullptr; // BrowserObserver: void OnBeforeQuit(bool* prevent_default) override; diff --git a/atom/browser/atom_browser_main_parts.cc b/atom/browser/atom_browser_main_parts.cc index 190898fdef..7d2cf4fc1b 100644 --- a/atom/browser/atom_browser_main_parts.cc +++ b/atom/browser/atom_browser_main_parts.cc @@ -4,6 +4,7 @@ #include "atom/browser/atom_browser_main_parts.h" +#include "atom/browser/api/atom_api_app.h" #include "atom/browser/api/trackable_object.h" #include "atom/browser/atom_access_token_store.h" #include "atom/browser/atom_browser_client.h" @@ -183,6 +184,8 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() { std::unique_ptr empty_info(new base::DictionaryValue); Browser::Get()->DidFinishLaunching(*empty_info); #endif + + atom::api::App::Get()->PreMainMessageLoopRun(); } bool AtomBrowserMainParts::MainMessageLoopRun(int* result_code) {