chore: make "nodeIntegration" and "webviewTag" default to false (#16235)
This commit is contained in:
parent
cdf4bfa68f
commit
fade3eb679
23 changed files with 261 additions and 140 deletions
|
@ -99,9 +99,9 @@ WebContentsPreferences::WebContentsPreferences(
|
||||||
// Set WebPreferences defaults onto the JS object
|
// Set WebPreferences defaults onto the JS object
|
||||||
SetDefaultBoolIfUndefined(options::kPlugins, false);
|
SetDefaultBoolIfUndefined(options::kPlugins, false);
|
||||||
SetDefaultBoolIfUndefined(options::kExperimentalFeatures, false);
|
SetDefaultBoolIfUndefined(options::kExperimentalFeatures, false);
|
||||||
bool node = SetDefaultBoolIfUndefined(options::kNodeIntegration, true);
|
SetDefaultBoolIfUndefined(options::kNodeIntegration, false);
|
||||||
SetDefaultBoolIfUndefined(options::kNodeIntegrationInWorker, false);
|
SetDefaultBoolIfUndefined(options::kNodeIntegrationInWorker, false);
|
||||||
SetDefaultBoolIfUndefined(options::kWebviewTag, node);
|
SetDefaultBoolIfUndefined(options::kWebviewTag, false);
|
||||||
SetDefaultBoolIfUndefined(options::kSandbox, false);
|
SetDefaultBoolIfUndefined(options::kSandbox, false);
|
||||||
SetDefaultBoolIfUndefined(options::kNativeWindowOpen, false);
|
SetDefaultBoolIfUndefined(options::kNativeWindowOpen, false);
|
||||||
SetDefaultBoolIfUndefined(options::kContextIsolation, false);
|
SetDefaultBoolIfUndefined(options::kContextIsolation, false);
|
||||||
|
|
|
@ -18,7 +18,6 @@ exports.load = async (appUrl) => {
|
||||||
backgroundColor: '#FFFFFF',
|
backgroundColor: '#FFFFFF',
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
contextIsolation: true,
|
contextIsolation: true,
|
||||||
nodeIntegration: false,
|
|
||||||
preload: path.resolve(__dirname, 'renderer.js'),
|
preload: path.resolve(__dirname, 'renderer.js'),
|
||||||
webviewTag: false
|
webviewTag: false
|
||||||
},
|
},
|
||||||
|
|
|
@ -20,11 +20,7 @@ win.on('closed', () => {
|
||||||
win = null
|
win = null
|
||||||
})
|
})
|
||||||
|
|
||||||
let view = new BrowserView({
|
let view = new BrowserView()
|
||||||
webPreferences: {
|
|
||||||
nodeIntegration: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
win.setBrowserView(view)
|
win.setBrowserView(view)
|
||||||
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
|
view.setBounds({ x: 0, y: 0, width: 300, height: 300 })
|
||||||
view.webContents.loadURL('https://electronjs.org')
|
view.webContents.loadURL('https://electronjs.org')
|
||||||
|
|
|
@ -250,8 +250,8 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
`new-window-for-tab` event.
|
`new-window-for-tab` event.
|
||||||
* `webPreferences` Object (optional) - Settings of web page's features.
|
* `webPreferences` Object (optional) - Settings of web page's features.
|
||||||
* `devTools` Boolean (optional) - Whether to enable DevTools. If it is set to `false`, can not use `BrowserWindow.webContents.openDevTools()` to open DevTools. Default is `true`.
|
* `devTools` Boolean (optional) - Whether to enable DevTools. If it is set to `false`, can not use `BrowserWindow.webContents.openDevTools()` to open DevTools. Default is `true`.
|
||||||
* `nodeIntegration` Boolean (optional) - Whether node integration is enabled. Default
|
* `nodeIntegration` Boolean (optional) - Whether node integration is enabled.
|
||||||
is `true`.
|
Default is `false`.
|
||||||
* `nodeIntegrationInWorker` Boolean (optional) - Whether node integration is
|
* `nodeIntegrationInWorker` Boolean (optional) - Whether node integration is
|
||||||
enabled in web workers. Default is `false`. More about this can be found
|
enabled in web workers. Default is `false`. More about this can be found
|
||||||
in [Multithreading](../tutorial/multithreading.md).
|
in [Multithreading](../tutorial/multithreading.md).
|
||||||
|
@ -353,7 +353,7 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
integration disabled. **Note:** This option is currently
|
integration disabled. **Note:** This option is currently
|
||||||
experimental.
|
experimental.
|
||||||
* `webviewTag` Boolean (optional) - Whether to enable the [`<webview>` tag](webview-tag.md).
|
* `webviewTag` Boolean (optional) - Whether to enable the [`<webview>` tag](webview-tag.md).
|
||||||
Defaults to the value of the `nodeIntegration` option. **Note:** The
|
Defaults to `false`. **Note:** The
|
||||||
`preload` script configured for the `<webview>` will have node integration
|
`preload` script configured for the `<webview>` will have node integration
|
||||||
enabled when it is executed so you should ensure remote/untrusted content
|
enabled when it is executed so you should ensure remote/untrusted content
|
||||||
is not able to create a `<webview>` tag with a possibly malicious `preload`
|
is not able to create a `<webview>` tag with a possibly malicious `preload`
|
||||||
|
|
|
@ -38,7 +38,7 @@ const parseOption = function (name, defaultValue, converter = value => value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const contextIsolation = hasSwitch('context-isolation')
|
const contextIsolation = hasSwitch('context-isolation')
|
||||||
let nodeIntegration = hasSwitch('node-integration')
|
const nodeIntegration = hasSwitch('node-integration')
|
||||||
const webviewTag = hasSwitch('webview-tag')
|
const webviewTag = hasSwitch('webview-tag')
|
||||||
const isHiddenPage = hasSwitch('hidden-page')
|
const isHiddenPage = hasSwitch('hidden-page')
|
||||||
const isBackgroundPage = hasSwitch('background-page')
|
const isBackgroundPage = hasSwitch('background-page')
|
||||||
|
@ -64,14 +64,11 @@ if (contextIsolation) {
|
||||||
if (window.location.protocol === 'chrome-devtools:') {
|
if (window.location.protocol === 'chrome-devtools:') {
|
||||||
// Override some inspector APIs.
|
// Override some inspector APIs.
|
||||||
require('@electron/internal/renderer/inspector')
|
require('@electron/internal/renderer/inspector')
|
||||||
nodeIntegration = false
|
|
||||||
} else if (window.location.protocol === 'chrome-extension:') {
|
} else if (window.location.protocol === 'chrome-extension:') {
|
||||||
// Add implementations of chrome API.
|
// Add implementations of chrome API.
|
||||||
require('@electron/internal/renderer/chrome-api').injectTo(window.location.hostname, isBackgroundPage, window)
|
require('@electron/internal/renderer/chrome-api').injectTo(window.location.hostname, isBackgroundPage, window)
|
||||||
nodeIntegration = false
|
|
||||||
} else if (window.location.protocol === 'chrome:') {
|
} else if (window.location.protocol === 'chrome:') {
|
||||||
// Disable node integration for chrome UI scheme.
|
// Disable node integration for chrome UI scheme.
|
||||||
nodeIntegration = false
|
|
||||||
} else {
|
} else {
|
||||||
// Override default web functions.
|
// Override default web functions.
|
||||||
require('@electron/internal/renderer/window-setup')(ipcRenderer, guestInstanceId, openerId, isHiddenPage, usesNativeWindowOpen)
|
require('@electron/internal/renderer/window-setup')(ipcRenderer, guestInstanceId, openerId, isHiddenPage, usesNativeWindowOpen)
|
||||||
|
|
|
@ -33,7 +33,10 @@ describe('electron module', () => {
|
||||||
window = new BrowserWindow({
|
window = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400
|
height: 400,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -299,7 +302,12 @@ describe('app module', () => {
|
||||||
password: 'electron'
|
password: 'electron'
|
||||||
}
|
}
|
||||||
|
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
w.webContents.on('did-finish-load', () => {
|
w.webContents.on('did-finish-load', () => {
|
||||||
expect(w.webContents.getTitle()).to.equal('authorized')
|
expect(w.webContents.getTitle()).to.equal('authorized')
|
||||||
|
@ -376,7 +384,12 @@ describe('app module', () => {
|
||||||
expect(webContents).to.equal(w.webContents)
|
expect(webContents).to.equal(w.webContents)
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.loadURL('about:blank')
|
w.loadURL('about:blank')
|
||||||
w.webContents.executeJavaScript(`require('electron').desktopCapturer.getSources({ types: ['screen'] }, () => {})`)
|
w.webContents.executeJavaScript(`require('electron').desktopCapturer.getSources({ types: ['screen'] }, () => {})`)
|
||||||
})
|
})
|
||||||
|
@ -387,7 +400,12 @@ describe('app module', () => {
|
||||||
expect(moduleName).to.equal('test')
|
expect(moduleName).to.equal('test')
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.loadURL('about:blank')
|
w.loadURL('about:blank')
|
||||||
w.webContents.executeJavaScript(`require('electron').remote.require('test')`)
|
w.webContents.executeJavaScript(`require('electron').remote.require('test')`)
|
||||||
})
|
})
|
||||||
|
@ -398,7 +416,12 @@ describe('app module', () => {
|
||||||
expect(globalName).to.equal('test')
|
expect(globalName).to.equal('test')
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.loadURL('about:blank')
|
w.loadURL('about:blank')
|
||||||
w.webContents.executeJavaScript(`require('electron').remote.getGlobal('test')`)
|
w.webContents.executeJavaScript(`require('electron').remote.getGlobal('test')`)
|
||||||
})
|
})
|
||||||
|
@ -591,6 +614,7 @@ describe('app module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
partition: 'empty-certificate'
|
partition: 'empty-certificate'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -34,7 +34,8 @@ describe('BrowserWindow module', () => {
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400,
|
height: 400,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
backgroundThrottling: false
|
backgroundThrottling: false,
|
||||||
|
nodeIntegration: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1283,7 +1284,10 @@ describe('BrowserWindow module', () => {
|
||||||
w.destroy()
|
w.destroy()
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: { preload }
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
preload
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const p = emittedOnce(ipcMain, 'answer')
|
const p = emittedOnce(ipcMain, 'answer')
|
||||||
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
||||||
|
@ -1296,7 +1300,8 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload
|
nodeIntegration: true,
|
||||||
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const p = emittedOnce(ipcMain, 'answer')
|
const p = emittedOnce(ipcMain, 'answer')
|
||||||
|
@ -1308,7 +1313,10 @@ describe('BrowserWindow module', () => {
|
||||||
const preload = path.join(fixtures, 'module', 'access-blink-apis.js')
|
const preload = path.join(fixtures, 'module', 'access-blink-apis.js')
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: { preload }
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
preload
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const p = emittedOnce(ipcMain, 'answer')
|
const p = emittedOnce(ipcMain, 'answer')
|
||||||
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
||||||
|
@ -1350,6 +1358,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
preload: path.join(fixtures, 'module', 'set-global-preload-3.js')
|
preload: path.join(fixtures, 'module', 'set-global-preload-3.js')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1368,7 +1377,8 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
nodeIntegration: true,
|
||||||
|
preload,
|
||||||
additionalArguments: ['--my-magic-arg']
|
additionalArguments: ['--my-magic-arg']
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1385,7 +1395,8 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
nodeIntegration: true,
|
||||||
|
preload,
|
||||||
additionalArguments: ['--my-magic-arg=foo']
|
additionalArguments: ['--my-magic-arg=foo']
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1394,7 +1405,7 @@ describe('BrowserWindow module', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('"node-integration" option', () => {
|
describe('"node-integration" option', () => {
|
||||||
it('disables node integration when specified to false', (done) => {
|
it('disables node integration by default', (done) => {
|
||||||
const preload = path.join(fixtures, 'module', 'send-later.js')
|
const preload = path.join(fixtures, 'module', 'send-later.js')
|
||||||
ipcMain.once('answer', (event, typeofProcess, typeofBuffer) => {
|
ipcMain.once('answer', (event, typeofProcess, typeofBuffer) => {
|
||||||
assert.strictEqual(typeofProcess, 'undefined')
|
assert.strictEqual(typeofProcess, 'undefined')
|
||||||
|
@ -1405,8 +1416,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
preload
|
||||||
nodeIntegration: false
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
w.loadFile(path.join(fixtures, 'api', 'blank.html'))
|
w.loadFile(path.join(fixtures, 'api', 'blank.html'))
|
||||||
|
@ -1422,7 +1432,6 @@ describe('BrowserWindow module', () => {
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: false,
|
|
||||||
preload,
|
preload,
|
||||||
sandbox
|
sandbox
|
||||||
}
|
}
|
||||||
|
@ -1437,7 +1446,6 @@ describe('BrowserWindow module', () => {
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: false,
|
|
||||||
preload,
|
preload,
|
||||||
sandbox,
|
sandbox,
|
||||||
enableRemoteModule: false
|
enableRemoteModule: false
|
||||||
|
@ -1476,8 +1484,9 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
||||||
|
@ -1493,6 +1502,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preloadSpecialChars
|
preload: preloadSpecialChars
|
||||||
}
|
}
|
||||||
|
@ -1505,8 +1515,9 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const htmlPath = path.join(fixtures, 'api', 'sandbox.html?exit-event')
|
const htmlPath = path.join(fixtures, 'api', 'sandbox.html?exit-event')
|
||||||
|
@ -1527,8 +1538,9 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload)
|
ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload)
|
||||||
|
@ -1653,7 +1665,7 @@ describe('BrowserWindow module', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload)
|
ipcRenderer.send('set-web-preferences-on-next-new-window', w.webContents.id, 'preload', preload)
|
||||||
|
@ -1738,7 +1750,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
preload,
|
||||||
sandbox: true
|
sandbox: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1761,7 +1773,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
preload,
|
||||||
sandbox: true
|
sandbox: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1794,7 +1806,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload,
|
preload,
|
||||||
sandbox: true
|
sandbox: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1843,7 +1855,7 @@ describe('BrowserWindow module', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
w.loadFile(path.join(fixtures, 'api', 'preload.html'))
|
||||||
|
@ -1855,7 +1867,7 @@ describe('BrowserWindow module', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
preload: preload,
|
preload,
|
||||||
webviewTag: true
|
webviewTag: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1875,6 +1887,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
nativeWindowOpen: true
|
nativeWindowOpen: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1962,7 +1975,6 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: true,
|
show: true,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: false,
|
|
||||||
nativeWindowOpen: true
|
nativeWindowOpen: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -2093,7 +2105,14 @@ describe('BrowserWindow module', () => {
|
||||||
afterEach(() => { ipcMain.removeAllListeners('pong') })
|
afterEach(() => { ipcMain.removeAllListeners('pong') })
|
||||||
|
|
||||||
it('visibilityState is initially visible despite window being hidden', (done) => {
|
it('visibilityState is initially visible despite window being hidden', (done) => {
|
||||||
w = new BrowserWindow({ show: false, width: 100, height: 100 })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
let readyToShow = false
|
let readyToShow = false
|
||||||
w.once('ready-to-show', () => {
|
w.once('ready-to-show', () => {
|
||||||
|
@ -2111,7 +2130,13 @@ describe('BrowserWindow module', () => {
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
|
w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
|
||||||
})
|
})
|
||||||
it('visibilityState changes when window is hidden', (done) => {
|
it('visibilityState changes when window is hidden', (done) => {
|
||||||
w = new BrowserWindow({ width: 100, height: 100 })
|
w = new BrowserWindow({
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onNextVisibilityChange((visibilityState, hidden) => {
|
onNextVisibilityChange((visibilityState, hidden) => {
|
||||||
assert.strictEqual(visibilityState, 'visible')
|
assert.strictEqual(visibilityState, 'visible')
|
||||||
|
@ -2129,7 +2154,13 @@ describe('BrowserWindow module', () => {
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
|
w.loadFile(path.join(fixtures, 'pages', 'visibilitychange.html'))
|
||||||
})
|
})
|
||||||
it('visibilityState changes when window is shown', (done) => {
|
it('visibilityState changes when window is shown', (done) => {
|
||||||
w = new BrowserWindow({ width: 100, height: 100 })
|
w = new BrowserWindow({
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onNextVisibilityChange((visibilityState, hidden) => {
|
onNextVisibilityChange((visibilityState, hidden) => {
|
||||||
onVisibilityChange((visibilityState, hidden) => {
|
onVisibilityChange((visibilityState, hidden) => {
|
||||||
|
@ -2155,7 +2186,13 @@ describe('BrowserWindow module', () => {
|
||||||
return done()
|
return done()
|
||||||
}
|
}
|
||||||
|
|
||||||
w = new BrowserWindow({ width: 100, height: 100 })
|
w = new BrowserWindow({
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onNextVisibilityChange((visibilityState, hidden) => {
|
onNextVisibilityChange((visibilityState, hidden) => {
|
||||||
onVisibilityChange((visibilityState, hidden) => {
|
onVisibilityChange((visibilityState, hidden) => {
|
||||||
|
@ -2181,7 +2218,13 @@ describe('BrowserWindow module', () => {
|
||||||
return done()
|
return done()
|
||||||
}
|
}
|
||||||
|
|
||||||
w = new BrowserWindow({ width: 100, height: 100 })
|
w = new BrowserWindow({
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
onNextVisibilityChange((visibilityState, hidden) => {
|
onNextVisibilityChange((visibilityState, hidden) => {
|
||||||
assert.strictEqual(visibilityState, 'visible')
|
assert.strictEqual(visibilityState, 'visible')
|
||||||
|
@ -2204,7 +2247,8 @@ describe('BrowserWindow module', () => {
|
||||||
width: 100,
|
width: 100,
|
||||||
height: 100,
|
height: 100,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
backgroundThrottling: false
|
backgroundThrottling: false,
|
||||||
|
nodeIntegration: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -3189,6 +3233,7 @@ describe('BrowserWindow module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
partition: 'temp'
|
partition: 'temp'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -10,7 +10,7 @@ const url = require('url')
|
||||||
const { closeWindow } = require('./window-helpers')
|
const { closeWindow } = require('./window-helpers')
|
||||||
|
|
||||||
const { remote } = require('electron')
|
const { remote } = require('electron')
|
||||||
const { app, BrowserWindow, crashReporter } = remote.require('electron')
|
const { app, BrowserWindow, crashReporter } = remote
|
||||||
|
|
||||||
describe('crashReporter module', () => {
|
describe('crashReporter module', () => {
|
||||||
if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return
|
if (process.mas || process.env.DISABLE_CRASH_REPORTER_TESTS) return
|
||||||
|
@ -188,7 +188,11 @@ describe('crashReporter module', () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
generateSpecs('without sandbox', {})
|
generateSpecs('without sandbox', {
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
generateSpecs('with sandbox', {
|
generateSpecs('with sandbox', {
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
sandbox: true,
|
sandbox: true,
|
||||||
|
@ -197,6 +201,7 @@ describe('crashReporter module', () => {
|
||||||
})
|
})
|
||||||
generateSpecs('with remote module disabled', {
|
generateSpecs('with remote module disabled', {
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
enableRemoteModule: false
|
enableRemoteModule: false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -24,7 +24,12 @@ describe('ipc main module', () => {
|
||||||
afterEach(() => { ipcMain.removeAllListeners('send-sync-message') })
|
afterEach(() => { ipcMain.removeAllListeners('send-sync-message') })
|
||||||
|
|
||||||
it('does not crash when reply is not sent and browser is destroyed', (done) => {
|
it('does not crash when reply is not sent and browser is destroyed', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
ipcMain.once('send-sync-message', (event) => {
|
ipcMain.once('send-sync-message', (event) => {
|
||||||
event.returnValue = null
|
event.returnValue = null
|
||||||
done()
|
done()
|
||||||
|
@ -33,7 +38,12 @@ describe('ipc main module', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('does not crash when reply is sent by multiple listeners', (done) => {
|
it('does not crash when reply is sent by multiple listeners', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
ipcMain.on('send-sync-message', (event) => {
|
ipcMain.on('send-sync-message', (event) => {
|
||||||
event.returnValue = null
|
event.returnValue = null
|
||||||
})
|
})
|
||||||
|
@ -59,7 +69,12 @@ describe('ipc main module', () => {
|
||||||
|
|
||||||
describe('remote objects registry', () => {
|
describe('remote objects registry', () => {
|
||||||
it('does not dereference until the render view is deleted (regression)', (done) => {
|
it('does not dereference until the render view is deleted (regression)', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
ipcMain.once('error-message', (event, message) => {
|
ipcMain.once('error-message', (event, message) => {
|
||||||
const correctMsgStart = message.startsWith('Cannot call function \'getURL\' on missing remote object')
|
const correctMsgStart = message.startsWith('Cannot call function \'getURL\' on missing remote object')
|
||||||
|
|
|
@ -199,7 +199,12 @@ describe('ipc renderer module', () => {
|
||||||
|
|
||||||
describe('remote listeners', () => {
|
describe('remote listeners', () => {
|
||||||
it('detaches listeners subscribed to destroyed renderers, and shows a warning', (done) => {
|
it('detaches listeners subscribed to destroyed renderers, and shows a warning', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
w.webContents.once('did-finish-load', () => {
|
w.webContents.once('did-finish-load', () => {
|
||||||
w.webContents.once('did-finish-load', () => {
|
w.webContents.once('did-finish-load', () => {
|
||||||
|
@ -227,7 +232,12 @@ describe('ipc renderer module', () => {
|
||||||
|
|
||||||
describe('ipcRenderer.on', () => {
|
describe('ipcRenderer.on', () => {
|
||||||
it('is not used for internals', async () => {
|
it('is not used for internals', async () => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
await w.loadURL('about:blank')
|
await w.loadURL('about:blank')
|
||||||
|
|
||||||
const script = `require('electron').ipcRenderer.eventNames()`
|
const script = `require('electron').ipcRenderer.eventNames()`
|
||||||
|
|
|
@ -11,7 +11,7 @@ const dbus = require('dbus-native')
|
||||||
const Promise = require('bluebird')
|
const Promise = require('bluebird')
|
||||||
|
|
||||||
const { remote } = require('electron')
|
const { remote } = require('electron')
|
||||||
const { app } = remote.require('electron')
|
const { app } = remote
|
||||||
|
|
||||||
const skip = process.platform !== 'linux' ||
|
const skip = process.platform !== 'linux' ||
|
||||||
process.arch === 'ia32' ||
|
process.arch === 'ia32' ||
|
||||||
|
|
|
@ -1045,7 +1045,12 @@ describe('protocol module', () => {
|
||||||
let success = null
|
let success = null
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
success = false
|
success = false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -526,7 +526,7 @@ describe('remote module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
preload: preload
|
preload
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
w.once('closed', () => done())
|
w.once('closed', () => done())
|
||||||
|
|
|
@ -26,7 +26,10 @@ describe('session module', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400
|
height: 400,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,9 @@ describe('webContents module', () => {
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400,
|
height: 400,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
backgroundThrottling: false
|
backgroundThrottling: false,
|
||||||
|
nodeIntegration: true,
|
||||||
|
webviewTag: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -146,7 +146,12 @@ describe('webFrame module', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('calls a spellcheck provider', async () => {
|
it('calls a spellcheck provider', async () => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
await w.loadFile(path.join(fixtures, 'pages', 'webframe-spell-check.html'))
|
await w.loadFile(path.join(fixtures, 'pages', 'webframe-spell-check.html'))
|
||||||
w.focus()
|
w.focus()
|
||||||
await w.webContents.executeJavaScript('document.querySelector("input").focus()', true)
|
await w.webContents.executeJavaScript('document.querySelector("input").focus()', true)
|
||||||
|
|
|
@ -10,8 +10,7 @@ const { closeWindow } = require('./window-helpers')
|
||||||
const nativeImage = require('electron').nativeImage
|
const nativeImage = require('electron').nativeImage
|
||||||
const remote = require('electron').remote
|
const remote = require('electron').remote
|
||||||
|
|
||||||
const ipcMain = remote.require('electron').ipcMain
|
const { ipcMain, BrowserWindow } = remote
|
||||||
const BrowserWindow = remote.require('electron').BrowserWindow
|
|
||||||
|
|
||||||
describe('asar package', function () {
|
describe('asar package', function () {
|
||||||
const fixtures = path.join(__dirname, 'fixtures')
|
const fixtures = path.join(__dirname, 'fixtures')
|
||||||
|
@ -1134,7 +1133,10 @@ describe('asar package', function () {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400
|
height: 400,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const p = path.resolve(fixtures, 'asar', 'web.asar', 'index.html')
|
const p = path.resolve(fixtures, 'asar', 'web.asar', 'index.html')
|
||||||
ipcMain.once('dirname', function (event, dirname) {
|
ipcMain.once('dirname', function (event, dirname) {
|
||||||
|
@ -1152,7 +1154,10 @@ describe('asar package', function () {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400
|
height: 400,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const p = path.resolve(fixtures, 'asar', 'script.asar', 'index.html')
|
const p = path.resolve(fixtures, 'asar', 'script.asar', 'index.html')
|
||||||
w.loadFile(p)
|
w.loadFile(p)
|
||||||
|
@ -1172,7 +1177,10 @@ describe('asar package', function () {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
width: 400,
|
width: 400,
|
||||||
height: 400
|
height: 400,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
const p = path.resolve(fixtures, 'asar', 'video.asar', 'index.html')
|
const p = path.resolve(fixtures, 'asar', 'video.asar', 'index.html')
|
||||||
w.loadFile(p)
|
w.loadFile(p)
|
||||||
|
|
|
@ -112,12 +112,7 @@ describe('chromium feature', () => {
|
||||||
|
|
||||||
describe('loading jquery', () => {
|
describe('loading jquery', () => {
|
||||||
it('does not crash', (done) => {
|
it('does not crash', (done) => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({ show: false })
|
||||||
show: false,
|
|
||||||
webPreferences: {
|
|
||||||
nodeIntegration: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
w.webContents.once('did-finish-load', () => { done() })
|
w.webContents.once('did-finish-load', () => { done() })
|
||||||
w.webContents.once('crashed', () => done(new Error('WebContents crashed.')))
|
w.webContents.once('crashed', () => done(new Error('WebContents crashed.')))
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'jquery.html'))
|
w.loadFile(path.join(fixtures, 'pages', 'jquery.html'))
|
||||||
|
@ -176,6 +171,7 @@ describe('chromium feature', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
session: ses
|
session: ses
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -216,6 +212,7 @@ describe('chromium feature', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
partition: 'sw-file-scheme-spec'
|
partition: 'sw-file-scheme-spec'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -253,7 +250,10 @@ describe('chromium feature', () => {
|
||||||
|
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: { session: customSession }
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
session: customSession
|
||||||
|
}
|
||||||
})
|
})
|
||||||
w.webContents.on('ipc-message', (event, args) => {
|
w.webContents.on('ipc-message', (event, args) => {
|
||||||
if (args[0] === 'reload') {
|
if (args[0] === 'reload') {
|
||||||
|
@ -294,6 +294,7 @@ describe('chromium feature', () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
partition: 'geolocation-spec'
|
partition: 'geolocation-spec'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -388,26 +389,6 @@ describe('chromium feature', () => {
|
||||||
b = window.open(windowUrl, '', 'nodeIntegration=no,show=no')
|
b = window.open(windowUrl, '', 'nodeIntegration=no,show=no')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('disables webviewTag when node integration is disabled on the parent window', (done) => {
|
|
||||||
let b = null
|
|
||||||
listener = (event) => {
|
|
||||||
assert.strictEqual(event.data.isWebViewUndefined, true)
|
|
||||||
b.close()
|
|
||||||
done()
|
|
||||||
}
|
|
||||||
window.addEventListener('message', listener)
|
|
||||||
|
|
||||||
const windowUrl = require('url').format({
|
|
||||||
pathname: `${fixtures}/pages/window-opener-no-web-view-tag.html`,
|
|
||||||
protocol: 'file',
|
|
||||||
query: {
|
|
||||||
p: `${fixtures}/pages/window-opener-web-view.html`
|
|
||||||
},
|
|
||||||
slashes: true
|
|
||||||
})
|
|
||||||
b = window.open(windowUrl, '', 'nodeIntegration=no,show=no')
|
|
||||||
})
|
|
||||||
|
|
||||||
// TODO(codebytere): re-enable this test
|
// TODO(codebytere): re-enable this test
|
||||||
xit('disables node integration when it is disabled on the parent window for chrome devtools URLs', (done) => {
|
xit('disables node integration when it is disabled on the parent window for chrome devtools URLs', (done) => {
|
||||||
let b = null
|
let b = null
|
||||||
|
@ -604,7 +585,12 @@ describe('chromium feature', () => {
|
||||||
describe('window.opener', () => {
|
describe('window.opener', () => {
|
||||||
const url = `file://${fixtures}/pages/window-opener.html`
|
const url = `file://${fixtures}/pages/window-opener.html`
|
||||||
it('is null for main window', (done) => {
|
it('is null for main window', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.webContents.once('ipc-message', (event, args) => {
|
w.webContents.once('ipc-message', (event, args) => {
|
||||||
assert.deepStrictEqual(args, ['opener', null])
|
assert.deepStrictEqual(args, ['opener', null])
|
||||||
done()
|
done()
|
||||||
|
@ -1008,7 +994,9 @@ describe('chromium feature', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
contents = webContents.create({})
|
contents = webContents.create({
|
||||||
|
nodeIntegration: true
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@ -1102,8 +1090,10 @@ describe('chromium feature', () => {
|
||||||
|
|
||||||
const testLocalStorageAfterXSiteRedirect = (testTitle, extraPreferences = {}) => {
|
const testLocalStorageAfterXSiteRedirect = (testTitle, extraPreferences = {}) => {
|
||||||
it(testTitle, (done) => {
|
it(testTitle, (done) => {
|
||||||
const webPreferences = { show: false, ...extraPreferences }
|
w = new BrowserWindow({
|
||||||
w = new BrowserWindow(webPreferences)
|
show: false,
|
||||||
|
...extraPreferences
|
||||||
|
})
|
||||||
let redirected = false
|
let redirected = false
|
||||||
w.webContents.on('crashed', () => {
|
w.webContents.on('crashed', () => {
|
||||||
assert.fail('renderer crashed / was killed')
|
assert.fail('renderer crashed / was killed')
|
||||||
|
@ -1417,7 +1407,11 @@ describe('chromium feature', () => {
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: true
|
show: true,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true,
|
||||||
|
webviewTag: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
const webviewReady = emittedOnce(w.webContents, 'did-attach-webview')
|
const webviewReady = emittedOnce(w.webContents, 'did-attach-webview')
|
||||||
|
|
5
spec/fixtures/no-proprietary-codecs.js
vendored
5
spec/fixtures/no-proprietary-codecs.js
vendored
|
@ -14,7 +14,10 @@ let window
|
||||||
|
|
||||||
app.once('ready', () => {
|
app.once('ready', () => {
|
||||||
window = new BrowserWindow({
|
window = new BrowserWindow({
|
||||||
show: false
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
window.webContents.on('crashed', (event, killed) => {
|
window.webContents.on('crashed', (event, killed) => {
|
||||||
|
|
|
@ -162,7 +162,12 @@ describe('modules support', () => {
|
||||||
let w
|
let w
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
|
|
|
@ -59,7 +59,12 @@ describe('security warnings', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should warn about Node.js integration with remote content', (done) => {
|
it('should warn about Node.js integration with remote content', (done) => {
|
||||||
w = new BrowserWindow({ show: false })
|
w = new BrowserWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.webContents.once('console-message', (e, level, message) => {
|
w.webContents.once('console-message', (e, level, message) => {
|
||||||
assert(message.includes('Node.js Integration with Remote Content'), message)
|
assert(message.includes('Node.js Integration with Remote Content'), message)
|
||||||
done()
|
done()
|
||||||
|
@ -75,7 +80,6 @@ describe('security warnings', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
webSecurity: false,
|
webSecurity: false,
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
...webPreferences
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -90,10 +94,7 @@ describe('security warnings', () => {
|
||||||
it('should warn about insecure Content-Security-Policy', (done) => {
|
it('should warn about insecure Content-Security-Policy', (done) => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
w.webContents.once('console-message', (e, level, message) => {
|
w.webContents.once('console-message', (e, level, message) => {
|
||||||
|
@ -110,7 +111,6 @@ describe('security warnings', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
allowRunningInsecureContent: true,
|
allowRunningInsecureContent: true,
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
...webPreferences
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -127,7 +127,6 @@ describe('security warnings', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
experimentalFeatures: true,
|
experimentalFeatures: true,
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
...webPreferences
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -144,7 +143,6 @@ describe('security warnings', () => {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
enableBlinkFeatures: ['my-cool-feature'],
|
enableBlinkFeatures: ['my-cool-feature'],
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
...webPreferences
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -159,10 +157,7 @@ describe('security warnings', () => {
|
||||||
it('should warn about allowpopups', (done) => {
|
it('should warn about allowpopups', (done) => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
w.webContents.once('console-message', (e, level, message) => {
|
w.webContents.once('console-message', (e, level, message) => {
|
||||||
assert(message.includes('allowpopups'), message)
|
assert(message.includes('allowpopups'), message)
|
||||||
|
@ -175,10 +170,7 @@ describe('security warnings', () => {
|
||||||
it('should warn about insecure resources', (done) => {
|
it('should warn about insecure resources', (done) => {
|
||||||
w = new BrowserWindow({
|
w = new BrowserWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences
|
||||||
nodeIntegration: false,
|
|
||||||
...webPreferences
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
w.webContents.once('console-message', (e, level, message) => {
|
w.webContents.once('console-message', (e, level, message) => {
|
||||||
assert(message.includes('Insecure Resources'), message)
|
assert(message.includes('Insecure Resources'), message)
|
||||||
|
|
|
@ -124,7 +124,9 @@ app.on('ready', function () {
|
||||||
width: 800,
|
width: 800,
|
||||||
height: 600,
|
height: 600,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
backgroundThrottling: false
|
backgroundThrottling: false,
|
||||||
|
nodeIntegration: true,
|
||||||
|
webviewTag: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.loadFile('static/index.html', {
|
window.loadFile('static/index.html', {
|
||||||
|
|
|
@ -65,7 +65,13 @@ describe('<webview> tag', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('works without script tag in page', async () => {
|
it('works without script tag in page', async () => {
|
||||||
const w = await openTheWindow({ show: false })
|
const w = await openTheWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'webview-no-script.html'))
|
w.loadFile(path.join(fixtures, 'pages', 'webview-no-script.html'))
|
||||||
await emittedOnce(ipcMain, 'pong')
|
await emittedOnce(ipcMain, 'pong')
|
||||||
})
|
})
|
||||||
|
@ -75,6 +81,7 @@ describe('<webview> tag', function () {
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
webviewTag: true,
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
contextIsolation: true
|
contextIsolation: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -82,12 +89,12 @@ describe('<webview> tag', function () {
|
||||||
await emittedOnce(ipcMain, 'pong')
|
await emittedOnce(ipcMain, 'pong')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('is disabled when nodeIntegration is disabled', async () => {
|
it('is disabled by default', async () => {
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration: false,
|
preload: path.join(fixtures, 'module', 'preload-webview.js'),
|
||||||
preload: path.join(fixtures, 'module', 'preload-webview.js')
|
nodeIntegration: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -97,22 +104,6 @@ describe('<webview> tag', function () {
|
||||||
expect(type).to.equal('undefined', 'WebView still exists')
|
expect(type).to.equal('undefined', 'WebView still exists')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('is enabled when the webviewTag option is enabled and the nodeIntegration option is disabled', async () => {
|
|
||||||
const w = await openTheWindow({
|
|
||||||
show: false,
|
|
||||||
webPreferences: {
|
|
||||||
nodeIntegration: false,
|
|
||||||
preload: path.join(fixtures, 'module', 'preload-webview.js'),
|
|
||||||
webviewTag: true
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'webview-no-script.html'))
|
|
||||||
const [, type] = await emittedOnce(ipcMain, 'webview')
|
|
||||||
|
|
||||||
expect(type).to.not.equal('undefined', 'WebView is not created')
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('src attribute', () => {
|
describe('src attribute', () => {
|
||||||
it('specifies the page to load', async () => {
|
it('specifies the page to load', async () => {
|
||||||
const message = await startLoadingWebViewAndWaitForMessage(webview, {
|
const message = await startLoadingWebViewAndWaitForMessage(webview, {
|
||||||
|
@ -1289,7 +1280,13 @@ describe('<webview> tag', function () {
|
||||||
|
|
||||||
describe('did-attach-webview event', () => {
|
describe('did-attach-webview event', () => {
|
||||||
it('is emitted when a webview has been attached', async () => {
|
it('is emitted when a webview has been attached', async () => {
|
||||||
const w = await openTheWindow({ show: false })
|
const w = await openTheWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
w.loadFile(path.join(fixtures, 'pages', 'webview-did-attach-event.html'))
|
w.loadFile(path.join(fixtures, 'pages', 'webview-did-attach-event.html'))
|
||||||
|
|
||||||
const [, webContents] = await emittedOnce(w.webContents, 'did-attach-webview')
|
const [, webContents] = await emittedOnce(w.webContents, 'did-attach-webview')
|
||||||
|
@ -1299,7 +1296,13 @@ describe('<webview> tag', function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
it('loads devtools extensions registered on the parent window', async () => {
|
it('loads devtools extensions registered on the parent window', async () => {
|
||||||
const w = await openTheWindow({ show: false })
|
const w = await openTheWindow({
|
||||||
|
show: false,
|
||||||
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true
|
||||||
|
}
|
||||||
|
})
|
||||||
BrowserWindow.removeDevToolsExtension('foo')
|
BrowserWindow.removeDevToolsExtension('foo')
|
||||||
|
|
||||||
const extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo')
|
const extensionPath = path.join(__dirname, 'fixtures', 'devtools-extensions', 'foo')
|
||||||
|
@ -1391,6 +1394,8 @@ describe('<webview> tag', function () {
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
zoomFactor: 1.2
|
zoomFactor: 1.2
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1405,6 +1410,8 @@ describe('<webview> tag', function () {
|
||||||
return openTheWindow({
|
return openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
zoomFactor: 1.2
|
zoomFactor: 1.2
|
||||||
}
|
}
|
||||||
}).then((w) => {
|
}).then((w) => {
|
||||||
|
@ -1434,6 +1441,8 @@ describe('<webview> tag', function () {
|
||||||
return openTheWindow({
|
return openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
zoomFactor: 1.2
|
zoomFactor: 1.2
|
||||||
}
|
}
|
||||||
}).then((w) => {
|
}).then((w) => {
|
||||||
|
@ -1458,6 +1467,8 @@ describe('<webview> tag', function () {
|
||||||
const w = await openTheWindow({
|
const w = await openTheWindow({
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
webviewTag: true,
|
||||||
|
nodeIntegration: true,
|
||||||
zoomFactor: 1.2
|
zoomFactor: 1.2
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue