diff --git a/src/chromium/crNetworkManager.ts b/src/chromium/crNetworkManager.ts index 74f36d5c5f..0806243158 100644 --- a/src/chromium/crNetworkManager.ts +++ b/src/chromium/crNetworkManager.ts @@ -154,7 +154,7 @@ export class CRNetworkManager { requestId: event.requestId }).catch(debugError); } - if (!event.networkId) + if (!event.networkId || event.request.url.startsWith('data:')) return; const requestId = event.networkId; @@ -169,6 +169,8 @@ export class CRNetworkManager { } _onRequest(event: Protocol.Network.requestWillBeSentPayload, interceptionId: string | null) { + if (event.request.url.startsWith('data:')) + return; let redirectChain: network.Request[] = []; if (event.redirectResponse) { const request = this._requestIdToRequest.get(event.requestId); diff --git a/src/network.ts b/src/network.ts index 6949be1128..16312e732d 100644 --- a/src/network.ts +++ b/src/network.ts @@ -112,6 +112,7 @@ export class Request { constructor(delegate: RequestDelegate | null, frame: frames.Frame | null, redirectChain: Request[], documentId: string | undefined, url: string, resourceType: string, method: string, postData: string | undefined, headers: Headers) { + assert(!url.startsWith('data:'), 'Data urls should not fire requests'); this._delegate = delegate; this._frame = frame; this._redirectChain = redirectChain; @@ -194,9 +195,6 @@ export class Request { } async abort(errorCode: string = 'failed') { - // Request interception is not supported for data: urls. - if (this.url().startsWith('data:')) - return; assert(this._delegate, 'Request Interception is not enabled!'); assert(!this._interceptionHandled, 'Request is already handled!'); this._interceptionHandled = true; @@ -204,8 +202,6 @@ export class Request { } async fulfill(response: { status: number; headers: Headers; contentType: string; body: (string | platform.BufferType); }) { // Mocking responses for dataURL requests is not currently supported. - if (this.url().startsWith('data:')) - return; assert(this._delegate, 'Request Interception is not enabled!'); assert(!this._interceptionHandled, 'Request is already handled!'); this._interceptionHandled = true; @@ -213,9 +209,6 @@ export class Request { } async continue(overrides: { headers?: { [key: string]: string } } = {}) { - // Request interception is not supported for data: urls. - if (this.url().startsWith('data:')) - return; assert(this._delegate, 'Request Interception is not enabled!'); assert(!this._interceptionHandled, 'Request is already handled!'); await this._delegate!.continue(overrides); diff --git a/src/webkit/wkNetworkManager.ts b/src/webkit/wkNetworkManager.ts index c1fb168d9d..94b9bb65ea 100644 --- a/src/webkit/wkNetworkManager.ts +++ b/src/webkit/wkNetworkManager.ts @@ -84,6 +84,8 @@ export class WKNetworkManager { } _onRequestWillBeSent(event: Protocol.Network.requestWillBeSentPayload) { + if (event.request.url.startsWith('data:')) + return; let redirectChain: network.Request[] = []; if (event.redirectResponse) { const request = this._requestIdToRequest.get(event.requestId); @@ -103,7 +105,9 @@ export class WKNetworkManager { } _onRequestIntercepted(event: Protocol.Network.requestInterceptedPayload) { - this._requestIdToRequest.get(event.requestId)!._interceptedCallback(); + const request = this._requestIdToRequest.get(event.requestId); + if (request) + request._interceptedCallback(); } _createResponse(request: InterceptableRequest, responsePayload: Protocol.Network.Response): network.Response { diff --git a/test/interception.spec.js b/test/interception.spec.js index defe57c260..3a3c6f2e91 100644 --- a/test/interception.spec.js +++ b/test/interception.spec.js @@ -288,38 +288,39 @@ module.exports.describe = function({testRunner, expect, defaultBrowserOptions, p ])); expect(results).toEqual(['11', 'FAILED', '22']); }); - it.skip(FFOX)('should navigate to dataURL and fire dataURL requests', async({page, server}) => { + it('should navigate to dataURL and not fire dataURL requests', async({page, server}) => { await page.setRequestInterception(true); const requests = []; page.on('request', request => { - requests.push(request); + if (!utils.isFavicon(request)) + requests.push(request); request.continue(); }); const dataURL = 'data:text/html,