diff --git a/packages/playwright-core/src/client/android.ts b/packages/playwright-core/src/client/android.ts index 6b8d6327eb..bdf8744771 100644 --- a/packages/playwright-core/src/client/android.ts +++ b/packages/playwright-core/src/client/android.ts @@ -71,7 +71,7 @@ export class Android extends ChannelOwner implements ap const connectParams: channels.LocalUtilsConnectParams = { wsEndpoint, headers, slowMo: options.slowMo, timeout: options.timeout }; const { pipe } = await localUtils._channel.connect(connectParams); const closePipe = () => pipe.close().catch(() => {}); - const connection = new Connection(localUtils); + const connection = new Connection(localUtils, this._instrumentation); connection.markAsRemote(); connection.on('close', closePipe); diff --git a/packages/playwright-core/src/client/browserType.ts b/packages/playwright-core/src/client/browserType.ts index d002fb5197..5c6127ddd5 100644 --- a/packages/playwright-core/src/client/browserType.ts +++ b/packages/playwright-core/src/client/browserType.ts @@ -156,7 +156,7 @@ export class BrowserType extends ChannelOwner imple connectParams.socksProxyRedirectPortForTest = (params as any).__testHookRedirectPortForwarding; const { pipe, headers: connectHeaders } = await localUtils._channel.connect(connectParams); const closePipe = () => pipe.close().catch(() => {}); - const connection = new Connection(localUtils); + const connection = new Connection(localUtils, this._instrumentation); connection.markAsRemote(); connection.on('close', closePipe); diff --git a/packages/playwright-core/src/client/connection.ts b/packages/playwright-core/src/client/connection.ts index 39760fb22c..a3b3dc6075 100644 --- a/packages/playwright-core/src/client/connection.ts +++ b/packages/playwright-core/src/client/connection.ts @@ -45,6 +45,7 @@ import { LocalUtils } from './localUtils'; import { Tracing } from './tracing'; import { findValidator, ValidationError, type ValidatorContext } from '../protocol/validator'; import { createInstrumentation } from './clientInstrumentation'; +import type { ClientInstrumentation } from './clientInstrumentation'; class Root extends ChannelOwner { constructor(connection: Connection) { @@ -73,12 +74,13 @@ export class Connection extends EventEmitter { // Some connections allow resolving in-process dispatchers. toImpl: ((client: ChannelOwner) => any) | undefined; private _tracingCount = 0; - readonly _instrumentation = createInstrumentation(); + readonly _instrumentation: ClientInstrumentation; - constructor(localUtils?: LocalUtils) { + constructor(localUtils: LocalUtils | undefined, instrumentation: ClientInstrumentation | undefined) { super(); this._rootObject = new Root(this); this._localUtils = localUtils; + this._instrumentation = instrumentation || createInstrumentation(); } markAsRemote() { diff --git a/packages/playwright-core/src/inProcessFactory.ts b/packages/playwright-core/src/inProcessFactory.ts index 07959404ad..8bbfa82379 100644 --- a/packages/playwright-core/src/inProcessFactory.ts +++ b/packages/playwright-core/src/inProcessFactory.ts @@ -24,7 +24,7 @@ import type { Language } from './utils/isomorphic/locatorGenerators'; export function createInProcessPlaywright(): PlaywrightAPI { const playwright = createPlaywright({ sdkLanguage: (process.env.PW_LANG_NAME as Language | undefined) || 'javascript' }); - const clientConnection = new Connection(); + const clientConnection = new Connection(undefined, undefined); const dispatcherConnection = new DispatcherConnection(true /* local */); // Dispatch synchronously at first. diff --git a/packages/playwright-core/src/outofprocess.ts b/packages/playwright-core/src/outofprocess.ts index 5ef995874e..adc0783387 100644 --- a/packages/playwright-core/src/outofprocess.ts +++ b/packages/playwright-core/src/outofprocess.ts @@ -45,7 +45,7 @@ class PlaywrightClient { this._driverProcess.unref(); this._driverProcess.stderr!.on('data', data => process.stderr.write(data)); - const connection = new Connection(); + const connection = new Connection(undefined, undefined); connection.markAsRemote(); const transport = new PipeTransport(this._driverProcess.stdin!, this._driverProcess.stdout!); connection.onmessage = message => transport.send(JSON.stringify(message));