Skip to content

Commit

Permalink
fix: quit after Chromium is fully started (#21505)
Browse files Browse the repository at this point in the history
  • Loading branch information
trop[bot] authored and codebytere committed Dec 14, 2019
1 parent 1409056 commit 425d2fa
Show file tree
Hide file tree
Showing 8 changed files with 24 additions and 17 deletions.
19 changes: 17 additions & 2 deletions shell/browser/browser.cc
Expand Up @@ -25,6 +25,21 @@

namespace electron {

namespace {

// Call |quit| after Chromium is fully started.
//
// This is important for quitting immediately in the "ready" event, when
// certain initialization task may still be pending, and quitting at that time
// could end up with crash on exit.
void RunQuitClosure(base::OnceClosure quit) {
// On Linux/Windows the "ready" event is emitted in "PreMainMessageLoopRun",
// make sure we quit after message loop has run for once.
base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(quit));
}

} // namespace

Browser::LoginItemSettings::LoginItemSettings() = default;
Browser::LoginItemSettings::~LoginItemSettings() = default;
Browser::LoginItemSettings::LoginItemSettings(const LoginItemSettings& other) =
Expand Down Expand Up @@ -93,7 +108,7 @@ void Browser::Shutdown() {
observer.OnQuit();

if (quit_main_message_loop_) {
std::move(quit_main_message_loop_).Run();
RunQuitClosure(std::move(quit_main_message_loop_));
} else {
// There is no message loop available so we are in early stage, wait until
// the quit_main_message_loop_ is available.
Expand Down Expand Up @@ -188,7 +203,7 @@ void Browser::PreMainMessageLoopRun() {

void Browser::SetMainMessageLoopQuitClosure(base::OnceClosure quit_closure) {
if (is_shutdown_)
std::move(quit_closure).Run();
RunQuitClosure(std::move(quit_closure));
else
quit_main_message_loop_ = std::move(quit_closure);
}
Expand Down
4 changes: 1 addition & 3 deletions spec/fixtures/api/command-line/main.js
Expand Up @@ -9,7 +9,5 @@ app.on('ready', () => {
process.stdout.write(JSON.stringify(payload))
process.stdout.end()

setImmediate(() => {
app.quit()
})
app.quit()
})
4 changes: 1 addition & 3 deletions spec/fixtures/api/cookie-app/main.js
Expand Up @@ -42,8 +42,6 @@ app.on('ready', async function () {
} finally {
process.stdout.end()

setImmediate(() => {
app.quit()
})
app.quit()
}
})
4 changes: 1 addition & 3 deletions spec/fixtures/api/ipc-main-listeners/main.js
Expand Up @@ -4,7 +4,5 @@ app.on('ready', () => {
process.stdout.write(JSON.stringify(ipcMain.eventNames()))
process.stdout.end()

setImmediate(() => {
app.quit()
})
app.quit()
})
2 changes: 1 addition & 1 deletion spec/fixtures/api/leak-exit-browserview.js
Expand Up @@ -2,5 +2,5 @@ const { BrowserView, app } = require('electron')
app.on('ready', function () {
new BrowserView({}) // eslint-disable-line

process.nextTick(() => app.quit())
app.quit()
})
2 changes: 1 addition & 1 deletion spec/fixtures/api/leak-exit-webcontents.js
Expand Up @@ -2,5 +2,5 @@ const { app, webContents } = require('electron')
app.on('ready', function () {
webContents.create({})

process.nextTick(() => app.quit())
app.quit()
})
2 changes: 1 addition & 1 deletion spec/fixtures/api/leak-exit-webcontentsview.js
Expand Up @@ -3,5 +3,5 @@ app.on('ready', function () {
const web = webContents.create({})
new WebContentsView(web) // eslint-disable-line

process.nextTick(() => app.quit())
app.quit()
})
4 changes: 1 addition & 3 deletions spec/fixtures/api/locale-check/main.js
Expand Up @@ -4,7 +4,5 @@ app.on('ready', () => {
process.stdout.write(app.getLocale())
process.stdout.end()

setImmediate(() => {
app.quit()
})
app.quit()
})

0 comments on commit 425d2fa

Please sign in to comment.