From 4bf5742d473500bb8e6ba9437ee253d3bf8e7672 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Fri, 15 May 2020 15:22:29 -0700 Subject: [PATCH] fix(chromium): abort fetch requests that lack networkId (#2254) These requests are usually internal ones, and we can safely abort them. An example would be DevTools loading cached resources to show the content. There will never be a matching Network.requestWillBeSent event, so we do not report them to the user. --- src/chromium/crNetworkManager.ts | 12 +++++++++++- src/frames.ts | 9 +++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/chromium/crNetworkManager.ts b/src/chromium/crNetworkManager.ts index 1b1e5f8d9f..c4c4585ebc 100644 --- a/src/chromium/crNetworkManager.ts +++ b/src/chromium/crNetworkManager.ts @@ -140,7 +140,17 @@ export class CRNetworkManager { requestId: event.requestId }).catch(logError(this._page)); } - if (!event.networkId || event.request.url.startsWith('data:')) + if (!event.networkId) { + // Fetch without networkId means that request was not recongnized by inspector, and + // it will never receive Network.requestWillBeSent. Most likely, this is an internal request + // that we can safely fail. + this._client.send('Fetch.failRequest', { + requestId: event.requestId, + errorReason: 'Aborted', + }).catch(logError(this._page)); + return; + } + if (event.request.url.startsWith('data:')) return; const requestId = event.networkId; diff --git a/src/frames.ts b/src/frames.ts index 5bbef9a3d9..5dcac12074 100644 --- a/src/frames.ts +++ b/src/frames.ts @@ -215,8 +215,13 @@ export class FrameManager { this._inflightRequestStarted(request); for (const task of request.frame()._frameTasks) task.onRequest(request); - if (!request._isFavicon) - this._page._requestStarted(request); + if (request._isFavicon) { + const route = request._route(); + if (route) + route.continue(); + return; + } + this._page._requestStarted(request); } requestReceivedResponse(response: network.Response) {