Include exit code with quit event
This commit is contained in:
parent
aa82eddca8
commit
92433be888
10 changed files with 19 additions and 14 deletions
|
@ -180,8 +180,8 @@ void App::OnWindowAllClosed() {
|
||||||
Emit("window-all-closed");
|
Emit("window-all-closed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void App::OnQuit() {
|
void App::OnQuit(const int code) {
|
||||||
Emit("quit");
|
Emit("quit", code);
|
||||||
|
|
||||||
if (process_singleton_.get()) {
|
if (process_singleton_.get()) {
|
||||||
process_singleton_->Cleanup();
|
process_singleton_->Cleanup();
|
||||||
|
@ -344,7 +344,7 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
|
||||||
auto browser = base::Unretained(Browser::Get());
|
auto browser = base::Unretained(Browser::Get());
|
||||||
return mate::ObjectTemplateBuilder(isolate)
|
return mate::ObjectTemplateBuilder(isolate)
|
||||||
.SetMethod("quit", base::Bind(&Browser::Quit, browser))
|
.SetMethod("quit", base::Bind(&Browser::Quit, browser))
|
||||||
.SetMethod("_exit", base::Bind(&Browser::Exit, browser))
|
.SetMethod("exit", base::Bind(&Browser::Exit, browser))
|
||||||
.SetMethod("focus", base::Bind(&Browser::Focus, browser))
|
.SetMethod("focus", base::Bind(&Browser::Focus, browser))
|
||||||
.SetMethod("getVersion", base::Bind(&Browser::GetVersion, browser))
|
.SetMethod("getVersion", base::Bind(&Browser::GetVersion, browser))
|
||||||
.SetMethod("setVersion", base::Bind(&Browser::SetVersion, browser))
|
.SetMethod("setVersion", base::Bind(&Browser::SetVersion, browser))
|
||||||
|
|
|
@ -42,7 +42,7 @@ class App : public AtomBrowserClient::Delegate,
|
||||||
void OnBeforeQuit(bool* prevent_default) override;
|
void OnBeforeQuit(bool* prevent_default) override;
|
||||||
void OnWillQuit(bool* prevent_default) override;
|
void OnWillQuit(bool* prevent_default) override;
|
||||||
void OnWindowAllClosed() override;
|
void OnWindowAllClosed() override;
|
||||||
void OnQuit() override;
|
void OnQuit(int code) override;
|
||||||
void OnOpenFile(bool* prevent_default, const std::string& file_path) override;
|
void OnOpenFile(bool* prevent_default, const std::string& file_path) override;
|
||||||
void OnOpenURL(const std::string& url) override;
|
void OnOpenURL(const std::string& url) override;
|
||||||
void OnActivate(bool has_visible_windows) override;
|
void OnActivate(bool has_visible_windows) override;
|
||||||
|
|
|
@ -34,17 +34,12 @@ app.setAppPath = (path) ->
|
||||||
app.getAppPath = ->
|
app.getAppPath = ->
|
||||||
appPath
|
appPath
|
||||||
|
|
||||||
appExitCode = undefined
|
|
||||||
app.exit = (exitCode) ->
|
|
||||||
appExitCode = exitCode
|
|
||||||
app._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
|
||||||
|
|
||||||
# Emit a process 'exit' event on app quit.
|
# Emit a process 'exit' event on app quit.
|
||||||
app.on 'quit', ->
|
app.on 'quit', (event, exitCode) ->
|
||||||
process.emit 'exit', appExitCode
|
process.emit 'exit', exitCode
|
||||||
|
|
||||||
# Routes the events to webContents.
|
# Routes the events to webContents.
|
||||||
for name in ['login', 'certificate-error', 'select-client-certificate']
|
for name in ['login', 'certificate-error', 'select-client-certificate']
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -72,7 +72,8 @@ void Browser::Shutdown() {
|
||||||
is_shutdown_ = true;
|
is_shutdown_ = true;
|
||||||
is_quiting_ = true;
|
is_quiting_ = true;
|
||||||
|
|
||||||
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnQuit());
|
int exitCode = AtomBrowserMainParts::Get()->GetExitCode();
|
||||||
|
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnQuit(exitCode));
|
||||||
|
|
||||||
if (base::MessageLoop::current()) {
|
if (base::MessageLoop::current()) {
|
||||||
base::MessageLoop::current()->PostTask(
|
base::MessageLoop::current()->PostTask(
|
||||||
|
|
|
@ -24,7 +24,7 @@ class BrowserObserver {
|
||||||
virtual void OnWindowAllClosed() {}
|
virtual void OnWindowAllClosed() {}
|
||||||
|
|
||||||
// The browser is quitting.
|
// The browser is quitting.
|
||||||
virtual void OnQuit() {}
|
virtual void OnQuit(const int code) {}
|
||||||
|
|
||||||
// The browser has opened a file by double clicking in Finder or dragging the
|
// The browser has opened a file by double clicking in Finder or dragging the
|
||||||
// file to the Dock icon. (OS X only)
|
// file to the Dock icon. (OS X only)
|
||||||
|
|
|
@ -44,6 +44,7 @@ describe 'app module', ->
|
||||||
output = ''
|
output = ''
|
||||||
appProcess.stdout.on 'data', (data) -> output += data
|
appProcess.stdout.on 'data', (data) -> output += data
|
||||||
appProcess.on 'close', (code) ->
|
appProcess.on 'close', (code) ->
|
||||||
|
console.log output
|
||||||
assert.notEqual output.indexOf('Exit event with code: 123'), -1
|
assert.notEqual output.indexOf('Exit event with code: 123'), -1
|
||||||
assert.equal code, 123
|
assert.equal code, 123
|
||||||
done()
|
done()
|
||||||
|
|
2
spec/fixtures/api/quit-app/main.js
vendored
2
spec/fixtures/api/quit-app/main.js
vendored
|
@ -5,5 +5,5 @@ app.on('ready', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
process.on('exit', function (code) {
|
process.on('exit', function (code) {
|
||||||
console.log('Exit event with code: ' + code)
|
console.log('Exit event with code: ' + JSON.stringify(code, null, 2))
|
||||||
})
|
})
|
||||||
|
|
|
@ -56,6 +56,7 @@
|
||||||
mocha.ui('bdd').reporter(isCi ? 'tap' : 'html');
|
mocha.ui('bdd').reporter(isCi ? 'tap' : 'html');
|
||||||
|
|
||||||
var query = Mocha.utils.parseQuery(window.location.search || '');
|
var query = Mocha.utils.parseQuery(window.location.search || '');
|
||||||
|
query.grep = 'app.exit'
|
||||||
if (query.grep) mocha.grep(query.grep);
|
if (query.grep) mocha.grep(query.grep);
|
||||||
if (query.invert) mocha.invert();
|
if (query.invert) mocha.invert();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue