Verify --enable-sandbox/--no-sandbox command line
This commit is contained in:
parent
14178d9826
commit
0eaddd1565
3 changed files with 51 additions and 74 deletions
|
@ -1262,51 +1262,28 @@ describe('BrowserWindow module', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('mixed sandbox option', function () {
|
describe('mixed sandbox option', function () {
|
||||||
// TOOD (juturu): This test needs to be fixed
|
this.timeout(120000)
|
||||||
let sandboxServer = null
|
|
||||||
const socketPath = process.platform === 'win32' ? '\\\\.\\pipe\\electron-app-mixed-sandbox' : '/tmp/electron-app-mixed-sandbox'
|
|
||||||
|
|
||||||
beforeEach(function (done) {
|
let appProcess
|
||||||
fs.unlink(socketPath, () => {
|
|
||||||
sandboxServer = net.createServer()
|
|
||||||
sandboxServer.listen(socketPath)
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(function (done) {
|
afterEach(function () {
|
||||||
sandboxServer.close(() => {
|
if (appProcess != null) {
|
||||||
if (process.platform === 'win32') {
|
appProcess.kill()
|
||||||
done()
|
}
|
||||||
} else {
|
|
||||||
fs.unlink(socketPath, () => {
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('adds --enable-sandbox to render processes created with sandbox: true', (done) => {
|
it('adds --enable-sandbox to render processes created with sandbox: true', (done) => {
|
||||||
this.timeout(120000)
|
|
||||||
|
|
||||||
let state = 'none'
|
|
||||||
sandboxServer.once('error', (error) => {
|
|
||||||
done(error)
|
|
||||||
})
|
|
||||||
sandboxServer.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: ${data}`)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
const appPath = path.join(__dirname, 'fixtures', 'api', 'mixed-sandbox-app')
|
const appPath = path.join(__dirname, 'fixtures', 'api', 'mixed-sandbox-app')
|
||||||
ChildProcess.spawn(remote.process.execPath, [appPath])
|
©appProcess = ChildProcess.spawn(remote.process.execPath, [appPath, '--enable-mixed-sandbox'], {stdio: ['ignore', 'ipc', 'ignore']})
|
||||||
|
appProcess.once('message', (argv) => {
|
||||||
|
assert.equal(argv.sandbox.includes('--enable-sandbox'), true)
|
||||||
|
assert.equal(argv.sandbox.includes('--no-sandbox'), false)
|
||||||
|
|
||||||
|
assert.equal(argv.noSandbox.includes('--enable-sandbox'), false)
|
||||||
|
assert.equal(argv.noSandbox.includes('--no-sandbox'), true)
|
||||||
|
|
||||||
|
done()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1 @@
|
||||||
const { ipcRenderer } = require('electron')
|
require('electron').ipcRenderer.send('argv', process.argv)
|
||||||
if (process) {
|
|
||||||
process.once('loaded', function () {
|
|
||||||
ipcRenderer.send('processArgs', process.argv)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
ipcRenderer.send('processArgs', 'unable to get process args')
|
|
||||||
}
|
|
||||||
|
|
61
spec/fixtures/api/mixed-sandbox-app/main.js
vendored
61
spec/fixtures/api/mixed-sandbox-app/main.js
vendored
|
@ -1,39 +1,46 @@
|
||||||
const { app, BrowserWindow, ipcMain } = require('electron')
|
const {app, BrowserWindow, ipcMain} = require('electron')
|
||||||
const net = require('net')
|
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
|
|
||||||
const socketPath = process.platform === 'win32' ? '\\\\.\\pipe\\electron-app-mixed-sandbox' : '/tmp/electron-app-mixed-sandbox'
|
|
||||||
|
|
||||||
process.on('uncaughtException', () => {
|
process.on('uncaughtException', () => {
|
||||||
app.exit(1)
|
app.exit(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
app.once('ready', () => {
|
let sandboxWindow
|
||||||
let lastArg = process.argv[process.argv.length - 1]
|
let noSandboxWindow
|
||||||
const client = net.connect(socketPath)
|
|
||||||
client.once('connect', () => {
|
|
||||||
if (lastArg === '--enable-mixed-sandbox') {
|
|
||||||
ipcMain.on('processArgs', (event, args) => {
|
|
||||||
client.end(String(args.indexOf('--no-sandbox') >= 0))
|
|
||||||
})
|
|
||||||
let window = new BrowserWindow({
|
|
||||||
show: false,
|
|
||||||
webPreferences: {
|
|
||||||
preload: path.join(app.getAppPath(), 'electron-app-mixed-sandbox-preload.js'),
|
|
||||||
sandbox: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
window.loadURL('data:,window')
|
app.once('ready', () => {
|
||||||
} else {
|
sandboxWindow = new BrowserWindow({
|
||||||
client.end(String(false))
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(app.getAppPath(), 'electron-app-mixed-sandbox-preload.js'),
|
||||||
|
sandbox: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
client.once('end', () => {
|
sandboxWindow.loadURL('about:blank')
|
||||||
app.exit(0)
|
|
||||||
})
|
|
||||||
|
|
||||||
if (lastArg !== '--enable-mixed-sandbox') {
|
noSandboxWindow = new BrowserWindow({
|
||||||
app.relaunch({ args: process.argv.slice(1).concat('--enable-mixed-sandbox') })
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
preload: path.join(app.getAppPath(), 'electron-app-mixed-sandbox-preload.js'),
|
||||||
|
sandbox: false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
noSandboxWindow.loadURL('about:blank')
|
||||||
|
|
||||||
|
const argv = {
|
||||||
|
sandbox: null,
|
||||||
|
noSandbox: null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ipcMain.on('argv', (event, value) => {
|
||||||
|
if (event.sender === sandboxWindow.webContents) {
|
||||||
|
argv.sandbox = value
|
||||||
|
} else if (event.sender === noSandboxWindow.webContents) {
|
||||||
|
argv.noSandbox = value
|
||||||
|
}
|
||||||
|
|
||||||
|
if (argv.sandbox != null && argv.noSandbox != null) {
|
||||||
|
process.send(argv)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue