diff --git a/src/chromium/crNetworkManager.ts b/src/chromium/crNetworkManager.ts index 656cae11ef..eea30def67 100644 --- a/src/chromium/crNetworkManager.ts +++ b/src/chromium/crNetworkManager.ts @@ -243,7 +243,7 @@ export class CRNetworkManager { _handleRequestRedirect(request: InterceptableRequest, responsePayload: Protocol.Network.Response) { const response = this._createResponse(request, responsePayload); - response._requestFinished(new Error('Response body is unavailable for redirect responses')); + response._requestFinished('Response body is unavailable for redirect responses'); this._requestIdToRequest.delete(request._requestId); if (request._interceptionId) this._attemptedAuthentications.delete(request._interceptionId); diff --git a/src/firefox/ffNetworkManager.ts b/src/firefox/ffNetworkManager.ts index 708c335df4..c2341d6b19 100644 --- a/src/firefox/ffNetworkManager.ts +++ b/src/firefox/ffNetworkManager.ts @@ -90,7 +90,7 @@ export class FFNetworkManager { // Keep redirected requests in the map for future reference as redirectedFrom. const isRedirected = response.status() >= 300 && response.status() <= 399; if (isRedirected) { - response._requestFinished(new Error('Response body is unavailable for redirect responses')); + response._requestFinished('Response body is unavailable for redirect responses'); } else { this._requests.delete(request._id); response._requestFinished(); diff --git a/src/network.ts b/src/network.ts index d05d25b5d0..954e3874c6 100644 --- a/src/network.ts +++ b/src/network.ts @@ -234,8 +234,8 @@ type GetResponseBodyCallback = () => Promise; export class Response { private _request: Request; private _contentPromise: Promise | null = null; - _finishedPromise: Promise; - private _finishedPromiseCallback: any; + _finishedPromise: Promise<{ error?: string }>; + private _finishedPromiseCallback: (arg: { error?: string }) => void = () => {}; private _status: number; private _statusText: string; private _url: string; @@ -255,8 +255,8 @@ export class Response { this._request._setResponse(this); } - _requestFinished(error?: Error) { - this._finishedPromiseCallback.call(null, error || null); + _requestFinished(error?: string) { + this._finishedPromiseCallback({ error }); } url(): string { @@ -280,14 +280,14 @@ export class Response { } finished(): Promise { - return this._finishedPromise; + return this._finishedPromise.then(({ error }) => error ? new Error(error) : null); } body(): Promise { if (!this._contentPromise) { - this._contentPromise = this._finishedPromise.then(async error => { + this._contentPromise = this._finishedPromise.then(async ({ error }) => { if (error) - throw error; + throw new Error(error); return this._getResponseBodyCallback(); }); } diff --git a/src/rpc/channels.ts b/src/rpc/channels.ts index 7be70fa96d..b9333abe58 100644 --- a/src/rpc/channels.ts +++ b/src/rpc/channels.ts @@ -1472,7 +1472,7 @@ export type ResponseBodyResult = { }; export type ResponseFinishedParams = {}; export type ResponseFinishedResult = { - error?: SerializedError, + error?: string, }; // ----------- ConsoleMessage ----------- diff --git a/src/rpc/client/network.ts b/src/rpc/client/network.ts index 1937c75b58..d247a12b0c 100644 --- a/src/rpc/client/network.ts +++ b/src/rpc/client/network.ts @@ -19,7 +19,7 @@ import * as types from '../../types'; import { RequestChannel, ResponseChannel, RouteChannel, RequestInitializer, ResponseInitializer, RouteInitializer } from '../channels'; import { ChannelOwner } from './channelOwner'; import { Frame } from './frame'; -import { normalizeFulfillParameters, headersArrayToObject, normalizeContinueOverrides, parseError } from '../serializers'; +import { normalizeFulfillParameters, headersArrayToObject, normalizeContinueOverrides } from '../serializers'; export type NetworkCookie = { name: string, @@ -206,7 +206,7 @@ export class Response extends ChannelOwner async finished(): Promise { const result = await this._channel.finished(); if (result.error) - return parseError(result.error); + return new Error(result.error); return null; } diff --git a/src/rpc/protocol.pdl b/src/rpc/protocol.pdl index 491cbbac89..be45a1b545 100644 --- a/src/rpc/protocol.pdl +++ b/src/rpc/protocol.pdl @@ -1340,7 +1340,7 @@ interface Response command finished returns - error?: SerializedError + error?: string interface ConsoleMessage initializer diff --git a/src/rpc/server/networkDispatchers.ts b/src/rpc/server/networkDispatchers.ts index a8b07d2ac0..ac354d9d40 100644 --- a/src/rpc/server/networkDispatchers.ts +++ b/src/rpc/server/networkDispatchers.ts @@ -15,10 +15,10 @@ */ import { Request, Response, Route } from '../../network'; -import { RequestChannel, ResponseChannel, RouteChannel, ResponseInitializer, RequestInitializer, RouteInitializer, Binary, SerializedError } from '../channels'; +import { RequestChannel, ResponseChannel, RouteChannel, ResponseInitializer, RequestInitializer, RouteInitializer, Binary } from '../channels'; import { Dispatcher, DispatcherScope, lookupNullableDispatcher, existingDispatcher } from './dispatcher'; import { FrameDispatcher } from './frameDispatcher'; -import { headersObjectToArray, headersArrayToObject, serializeError } from '../serializers'; +import { headersObjectToArray, headersArrayToObject } from '../serializers'; import * as types from '../../types'; export class RequestDispatcher extends Dispatcher implements RequestChannel { @@ -64,9 +64,8 @@ export class ResponseDispatcher extends Dispatcher { - const error = await this._object.finished(); - return { error: error ? serializeError(error) : undefined }; + async finished(): Promise<{ error?: string }> { + return await this._object._finishedPromise; } async body(): Promise<{ binary: Binary }> { diff --git a/src/webkit/wkPage.ts b/src/webkit/wkPage.ts index 0e20f19f6e..588c439c96 100644 --- a/src/webkit/wkPage.ts +++ b/src/webkit/wkPage.ts @@ -853,7 +853,7 @@ export class WKPage implements PageDelegate { private _handleRequestRedirect(request: WKInterceptableRequest, responsePayload: Protocol.Network.Response) { const response = request.createResponse(responsePayload); - response._requestFinished(new Error('Response body is unavailable for redirect responses')); + response._requestFinished('Response body is unavailable for redirect responses'); this._requestIdToRequest.delete(request._requestId); this._page._frameManager.requestReceivedResponse(response); this._page._frameManager.requestFinished(request.request);