Skip to content

Commit 7ce49c2

Browse files
authored
chore: remove WebSocket implementation (#961)
WebSocket implementation currently is very incomplete, lacking support in WebKit-Win and Firefox.
1 parent b0c0598 commit 7ce49c2

File tree

8 files changed

+2
-323
lines changed

8 files changed

+2
-323
lines changed

docs/api.md

Lines changed: 1 addition & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
- [class: Request](#class-request)
2020
- [class: Response](#class-response)
2121
- [class: Selectors](#class-selectors)
22-
- [class: WebSocket](#class-websocket)
2322
- [class: TimeoutError](#class-timeouterror)
2423
- [class: Accessibility](#class-accessibility)
2524
- [class: Coverage](#class-coverage)
@@ -445,7 +444,6 @@ page.removeListener('request', logRequest);
445444
- [event: 'requestfailed'](#event-requestfailed)
446445
- [event: 'requestfinished'](#event-requestfinished)
447446
- [event: 'response'](#event-response)
448-
- [event: 'websocket'](#event-websocket)
449447
- [event: 'workercreated'](#event-workercreated)
450448
- [event: 'workerdestroyed'](#event-workerdestroyed)
451449
- [page.$(selector)](#pageselector)
@@ -618,11 +616,6 @@ Emitted when a request finishes successfully.
618616

619617
Emitted when a [response] is received.
620618

621-
#### event: 'websocket'
622-
- <[WebSocket]> websocket
623-
624-
Emitted when a <[WebSocket]> is opened.
625-
626619
#### event: 'workercreated'
627620
- <[Worker]>
628621

@@ -3171,67 +3164,6 @@ const { selectors, firefox } = require('playwright'); // Or 'chromium' or 'webk
31713164
})();
31723165
```
31733166

3174-
### class: WebSocket
3175-
3176-
The [WebSocket] class represents websocket connections in the page.
3177-
3178-
<!-- GEN:toc -->
3179-
- [event: 'close'](#event-close-2)
3180-
- [event: 'error'](#event-error)
3181-
- [event: 'messagereceived'](#event-messagereceived)
3182-
- [event: 'messagesent'](#event-messagesent)
3183-
- [event: 'open'](#event-open)
3184-
- [webSocket.requestHeaders()](#websocketrequestheaders)
3185-
- [webSocket.responseHeaders()](#websocketresponseheaders)
3186-
- [webSocket.status()](#websocketstatus)
3187-
- [webSocket.statusText()](#websocketstatustext)
3188-
- [webSocket.url()](#websocketurl)
3189-
<!-- GEN:stop -->
3190-
3191-
#### event: 'close'
3192-
3193-
Fired when the websocket closes.
3194-
3195-
#### event: 'error'
3196-
- <[String]> the error message
3197-
3198-
Fired when the websocket has an error.
3199-
3200-
#### event: 'messagereceived'
3201-
- <[Buffer]|[String]> data recieved
3202-
3203-
Fired when the websocket recieves a message.
3204-
3205-
#### event: 'messagesent'
3206-
- <[Buffer]|[String]> data recieved
3207-
3208-
Fired when the websocket sends a message.
3209-
3210-
#### event: 'open'
3211-
3212-
Fired when the websocket opens.
3213-
3214-
#### webSocket.requestHeaders()
3215-
- returns: <[Promise]<[Object]>>
3216-
3217-
#### webSocket.responseHeaders()
3218-
- returns: <[Promise]<[Object]>>
3219-
3220-
#### webSocket.status()
3221-
- returns: <[number]>
3222-
3223-
Contains the status code of the WebSocket (e.g., 200 for a success).
3224-
3225-
#### webSocket.statusText()
3226-
- returns: <[string]>
3227-
3228-
Contains the status text of the WebSocket (e.g. usually an "OK" for a success).
3229-
3230-
#### webSocket.url()
3231-
- returns: <[string]>
3232-
3233-
Contains the URL of the WebSocket.
3234-
32353167
### class: TimeoutError
32363168

32373169
* extends: [Error]
@@ -3431,7 +3363,7 @@ If the function passed to the `worker.evaluateHandle` returns a [Promise], then
34313363
### class: BrowserServer
34323364

34333365
<!-- GEN:toc -->
3434-
- [event: 'close'](#event-close-3)
3366+
- [event: 'close'](#event-close-2)
34353367
- [browserServer.close()](#browserserverclose)
34363368
- [browserServer.kill()](#browserserverkill)
34373369
- [browserServer.process()](#browserserverprocess)

src/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export { TimeoutError } from './errors';
2424
export { Frame } from './frames';
2525
export { Keyboard, Mouse } from './input';
2626
export { JSHandle } from './javascript';
27-
export { Request, Response, WebSocket } from './network';
27+
export { Request, Response } from './network';
2828
export { Coverage, FileChooser, Page, Worker } from './page';
2929
export { Selectors } from './selectors';
3030

src/chromium/crNetworkManager.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,6 @@ export class CRNetworkManager {
5252
helper.addEventListener(session, 'Network.responseReceived', this._onResponseReceived.bind(this)),
5353
helper.addEventListener(session, 'Network.loadingFinished', this._onLoadingFinished.bind(this)),
5454
helper.addEventListener(session, 'Network.loadingFailed', this._onLoadingFailed.bind(this)),
55-
helper.addEventListener(session, 'Network.webSocketCreated', e => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)),
56-
helper.addEventListener(session, 'Network.webSocketWillSendHandshakeRequest', e => this._page._frameManager.onWebSocketRequest(e.requestId, e.request.headers)),
57-
helper.addEventListener(session, 'Network.webSocketHandshakeResponseReceived', e => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText, e.response.headers)),
58-
helper.addEventListener(session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)),
59-
helper.addEventListener(session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)),
60-
helper.addEventListener(session, 'Network.webSocketClosed', e => this._page._frameManager.webSocketClosed(e.requestId)),
61-
helper.addEventListener(session, 'Network.webSocketFrameError', e => this._page._frameManager.webSocketError(e.requestId, e.errorMessage)),
6255
];
6356
}
6457

src/events.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,7 @@ export const Events = {
4646
FrameNavigated: 'framenavigated',
4747
Load: 'load',
4848
Popup: 'popup',
49-
WebSocket: 'websocket',
5049
WorkerCreated: 'workercreated',
5150
WorkerDestroyed: 'workerdestroyed',
5251
},
53-
54-
WebSocket: {
55-
Close: 'close',
56-
Error: 'error',
57-
MessageReceived: 'messagereceived',
58-
MessageSent: 'messagesent',
59-
Open: 'open',
60-
}
6152
};

src/frames.ts

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ type ConsoleTagHandler = () => void;
5858
export class FrameManager {
5959
private _page: Page;
6060
private _frames = new Map<string, Frame>();
61-
private _webSockets = new Map<string, network.WebSocket>();
6261
private _mainFrame: Frame;
6362
readonly _lifecycleWatchers = new Set<() => void>();
6463
readonly _consoleMessageTags = new Map<string, ConsoleTagHandler>();
@@ -120,7 +119,6 @@ export class FrameManager {
120119
for (const watcher of frame._documentWatchers)
121120
watcher(documentId);
122121
this.clearFrameLifecycle(frame);
123-
this.clearWebSockets(frame);
124122
if (!initial)
125123
this._page.emit(Events.Page.FrameNavigated, frame);
126124
}
@@ -182,13 +180,6 @@ export class FrameManager {
182180
this._startNetworkIdleTimer(frame, 'networkidle2');
183181
}
184182

185-
clearWebSockets(frame: Frame) {
186-
// TODO: attributet sockets to frames.
187-
if (frame.parentFrame())
188-
return;
189-
this._webSockets.clear();
190-
}
191-
192183
requestStarted(request: network.Request) {
193184
this._inflightRequestStarted(request);
194185
const frame = request.frame();
@@ -228,50 +219,6 @@ export class FrameManager {
228219
this._page.emit(Events.Page.RequestFailed, request);
229220
}
230221

231-
onWebSocketCreated(requestId: string, url: string) {
232-
const ws = new network.WebSocket(url);
233-
this._webSockets.set(requestId, ws);
234-
}
235-
236-
onWebSocketRequest(requestId: string, headers: network.Headers) {
237-
const ws = this._webSockets.get(requestId);
238-
if (ws) {
239-
ws._requestSent(headers);
240-
this._page.emit(Events.Page.WebSocket, ws);
241-
}
242-
}
243-
244-
onWebSocketResponse(requestId: string, status: number, statusText: string, headers: network.Headers) {
245-
const ws = this._webSockets.get(requestId);
246-
if (ws)
247-
ws._responseReceived(status, statusText, headers);
248-
}
249-
250-
onWebSocketFrameSent(requestId: string, opcode: number, data: string) {
251-
const ws = this._webSockets.get(requestId);
252-
if (ws)
253-
ws._frameSent(opcode, data);
254-
}
255-
256-
webSocketFrameReceived(requestId: string, opcode: number, data: string) {
257-
const ws = this._webSockets.get(requestId);
258-
if (ws)
259-
ws._frameReceived(opcode, data);
260-
}
261-
262-
webSocketClosed(requestId: string) {
263-
const ws = this._webSockets.get(requestId);
264-
if (ws)
265-
ws._closed();
266-
this._webSockets.delete(requestId);
267-
}
268-
269-
webSocketError(requestId: string, errorMessage: string): void {
270-
const ws = this._webSockets.get(requestId);
271-
if (ws)
272-
ws._error(errorMessage);
273-
}
274-
275222
provisionalLoadFailed(frame: Frame, documentId: string, error: string) {
276223
for (const watcher of frame._documentWatchers)
277224
watcher(documentId, new Error(error));

src/network.ts

Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import * as frames from './frames';
1818
import { assert } from './helper';
1919
import * as platform from './platform';
20-
import { Events } from './events';
2120

2221
export type NetworkCookie = {
2322
name: string,
@@ -308,70 +307,6 @@ export interface RequestDelegate {
308307
continue(overrides: { method?: string; headers?: Headers; postData?: string; }): Promise<void>;
309308
}
310309

311-
export class WebSocket extends platform.EventEmitter {
312-
private _url: string;
313-
_status: number | null = null;
314-
_statusText: string | null = null;
315-
_requestHeaders: Headers | null = null;
316-
_responseHeaders: Headers | null = null;
317-
318-
constructor(url: string) {
319-
super();
320-
this._url = url;
321-
}
322-
323-
url(): string {
324-
return this._url;
325-
}
326-
327-
status(): number | null {
328-
return this._status;
329-
}
330-
331-
statusText(): string | null {
332-
return this._statusText;
333-
}
334-
335-
requestHeaders(): Headers | null {
336-
return this._requestHeaders;
337-
}
338-
339-
responseHeaders(): Headers | null {
340-
return this._responseHeaders;
341-
}
342-
343-
_requestSent(headers: Headers) {
344-
this._requestHeaders = {};
345-
for (const [name, value] of Object.entries(headers))
346-
this._requestHeaders[name.toLowerCase()] = value;
347-
}
348-
349-
_responseReceived(status: number, statusText: string, headers: Headers) {
350-
this._status = status;
351-
this._statusText = statusText;
352-
this._responseHeaders = {};
353-
for (const [name, value] of Object.entries(headers))
354-
this._responseHeaders[name.toLowerCase()] = value;
355-
this.emit(Events.WebSocket.Open);
356-
}
357-
358-
_frameSent(opcode: number, data: string) {
359-
this.emit(Events.WebSocket.MessageSent, opcode === 2 ? Buffer.from(data, 'base64') : data);
360-
}
361-
362-
_frameReceived(opcode: number, data: string) {
363-
this.emit(Events.WebSocket.MessageReceived, opcode === 2 ? Buffer.from(data, 'base64') : data);
364-
}
365-
366-
_error(errorMessage: string) {
367-
this.emit(Events.WebSocket.Error, errorMessage);
368-
}
369-
370-
_closed() {
371-
this.emit(Events.WebSocket.Close);
372-
}
373-
}
374-
375310
// List taken from https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml with extra 306 and 418 codes.
376311
export const STATUS_TEXTS: { [status: string]: string } = {
377312
'100': 'Continue',

src/webkit/wkPage.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,6 @@ export class WKPage implements PageDelegate {
208208
helper.addEventListener(this._session, 'Network.responseReceived', e => this._onResponseReceived(e)),
209209
helper.addEventListener(this._session, 'Network.loadingFinished', e => this._onLoadingFinished(e)),
210210
helper.addEventListener(this._session, 'Network.loadingFailed', e => this._onLoadingFailed(e)),
211-
helper.addEventListener(this._session, 'Network.webSocketCreated', e => this._page._frameManager.onWebSocketCreated(e.requestId, e.url)),
212-
helper.addEventListener(this._session, 'Network.webSocketWillSendHandshakeRequest', e => this._page._frameManager.onWebSocketRequest(e.requestId, e.request.headers)),
213-
helper.addEventListener(this._session, 'Network.webSocketHandshakeResponseReceived', e => this._page._frameManager.onWebSocketResponse(e.requestId, e.response.status, e.response.statusText, e.response.headers)),
214-
helper.addEventListener(this._session, 'Network.webSocketFrameSent', e => e.response.payloadData && this._page._frameManager.onWebSocketFrameSent(e.requestId, e.response.opcode, e.response.payloadData)),
215-
helper.addEventListener(this._session, 'Network.webSocketFrameReceived', e => e.response.payloadData && this._page._frameManager.webSocketFrameReceived(e.requestId, e.response.opcode, e.response.payloadData)),
216-
helper.addEventListener(this._session, 'Network.webSocketClosed', e => this._page._frameManager.webSocketClosed(e.requestId)),
217-
helper.addEventListener(this._session, 'Network.webSocketFrameError', e => this._page._frameManager.webSocketError(e.requestId, e.errorMessage)),
218211
];
219212
}
220213

0 commit comments

Comments
 (0)