From 2a577a5cafb1b2381e01169ab3954e536577de23 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Fri, 15 Sep 2023 10:31:33 -0700 Subject: [PATCH] cherry-pick(#27095): fix(tracing): support old traces with consoleMessage.args (#27124) Fixes #27072. --- .../src/server/trace/recorder/tracing.ts | 4 +++- packages/trace-viewer/src/traceModel.ts | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/playwright-core/src/server/trace/recorder/tracing.ts b/packages/playwright-core/src/server/trace/recorder/tracing.ts index 04cbfd2bd8..4b791b3f84 100644 --- a/packages/playwright-core/src/server/trace/recorder/tracing.ts +++ b/packages/playwright-core/src/server/trace/recorder/tracing.ts @@ -384,7 +384,9 @@ export class Tracing extends SdkObject implements InstrumentationListener, Snaps onEvent(sdkObject: SdkObject, event: trace.EventTraceEvent) { if (!sdkObject.attribution.context) return; - if (event.method === 'console' || (event.method === '__create__' && event.class === 'ConsoleMessage')) { + if (event.method === 'console' || + (event.method === '__create__' && event.class === 'ConsoleMessage') || + (event.method === '__create__' && event.class === 'JSHandle')) { // Console messages are handled separately. return; } diff --git a/packages/trace-viewer/src/traceModel.ts b/packages/trace-viewer/src/traceModel.ts index 9158922b22..99e783c915 100644 --- a/packages/trace-viewer/src/traceModel.ts +++ b/packages/trace-viewer/src/traceModel.ts @@ -38,6 +38,7 @@ export class TraceModel { private _backend!: TraceModelBackend; private _attachments = new Map(); private _resourceToContentType = new Map(); + private _jsHandles = new Map(); constructor() { } @@ -112,6 +113,7 @@ export class TraceModel { } this._snapshotStorage!.finalize(); + this._jsHandles.clear(); } async hasEntry(filename: string): Promise { @@ -297,12 +299,23 @@ export class TraceModel { return null; if (event.type === 'event') { + if (metadata.method === '__create__' && metadata.type === 'JSHandle') + this._jsHandles.set(metadata.params.guid, metadata.params.initializer); if (metadata.method === '__create__' && metadata.type === 'ConsoleMessage') { return { type: 'object', class: metadata.type, guid: metadata.params.guid, - initializer: metadata.params.initializer, + initializer: { + ...metadata.params.initializer, + args: metadata.params.initializer.args?.map((arg: any) => { + if (arg.guid) { + const handle = this._jsHandles.get(arg.guid); + return { preview: handle?.preview || '', value: '' }; + } + return { preview: '', value: '' }; + }) + }, }; } return {