fix(protocol): rename websocket error event to socketerror (#4495)

This is to avoid special handling of error events in node.
This commit is contained in:
Dmitry Gozman 2020-11-19 12:09:42 -08:00 committed by GitHub
parent 1278c25442
commit 09f9a35198
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 25 additions and 10 deletions

View File

@ -336,7 +336,7 @@ export class WebSocket extends ChannelOwner<channels.WebSocketChannel, channels.
const payload = event.opcode === 2 ? Buffer.from(event.data, 'base64') : event.data; const payload = event.opcode === 2 ? Buffer.from(event.data, 'base64') : event.data;
this.emit(Events.WebSocket.FrameReceived, { payload }); this.emit(Events.WebSocket.FrameReceived, { payload });
}); });
this._channel.on('error', ({ error }) => this.emit(Events.WebSocket.Error, error)); this._channel.on('socketError', ({ error }) => this.emit(Events.WebSocket.Error, error));
this._channel.on('close', () => { this._channel.on('close', () => {
this._isClosed = true; this._isClosed = true;
this.emit(Events.WebSocket.Close); this.emit(Events.WebSocket.Close);

View File

@ -107,7 +107,7 @@ export class WebSocketDispatcher extends Dispatcher<WebSocket, channels.WebSocke
}); });
webSocket.on(WebSocket.Events.FrameSent, (event: { opcode: number, data: string }) => this._dispatchEvent('frameSent', event)); webSocket.on(WebSocket.Events.FrameSent, (event: { opcode: number, data: string }) => this._dispatchEvent('frameSent', event));
webSocket.on(WebSocket.Events.FrameReceived, (event: { opcode: number, data: string }) => this._dispatchEvent('frameReceived', event)); webSocket.on(WebSocket.Events.FrameReceived, (event: { opcode: number, data: string }) => this._dispatchEvent('frameReceived', event));
webSocket.on(WebSocket.Events.Error, (error: string) => this._dispatchEvent('error', { error })); webSocket.on(WebSocket.Events.SocketError, (error: string) => this._dispatchEvent('socketError', { error }));
webSocket.on(WebSocket.Events.Close, () => this._dispatchEvent('close', {})); webSocket.on(WebSocket.Events.Close, () => this._dispatchEvent('close', {}));
} }
} }

View File

@ -2215,7 +2215,7 @@ export interface WebSocketChannel extends Channel {
on(event: 'open', callback: (params: WebSocketOpenEvent) => void): this; on(event: 'open', callback: (params: WebSocketOpenEvent) => void): this;
on(event: 'frameSent', callback: (params: WebSocketFrameSentEvent) => void): this; on(event: 'frameSent', callback: (params: WebSocketFrameSentEvent) => void): this;
on(event: 'frameReceived', callback: (params: WebSocketFrameReceivedEvent) => void): this; on(event: 'frameReceived', callback: (params: WebSocketFrameReceivedEvent) => void): this;
on(event: 'error', callback: (params: WebSocketErrorEvent) => void): this; on(event: 'socketError', callback: (params: WebSocketSocketErrorEvent) => void): this;
on(event: 'close', callback: (params: WebSocketCloseEvent) => void): this; on(event: 'close', callback: (params: WebSocketCloseEvent) => void): this;
} }
export type WebSocketOpenEvent = {}; export type WebSocketOpenEvent = {};
@ -2227,7 +2227,7 @@ export type WebSocketFrameReceivedEvent = {
opcode: number, opcode: number,
data: string, data: string,
}; };
export type WebSocketErrorEvent = { export type WebSocketSocketErrorEvent = {
error: string, error: string,
}; };
export type WebSocketCloseEvent = {}; export type WebSocketCloseEvent = {};

View File

@ -1895,7 +1895,7 @@ WebSocket:
opcode: number opcode: number
data: string data: string
error: socketError:
parameters: parameters:
error: string error: string

View File

@ -336,7 +336,7 @@ export class WebSocket extends EventEmitter {
static Events = { static Events = {
Close: 'close', Close: 'close',
Error: 'socketerror', SocketError: 'socketerror',
FrameReceived: 'framereceived', FrameReceived: 'framereceived',
FrameSent: 'framesent', FrameSent: 'framesent',
}; };
@ -359,7 +359,7 @@ export class WebSocket extends EventEmitter {
} }
error(errorMessage: string) { error(errorMessage: string) {
this.emit(WebSocket.Events.Error, errorMessage); this.emit(WebSocket.Events.SocketError, errorMessage);
} }
closed() { closed() {

View File

@ -168,11 +168,26 @@ it('should scope browser handles', async ({browserType, browserOptions}) => {
await expectScopeState(browserType, GOLDEN_PRECONDITION); await expectScopeState(browserType, GOLDEN_PRECONDITION);
}); });
it('should work with the domain module', async ({ domain, browserType, browserOptions }) => { it('should work with the domain module', async ({ domain, browserType, browserOptions, server, isFirefox }) => {
const browser = await browserType.launch(browserOptions); const browser = await browserType.launch(browserOptions);
const page = await browser.newPage(); const page = await browser.newPage();
const result = await page.evaluate(() => 1 + 1);
expect(result).toBe(2); expect(await page.evaluate(() => 1 + 1)).toBe(2);
// At the time of writing, we used to emit 'error' event for WebSockets,
// which failed with 'domain' module.
let callback;
const result = new Promise(f => callback = f);
page.on('websocket', ws => ws.on('socketerror', callback));
page.evaluate(port => {
new WebSocket('ws://localhost:' + port + '/bogus-ws');
}, server.PORT);
const message = await result;
if (isFirefox)
expect(message).toBe('CLOSE_ABNORMAL');
else
expect(message).toContain(': 400');
await browser.close(); await browser.close();
}); });