Merge pull request #3721 from atom/emit-process-exit-event-with-code
Emit process exit event with app exit code
This commit is contained in:
commit
c180607ef6
8 changed files with 51 additions and 3 deletions
|
@ -181,7 +181,8 @@ void App::OnWindowAllClosed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::OnQuit() {
|
void App::OnQuit() {
|
||||||
Emit("quit");
|
int exitCode = AtomBrowserMainParts::Get()->GetExitCode();
|
||||||
|
Emit("quit", exitCode);
|
||||||
|
|
||||||
if (process_singleton_.get()) {
|
if (process_singleton_.get()) {
|
||||||
process_singleton_->Cleanup();
|
process_singleton_->Cleanup();
|
||||||
|
|
|
@ -61,6 +61,10 @@ bool AtomBrowserMainParts::SetExitCode(int code) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AtomBrowserMainParts::GetExitCode() {
|
||||||
|
return exit_code_ != nullptr ? *exit_code_ : 0;
|
||||||
|
}
|
||||||
|
|
||||||
base::Closure AtomBrowserMainParts::RegisterDestructionCallback(
|
base::Closure AtomBrowserMainParts::RegisterDestructionCallback(
|
||||||
const base::Closure& callback) {
|
const base::Closure& callback) {
|
||||||
auto iter = destructors_.insert(destructors_.end(), callback);
|
auto iter = destructors_.insert(destructors_.end(), callback);
|
||||||
|
|
|
@ -34,6 +34,9 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
|
||||||
// Sets the exit code, will fail if the the message loop is not ready.
|
// Sets the exit code, will fail if the the message loop is not ready.
|
||||||
bool SetExitCode(int code);
|
bool SetExitCode(int code);
|
||||||
|
|
||||||
|
// Gets the exit code
|
||||||
|
int GetExitCode();
|
||||||
|
|
||||||
// Register a callback that should be destroyed before JavaScript environment
|
// Register a callback that should be destroyed before JavaScript environment
|
||||||
// gets destroyed.
|
// gets destroyed.
|
||||||
// Returns a closure that can be used to remove |callback| from the list.
|
// Returns a closure that can be used to remove |callback| from the list.
|
||||||
|
|
|
@ -53,8 +53,8 @@ process.on 'uncaughtException', (error) ->
|
||||||
|
|
||||||
# Emit 'exit' event on quit.
|
# Emit 'exit' event on quit.
|
||||||
{app} = require 'electron'
|
{app} = require 'electron'
|
||||||
app.on 'quit', ->
|
app.on 'quit', (event, exitCode) ->
|
||||||
process.emit 'exit'
|
process.emit 'exit', exitCode
|
||||||
|
|
||||||
# Map process.exit to app.exit, which quits gracefully.
|
# Map process.exit to app.exit, which quits gracefully.
|
||||||
process.exit = app.exit
|
process.exit = app.exit
|
||||||
|
|
|
@ -64,6 +64,11 @@ the `will-quit` and `window-all-closed` events.
|
||||||
|
|
||||||
### Event: 'quit'
|
### Event: 'quit'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
* `event` Event
|
||||||
|
* `exitCode` Integer
|
||||||
|
|
||||||
Emitted when the application is quitting.
|
Emitted when the application is quitting.
|
||||||
|
|
||||||
### Event: 'open-file' _OS X_
|
### Event: 'open-file' _OS X_
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
assert = require 'assert'
|
assert = require 'assert'
|
||||||
|
ChildProcess = require 'child_process'
|
||||||
|
path = require 'path'
|
||||||
{remote} = require 'electron'
|
{remote} = require 'electron'
|
||||||
{app, BrowserWindow} = remote.require 'electron'
|
{app, BrowserWindow} = remote.require 'electron'
|
||||||
|
|
||||||
|
@ -29,6 +31,23 @@ describe 'app module', ->
|
||||||
it 'should not be empty', ->
|
it 'should not be empty', ->
|
||||||
assert.notEqual app.getLocale(), ''
|
assert.notEqual app.getLocale(), ''
|
||||||
|
|
||||||
|
describe 'app.exit(exitCode)', ->
|
||||||
|
appProcess = null
|
||||||
|
afterEach ->
|
||||||
|
appProcess?.kill()
|
||||||
|
|
||||||
|
it 'emits a process exit event with the code', (done) ->
|
||||||
|
appPath = path.join(__dirname, 'fixtures', 'api', 'quit-app')
|
||||||
|
electronPath = remote.getGlobal('process').execPath
|
||||||
|
appProcess = ChildProcess.spawn(electronPath, [appPath])
|
||||||
|
|
||||||
|
output = ''
|
||||||
|
appProcess.stdout.on 'data', (data) -> output += data
|
||||||
|
appProcess.on 'close', (code) ->
|
||||||
|
assert.notEqual output.indexOf('Exit event with code: 123'), -1
|
||||||
|
assert.equal code, 123
|
||||||
|
done()
|
||||||
|
|
||||||
describe 'BrowserWindow events', ->
|
describe 'BrowserWindow events', ->
|
||||||
w = null
|
w = null
|
||||||
afterEach ->
|
afterEach ->
|
||||||
|
|
12
spec/fixtures/api/quit-app/main.js
vendored
Normal file
12
spec/fixtures/api/quit-app/main.js
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
var app = require('electron').app
|
||||||
|
|
||||||
|
app.on('ready', function () {
|
||||||
|
// This setImmediate call gets the spec passing on Linux
|
||||||
|
setImmediate(function () {
|
||||||
|
app.exit(123)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
process.on('exit', function (code) {
|
||||||
|
console.log('Exit event with code: ' + code)
|
||||||
|
})
|
4
spec/fixtures/api/quit-app/package.json
vendored
Normal file
4
spec/fixtures/api/quit-app/package.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"name": "quit-app",
|
||||||
|
"main": "main.js"
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue