REVIEW: register BrowserChildProcessObserver once main message loop is ready

This commit is contained in:
deepak1556 2017-12-22 21:25:57 +05:30 committed by Cheng Zhao
parent 1b30cac372
commit 769fbd0d3b
6 changed files with 23 additions and 5 deletions

View file

@ -532,7 +532,6 @@ App::App(v8::Isolate* isolate) {
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this); static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this);
Browser::Get()->AddObserver(this); Browser::Get()->AddObserver(this);
content::GpuDataManager::GetInstance()->AddObserver(this); content::GpuDataManager::GetInstance()->AddObserver(this);
content::BrowserChildProcessObserver::Add(this);
base::ProcessId pid = base::GetCurrentProcId(); base::ProcessId pid = base::GetCurrentProcId();
std::unique_ptr<atom::ProcessMetric> process_metric( std::unique_ptr<atom::ProcessMetric> process_metric(
new atom::ProcessMetric( new atom::ProcessMetric(
@ -597,6 +596,10 @@ void App::OnAccessibilitySupportChanged() {
Emit("accessibility-support-changed", IsAccessibilitySupportEnabled()); Emit("accessibility-support-changed", IsAccessibilitySupportEnabled());
} }
void App::OnPreMainMessageLoopRun() {
content::BrowserChildProcessObserver::Add(this);
}
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
void App::OnWillContinueUserActivity( void App::OnWillContinueUserActivity(
bool* prevent_default, bool* prevent_default,

View file

@ -104,6 +104,7 @@ class App : public AtomBrowserClient::Delegate,
void OnLogin(LoginHandler* login_handler, void OnLogin(LoginHandler* login_handler,
const base::DictionaryValue& request_details) override; const base::DictionaryValue& request_details) override;
void OnAccessibilitySupportChanged() override; void OnAccessibilitySupportChanged() override;
void OnPreMainMessageLoopRun() override;
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
void OnWillContinueUserActivity( void OnWillContinueUserActivity(
bool* prevent_default, bool* prevent_default,

View file

@ -128,6 +128,10 @@ void AtomBrowserMainParts::PostEarlyInitialization() {
bridge_task_runner_ = new BridgeTaskRunner; bridge_task_runner_ = new BridgeTaskRunner;
base::ThreadTaskRunnerHandle handle(bridge_task_runner_); base::ThreadTaskRunnerHandle handle(bridge_task_runner_);
base::FilePath user_dir;
PathService::Get(brightray::DIR_USER_DATA, &user_dir);
process_singleton_.reset(new ProcessSingleton(user_dir));
// The ProxyResolverV8 has setup a complete V8 environment, in order to // The ProxyResolverV8 has setup a complete V8 environment, in order to
// avoid conflicts we only initialize our V8 environment after that. // avoid conflicts we only initialize our V8 environment after that.
js_env_.reset(new JavascriptEnvironment); js_env_.reset(new JavascriptEnvironment);
@ -184,6 +188,9 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() {
bridge_task_runner_->MessageLoopIsReady(); bridge_task_runner_->MessageLoopIsReady();
bridge_task_runner_ = nullptr; bridge_task_runner_ = nullptr;
// Notify observers that main thread message loop was initialized.
Browser::Get()->PreMainMessageLoopRun();
#if defined(USE_X11) #if defined(USE_X11)
libgtkui::GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess()); libgtkui::GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess());
#endif #endif
@ -211,10 +218,6 @@ void AtomBrowserMainParts::PostMainMessageLoopStart() {
#endif #endif
device::GeolocationProvider::SetGeolocationDelegate( device::GeolocationProvider::SetGeolocationDelegate(
new AtomGeolocationDelegate()); new AtomGeolocationDelegate());
base::FilePath user_dir;
PathService::Get(brightray::DIR_USER_DATA, &user_dir);
process_singleton_.reset(new ProcessSingleton(user_dir));
} }
void AtomBrowserMainParts::PostMainMessageLoopRun() { void AtomBrowserMainParts::PostMainMessageLoopRun() {

View file

@ -203,6 +203,12 @@ void Browser::RequestLogin(
observer.OnLogin(login_handler, *(request_details.get())); observer.OnLogin(login_handler, *(request_details.get()));
} }
void Browser::PreMainMessageLoopRun() {
for (BrowserObserver& observer : observers_) {
observer.OnPreMainMessageLoopRun();
}
}
void Browser::NotifyAndShutdown() { void Browser::NotifyAndShutdown() {
if (is_shutdown_) if (is_shutdown_)
return; return;

View file

@ -224,6 +224,8 @@ class Browser : public WindowListObserver {
void RequestLogin(LoginHandler* login_handler, void RequestLogin(LoginHandler* login_handler,
std::unique_ptr<base::DictionaryValue> request_details); std::unique_ptr<base::DictionaryValue> request_details);
void PreMainMessageLoopRun();
void AddObserver(BrowserObserver* obs) { void AddObserver(BrowserObserver* obs) {
observers_.AddObserver(obs); observers_.AddObserver(obs);
} }

View file

@ -55,6 +55,9 @@ class BrowserObserver {
// The browser's accessibility suppport has changed. // The browser's accessibility suppport has changed.
virtual void OnAccessibilitySupportChanged() {} virtual void OnAccessibilitySupportChanged() {}
// The app message loop is ready
virtual void OnPreMainMessageLoopRun() {}
#if defined(OS_MACOSX) #if defined(OS_MACOSX)
// The browser wants to report that an user activity will resume. (macOS only) // The browser wants to report that an user activity will resume. (macOS only)
virtual void OnWillContinueUserActivity( virtual void OnWillContinueUserActivity(