Merge branch 'master' into native-window-open

This commit is contained in:
Ryohei Ikegami 2017-03-23 23:53:13 +09:00
commit 6f9dbd4e04
50 changed files with 517 additions and 102 deletions

View file

@ -161,6 +161,14 @@ describe('ipc module', function () {
assert.equal(typeof remote.clipboard.readText, 'function')
assert.equal(typeof remote.shell.openExternal, 'function')
})
it('returns toString() of original function via toString()', function () {
const {readText} = remote.clipboard
assert(readText.toString().startsWith('function'))
var {functionWithToStringProperty} = remote.require(path.join(fixtures, 'module', 'to-string-non-function.js'))
assert.equal(functionWithToStringProperty.toString, 'hello')
})
})
describe('remote object in renderer', function () {

View file

@ -590,6 +590,27 @@ describe('chromium feature', function () {
worker.postMessage(message)
})
it('Worker has no node integration by default', function (done) {
let worker = new Worker('../fixtures/workers/worker_node.js')
worker.onmessage = function (event) {
assert.equal(event.data, 'undefined undefined undefined undefined')
worker.terminate()
done()
}
})
it('Worker has node integration with nodeIntegrationInWorker', function (done) {
let webview = new WebView()
webview.addEventListener('ipc-message', function (e) {
assert.equal(e.channel, 'object function object function')
webview.remove()
done()
})
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'
@ -599,6 +620,29 @@ describe('chromium feature', function () {
}
worker.port.postMessage(message)
})
it('SharedWorker has no node integration by default', function (done) {
let worker = new SharedWorker('../fixtures/workers/shared_worker_node.js')
worker.port.onmessage = function (event) {
assert.equal(event.data, 'undefined undefined undefined undefined')
done()
}
})
it('SharedWorker has node integration with nodeIntegrationInWorker', function (done) {
let webview = new WebView()
webview.addEventListener('console-message', function (e) {
console.log(e)
})
webview.addEventListener('ipc-message', function (e) {
assert.equal(e.channel, 'object function object function')
webview.remove()
done()
})
webview.src = 'file://' + fixtures + '/pages/shared_worker.html'
webview.setAttribute('webpreferences', 'nodeIntegration, nodeIntegrationInWorker')
document.body.appendChild(webview)
})
})
describe('iframe', function () {

View file

@ -0,0 +1,4 @@
function hello () {
}
hello.toString = 'hello'
module.exports = {functionWithToStringProperty: hello}

12
spec/fixtures/pages/shared_worker.html vendored Normal file
View file

@ -0,0 +1,12 @@
<html>
<body>
<script type="text/javascript" charset="utf-8">
const {ipcRenderer} = require('electron')
// Pass a random parameter to create independent worker.
let worker = new SharedWorker(`../workers/shared_worker_node.js?a={Math.random()}`)
worker.port.onmessage = function (event) {
ipcRenderer.sendToHost(event.data)
}
</script>
</body>
</html>

12
spec/fixtures/pages/worker.html vendored Normal file
View file

@ -0,0 +1,12 @@
<html>
<body>
<script type="text/javascript" charset="utf-8">
const {ipcRenderer} = require('electron')
let worker = new Worker(`../workers/worker_node.js`)
worker.onmessage = function (event) {
ipcRenderer.sendToHost(event.data)
worker.terminate()
}
</script>
</body>
</html>

View file

@ -0,0 +1,5 @@
self.onconnect = function (event) {
let port = event.ports[0]
port.start()
port.postMessage([typeof process, typeof setImmediate, typeof global, typeof Buffer].join(' '))
}

1
spec/fixtures/workers/worker_node.js vendored Normal file
View file

@ -0,0 +1 @@
self.postMessage([typeof process, typeof setImmediate, typeof global, typeof Buffer].join(' '))