From 67f4264162a1f7a2844b3b3759f6bce0fea6686f Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Sat, 29 Jul 2017 18:16:15 -0700 Subject: [PATCH] Never sent 'requestfinished' event without passing actual request It turns out we're not receiving 'Network.requestWillBeSent' event for every requestId. This patch makes sure we don't dispatch `requestfinished` and `requestfailed` events without passing actual request. References #168 --- lib/NetworkManager.js | 8 ++++++++ test/test.js | 3 +++ 2 files changed, 11 insertions(+) diff --git a/lib/NetworkManager.js b/lib/NetworkManager.js index e82f25961d8..623d8c8f246 100644 --- a/lib/NetworkManager.js +++ b/lib/NetworkManager.js @@ -114,6 +114,10 @@ class NetworkManager extends EventEmitter { */ _onLoadingFinished(event) { let request = this._idToRequest.get(event.requestId); + // For certain requestIds we never receive requestWillBeSent event. + // @see https://github.com/GoogleChrome/puppeteer/issues/168 + if (!request) + return; this._idToRequest.delete(event.requestId); this.emit(NetworkManager.Events.RequestFinished, request); } @@ -123,6 +127,10 @@ class NetworkManager extends EventEmitter { */ _onLoadingFailed(event) { let request = this._idToRequest.get(event.requestId); + // For certain requestIds we never receive requestWillBeSent event. + // @see https://github.com/GoogleChrome/puppeteer/issues/168 + if (!request) + return; this._idToRequest.delete(event.requestId); this.emit(NetworkManager.Events.RequestFailed, request); } diff --git a/test/test.js b/test/test.js index a0b39e13f82..f95bf7de16c 100644 --- a/test/test.js +++ b/test/test.js @@ -457,6 +457,9 @@ describe('Puppeteer', function() { expect(error.message).toContain('Cannot navigate to invalid URL'); })); it('should fail when navigating to bad SSL', SX(async function() { + page.on('request', request => expect(request).toBeTruthy()); + page.on('requestfinished', request => expect(request).toBeTruthy()); + page.on('requestfailed', request => expect(request).toBeTruthy()); let error = null; try { await page.navigate(HTTPS_PREFIX + '/empty.html');