chore: fix PlaywrightClient disconnection logic (#9149)

This commit is contained in:
Max Schmitt 2021-09-29 01:54:10 +02:00 committed by GitHub
parent 0a690778e4
commit 55ddc553a5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -17,6 +17,7 @@
import WebSocket from 'ws';
import { Connection } from '../client/connection';
import { Playwright } from '../client/playwright';
import { makeWaitForNextTask } from '../utils/utils';
export type PlaywrightClientConnectOptions = {
wsEndpoint: string;
@ -32,15 +33,24 @@ export class PlaywrightClient {
const { wsEndpoint, timeout = 30000 } = options;
const connection = new Connection();
const ws = new WebSocket(wsEndpoint);
connection.onmessage = message => ws.send(JSON.stringify(message));
ws.on('message', message => connection.dispatch(JSON.parse(message.toString())));
const waitForNextTask = makeWaitForNextTask();
connection.onmessage = message => {
if (ws.readyState === 2 /** CLOSING */ || ws.readyState === 3 /** CLOSED */)
throw new Error('PlaywrightClient: writing to closed WebSocket connection');
ws.send(JSON.stringify(message));
};
ws.on('message', message => waitForNextTask(() => connection.dispatch(JSON.parse(message.toString()))));
const errorPromise = new Promise((_, reject) => ws.on('error', error => reject(error)));
const closePromise = new Promise((_, reject) => ws.on('close', () => reject(new Error('Connection closed'))));
const playwrightClientPromise = new Promise<PlaywrightClient>((resolve, reject) => {
let playwright: Playwright;
ws.on('open', async () => {
const playwright = await connection.initializePlaywright();
playwright = await connection.initializePlaywright();
resolve(new PlaywrightClient(playwright, ws));
});
ws.on('close', () => {
playwright?._cleanup();
});
});
let timer: NodeJS.Timeout;
try {