diff --git a/spec/chromium-spec.js b/spec/chromium-spec.js index 88088e089b26..039fc1e9371b 100644 --- a/spec/chromium-spec.js +++ b/spec/chromium-spec.js @@ -3,7 +3,7 @@ const http = require('http') const path = require('path') const ws = require('ws') const url = require('url') -const remote = require('electron').remote +const {ipcRenderer, remote} = require('electron') const {closeWindow} = require('./window-helpers') const {BrowserWindow, ipcMain, protocol, session, webContents} = remote @@ -187,6 +187,12 @@ describe('chromium feature', function () { return } + let w = null + + afterEach(() => { + return closeWindow(w).then(() => w = null) + }) + it('returns a BrowserWindowProxy object', function () { var b = window.open('about:blank', '', 'show=no') assert.equal(b.closed, false) @@ -260,6 +266,20 @@ describe('chromium feature', function () { 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.webContents.once('new-window', (event, url, frameName, disposition, options) => { + assert.deepEqual(options, { + show: false, + foo: { + bar: null + } + }) + done() + }) + }) + it('defines a window.location getter', function (done) { var b, targetURL if (process.platform === 'win32') { diff --git a/spec/fixtures/pages/window-open.html b/spec/fixtures/pages/window-open.html index b7af009cd2b7..06bd393c0a03 100644 --- a/spec/fixtures/pages/window-open.html +++ b/spec/fixtures/pages/window-open.html @@ -1,7 +1,7 @@ diff --git a/spec/static/main.js b/spec/static/main.js index 259350f9598f..aad8a64d80ed 100644 --- a/spec/static/main.js +++ b/spec/static/main.js @@ -230,3 +230,13 @@ ipcMain.on('close-on-will-navigate', (event, id) => { contents.send('closed-on-will-navigate') }) }) + + +ipcMain.on('create-window-with-options-cycle', (event) => { + // This can't be done over remote since cycles are already + // nulled out at the IPC layer + const foo = {} + foo.bar = foo + const window = new BrowserWindow({show: false, foo: foo}) + event.returnValue = window.id +})