diff --git a/lib/PipeTransport.js b/lib/PipeTransport.js index 5c54b492..a20df858 100644 --- a/lib/PipeTransport.js +++ b/lib/PipeTransport.js @@ -27,7 +27,11 @@ class PipeTransport { this._pipeWrite = pipeWrite; this._pendingMessage = ''; this._eventListeners = [ - helper.addEventListener(pipeRead, 'data', buffer => this._dispatch(buffer)) + helper.addEventListener(pipeRead, 'data', buffer => this._dispatch(buffer)), + helper.addEventListener(pipeRead, 'close', () => { + if (this.onclose) + this.onclose.call(null); + }) ]; this.onmessage = null; this.onclose = null; diff --git a/test/puppeteer.spec.js b/test/puppeteer.spec.js index 65e4b585..015d37ae 100644 --- a/test/puppeteer.spec.js +++ b/test/puppeteer.spec.js @@ -217,6 +217,14 @@ module.exports.addTests = function({testRunner, expect, defaultBrowserOptions}) await page.close(); await browser.close(); }); + it('should fire "disconnected" when closing with pipe', async() => { + const options = Object.assign({pipe: true}, defaultBrowserOptions); + const browser = await puppeteer.launch(options); + const disconnectedEventPromise = new Promise(resolve => browser.once('disconnected', resolve)); + // Emulate user exiting browser. + browser.process().kill(); + await disconnectedEventPromise; + }); it('should work with no default arguments', async() => { const options = Object.assign({}, defaultBrowserOptions); options.ignoreDefaultArgs = true;