From f7f08c9c0241092819d4ceae6dbd4747f920b04e Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Tue, 25 May 2021 14:33:27 -0700 Subject: [PATCH] api(dotnet): normalize enums, remove browser channel enum (#6738) --- docs/src/api/class-page.md | 16 ++++++++++++++++ docs/src/api/params.md | 4 +++- src/protocol/channels.ts | 8 ++++---- src/protocol/protocol.yml | 13 +------------ src/protocol/validator.ts | 4 ++-- src/server/browser.ts | 2 +- src/server/browserType.ts | 2 +- src/server/chromium/chromium.ts | 2 +- src/server/firefox/firefox.ts | 2 +- src/server/supplements/recorder/recorderApp.ts | 3 +-- src/server/types.ts | 4 +--- src/server/webkit/webkit.ts | 2 +- types/types.d.ts | 15 ++++++++++++--- utils/doclint/generateDotnetApi.js | 2 +- 14 files changed, 46 insertions(+), 33 deletions(-) diff --git a/docs/src/api/class-page.md b/docs/src/api/class-page.md index 96d5009047..6813c7c364 100644 --- a/docs/src/api/class-page.md +++ b/docs/src/api/class-page.md @@ -960,17 +960,33 @@ await page.EvaluateAsync("matchMedia('(prefers-color-scheme: no-preference)').ma ``` ### option: Page.emulateMedia.media +* langs: js, python, java - `media` > Changes the CSS media type of the page. The only allowed values are `'screen'`, `'print'` and `null`. Passing `null` disables CSS media emulation. +### option: Page.emulateMedia.media +* langs: csharp +- `media` <[Media]<"screen"|"print"|"null">> + +Changes the CSS media type of the page. The only allowed values are `'Screen'`, `'Print'` and `'Null'`. +Passing `'Null'` disables CSS media emulation. + ### option: Page.emulateMedia.colorScheme +* langs: js, python, java - `colorScheme` > Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. Passing `null` disables color scheme emulation. +### option: Page.emulateMedia.colorScheme +* langs: csharp +- `colorScheme` <[ColorScheme]<"light"|"dark"|"no-preference"|"null">> + +Emulates `'prefers-colors-scheme'` media feature, supported values are `'light'`, `'dark'`, `'no-preference'`. Passing +`'Null'` disables color scheme emulation. + ### option: Page.emulateMedia.reducedMotion * langs: js, python, java - `reducedMotion` > diff --git a/docs/src/api/params.md b/docs/src/api/params.md index 93a41fefaf..fdb9a75dee 100644 --- a/docs/src/api/params.md +++ b/docs/src/api/params.md @@ -603,7 +603,9 @@ Additional arguments to pass to the browser instance. The list of Chromium flags [here](http://peter.sh/experiments/chromium-command-line-switches/). ## browser-option-channel -- `channel` <[BrowserChannel]<"chrome"|"chrome-beta"|"chrome-dev"|"chrome-canary"|"msedge"|"msedge-beta"|"msedge-dev"|"msedge-canary">> +- `channel` <[string]> + +Supported values are "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", "msedge-canary". Browser distribution channel. Read more about using [Google Chrome and Microsoft Edge](./browsers.md#google-chrome--microsoft-edge). diff --git a/src/protocol/channels.ts b/src/protocol/channels.ts index c21dd391d5..e40f063a02 100644 --- a/src/protocol/channels.ts +++ b/src/protocol/channels.ts @@ -219,7 +219,7 @@ export interface BrowserTypeChannel extends Channel { connectOverCDP(params: BrowserTypeConnectOverCDPParams, metadata?: Metadata): Promise; } export type BrowserTypeLaunchParams = { - channel?: 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary' | 'firefox-stable', + channel?: string, executablePath?: string, args?: string[], ignoreAllDefaultArgs?: boolean, @@ -244,7 +244,7 @@ export type BrowserTypeLaunchParams = { slowMo?: number, }; export type BrowserTypeLaunchOptions = { - channel?: 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary' | 'firefox-stable', + channel?: string, executablePath?: string, args?: string[], ignoreAllDefaultArgs?: boolean, @@ -272,7 +272,7 @@ export type BrowserTypeLaunchResult = { browser: BrowserChannel, }; export type BrowserTypeLaunchPersistentContextParams = { - channel?: 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary' | 'firefox-stable', + channel?: string, executablePath?: string, args?: string[], ignoreAllDefaultArgs?: boolean, @@ -343,7 +343,7 @@ export type BrowserTypeLaunchPersistentContextParams = { slowMo?: number, }; export type BrowserTypeLaunchPersistentContextOptions = { - channel?: 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary' | 'firefox-stable', + channel?: string, executablePath?: string, args?: string[], ignoreAllDefaultArgs?: boolean, diff --git a/src/protocol/protocol.yml b/src/protocol/protocol.yml index 067ff870af..80caacd2a9 100644 --- a/src/protocol/protocol.yml +++ b/src/protocol/protocol.yml @@ -223,18 +223,7 @@ SerializedError: LaunchOptions: type: mixin properties: - channel: - type: enum? - literals: - - chrome - - chrome-beta - - chrome-dev - - chrome-canary - - msedge - - msedge-beta - - msedge-dev - - msedge-canary - - firefox-stable + channel: string? executablePath: string? args: type: array? diff --git a/src/protocol/validator.ts b/src/protocol/validator.ts index d606c5c7b3..b0ee7f30ce 100644 --- a/src/protocol/validator.ts +++ b/src/protocol/validator.ts @@ -156,7 +156,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme { contentScript: tOptional(tBoolean), }); scheme.BrowserTypeLaunchParams = tObject({ - channel: tOptional(tEnum(['chrome', 'chrome-beta', 'chrome-dev', 'chrome-canary', 'msedge', 'msedge-beta', 'msedge-dev', 'msedge-canary', 'firefox-stable'])), + channel: tOptional(tString), executablePath: tOptional(tString), args: tOptional(tArray(tString)), ignoreAllDefaultArgs: tOptional(tBoolean), @@ -181,7 +181,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme { slowMo: tOptional(tNumber), }); scheme.BrowserTypeLaunchPersistentContextParams = tObject({ - channel: tOptional(tEnum(['chrome', 'chrome-beta', 'chrome-dev', 'chrome-canary', 'msedge', 'msedge-beta', 'msedge-dev', 'msedge-canary', 'firefox-stable'])), + channel: tOptional(tString), executablePath: tOptional(tString), args: tOptional(tArray(tString)), ignoreAllDefaultArgs: tOptional(tBoolean), diff --git a/src/server/browser.ts b/src/server/browser.ts index b05919d503..3ea9a42913 100644 --- a/src/server/browser.ts +++ b/src/server/browser.ts @@ -40,7 +40,7 @@ export type PlaywrightOptions = { export type BrowserOptions = PlaywrightOptions & { name: string, isChromium: boolean, - channel?: types.BrowserChannel, + channel?: string, downloadsPath?: string, traceDir?: string, headful?: boolean, diff --git a/src/server/browserType.ts b/src/server/browserType.ts index 1e657b7e0e..b9f8b97429 100644 --- a/src/server/browserType.ts +++ b/src/server/browserType.ts @@ -51,7 +51,7 @@ export abstract class BrowserType extends SdkObject { this._registry = playwrightOptions.registry; } - executablePath(channel?: types.BrowserChannel): string { + executablePath(channel?: string): string { return this._registry.executablePath(this._name) || ''; } diff --git a/src/server/chromium/chromium.ts b/src/server/chromium/chromium.ts index d590277ec4..d98635e6c2 100644 --- a/src/server/chromium/chromium.ts +++ b/src/server/chromium/chromium.ts @@ -48,7 +48,7 @@ export class Chromium extends BrowserType { this._devtools = this._createDevTools(); } - executablePath(channel?: types.BrowserChannel): string { + executablePath(channel?: string): string { if (channel) return findChromiumChannel(channel); return super.executablePath(channel); diff --git a/src/server/firefox/firefox.ts b/src/server/firefox/firefox.ts index d172a06adc..f347ec160b 100644 --- a/src/server/firefox/firefox.ts +++ b/src/server/firefox/firefox.ts @@ -32,7 +32,7 @@ export class Firefox extends BrowserType { super('firefox', playwrightOptions); } - executablePath(channel?: types.BrowserChannel): string { + executablePath(channel?: string): string { if (channel) { let executablePath = undefined; if ((channel as any) === 'firefox-stable') diff --git a/src/server/supplements/recorder/recorderApp.ts b/src/server/supplements/recorder/recorderApp.ts index 88ff1bed25..82172d61aa 100644 --- a/src/server/supplements/recorder/recorderApp.ts +++ b/src/server/supplements/recorder/recorderApp.ts @@ -25,7 +25,6 @@ import { internalCallMetadata } from '../../instrumentation'; import type { CallLog, EventData, Mode, Source } from './recorderTypes'; import { BrowserContext } from '../../browserContext'; import { isUnderTest } from '../../../utils/utils'; -import * as types from '../../types'; const readFileAsync = util.promisify(fs.readFile); const existsAsync = (path: string): Promise => new Promise(resolve => fs.stat(path, err => resolve(!err))); @@ -102,7 +101,7 @@ export class RecorderApp extends EventEmitter { ]; if (process.env.PWTEST_RECORDER_PORT) args.push(`--remote-debugging-port=${process.env.PWTEST_RECORDER_PORT}`); - let channel: types.BrowserChannel | undefined; + let channel: string | undefined; let executablePath: string | undefined; if (inspectedContext._browser.options.isChromium) { channel = inspectedContext._browser.options.channel; diff --git a/src/server/types.ts b/src/server/types.ts index 643c33c33d..39cdaa2158 100644 --- a/src/server/types.ts +++ b/src/server/types.ts @@ -256,10 +256,8 @@ export type BrowserContextOptions = { export type EnvArray = { name: string, value: string }[]; -export type BrowserChannel = 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary' | 'msedge' | 'msedge-beta' | 'msedge-dev' | 'msedge-canary' | 'firefox-stable'; - type LaunchOptionsBase = { - channel?: BrowserChannel, + channel?: string, executablePath?: string, args?: string[], ignoreDefaultArgs?: string[], diff --git a/src/server/webkit/webkit.ts b/src/server/webkit/webkit.ts index 09e6f7521f..63145de52e 100644 --- a/src/server/webkit/webkit.ts +++ b/src/server/webkit/webkit.ts @@ -31,7 +31,7 @@ export class WebKit extends BrowserType { super('webkit', playwrightOptions); } - executablePath(channel?: types.BrowserChannel): string { + executablePath(channel?: string): string { if (channel) { let executablePath = undefined; if ((channel as any) === 'technology-preview') diff --git a/types/types.d.ts b/types/types.d.ts index 959c2b32e7..307f930e90 100644 --- a/types/types.d.ts +++ b/types/types.d.ts @@ -6969,10 +6969,13 @@ export interface BrowserType { bypassCSP?: boolean; /** + * Supported values are "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", + * "msedge-canary". + * * Browser distribution channel. Read more about using * [Google Chrome and Microsoft Edge](https://playwright.dev/docs/browsers#google-chrome--microsoft-edge). */ - channel?: "chrome"|"chrome-beta"|"chrome-dev"|"chrome-canary"|"msedge"|"msedge-beta"|"msedge-dev"|"msedge-canary"; + channel?: string; /** * Enable Chromium sandboxing. Defaults to `false`. @@ -7310,10 +7313,13 @@ export interface BrowserType { args?: Array; /** + * Supported values are "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", + * "msedge-canary". + * * Browser distribution channel. Read more about using * [Google Chrome and Microsoft Edge](https://playwright.dev/docs/browsers#google-chrome--microsoft-edge). */ - channel?: "chrome"|"chrome-beta"|"chrome-dev"|"chrome-canary"|"msedge"|"msedge-beta"|"msedge-dev"|"msedge-canary"; + channel?: string; /** * Enable Chromium sandboxing. Defaults to `false`. @@ -11229,10 +11235,13 @@ export interface LaunchOptions { args?: Array; /** + * Supported values are "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", + * "msedge-canary". + * * Browser distribution channel. Read more about using * [Google Chrome and Microsoft Edge](https://playwright.dev/docs/browsers#google-chrome--microsoft-edge). */ - channel?: "chrome"|"chrome-beta"|"chrome-dev"|"chrome-canary"|"msedge"|"msedge-beta"|"msedge-dev"|"msedge-canary"; + channel?: string; /** * Enable Chromium sandboxing. Defaults to `false`. diff --git a/utils/doclint/generateDotnetApi.js b/utils/doclint/generateDotnetApi.js index 86b023004c..4d1c75621a 100644 --- a/utils/doclint/generateDotnetApi.js +++ b/utils/doclint/generateDotnetApi.js @@ -217,7 +217,6 @@ function renderModelType(name, type) { */ function renderEnum(name, literals) { const body = []; - body.push('Undefined = 0,'); for (let literal of literals) { // strip out the quotes literal = literal.replace(/[\"]/g, ``) @@ -789,6 +788,7 @@ function translateType(type, parent, generateNameCallback = t => t.name, optiona // Regular primitive enums are named in the markdown. if (type.name) { enumTypes.set(type.name, type.union.map(t => t.name)); + nullableTypes.push(type.name); return optional ? type.name + '?' : type.name; } return null;