Merge pull request #8144 from electron/from-devtools-webcontents-fix

Guard against missing devToolsWebContents
This commit is contained in:
Kevin Sawicki 2016-12-06 11:05:16 -08:00 committed by GitHub
commit 3e128abb73
2 changed files with 49 additions and 7 deletions

View file

@ -138,14 +138,17 @@ BrowserWindow.getFocusedWindow = () => {
} }
BrowserWindow.fromWebContents = (webContents) => { BrowserWindow.fromWebContents = (webContents) => {
for (let window of BrowserWindow.getAllWindows()) { for (const window of BrowserWindow.getAllWindows()) {
if (window.webContents.equal(webContents)) return window if (window.webContents.equal(webContents)) return window
} }
} }
BrowserWindow.fromDevToolsWebContents = (webContents) => { BrowserWindow.fromDevToolsWebContents = (webContents) => {
for (let window of BrowserWindow.getAllWindows()) { for (const window of BrowserWindow.getAllWindows()) {
if (window.devToolsWebContents.equal(webContents)) return window const {devToolsWebContents} = window
if (devToolsWebContents != null && devToolsWebContents.equal(webContents)) {
return window
}
} }
} }

View file

@ -9,11 +9,11 @@ const http = require('http')
const {closeWindow} = require('./window-helpers') const {closeWindow} = require('./window-helpers')
const {ipcRenderer, remote, screen} = require('electron') const {ipcRenderer, remote, screen} = require('electron')
const {app, ipcMain, BrowserWindow, protocol} = remote const {app, ipcMain, BrowserWindow, protocol, webContents} = remote
const isCI = remote.getGlobal('isCi') const isCI = remote.getGlobal('isCi')
describe('browser-window module', function () { describe('BrowserWindow module', function () {
var fixtures = path.resolve(__dirname, 'fixtures') var fixtures = path.resolve(__dirname, 'fixtures')
var w = null var w = null
var server, postData var server, postData
@ -133,10 +133,10 @@ describe('browser-window module', function () {
describe('BrowserWindow.destroy()', function () { describe('BrowserWindow.destroy()', function () {
it('prevents users to access methods of webContents', function () { it('prevents users to access methods of webContents', function () {
var webContents = w.webContents const contents = w.webContents
w.destroy() w.destroy()
assert.throws(function () { assert.throws(function () {
webContents.getId() contents.getId()
}, /Object has been destroyed/) }, /Object has been destroyed/)
}) })
}) })
@ -567,6 +567,45 @@ describe('browser-window module', function () {
}) })
}) })
describe('BrowserWindow.fromWebContents(webContents)', function () {
let contents = null
beforeEach(function () {
contents = webContents.create({})
})
afterEach(function () {
contents.destroy()
})
it('returns the window with the webContents', function () {
assert.equal(BrowserWindow.fromWebContents(w.webContents).id, w.id)
assert.equal(BrowserWindow.fromWebContents(contents), undefined)
})
})
describe('BrowserWindow.fromDevToolsWebContents(webContents)', function () {
let contents = null
beforeEach(function () {
contents = webContents.create({})
})
afterEach(function () {
contents.destroy()
})
it('returns the window with the webContents', function (done) {
w.webContents.once('devtools-opened', () => {
assert.equal(BrowserWindow.fromDevToolsWebContents(w.devToolsWebContents).id, w.id)
assert.equal(BrowserWindow.fromDevToolsWebContents(w.webContents), undefined)
assert.equal(BrowserWindow.fromDevToolsWebContents(contents), undefined)
done()
})
w.webContents.openDevTools()
})
})
describe('"useContentSize" option', function () { describe('"useContentSize" option', function () {
it('make window created with content size when used', function () { it('make window created with content size when used', function () {
w.destroy() w.destroy()