const assert = require('assert')
const ChildProcess = require('child_process')
const https = require('https')
+const net = require('net')
const fs = require('fs')
const path = require('path')
const {remote} = require('electron')
})
})
+ describe('app.relaunch', function () {
+ let server = null
+ const socketPath = process.platform === 'win32' ?
+ '\\\\.\\pipe\\electron-app-relaunch' :
+ '/tmp/electron-app-relaunch'
+
+ beforeEach(function (done) {
+ fs.unlink(socketPath, (error) => {
+ server = net.createServer()
+ server.listen(socketPath)
+ done()
+ })
+ })
+
+ afterEach(function (done) {
+ server.close(() => {
+ if (process.platform === 'win32') {
+ done()
+ } else {
+ fs.unlink(socketPath, (error) => {
+ done()
+ })
+ }
+ })
+ })
+
+ it('relaunches the app', function (done) {
+ this.timeout(100000)
+ let state = 'none'
+ server.once('error', (error) => {
+ done(error)
+ })
+ server.on('connection', (client) => {
+ client.once('data', function (data) {
+ if (String(data) === 'false' && state === 'none') {
+ state = 'first-launch'
+ } else if (String(data) === 'true' && state === 'first-launch') {
+ done()
+ } else {
+ done(`Unexpected state: ${state}`)
+ }
+ })
+ })
+
+ const appPath = path.join(__dirname, 'fixtures', 'api', 'relaunch')
+ ChildProcess.spawn(remote.process.execPath, [appPath])
+ })
+ })
+
describe('app.setUserActivity(type, userInfo)', function () {
if (process.platform !== 'darwin') {
return
--- /dev/null
+const {app, dialog} = require('electron')
+const net = require('net')
+
+const socketPath = process.platform === 'win32' ?
+ '\\\\.\\pipe\\electron-app-relaunch' :
+ '/tmp/electron-app-relaunch'
+
+process.on('uncaughtException', () => {
+ app.exit(1)
+})
+
+app.once('ready', () => {
+ let lastArg = process.argv[process.argv.length - 1]
+ const client = net.connect(socketPath)
+ client.once('connect', () => {
+ client.end(String(lastArg === '--second'))
+ })
+ client.once('end', () => {
+ app.exit(0)
+ })
+
+ if (lastArg !== '--second') {
+ app.relaunch({args: process.argv.slice(1).concat('--second')})
+ }
+})