From 501d9864c0c25e377fb75d47b342ac924cb70c71 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Tue, 29 Jul 2025 13:02:43 +0100 Subject: [PATCH 1/9] chore: remove unused envs and protocol methods (#36825) --- .../playwright-core/src/protocol/validator.ts | 16 ---------- .../src/server/debugController.ts | 24 +-------------- .../dispatchers/debugControllerDispatcher.ts | 12 -------- .../dispatchers/localUtilsDispatcher.ts | 6 ---- .../playwright-core/src/server/playwright.ts | 4 --- .../src/utils/isomorphic/protocolMetainfo.ts | 4 --- .../src/utils/isomorphic/urlMatch.ts | 2 +- packages/playwright/src/runner/tasks.ts | 2 +- packages/protocol/src/channels.d.ts | 29 ------------------- packages/protocol/src/protocol.yml | 19 ------------ tests/library/debug-controller.spec.ts | 22 ++++---------- 11 files changed, 9 insertions(+), 131 deletions(-) diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index 865802398a037..ec4d1156e779b 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -358,14 +358,6 @@ scheme.LocalUtilsTraceDiscardedParams = tObject({ stacksId: tString, }); scheme.LocalUtilsTraceDiscardedResult = tOptional(tObject({})); -scheme.LocalUtilsGlobToRegexParams = tObject({ - glob: tString, - baseURL: tOptional(tString), - webSocketUrl: tOptional(tBoolean), -}); -scheme.LocalUtilsGlobToRegexResult = tObject({ - regex: tString, -}); scheme.RootInitializer = tOptional(tObject({})); scheme.RootInitializeParams = tObject({ sdkLanguage: tType('SDKLanguage'), @@ -464,12 +456,6 @@ scheme.DebugControllerSetReportStateChangedParams = tObject({ enabled: tBoolean, }); scheme.DebugControllerSetReportStateChangedResult = tOptional(tObject({})); -scheme.DebugControllerResetForReuseParams = tOptional(tObject({})); -scheme.DebugControllerResetForReuseResult = tOptional(tObject({})); -scheme.DebugControllerNavigateParams = tObject({ - url: tString, -}); -scheme.DebugControllerNavigateResult = tOptional(tObject({})); scheme.DebugControllerSetRecorderModeParams = tObject({ mode: tEnum(['inspecting', 'recording', 'none']), testIdAttributeName: tOptional(tString), @@ -486,8 +472,6 @@ scheme.DebugControllerResumeParams = tOptional(tObject({})); scheme.DebugControllerResumeResult = tOptional(tObject({})); scheme.DebugControllerKillParams = tOptional(tObject({})); scheme.DebugControllerKillResult = tOptional(tObject({})); -scheme.DebugControllerCloseAllBrowsersParams = tOptional(tObject({})); -scheme.DebugControllerCloseAllBrowsersResult = tOptional(tObject({})); scheme.SocksSupportInitializer = tOptional(tObject({})); scheme.SocksSupportSocksRequestedEvent = tObject({ uid: tString, diff --git a/packages/playwright-core/src/server/debugController.ts b/packages/playwright-core/src/server/debugController.ts index 0ddf54c8f17f4..89b133d99701b 100644 --- a/packages/playwright-core/src/server/debugController.ts +++ b/packages/playwright-core/src/server/debugController.ts @@ -26,7 +26,6 @@ import { collapseActions } from './recorder/recorderUtils'; import { JavaScriptLanguageGenerator } from './codegen/javascript'; import type { Language } from '../utils'; -import type { Browser } from './browser'; import type { BrowserContext } from './browserContext'; import type { InstrumentationListener } from './instrumentation'; import type { Playwright } from './playwright'; @@ -74,19 +73,6 @@ export class DebugController extends SdkObject { } } - async resetForReuse(progress: Progress) { - const contexts = new Set(); - for (const page of this._playwright.allPages()) - contexts.add(page.browserContext); - for (const context of contexts) - await context.resetForReuse(progress, null); - } - - async navigate(progress: Progress, url: string) { - for (const p of this._playwright.allPages()) - await p.mainFrame().goto(progress, url); - } - async setRecorderMode(progress: Progress, params: { mode: Mode, testIdAttributeName?: string }) { await progress.race(this._closeBrowsersWithoutPages()); @@ -137,11 +123,7 @@ export class DebugController extends SdkObject { for (const recorder of await progress.race(this._allRecorders())) recorder.hideHighlightedSelector(); // Hide all locator.highlight highlights. - await this._playwright.hideHighlight(); - } - - allBrowsers(): Browser[] { - return [...this._playwright.allBrowsers()]; + await Promise.all(this._playwright.allPages().map(p => p.hideHighlight().catch(() => {}))); } async resume(progress: Progress) { @@ -153,10 +135,6 @@ export class DebugController extends SdkObject { gracefullyProcessExitDoNotHang(0); } - async closeAllBrowsers() { - await Promise.all(this.allBrowsers().map(browser => browser.close({ reason: 'Close all browsers requested' }))); - } - private _emitSnapshot(initial: boolean) { const pageCount = this._playwright.allPages().length; if (initial && !pageCount) diff --git a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts index cc55f9e28287a..595535925741f 100644 --- a/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/debugControllerDispatcher.ts @@ -58,14 +58,6 @@ export class DebugControllerDispatcher extends Dispatcher transport.close()); return { pipe, headers: transport.headers }; } - - async globToRegex(params: channels.LocalUtilsGlobToRegexParams, progress: Progress): Promise { - const regex = resolveGlobToRegexPattern(params.baseURL, params.glob, params.webSocketUrl); - return { regex }; - } } async function urlToWSEndpoint(progress: Progress, endpointURL: string): Promise { diff --git a/packages/playwright-core/src/server/playwright.ts b/packages/playwright-core/src/server/playwright.ts index a4381b1d3c837..c30fb54ef89da 100644 --- a/packages/playwright-core/src/server/playwright.ts +++ b/packages/playwright-core/src/server/playwright.ts @@ -74,10 +74,6 @@ export class Playwright extends SdkObject { this.debugController = new DebugController(this); } - async hideHighlight() { - await Promise.all([...this._allPages].map(p => p.hideHighlight().catch(() => {}))); - } - allBrowsers(): Browser[] { return [...this._allBrowsers]; } diff --git a/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts b/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts index 8354f6f46d9c8..33bc1e0b4ae71 100644 --- a/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts +++ b/packages/playwright-core/src/utils/isomorphic/protocolMetainfo.ts @@ -32,19 +32,15 @@ export const methodMetainfo = new Map[] = []; - if (!config.configCLIOverrides.preserveOutputDir && !process.env.PW_TEST_NO_REMOVE_OUTPUT_DIRS) + if (!config.configCLIOverrides.preserveOutputDir) tasks.push(createRemoveOutputDirsTask()); tasks.push( ...createPluginSetupTasks(config), diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index ea9ab4b2f17a2..73017cb438910 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -485,7 +485,6 @@ export interface LocalUtilsChannel extends LocalUtilsEventTarget, Channel { tracingStarted(params: LocalUtilsTracingStartedParams, progress?: Progress): Promise; addStackToTracingNoReply(params: LocalUtilsAddStackToTracingNoReplyParams, progress?: Progress): Promise; traceDiscarded(params: LocalUtilsTraceDiscardedParams, progress?: Progress): Promise; - globToRegex(params: LocalUtilsGlobToRegexParams, progress?: Progress): Promise; } export type LocalUtilsZipParams = { zipFile: string, @@ -584,18 +583,6 @@ export type LocalUtilsTraceDiscardedOptions = { }; export type LocalUtilsTraceDiscardedResult = void; -export type LocalUtilsGlobToRegexParams = { - glob: string, - baseURL?: string, - webSocketUrl?: boolean, -}; -export type LocalUtilsGlobToRegexOptions = { - baseURL?: string, - webSocketUrl?: boolean, -}; -export type LocalUtilsGlobToRegexResult = { - regex: string, -}; export interface LocalUtilsEvents { } @@ -739,14 +726,11 @@ export interface DebugControllerChannel extends DebugControllerEventTarget, Chan _type_DebugController: boolean; initialize(params: DebugControllerInitializeParams, progress?: Progress): Promise; setReportStateChanged(params: DebugControllerSetReportStateChangedParams, progress?: Progress): Promise; - resetForReuse(params?: DebugControllerResetForReuseParams, progress?: Progress): Promise; - navigate(params: DebugControllerNavigateParams, progress?: Progress): Promise; setRecorderMode(params: DebugControllerSetRecorderModeParams, progress?: Progress): Promise; highlight(params: DebugControllerHighlightParams, progress?: Progress): Promise; hideHighlight(params?: DebugControllerHideHighlightParams, progress?: Progress): Promise; resume(params?: DebugControllerResumeParams, progress?: Progress): Promise; kill(params?: DebugControllerKillParams, progress?: Progress): Promise; - closeAllBrowsers(params?: DebugControllerCloseAllBrowsersParams, progress?: Progress): Promise; } export type DebugControllerInspectRequestedEvent = { selector: string, @@ -783,16 +767,6 @@ export type DebugControllerSetReportStateChangedOptions = { }; export type DebugControllerSetReportStateChangedResult = void; -export type DebugControllerResetForReuseParams = {}; -export type DebugControllerResetForReuseOptions = {}; -export type DebugControllerResetForReuseResult = void; -export type DebugControllerNavigateParams = { - url: string, -}; -export type DebugControllerNavigateOptions = { - -}; -export type DebugControllerNavigateResult = void; export type DebugControllerSetRecorderModeParams = { mode: 'inspecting' | 'recording' | 'none', testIdAttributeName?: string, @@ -819,9 +793,6 @@ export type DebugControllerResumeResult = void; export type DebugControllerKillParams = {}; export type DebugControllerKillOptions = {}; export type DebugControllerKillResult = void; -export type DebugControllerCloseAllBrowsersParams = {}; -export type DebugControllerCloseAllBrowsersOptions = {}; -export type DebugControllerCloseAllBrowsersResult = void; export interface DebugControllerEvents { 'inspectRequested': DebugControllerInspectRequestedEvent; diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index e59829c637995..bbfdfcebe3e89 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -765,14 +765,6 @@ LocalUtils: parameters: stacksId: string - globToRegex: - internal: true - parameters: - glob: string - baseURL: string? - webSocketUrl: boolean? - returns: - regex: string Root: type: interface @@ -892,14 +884,6 @@ DebugController: parameters: enabled: boolean - resetForReuse: - internal: true - - navigate: - internal: true - parameters: - url: string - setRecorderMode: internal: true parameters: @@ -926,9 +910,6 @@ DebugController: kill: internal: true - closeAllBrowsers: - internal: true - events: inspectRequested: parameters: diff --git a/tests/library/debug-controller.spec.ts b/tests/library/debug-controller.spec.ts index 3fe102446d4e1..309e13fe088c4 100644 --- a/tests/library/debug-controller.spec.ts +++ b/tests/library/debug-controller.spec.ts @@ -135,22 +135,12 @@ test('should report pages', async ({ backend, connectedBrowser }) => { ]); }); -test('should navigate all', async ({ backend, connectedBrowser }) => { - const context = await connectedBrowser.newContextForReuse(); - const page1 = await context.newPage(); - const page2 = await context.newPage(); - - await backend.navigate({ url: 'data:text/plain,Hello world' }); - - expect(await page1.evaluate(() => window.location.href)).toBe('data:text/plain,Hello world'); - expect(await page2.evaluate(() => window.location.href)).toBe('data:text/plain,Hello world'); -}); - test('should reset for reuse', async ({ backend, connectedBrowser }) => { const context = await connectedBrowser.newContextForReuse(); const page1 = await context.newPage(); const page2 = await context.newPage(); - await backend.navigate({ url: 'data:text/plain,Hello world' }); + await page1.goto('data:text/plain,Hello world'); + await page2.goto('data:text/plain,Hello world'); const context2 = await connectedBrowser.newContextForReuse(); expect(context2.pages().length).toBe(1); @@ -167,7 +157,8 @@ test('should highlight all', async ({ backend, connectedBrowser }) => { const context = await connectedBrowser.newContextForReuse(); const page1 = await context.newPage(); const page2 = await context.newPage(); - await backend.navigate({ url: 'data:text/html,' }); + await page1.goto('data:text/html,'); + await page2.goto('data:text/html,'); await backend.highlight({ selector: 'button' }); await expect(page1.getByText('locator(\'button\')')).toBeVisible(); await expect(page2.getByText('locator(\'button\')')).toBeVisible(); @@ -275,7 +266,7 @@ test('should highlight inside iframe', async ({ backend, connectedBrowser }, tes const context = await connectedBrowser.newContextForReuse(); const page = await context.newPage(); - await backend.navigate({ url: `data:text/html,
bar