From d4e0ef7f1abf7ebe6d806bfee2efa46f6959aee7 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Thu, 23 Mar 2023 14:57:03 -0700 Subject: [PATCH] chore: explicitly send route's requestUrl for tracing (#21940) --- packages/playwright-core/src/client/network.ts | 4 +++- packages/playwright-core/src/protocol/validator.ts | 3 +++ packages/playwright-core/src/server/browserContext.ts | 6 +++--- .../src/server/dispatchers/networkDispatchers.ts | 3 --- packages/playwright-core/src/server/recorder/recorderApp.ts | 1 + packages/protocol/src/channels.ts | 3 +++ packages/protocol/src/protocol.yml | 3 +++ 7 files changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/playwright-core/src/client/network.ts b/packages/playwright-core/src/client/network.ts index b0280a73fe..616b0903cf 100644 --- a/packages/playwright-core/src/client/network.ts +++ b/packages/playwright-core/src/client/network.ts @@ -310,7 +310,7 @@ export class Route extends ChannelOwner implements api.Ro async abort(errorCode?: string) { this._checkNotHandled(); - await this._raceWithTargetClose(this._channel.abort({ errorCode })); + await this._raceWithTargetClose(this._channel.abort({ requestUrl: this.request()._initializer.url, errorCode })); this._reportHandled(true); } @@ -384,6 +384,7 @@ export class Route extends ChannelOwner implements api.Ro headers['content-length'] = String(length); await this._raceWithTargetClose(this._channel.fulfill({ + requestUrl: this.request()._initializer.url, status: statusOption || 200, headers: headersObjectToArray(headers), body, @@ -414,6 +415,7 @@ export class Route extends ChannelOwner implements api.Ro const options = this.request()._fallbackOverridesForContinue(); return await this._wrapApiCall(async () => { await this._raceWithTargetClose(this._channel.continue({ + requestUrl: this.request()._initializer.url, url: options.url, method: options.method, headers: options.headers ? headersObjectToArray(options.headers) : undefined, diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index 272ffc3635..559777b77c 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -1974,6 +1974,7 @@ scheme.RouteRedirectNavigationRequestParams = tObject({ scheme.RouteRedirectNavigationRequestResult = tOptional(tObject({})); scheme.RouteAbortParams = tObject({ errorCode: tOptional(tString), + requestUrl: tString, }); scheme.RouteAbortResult = tOptional(tObject({})); scheme.RouteContinueParams = tObject({ @@ -1981,6 +1982,7 @@ scheme.RouteContinueParams = tObject({ method: tOptional(tString), headers: tOptional(tArray(tType('NameValue'))), postData: tOptional(tBinary), + requestUrl: tString, }); scheme.RouteContinueResult = tOptional(tObject({})); scheme.RouteFulfillParams = tObject({ @@ -1989,6 +1991,7 @@ scheme.RouteFulfillParams = tObject({ body: tOptional(tString), isBase64: tOptional(tBoolean), fetchResponseUid: tOptional(tString), + requestUrl: tString, }); scheme.RouteFulfillResult = tOptional(tObject({})); scheme.ResourceTiming = tObject({ diff --git a/packages/playwright-core/src/server/browserContext.ts b/packages/playwright-core/src/server/browserContext.ts index f15de9fc4a..e339c308f8 100644 --- a/packages/playwright-core/src/server/browserContext.ts +++ b/packages/playwright-core/src/server/browserContext.ts @@ -460,7 +460,7 @@ export abstract class BrowserContext extends SdkObject { const internalMetadata = serverSideCallMetadata(); const page = await this.newPage(internalMetadata); await page._setServerRequestInterceptor(handler => { - handler.fulfill({ body: '' }).catch(() => {}); + handler.fulfill({ body: '', requestUrl: handler.request().url() }).catch(() => {}); return true; }); for (const origin of this._origins) { @@ -489,7 +489,7 @@ export abstract class BrowserContext extends SdkObject { const internalMetadata = serverSideCallMetadata(); page = page || await this.newPage(internalMetadata); await page._setServerRequestInterceptor(handler => { - handler.fulfill({ body: '' }).catch(() => {}); + handler.fulfill({ body: '', requestUrl: handler.request().url() }).catch(() => {}); return true; }); @@ -524,7 +524,7 @@ export abstract class BrowserContext extends SdkObject { const internalMetadata = serverSideCallMetadata(); const page = await this.newPage(internalMetadata); await page._setServerRequestInterceptor(handler => { - handler.fulfill({ body: '' }).catch(() => {}); + handler.fulfill({ body: '', requestUrl: handler.request().url() }).catch(() => {}); return true; }); for (const originState of state.origins) { diff --git a/packages/playwright-core/src/server/dispatchers/networkDispatchers.ts b/packages/playwright-core/src/server/dispatchers/networkDispatchers.ts index 0957a8761a..990bc93300 100644 --- a/packages/playwright-core/src/server/dispatchers/networkDispatchers.ts +++ b/packages/playwright-core/src/server/dispatchers/networkDispatchers.ts @@ -127,7 +127,6 @@ export class RouteDispatcher extends Dispatcher { // Used to discriminate between continue in tracing. - metadata.params.requestUrl = this._object.request().url(); await this._object.continue({ url: params.url, method: params.method, @@ -138,13 +137,11 @@ export class RouteDispatcher extends Dispatcher { // Used to discriminate between fulfills in tracing. - metadata.params.requestUrl = this._object.request().url(); await this._object.fulfill(params); } async abort(params: channels.RouteAbortParams, metadata: CallMetadata): Promise { // Used to discriminate between abort in tracing. - metadata.params.requestUrl = this._object.request().url(); await this._object.abort(params.errorCode || 'failed'); } diff --git a/packages/playwright-core/src/server/recorder/recorderApp.ts b/packages/playwright-core/src/server/recorder/recorderApp.ts index 503c91a1e4..e7a7f6b9f3 100644 --- a/packages/playwright-core/src/server/recorder/recorderApp.ts +++ b/packages/playwright-core/src/server/recorder/recorderApp.ts @@ -90,6 +90,7 @@ export class RecorderApp extends EventEmitter implements IRecorderApp { const file = require.resolve('../../webpack/recorder/' + uri); fs.promises.readFile(file).then(buffer => { route.fulfill({ + requestUrl: route.request().url(), status: 200, headers: [ { name: 'Content-Type', value: mime.getType(path.extname(file)) || 'application/octet-stream' } diff --git a/packages/protocol/src/channels.ts b/packages/protocol/src/channels.ts index a1ecdbb591..cf6bdd00b9 100644 --- a/packages/protocol/src/channels.ts +++ b/packages/protocol/src/channels.ts @@ -3519,6 +3519,7 @@ export type RouteRedirectNavigationRequestOptions = { export type RouteRedirectNavigationRequestResult = void; export type RouteAbortParams = { errorCode?: string, + requestUrl: string, }; export type RouteAbortOptions = { errorCode?: string, @@ -3529,6 +3530,7 @@ export type RouteContinueParams = { method?: string, headers?: NameValue[], postData?: Binary, + requestUrl: string, }; export type RouteContinueOptions = { url?: string, @@ -3543,6 +3545,7 @@ export type RouteFulfillParams = { body?: string, isBase64?: boolean, fetchResponseUid?: string, + requestUrl: string, }; export type RouteFulfillOptions = { status?: number, diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 2707baf994..619519a753 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -2740,6 +2740,7 @@ Route: abort: parameters: errorCode: string? + requestUrl: string continue: parameters: @@ -2749,6 +2750,7 @@ Route: type: array? items: NameValue postData: binary? + requestUrl: string fulfill: parameters: @@ -2760,6 +2762,7 @@ Route: body: string? isBase64: boolean? fetchResponseUid: string? + requestUrl: string ResourceTiming: type: object