From ff707a0f3df0ba4a48ef7ba8022dac8bbf2855aa Mon Sep 17 00:00:00 2001 From: Ahmed Mohamed Ali Date: Mon, 13 Nov 2017 21:13:19 +0100 Subject: [PATCH] Fix issues in the file for the tests. --- spec/chromium-spec.js | 599 ++++++++---------- .../preload-pdf-loaded-in-nested-subframe.js | 4 +- .../module/preload-pdf-loaded-in-subframe.js | 4 +- spec/fixtures/pages/pdf-in-iframe.html | 4 +- spec/fixtures/pages/pdf-in-nested-iframe.html | 6 +- 5 files changed, 287 insertions(+), 330 deletions(-) diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index b8184d79e407..c5ab91c2e9a9 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -11,62 +11,55 @@ const {app, BrowserWindow, ipcMain, protocol, session, webContents} = remote const isCI = remote.getGlobal('isCi') -describe('chromium feature', function () { - var fixtures = path.resolve(__dirname, 'fixtures') - var listener = null +describe('chromium feature', () => { + const fixtures = path.resolve(__dirname, 'fixtures') + let listener = null let w = null - afterEach(function () { + afterEach(() => { if (listener != null) { window.removeEventListener('message', listener) } listener = null }) - afterEach(function () { - return closeWindow(w).then(function () { w = null }) - }) + afterEach(() => closeWindow(w).then(() => { w = null })) - describe('heap snapshot', function () { - it('does not crash', function () { + describe('heap snapshot', () => { + it('does not crash', () => { if (process.env.TRAVIS === 'true') return process.atomBinding('v8_util').takeHeapSnapshot() }) }) - describe('sending request of http protocol urls', function () { - it('does not crash', function (done) { - var server = http.createServer(function (req, res) { + describe('sending request of http protocol urls', () => { + it('does not crash', (done) => { + const server = http.createServer((req, res) => { res.end() server.close() done() }) - server.listen(0, '127.0.0.1', function () { - var port = server.address().port - $.get('http://127.0.0.1:' + port) + server.listen(0, '127.0.0.1', () => { + const port = server.address().port + $.get(`http://127.0.0.1:${port}`) }) }) }) - xdescribe('navigator.webkitGetUserMedia', function () { - it('calls its callbacks', function (done) { + describe('navigator.webkitGetUserMedia', () => { + it('calls its callbacks', (done) => { navigator.webkitGetUserMedia({ audio: true, video: false - }, function () { - done() - }, function () { - done() - }) + }, () => done(), + () => done()) }) }) - describe('navigator.mediaDevices', function () { - if (isCI) { - return - } + describe('navigator.mediaDevices', () => { + if (isCI) return - it('can return labels of enumerated devices', function (done) { + it('can return labels of enumerated devices', (done) => { navigator.mediaDevices.enumerateDevices().then((devices) => { const labels = devices.map((device) => device.label) const labelFound = labels.some((label) => !!label) @@ -78,7 +71,7 @@ describe('chromium feature', function () { }).catch(done) }) - it('can return new device id when cookie storage is cleared', function (done) { + it('can return new device id when cookie storage is cleared', (done) => { const options = { origin: null, storages: ['cookies'] @@ -91,91 +84,78 @@ describe('chromium feature', function () { session: ses } }) - w.webContents.on('ipc-message', function (event, args) { - if (args[0] === 'deviceIds') { - deviceIds.push(args[1]) - } + w.webContents.on('ipc-message', (event, args) => { + if (args[0] === 'deviceIds') deviceIds.push(args[1]) if (deviceIds.length === 2) { assert.notDeepEqual(deviceIds[0], deviceIds[1]) - closeWindow(w).then(function () { + closeWindow(w).then(() => { w = null done() - }).catch(function (error) { - done(error) - }) + }).catch((error) => done(error)) } else { - ses.clearStorageData(options, function () { + ses.clearStorageData(options, () => { w.webContents.reload() }) } }) - w.loadURL('file://' + fixtures + '/pages/media-id-reset.html') + w.loadURL(`file://${fixtures}/pages/media-id-reset.html`) }) }) - describe('navigator.language', function () { - it('should not be empty', function () { + describe('navigator.language', () => { + it('should not be empty', () => { assert.notEqual(navigator.language, '') }) }) - describe('navigator.serviceWorker', function () { - it('should register for file scheme', function (done) { - w = new BrowserWindow({ - show: false - }) - w.webContents.on('ipc-message', function (event, args) { + describe('navigator.serviceWorker', () => { + it('should register for file scheme', (done) => { + w = new BrowserWindow({ show: false }) + w.webContents.on('ipc-message', (event, args) => { if (args[0] === 'reload') { w.webContents.reload() } else if (args[0] === 'error') { - done('unexpected error : ' + args[1]) + done(`unexpected error : ${args[1]}`) } else if (args[0] === 'response') { assert.equal(args[1], 'Hello from serviceWorker!') session.defaultSession.clearStorageData({ storages: ['serviceworkers'] - }, function () { - done() - }) + }, () => done()) } }) w.loadURL(`file://${fixtures}/pages/service-worker/index.html`) }) - it('should register for intercepted file scheme', function (done) { + it('should register for intercepted file scheme', (done) => { const customSession = session.fromPartition('intercept-file') - customSession.protocol.interceptBufferProtocol('file', function (request, callback) { + customSession.protocol.interceptBufferProtocol('file', (request, callback) => { let file = url.parse(request.url).pathname - // Remove leading slash before drive letter on Windows - if (file[0] === '/' && process.platform === 'win32') { - file = file.slice(1) - } + if (file[0] === '/' && process.platform === 'win32') file = file.slice(1) + const content = fs.readFileSync(path.normalize(file)) const ext = path.extname(file) let type = 'text/html' - if (ext === '.js') { - type = 'application/javascript' - } + + if (ext === '.js') type = 'application/javascript' callback({data: content, mimeType: type}) - }, function (error) { + }, (error) => { if (error) done(error) }) w = new BrowserWindow({ show: false, - webPreferences: { - session: customSession - } + webPreferences: { session: customSession } }) - w.webContents.on('ipc-message', function (event, args) { + w.webContents.on('ipc-message', (event, args) => { if (args[0] === 'reload') { w.webContents.reload() } else if (args[0] === 'error') { - done('unexpected error : ' + args[1]) + done(`unexpected error : ${args[1]}`) } else if (args[0] === 'response') { assert.equal(args[1], 'Hello from serviceWorker!') customSession.clearStorageData({ storages: ['serviceworkers'] - }, function () { + }, () => { customSession.protocol.uninterceptProtocol('file', (error) => done(error)) }) } @@ -184,53 +164,51 @@ describe('chromium feature', function () { }) }) - describe('window.open', function () { - if (process.env.TRAVIS === 'true' && process.platform === 'darwin') { - return - } + describe('window.open', () => { + if (process.env.TRAVIS === 'true' && process.platform === 'darwin') return - it('returns a BrowserWindowProxy object', function () { - var b = window.open('about:blank', '', 'show=no') + it('returns a BrowserWindowProxy object', () => { + const b = window.open('about:blank', '', 'show=no') assert.equal(b.closed, false) assert.equal(b.constructor.name, 'BrowserWindowProxy') b.close() }) - it('accepts "nodeIntegration" as feature', function (done) { - var b - listener = function (event) { + it('accepts "nodeIntegration" as feature', (done) => { + let b + listener = (event) => { assert.equal(event.data.isProcessGlobalUndefined, true) b.close() done() } window.addEventListener('message', listener) - b = window.open('file://' + fixtures + '/pages/window-opener-node.html', '', 'nodeIntegration=no,show=no') + b = window.open(`file://${fixtures}/pages/window-opener-node.html`, '', 'nodeIntegration=no,show=no') }) - it('inherit options of parent window', function (done) { - var b - listener = function (event) { - var ref1 = remote.getCurrentWindow().getSize() - var width = ref1[0] - var height = ref1[1] - assert.equal(event.data, 'size: ' + width + ' ' + height) + it('inherit options of parent window', (done) => { + let b + listener = (event) => { + const ref1 = remote.getCurrentWindow().getSize() + const width = ref1[0] + const height = ref1[1] + assert.equal(event.data, `size: ${width} ${height}`) b.close() done() } window.addEventListener('message', listener) - b = window.open('file://' + fixtures + '/pages/window-open-size.html', '', 'show=no') + b = window.open(`file://${fixtures}/pages/window-open-size.html`, '', 'show=no') }) - it('disables node integration when it is disabled on the parent window', function (done) { - var b - listener = function (event) { + it('disables node integration when it is disabled on the parent window', (done) => { + let b + listener = (event) => { assert.equal(event.data.isProcessGlobalUndefined, true) b.close() done() } window.addEventListener('message', listener) - var windowUrl = require('url').format({ + const windowUrl = require('url').format({ pathname: `${fixtures}/pages/window-opener-no-node-integration.html`, protocol: 'file', query: { @@ -241,8 +219,8 @@ describe('chromium feature', function () { b = window.open(windowUrl, '', 'nodeIntegration=no,show=no') }) - it('disables node integration when it is disabled on the parent window for chrome devtools URLs', function (done) { - var b + it('disables node integration when it is disabled on the parent window for chrome devtools URLs', (done) => { + let b app.once('web-contents-created', (event, contents) => { contents.once('did-finish-load', () => { contents.executeJavaScript('typeof process').then((typeofProcessGlobal) => { @@ -255,8 +233,8 @@ describe('chromium feature', function () { b = window.open('chrome-devtools://devtools/bundled/inspector.html', '', 'nodeIntegration=no,show=no') }) - it('disables JavaScript when it is disabled on the parent window', function (done) { - var b + it('disables JavaScript when it is disabled on the parent window', (done) => { + let b app.once('web-contents-created', (event, contents) => { contents.once('did-finish-load', () => { app.once('browser-window-created', (event, window) => { @@ -272,7 +250,7 @@ describe('chromium feature', function () { }) }) - var windowUrl = require('url').format({ + const windowUrl = require('url').format({ pathname: `${fixtures}/pages/window-no-javascript.html`, protocol: 'file', slashes: true @@ -280,16 +258,16 @@ describe('chromium feature', function () { b = window.open(windowUrl, '', 'javascript=no,show=no') }) - it('disables the tag when it is disabled on the parent window', function (done) { + it('disables the tag when it is disabled on the parent window', (done) => { let b - listener = function (event) { + listener = (event) => { assert.equal(event.data.isWebViewGlobalUndefined, true) b.close() done() } window.addEventListener('message', listener) - var windowUrl = require('url').format({ + const windowUrl = require('url').format({ pathname: `${fixtures}/pages/window-opener-no-webview-tag.html`, protocol: 'file', query: { @@ -300,24 +278,24 @@ describe('chromium feature', function () { b = window.open(windowUrl, '', 'webviewTag=no,nodeIntegration=yes,show=no') }) - it('does not override child options', function (done) { - var b, size - size = { + it('does not override child options', (done) => { + let b + const size = { width: 350, height: 450 } - listener = function (event) { - assert.equal(event.data, 'size: ' + size.width + ' ' + size.height) + listener = (event) => { + assert.equal(event.data, `size: ${size.width} ${size.height}`) b.close() done() } window.addEventListener('message', listener) - b = window.open('file://' + fixtures + '/pages/window-open-size.html', '', 'show=no,width=' + size.width + ',height=' + size.height) + b = window.open(`file://${fixtures}/pages/window-open-size.html`, '', 'show=no,width=' + size.width + ',height=' + size.height) }) it('handles cycles when merging the parent options into the child options', (done) => { w = BrowserWindow.fromId(ipcRenderer.sendSync('create-window-with-options-cycle')) - w.loadURL('file://' + fixtures + '/pages/window-open.html') + w.loadURL(`file://${fixtures}/pages/window-open.html`) w.webContents.once('new-window', (event, url, frameName, disposition, options) => { assert.equal(options.show, false) assert.deepEqual(options.foo, { @@ -337,12 +315,13 @@ describe('chromium feature', function () { }) }) - it('defines a window.location getter', function (done) { - var b, targetURL + it('defines a window.location getter', (done) => { + let b + let targetURL if (process.platform === 'win32') { - targetURL = 'file:///' + fixtures.replace(/\\/g, '/') + '/pages/base-page.html' + targetURL = `file:///${fixtures.replace(/\\/g, '/')}/pages/base-page.html` } else { - targetURL = 'file://' + fixtures + '/pages/base-page.html' + targetURL = `file://${fixtures}/pages/base-page.html` } app.once('browser-window-created', (event, window) => { window.webContents.once('did-finish-load', () => { @@ -354,34 +333,33 @@ describe('chromium feature', function () { b = window.open(targetURL) }) - it('defines a window.location setter', function (done) { + it('defines a window.location setter', (done) => { let b app.once('browser-window-created', (event, {webContents}) => { - webContents.once('did-finish-load', function () { + webContents.once('did-finish-load', () => { // When it loads, redirect - b.location = 'file://' + fixtures + '/pages/base-page.html' - webContents.once('did-finish-load', function () { + b.location = `file://${fixtures}/pages/base-page.html` + webContents.once('did-finish-load', () => { // After our second redirect, cleanup and callback b.close() done() }) }) }) - // Load a page that definitely won't redirect b = window.open('about:blank') }) - it('open a blank page when no URL is specified', function (done) { + it('open a blank page when no URL is specified', (done) => { let b app.once('browser-window-created', (event, {webContents}) => { - webContents.once('did-finish-load', function () { + webContents.once('did-finish-load', () => { const {location} = b b.close() assert.equal(location, 'about:blank') let c app.once('browser-window-created', (event, {webContents}) => { - webContents.once('did-finish-load', function () { + webContents.once('did-finish-load', () => { const {location} = c c.close() assert.equal(location, 'about:blank') @@ -394,17 +372,17 @@ describe('chromium feature', function () { b = window.open() }) - it('throws an exception when the arguments cannot be converted to strings', function () { - assert.throws(function () { + it('throws an exception when the arguments cannot be converted to strings', () => { + assert.throws(() => { window.open('', {toString: null}) }, /Cannot convert object to primitive value/) - assert.throws(function () { + assert.throws(() => { window.open('', '', {toString: 3}) }, /Cannot convert object to primitive value/) }) - it('sets the window title to the specified frameName', function (done) { + it('sets the window title to the specified frameName', (done) => { let b app.once('browser-window-created', (event, createdWindow) => { assert.equal(createdWindow.getTitle(), 'hello') @@ -414,7 +392,7 @@ describe('chromium feature', function () { b = window.open('', 'hello') }) - it('does not throw an exception when the frameName is a built-in object property', function (done) { + it('does not throw an exception when the frameName is a built-in object property', (done) => { let b app.once('browser-window-created', (event, createdWindow) => { assert.equal(createdWindow.getTitle(), '__proto__') @@ -424,32 +402,30 @@ describe('chromium feature', function () { b = window.open('', '__proto__') }) - it('does not throw an exception when the features include webPreferences', function () { + it('does not throw an exception when the features include webPreferences', () => { let b - assert.doesNotThrow(function () { + assert.doesNotThrow(() => { b = window.open('', '', 'webPreferences=') }) b.close() }) }) - describe('window.opener', function () { - let url = 'file://' + fixtures + '/pages/window-opener.html' + describe('window.opener', () => { + let url = `file://${fixtures}/pages/window-opener.html` - it('is null for main window', function (done) { - w = new BrowserWindow({ - show: false - }) - w.webContents.once('ipc-message', function (event, args) { + it('is null for main window', (done) => { + w = new BrowserWindow({ show: false }) + w.webContents.once('ipc-message', (event, args) => { assert.deepEqual(args, ['opener', null]) done() }) w.loadURL(url) }) - it('is not null for window opened by window.open', function (done) { + it('is not null for window opened by window.open', (done) => { let b - listener = function (event) { + listener = (event) => { assert.equal(event.data, 'object') b.close() done() @@ -459,29 +435,27 @@ describe('chromium feature', function () { }) }) - describe('window.opener access from BrowserWindow', function () { + describe('window.opener access from BrowserWindow', () => { const scheme = 'other' let url = `${scheme}://${fixtures}/pages/window-opener-location.html` let w = null - before(function (done) { - protocol.registerFileProtocol(scheme, function (request, callback) { + before((done) => { + protocol.registerFileProtocol(scheme, (request, callback) => { callback(`${fixtures}/pages/window-opener-location.html`) - }, function (error) { - done(error) - }) + }, (error) => done(error)) }) - after(function () { + after(() => { protocol.unregisterProtocol(scheme) }) - afterEach(function () { + afterEach(() => { w.close() }) - it('does nothing when origin of current window does not match opener', function (done) { - listener = function (event) { + it('does nothing when origin of current window does not match opener', (done) => { + listener = (event) => { assert.equal(event.data, undefined) done() } @@ -489,8 +463,8 @@ describe('chromium feature', function () { w = window.open(url, '', 'show=no') }) - it('works when origin matches', function (done) { - listener = function (event) { + it('works when origin matches', (done) => { + listener = (event) => { assert.equal(event.data, location.href) done() } @@ -498,8 +472,8 @@ describe('chromium feature', function () { w = window.open(`file://${fixtures}/pages/window-opener-location.html`, '', 'show=no') }) - it('works when origin does not match opener but has node integration', function (done) { - listener = function (event) { + it('works when origin does not match opener but has node integration', (done) => { + listener = (event) => { assert.equal(event.data, location.href) done() } @@ -508,31 +482,29 @@ describe('chromium feature', function () { }) }) - describe('window.opener access from ', function () { + describe('window.opener access from ', () => { const scheme = 'other' const srcPath = `${fixtures}/pages/webview-opener-postMessage.html` const pageURL = `file://${fixtures}/pages/window-opener-location.html` let webview = null - before(function (done) { - protocol.registerFileProtocol(scheme, function (request, callback) { + before((done) => { + protocol.registerFileProtocol(scheme, (request, callback) => { callback(srcPath) - }, function (error) { - done(error) - }) + }, (error) => done(error)) }) - after(function () { + after(() => { protocol.unregisterProtocol(scheme) }) - afterEach(function () { + afterEach(() => { if (webview != null) webview.remove() }) - it('does nothing when origin of webview src URL does not match opener', function (done) { + it('does nothing when origin of webview src URL does not match opener', (done) => { webview = new WebView() - webview.addEventListener('console-message', function (e) { + webview.addEventListener('console-message', (e) => { assert.equal(e.message, 'null') done() }) @@ -548,9 +520,9 @@ describe('chromium feature', function () { document.body.appendChild(webview) }) - it('works when origin matches', function (done) { + it('works when origin matches', (done) => { webview = new WebView() - webview.addEventListener('console-message', function (e) { + webview.addEventListener('console-message', (e) => { assert.equal(e.message, webview.src) done() }) @@ -566,9 +538,9 @@ describe('chromium feature', function () { document.body.appendChild(webview) }) - it('works when origin does not match opener but has node integration', function (done) { + it('works when origin does not match opener but has node integration', (done) => { webview = new WebView() - webview.addEventListener('console-message', function (e) { + webview.addEventListener('console-message', (e) => { webview.remove() assert.equal(e.message, webview.src) done() @@ -587,13 +559,13 @@ describe('chromium feature', function () { }) }) - describe('window.postMessage', function () { - it('sets the source and origin correctly', function (done) { - var b - listener = function (event) { + describe('window.postMessage', () => { + it('sets the source and origin correctly', (done) => { + let b + listener = (event) => { window.removeEventListener('message', listener) b.close() - var message = JSON.parse(event.data) + const message = JSON.parse(event.data) assert.equal(message.data, 'testing') assert.equal(message.origin, 'file://') assert.equal(message.sourceEqualsOpener, true) @@ -602,26 +574,26 @@ describe('chromium feature', function () { } window.addEventListener('message', listener) app.once('browser-window-created', (event, {webContents}) => { - webContents.once('did-finish-load', function () { + webContents.once('did-finish-load', () => { b.postMessage('testing', '*') }) }) - b = window.open('file://' + fixtures + '/pages/window-open-postMessage.html', '', 'show=no') + b = window.open(`file://${fixtures}/pages/window-open-postMessage.html`, '', 'show=no') }) - it('throws an exception when the targetOrigin cannot be converted to a string', function () { - var b = window.open('') - assert.throws(function () { + it('throws an exception when the targetOrigin cannot be converted to a string', () => { + const b = window.open('') + assert.throws(() => { b.postMessage('test', {toString: null}) }, /Cannot convert object to primitive value/) b.close() }) }) - describe('window.opener.postMessage', function () { - it('sets source and origin correctly', function (done) { - var b - listener = function (event) { + describe('window.opener.postMessage', () => { + it('sets source and origin correctly', (done) => { + let b + listener = (event) => { window.removeEventListener('message', listener) b.close() assert.equal(event.source, b) @@ -629,12 +601,12 @@ describe('chromium feature', function () { done() } window.addEventListener('message', listener) - b = window.open('file://' + fixtures + '/pages/window-opener-postMessage.html', '', 'show=no') + b = window.open(`file://${fixtures}/pages/window-opener-postMessage.html`, '', 'show=no') }) - it('supports windows opened from a ', function (done) { + it('supports windows opened from a ', (done) => { const webview = new WebView() - webview.addEventListener('console-message', function (e) { + webview.addEventListener('console-message', (e) => { webview.remove() assert.equal(e.message, 'message') done() @@ -651,29 +623,29 @@ describe('chromium feature', function () { document.body.appendChild(webview) }) - describe('targetOrigin argument', function () { + describe('targetOrigin argument', () => { let serverURL let server - beforeEach(function (done) { - server = http.createServer(function (req, res) { + beforeEach((done) => { + server = http.createServer((req, res) => { res.writeHead(200) const filePath = path.join(fixtures, 'pages', 'window-opener-targetOrigin.html') res.end(fs.readFileSync(filePath, 'utf8')) }) - server.listen(0, '127.0.0.1', function () { + server.listen(0, '127.0.0.1', () => { serverURL = `http://127.0.0.1:${server.address().port}` done() }) }) - afterEach(function () { + afterEach(() => { server.close() }) - it('delivers messages that match the origin', function (done) { + it('delivers messages that match the origin', (done) => { let b - listener = function (event) { + listener = (event) => { window.removeEventListener('message', listener) b.close() assert.equal(event.data, 'deliver') @@ -685,32 +657,30 @@ describe('chromium feature', function () { }) }) - describe('creating a Uint8Array under browser side', function () { - it('does not crash', function () { - var RUint8Array = remote.getGlobal('Uint8Array') - var arr = new RUint8Array() + describe('creating a Uint8Array under browser side', () => { + it('does not crash', () => { + const RUint8Array = remote.getGlobal('Uint8Array') + const arr = new RUint8Array() assert(arr) }) }) - describe('webgl', function () { - if (isCI && process.platform === 'win32') { - return - } + describe('webgl', () => { + if (isCI && process.platform === 'win32') return - it('can be get as context in canvas', function () { + it('can be get as context in canvas', () => { if (process.platform === 'linux') return - var webgl = document.createElement('canvas').getContext('webgl') + const webgl = document.createElement('canvas').getContext('webgl') assert.notEqual(webgl, null) }) }) - describe('web workers', function () { - it('Worker can work', function (done) { - var worker = new Worker('../fixtures/workers/worker.js') - var message = 'ping' - worker.onmessage = function (event) { + describe('web workers', () => { + it('Worker can work', (done) => { + const worker = new Worker('../fixtures/workers/worker.js') + const message = 'ping' + worker.onmessage = (event) => { assert.equal(event.data, message) worker.terminate() done() @@ -718,95 +688,95 @@ describe('chromium feature', function () { worker.postMessage(message) }) - it('Worker has no node integration by default', function (done) { + it('Worker has no node integration by default', (done) => { let worker = new Worker('../fixtures/workers/worker_node.js') - worker.onmessage = function (event) { + worker.onmessage = (event) => { assert.equal(event.data, 'undefined undefined undefined undefined') worker.terminate() done() } }) - it('Worker has node integration with nodeIntegrationInWorker', function (done) { + it('Worker has node integration with nodeIntegrationInWorker', (done) => { let webview = new WebView() - webview.addEventListener('ipc-message', function (e) { + webview.addEventListener('ipc-message', (e) => { assert.equal(e.channel, 'object function object function') webview.remove() done() }) - webview.src = 'file://' + fixtures + '/pages/worker.html' + webview.src = `file://${fixtures}/pages/worker.html` webview.setAttribute('webpreferences', 'nodeIntegration, nodeIntegrationInWorker') document.body.appendChild(webview) }) - it('SharedWorker can work', function (done) { - var worker = new SharedWorker('../fixtures/workers/shared_worker.js') - var message = 'ping' - worker.port.onmessage = function (event) { + it('SharedWorker can work', (done) => { + const worker = new SharedWorker('../fixtures/workers/shared_worker.js') + const message = 'ping' + worker.port.onmessage = (event) => { assert.equal(event.data, message) done() } worker.port.postMessage(message) }) - it('SharedWorker has no node integration by default', function (done) { + it('SharedWorker has no node integration by default', (done) => { let worker = new SharedWorker('../fixtures/workers/shared_worker_node.js') - worker.port.onmessage = function (event) { + worker.port.onmessage = (event) => { assert.equal(event.data, 'undefined undefined undefined undefined') done() } }) - it('SharedWorker has node integration with nodeIntegrationInWorker', function (done) { + it('SharedWorker has node integration with nodeIntegrationInWorker', (done) => { let webview = new WebView() - webview.addEventListener('console-message', function (e) { + webview.addEventListener('console-message', (e) => { console.log(e) }) - webview.addEventListener('ipc-message', function (e) { + webview.addEventListener('ipc-message', (e) => { assert.equal(e.channel, 'object function object function') webview.remove() done() }) - webview.src = 'file://' + fixtures + '/pages/shared_worker.html' + webview.src = `file://${fixtures}/pages/shared_worker.html` webview.setAttribute('webpreferences', 'nodeIntegration, nodeIntegrationInWorker') document.body.appendChild(webview) }) }) - describe('iframe', function () { - var iframe = null + describe('iframe', () => { + let iframe = null - beforeEach(function () { + beforeEach(() => { iframe = document.createElement('iframe') }) - afterEach(function () { + afterEach(() => { document.body.removeChild(iframe) }) - it('does not have node integration', function (done) { - iframe.src = 'file://' + fixtures + '/pages/set-global.html' + it('does not have node integration', (done) => { + iframe.src = `file://${fixtures}/pages/set-global.html` document.body.appendChild(iframe) - iframe.onload = function () { + iframe.onload = () => { assert.equal(iframe.contentWindow.test, 'undefined undefined undefined') done() } }) }) - describe('storage', function () { - it('requesting persitent quota works', function (done) { - navigator.webkitPersistentStorage.requestQuota(1024 * 1024, function (grantedBytes) { + describe('storage', () => { + it('requesting persitent quota works', (done) => { + navigator.webkitPersistentStorage.requestQuota(1024 * 1024, (grantedBytes) => { assert.equal(grantedBytes, 1048576) done() }) }) - describe('custom non standard schemes', function () { + describe('custom non standard schemes', () => { const protocolName = 'storage' let contents = null - before(function (done) { - const handler = function (request, callback) { + before((done) => { + const handler = (request, callback) => { let parsedUrl = url.parse(request.url) let filename switch (parsedUrl.pathname) { @@ -817,28 +787,26 @@ describe('chromium feature', function () { case '/cookie' : filename = 'cookie.html'; break default : filename = '' } - callback({path: fixtures + '/pages/storage/' + filename}) + callback({path: `${fixtures}/pages/storage/${filename}`}) } - protocol.registerFileProtocol(protocolName, handler, function (error) { - done(error) - }) + protocol.registerFileProtocol(protocolName, handler, (error) => done(error)) }) - after(function (done) { + after((done) => { protocol.unregisterProtocol(protocolName, () => done()) }) - beforeEach(function () { + beforeEach(() => { contents = webContents.create({}) }) - afterEach(function () { + afterEach(() => { contents.destroy() contents = null }) - it('cannot access localStorage', function (done) { - ipcMain.once('local-storage-response', function (event, error) { + it('cannot access localStorage', (done) => { + ipcMain.once('local-storage-response', (event, error) => { assert.equal( error, 'Failed to read the \'localStorage\' property from \'Window\': Access is denied for this document.') @@ -847,87 +815,85 @@ describe('chromium feature', function () { contents.loadURL(protocolName + '://host/localStorage') }) - it('cannot access sessionStorage', function (done) { - ipcMain.once('session-storage-response', function (event, error) { + it('cannot access sessionStorage', (done) => { + ipcMain.once('session-storage-response', (event, error) => { assert.equal( error, 'Failed to read the \'sessionStorage\' property from \'Window\': Access is denied for this document.') done() }) - contents.loadURL(protocolName + '://host/sessionStorage') + contents.loadURL(`${protocolName}://host/sessionStorage`) }) - it('cannot access WebSQL database', function (done) { - ipcMain.once('web-sql-response', function (event, error) { + it('cannot access WebSQL database', (done) => { + ipcMain.once('web-sql-response', (event, error) => { assert.equal( error, 'An attempt was made to break through the security policy of the user agent.') done() }) - contents.loadURL(protocolName + '://host/WebSQL') + contents.loadURL(`${protocolName}://host/WebSQL`) }) - it('cannot access indexedDB', function (done) { - ipcMain.once('indexed-db-response', function (event, error) { + it('cannot access indexedDB', (done) => { + ipcMain.once('indexed-db-response', (event, error) => { assert.equal(error, 'The user denied permission to access the database.') done() }) - contents.loadURL(protocolName + '://host/indexedDB') + contents.loadURL(`${protocolName}://host/indexedDB`) }) - it('cannot access cookie', function (done) { - ipcMain.once('cookie-response', function (event, cookie) { + it('cannot access cookie', (done) => { + ipcMain.once('cookie-response', (event, cookie) => { assert(!cookie) done() }) - contents.loadURL(protocolName + '://host/cookie') + contents.loadURL(`${protocolName}://host/cookie`) }) }) }) - describe('websockets', function () { - var wss = null - var server = null - var WebSocketServer = ws.Server + describe('websockets', () => { + let wss = null + let server = null + const WebSocketServer = ws.Server - afterEach(function () { + afterEach(() => { wss.close() server.close() }) - it('has user agent', function (done) { + it('has user agent', (done) => { server = http.createServer() - server.listen(0, '127.0.0.1', function () { - var port = server.address().port - wss = new WebSocketServer({ - server: server - }) + server.listen(0, '127.0.0.1', () => { + const port = server.address().port + wss = new WebSocketServer({ server: server }) wss.on('error', done) - wss.on('connection', function (ws) { + wss.on('connection', (ws) => { if (ws.upgradeReq.headers['user-agent']) { done() } else { done('user agent is empty') } }) - var socket = new WebSocket(`ws://127.0.0.1:${port}`) + const socket = new WebSocket(`ws://127.0.0.1:${port}`) assert(socket) }) }) }) - describe('Promise', function () { - it('resolves correctly in Node.js calls', function (done) { + describe('Promise', () => { + it('resolves correctly in Node.js calls', (done) => { document.registerElement('x-element', { prototype: Object.create(HTMLElement.prototype, { createdCallback: { - value: function () {} + value: () => {} } }) }) - setImmediate(function () { - var called = false - Promise.resolve().then(function () { + setImmediate(() => { + let called = false + Promise.resolve().then(() => { done(called ? void 0 : new Error('wrong sequence')) }) document.createElement('x-element') @@ -935,17 +901,17 @@ describe('chromium feature', function () { }) }) - it('resolves correctly in Electron calls', function (done) { + it('resolves correctly in Electron calls', (done) => { document.registerElement('y-element', { prototype: Object.create(HTMLElement.prototype, { createdCallback: { - value: function () {} + value: () => {} } }) }) - remote.getGlobal('setImmediate')(function () { - var called = false - Promise.resolve().then(function () { + remote.getGlobal('setImmediate')(() => { + let called = false + Promise.resolve().then(() => { done(called ? void 0 : new Error('wrong sequence')) }) document.createElement('y-element') @@ -954,29 +920,26 @@ describe('chromium feature', function () { }) }) - describe('fetch', function () { - it('does not crash', function (done) { - const server = http.createServer(function (req, res) { + describe('fetch', () => { + it('does not crash', (done) => { + const server = http.createServer((req, res) => { res.end('test') server.close() }) - server.listen(0, '127.0.0.1', function () { + server.listen(0, '127.0.0.1', () => { const port = server.address().port - fetch(`http://127.0.0.1:${port}`).then((res) => { - return res.body.getReader() - }).then((reader) => { - reader.read().then((r) => { - reader.cancel() - done() - }) - }).catch(function (e) { - done(e) - }) + fetch(`http://127.0.0.1:${port}`).then((res) => res.body.getReader()) + .then((reader) => { + reader.read().then((r) => { + reader.cancel() + done() + }) + }).catch((e) => done(e)) }) }) }) - describe('PDF Viewer', function () { + describe('PDF Viewer', () => { const pdfSource = url.format({ pathname: path.join(fixtures, 'assets', 'cat.pdf').replace(/\\/g, '/'), protocol: 'file', @@ -1000,6 +963,8 @@ describe('chromium feature', function () { plugins: plugins } }) + + w.webContents.openDevTools() } function testPDFIsLoadedInSubFrame (page, preloadFile, done) { @@ -1010,11 +975,11 @@ describe('chromium feature', function () { }) createBrowserWindow({plugins: true, preload: preloadFile}) - ipcMain.once('pdf-loaded', function (event, state) { + ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() }) - w.webContents.on('page-title-updated', function () { + w.webContents.on('page-title-updated', () => { const parsedURL = url.parse(w.webContents.getURL(), true) assert.equal(parsedURL.protocol, 'chrome:') assert.equal(parsedURL.hostname, 'pdf-viewer') @@ -1024,13 +989,13 @@ describe('chromium feature', function () { w.webContents.loadURL(pagePath) } - it('opens when loading a pdf resource as top level navigation', function (done) { + it('opens when loading a pdf resource as top level navigation', (done) => { createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) - ipcMain.once('pdf-loaded', function (event, state) { + ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() }) - w.webContents.on('page-title-updated', function () { + w.webContents.on('page-title-updated', () => { const parsedURL = url.parse(w.webContents.getURL(), true) assert.equal(parsedURL.protocol, 'chrome:') assert.equal(parsedURL.hostname, 'pdf-viewer') @@ -1040,13 +1005,13 @@ describe('chromium feature', function () { w.webContents.loadURL(pdfSource) }) - it('opens a pdf link given params, the query string should be escaped', function (done) { + it('opens a pdf link given params, the query string should be escaped', (done) => { createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) - ipcMain.once('pdf-loaded', function (event, state) { + ipcMain.once('pdf-loaded', (event, state) => { assert.equal(state, 'success') done() }) - w.webContents.on('page-title-updated', function () { + w.webContents.on('page-title-updated', () => { const parsedURL = url.parse(w.webContents.getURL(), true) assert.equal(parsedURL.protocol, 'chrome:') assert.equal(parsedURL.hostname, 'pdf-viewer') @@ -1058,10 +1023,10 @@ describe('chromium feature', function () { w.webContents.loadURL(pdfSourceWithParams) }) - it('should download a pdf when plugins are disabled', function (done) { + it('should download a pdf when plugins are disabled', (done) => { createBrowserWindow({plugins: false, preload: 'preload-pdf-loaded.js'}) ipcRenderer.sendSync('set-download-option', false, false) - ipcRenderer.once('download-done', function (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) { + ipcRenderer.once('download-done', (event, state, url, mimeType, receivedBytes, totalBytes, disposition, filename) => { assert.equal(state, 'completed') assert.equal(filename, 'cat.pdf') assert.equal(mimeType, 'application/pdf') @@ -1071,7 +1036,7 @@ describe('chromium feature', function () { w.webContents.loadURL(pdfSource) }) - it('should not open when pdf is requested as sub resource', function (done) { + it('should not open when pdf is requested as sub resource', (done) => { createBrowserWindow({plugins: true, preload: 'preload-pdf-loaded.js'}) webFrame.registerURLSchemeAsPrivileged('file', { secure: false, @@ -1079,62 +1044,58 @@ describe('chromium feature', function () { allowServiceWorkers: false, corsEnabled: false }) - fetch(pdfSource).then(function (res) { + fetch(pdfSource).then((res) => { assert.equal(res.status, 200) assert.notEqual(document.title, 'cat.pdf') done() - }).catch(function (e) { - done(e) - }) + }).catch((e) => done(e)) }) - it('opens when loading a pdf resource in a iframe', function (done) { + it('opens when loading a pdf resource in a iframe', (done) => { testPDFIsLoadedInSubFrame('pdf-in-iframe.html', 'preload-pdf-loaded-in-subframe.js', done) }) - it('opens when loading a pdf resource in a nested iframe', function (done) { + it('opens when loading a pdf resource in a nested iframe', (done) => { testPDFIsLoadedInSubFrame('pdf-in-nested-iframe.html', 'preload-pdf-loaded-in-nested-subframe.js', done) }) }) - describe('window.alert(message, title)', function () { - it('throws an exception when the arguments cannot be converted to strings', function () { - assert.throws(function () { + describe('window.alert(message, title)', () => { + it('throws an exception when the arguments cannot be converted to strings', () => { + assert.throws(() => { window.alert({toString: null}) }, /Cannot convert object to primitive value/) - assert.throws(function () { + assert.throws(() => { window.alert('message', {toString: 3}) }, /Cannot convert object to primitive value/) }) }) - describe('window.confirm(message, title)', function () { - it('throws an exception when the arguments cannot be converted to strings', function () { - assert.throws(function () { + describe('window.confirm(message, title)', () => { + it('throws an exception when the arguments cannot be converted to strings', () => { + assert.throws(() => { window.confirm({toString: null}, 'title') }, /Cannot convert object to primitive value/) - assert.throws(function () { + assert.throws(() => { window.confirm('message', {toString: 3}) }, /Cannot convert object to primitive value/) }) }) - describe('window.history', function () { - describe('window.history.go(offset)', function () { - it('throws an exception when the argumnet cannot be converted to a string', function () { - assert.throws(function () { + describe('window.history', () => { + describe('window.history.go(offset)', () => { + it('throws an exception when the argumnet cannot be converted to a string', () => { + assert.throws(() => { window.history.go({toString: null}) }, /Cannot convert object to primitive value/) }) }) - describe('window.history.pushState', function () { + describe('window.history.pushState', () => { it('should push state after calling history.pushState() from the same url', (done) => { - w = new BrowserWindow({ - show: false - }) + w = new BrowserWindow({ show: false }) w.webContents.once('did-finish-load', () => { // History should have current page by now. assert.equal(w.webContents.length(), 1) diff --git a/spec/fixtures/module/preload-pdf-loaded-in-nested-subframe.js b/spec/fixtures/module/preload-pdf-loaded-in-nested-subframe.js index e38b3658429f..a1115f96e675 100644 --- a/spec/fixtures/module/preload-pdf-loaded-in-nested-subframe.js +++ b/spec/fixtures/module/preload-pdf-loaded-in-nested-subframe.js @@ -1,12 +1,12 @@ const {ipcRenderer} = require('electron') -document.addEventListener('DOMContentLoaded', function (event) { +document.addEventListener('DOMContentLoaded', (event) => { var outerFrame = document.getElementById('outer-frame') if (outerFrame) { outerFrame.onload = function () { var pdframe = outerFrame.contentWindow.document.getElementById('pdf-frame') if (pdframe) { - pdframe.contentWindow.addEventListener('pdf-loaded', function (event) { + pdframe.contentWindow.addEventListener('pdf-loaded', (event) => { ipcRenderer.send('pdf-loaded', event.detail) }) } diff --git a/spec/fixtures/module/preload-pdf-loaded-in-subframe.js b/spec/fixtures/module/preload-pdf-loaded-in-subframe.js index c2b7de21c898..63b356821d8a 100644 --- a/spec/fixtures/module/preload-pdf-loaded-in-subframe.js +++ b/spec/fixtures/module/preload-pdf-loaded-in-subframe.js @@ -1,9 +1,9 @@ const {ipcRenderer} = require('electron') -document.addEventListener('DOMContentLoaded', function (event) { +document.addEventListener('DOMContentLoaded', (event) => { var subframe = document.getElementById('pdf-frame') if (subframe) { - subframe.contentWindow.addEventListener('pdf-loaded', function (event) { + subframe.contentWindow.addEventListener('pdf-loaded', (event) => { ipcRenderer.send('pdf-loaded', event.detail) }) } diff --git a/spec/fixtures/pages/pdf-in-iframe.html b/spec/fixtures/pages/pdf-in-iframe.html index 9371ceed18cb..9b1044cc9cfb 100644 --- a/spec/fixtures/pages/pdf-in-iframe.html +++ b/spec/fixtures/pages/pdf-in-iframe.html @@ -3,6 +3,4 @@