From 8e752d3efc9d3c1e6821be4f7620e5a85f3f1718 Mon Sep 17 00:00:00 2001 From: Pavel Date: Thu, 21 Sep 2023 11:14:58 -0700 Subject: [PATCH] chore: remove dedicated console channel --- .../src/client/browserContext.ts | 4 +-- .../playwright-core/src/client/connection.ts | 4 --- .../src/client/consoleMessage.ts | 26 ++++++-------- .../playwright-core/src/protocol/validator.ts | 21 +++++------ .../dispatchers/browserContextDispatcher.ts | 14 ++++++-- .../dispatchers/consoleMessageDispatcher.ts | 35 ------------------- packages/protocol/src/channels.ts | 34 +++++------------- packages/protocol/src/protocol.yml | 32 +++++++---------- 8 files changed, 53 insertions(+), 117 deletions(-) delete mode 100644 packages/playwright-core/src/server/dispatchers/consoleMessageDispatcher.ts diff --git a/packages/playwright-core/src/client/browserContext.ts b/packages/playwright-core/src/client/browserContext.ts index 94f2a809b6d29..b7ad54f7c2b66 100644 --- a/packages/playwright-core/src/client/browserContext.ts +++ b/packages/playwright-core/src/client/browserContext.ts @@ -95,8 +95,8 @@ export class BrowserContext extends ChannelOwner this._serviceWorkers.add(serviceWorker); this.emit(Events.BrowserContext.ServiceWorker, serviceWorker); }); - this._channel.on('console', ({ message }) => { - const consoleMessage = ConsoleMessage.from(message); + this._channel.on('console', event => { + const consoleMessage = new ConsoleMessage(event); this.emit(Events.BrowserContext.Console, consoleMessage); const page = consoleMessage.page(); if (page) diff --git a/packages/playwright-core/src/client/connection.ts b/packages/playwright-core/src/client/connection.ts index a3b3dc6075824..05156b3937226 100644 --- a/packages/playwright-core/src/client/connection.ts +++ b/packages/playwright-core/src/client/connection.ts @@ -24,7 +24,6 @@ import { JSHandle } from './jsHandle'; import { Request, Response, Route, WebSocket } from './network'; import { Page, BindingCall } from './page'; import { Worker } from './worker'; -import { ConsoleMessage } from './consoleMessage'; import { Dialog } from './dialog'; import { parseError } from '../protocol/serializers'; import { CDPSession } from './cdpSession'; @@ -240,9 +239,6 @@ export class Connection extends EventEmitter { case 'CDPSession': result = new CDPSession(parent, type, guid, initializer); break; - case 'ConsoleMessage': - result = new ConsoleMessage(parent, type, guid, initializer); - break; case 'Dialog': result = new Dialog(parent, type, guid, initializer); break; diff --git a/packages/playwright-core/src/client/consoleMessage.ts b/packages/playwright-core/src/client/consoleMessage.ts index 11f12babd48ce..1c55639ab52ef 100644 --- a/packages/playwright-core/src/client/consoleMessage.ts +++ b/packages/playwright-core/src/client/consoleMessage.ts @@ -17,25 +17,19 @@ import * as util from 'util'; import { JSHandle } from './jsHandle'; import type * as channels from '@protocol/channels'; -import { ChannelOwner } from './channelOwner'; import type * as api from '../../types/types'; import { Page } from './page'; -type ConsoleMessageLocation = channels.ConsoleMessageInitializer['location']; +type ConsoleMessageLocation = channels.BrowserContextConsoleEvent['location']; -export class ConsoleMessage extends ChannelOwner implements api.ConsoleMessage { - static from(message: channels.ConsoleMessageChannel): ConsoleMessage { - return (message as any)._object; - } +export class ConsoleMessage implements api.ConsoleMessage { private _page: Page | null; + private _event: channels.BrowserContextConsoleEvent; - constructor(parent: ChannelOwner, type: string, guid: string, initializer: channels.ConsoleMessageInitializer) { - super(parent, type, guid, initializer); - // Note: currently, we only report console messages for pages and they always have a page. - // However, in the future we might report console messages for service workers or something else, - // where page() would be null. - this._page = Page.fromNullable(initializer.page); + constructor(event: channels.BrowserContextConsoleEvent) { + this._page = event.page ? Page.from(event.page) : null; + this._event = event; } page() { @@ -43,19 +37,19 @@ export class ConsoleMessage extends ChannelOwner } type(): string { - return this._initializer.type; + return this._event.type; } text(): string { - return this._initializer.text; + return this._event.text; } args(): JSHandle[] { - return this._initializer.args.map(JSHandle.from); + return this._event.args.map(JSHandle.from); } location(): ConsoleMessageLocation { - return this._initializer.location; + return this._event.location; } [util.inspect.custom]() { diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index ddb477f310ef8..5483a5f5768ed 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -763,7 +763,15 @@ scheme.BrowserContextBindingCallEvent = tObject({ binding: tChannel(['BindingCall']), }); scheme.BrowserContextConsoleEvent = tObject({ - message: tChannel(['ConsoleMessage']), + page: tChannel(['Page']), + type: tString, + text: tString, + args: tArray(tChannel(['ElementHandle', 'JSHandle'])), + location: tObject({ + url: tString, + lineNumber: tNumber, + columnNumber: tNumber, + }), }); scheme.BrowserContextCloseEvent = tOptional(tObject({})); scheme.BrowserContextDialogEvent = tObject({ @@ -2090,17 +2098,6 @@ scheme.WebSocketSocketErrorEvent = tObject({ error: tString, }); scheme.WebSocketCloseEvent = tOptional(tObject({})); -scheme.ConsoleMessageInitializer = tObject({ - page: tChannel(['Page']), - type: tString, - text: tString, - args: tArray(tChannel(['ElementHandle', 'JSHandle'])), - location: tObject({ - url: tString, - lineNumber: tNumber, - columnNumber: tNumber, - }), -}); scheme.BindingCallInitializer = tObject({ frame: tChannel(['Frame']), name: tString, diff --git a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts index 3bd83d81dcc44..704a9796531a0 100644 --- a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts @@ -33,12 +33,12 @@ import * as fs from 'fs'; import * as path from 'path'; import { createGuid, urlMatches } from '../../utils'; import { WritableStreamDispatcher } from './writableStreamDispatcher'; -import { ConsoleMessageDispatcher } from './consoleMessageDispatcher'; import { DialogDispatcher } from './dialogDispatcher'; import type { Page } from '../page'; import type { Dialog } from '../dialog'; import type { ConsoleMessage } from '../console'; import { serializeError } from '../../protocol/serializers'; +import { ElementHandleDispatcher } from './elementHandlerDispatcher'; export class BrowserContextDispatcher extends Dispatcher implements channels.BrowserContextChannel { _type_EventTarget = true; @@ -89,8 +89,16 @@ export class BrowserContextDispatcher extends Dispatcher { - if (this._shouldDispatchEvent(message.page(), 'console')) - this._dispatchEvent('console', { message: new ConsoleMessageDispatcher(PageDispatcher.from(this, message.page()), message) }); + if (this._shouldDispatchEvent(message.page(), 'console')) { + const pageDispatcher = PageDispatcher.from(this, message.page()); + this._dispatchEvent('console', { + page: pageDispatcher, + type: message.type(), + text: message.text(), + args: message.args().map(a => ElementHandleDispatcher.fromJSHandle(pageDispatcher, a)), + location: message.location(), + }); + } }); this.addObjectListener(BrowserContext.Events.Dialog, (dialog: Dialog) => { if (this._shouldDispatchEvent(dialog.page(), 'dialog')) diff --git a/packages/playwright-core/src/server/dispatchers/consoleMessageDispatcher.ts b/packages/playwright-core/src/server/dispatchers/consoleMessageDispatcher.ts deleted file mode 100644 index 35354a5ed5151..0000000000000 --- a/packages/playwright-core/src/server/dispatchers/consoleMessageDispatcher.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the 'License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type { ConsoleMessage } from '../console'; -import type * as channels from '@protocol/channels'; -import type { PageDispatcher } from './pageDispatcher'; -import { Dispatcher } from './dispatcher'; -import { ElementHandleDispatcher } from './elementHandlerDispatcher'; - -export class ConsoleMessageDispatcher extends Dispatcher implements channels.ConsoleMessageChannel { - _type_ConsoleMessage = true; - - constructor(page: PageDispatcher, message: ConsoleMessage) { - super(page, message, 'ConsoleMessage', { - type: message.type(), - text: message.text(), - args: message.args().map(a => ElementHandleDispatcher.fromJSHandle(page, a)), - location: message.location(), - page, - }); - } -} diff --git a/packages/protocol/src/channels.ts b/packages/protocol/src/channels.ts index bd8ab7ce541b0..be829189a01e8 100644 --- a/packages/protocol/src/channels.ts +++ b/packages/protocol/src/channels.ts @@ -38,7 +38,6 @@ export type InitializerTraits = T extends TracingChannel ? TracingInitializer : T extends DialogChannel ? DialogInitializer : T extends BindingCallChannel ? BindingCallInitializer : - T extends ConsoleMessageChannel ? ConsoleMessageInitializer : T extends WebSocketChannel ? WebSocketInitializer : T extends ResponseChannel ? ResponseInitializer : T extends RouteChannel ? RouteInitializer : @@ -76,7 +75,6 @@ export type EventsTraits = T extends TracingChannel ? TracingEvents : T extends DialogChannel ? DialogEvents : T extends BindingCallChannel ? BindingCallEvents : - T extends ConsoleMessageChannel ? ConsoleMessageEvents : T extends WebSocketChannel ? WebSocketEvents : T extends ResponseChannel ? ResponseEvents : T extends RouteChannel ? RouteEvents : @@ -114,7 +112,6 @@ export type EventTargetTraits = T extends TracingChannel ? TracingEventTarget : T extends DialogChannel ? DialogEventTarget : T extends BindingCallChannel ? BindingCallEventTarget : - T extends ConsoleMessageChannel ? ConsoleMessageEventTarget : T extends WebSocketChannel ? WebSocketEventTarget : T extends ResponseChannel ? ResponseEventTarget : T extends RouteChannel ? RouteEventTarget : @@ -1447,7 +1444,15 @@ export type BrowserContextBindingCallEvent = { binding: BindingCallChannel, }; export type BrowserContextConsoleEvent = { - message: ConsoleMessageChannel, + page: PageChannel, + type: string, + text: string, + args: JSHandleChannel[], + location: { + url: string, + lineNumber: number, + columnNumber: number, + }, }; export type BrowserContextCloseEvent = {}; export type BrowserContextDialogEvent = { @@ -3709,27 +3714,6 @@ export interface WebSocketEvents { 'close': WebSocketCloseEvent; } -// ----------- ConsoleMessage ----------- -export type ConsoleMessageInitializer = { - page: PageChannel, - type: string, - text: string, - args: JSHandleChannel[], - location: { - url: string, - lineNumber: number, - columnNumber: number, - }, -}; -export interface ConsoleMessageEventTarget { -} -export interface ConsoleMessageChannel extends ConsoleMessageEventTarget, Channel { - _type_ConsoleMessage: boolean; -} - -export interface ConsoleMessageEvents { -} - // ----------- BindingCall ----------- export type BindingCallInitializer = { frame: FrameChannel, diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 486890e60d7b9..b948452cec1c3 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -1180,7 +1180,18 @@ BrowserContext: console: parameters: - message: ConsoleMessage + page: Page + type: string + text: string + args: + type: array + items: JSHandle + location: + type: object + properties: + url: string + lineNumber: number + columnNumber: number close: @@ -2948,25 +2959,6 @@ WebSocket: close: -ConsoleMessage: - type: interface - - initializer: - page: Page - type: string - text: string - args: - type: array - items: JSHandle - location: - type: object - properties: - url: string - lineNumber: number - columnNumber: number - - - BindingCall: type: interface