From 66e8a9c04ff09a040c9134293eaf4660d68251c4 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Wed, 8 Jan 2020 07:13:51 -0800 Subject: [PATCH] fix(webkit): band-aid double connection fix to unblock tests (#422) --- src/server/wkPlaywright.ts | 2 +- src/webkit/wkBrowser.ts | 2 +- src/webkit/wkConnection.ts | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/server/wkPlaywright.ts b/src/server/wkPlaywright.ts index eee4fbb7f6..bf4a277821 100644 --- a/src/server/wkPlaywright.ts +++ b/src/server/wkPlaywright.ts @@ -67,7 +67,7 @@ export class WKBrowserServer { async close(): Promise { const transport = await createTransport(this._connectOptions); - const connection = new WKConnection(transport); + const connection = WKConnection.from(transport); await connection.send('Browser.close'); connection.dispose(); } diff --git a/src/webkit/wkBrowser.ts b/src/webkit/wkBrowser.ts index 82670173a4..bd92fe4728 100644 --- a/src/webkit/wkBrowser.ts +++ b/src/webkit/wkBrowser.ts @@ -51,7 +51,7 @@ export class WKBrowser extends browser.Browser { constructor(transport: ConnectionTransport) { super(); - this._connection = new WKConnection(transport); + this._connection = WKConnection.from(transport); this._defaultContext = this._createBrowserContext(undefined, {}); diff --git a/src/webkit/wkConnection.ts b/src/webkit/wkConnection.ts index 25ae96ef7b..078cdce77c 100644 --- a/src/webkit/wkConnection.ts +++ b/src/webkit/wkConnection.ts @@ -34,6 +34,8 @@ export const WKPageProxySessionEvents = { DidCommitProvisionalTarget: Symbol('PageProxyEvents.DidCommitProvisionalTarget'), }; +const kConnectionSymbol = Symbol(); + export class WKConnection extends platform.EventEmitter { private _lastId = 0; private readonly _callbacks = new Map void, reject: (e: Error) => void, error: Error, method: string}>(); @@ -42,6 +44,15 @@ export class WKConnection extends platform.EventEmitter { private _closed = false; + static from(transport: ConnectionTransport): WKConnection { + let connection = (transport as any)[kConnectionSymbol]; + if (!connection) { + connection = new WKConnection(transport); + (transport as any)[kConnectionSymbol] = connection; + } + return connection; + } + constructor(transport: ConnectionTransport) { super(); this._transport = transport;