mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
feat(rpc): introduce JSON type in the protocol for arbitrary blobs (#3367)
This commit is contained in:
parent
6f3f608d5b
commit
ef76f5b922
@ -180,7 +180,7 @@ export type BrowserTypeLaunchParams = {
|
|||||||
password?: string,
|
password?: string,
|
||||||
},
|
},
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
firefoxUserPrefs?: SerializedValue,
|
firefoxUserPrefs?: any,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
slowMo?: number,
|
slowMo?: number,
|
||||||
};
|
};
|
||||||
@ -206,7 +206,7 @@ export type BrowserTypeLaunchOptions = {
|
|||||||
password?: string,
|
password?: string,
|
||||||
},
|
},
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
firefoxUserPrefs?: SerializedValue,
|
firefoxUserPrefs?: any,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
slowMo?: number,
|
slowMo?: number,
|
||||||
};
|
};
|
||||||
@ -235,7 +235,7 @@ export type BrowserTypeLaunchServerParams = {
|
|||||||
password?: string,
|
password?: string,
|
||||||
},
|
},
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
firefoxUserPrefs?: SerializedValue,
|
firefoxUserPrefs?: any,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
port?: number,
|
port?: number,
|
||||||
};
|
};
|
||||||
@ -261,7 +261,7 @@ export type BrowserTypeLaunchServerOptions = {
|
|||||||
password?: string,
|
password?: string,
|
||||||
},
|
},
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
firefoxUserPrefs?: SerializedValue,
|
firefoxUserPrefs?: any,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
port?: number,
|
port?: number,
|
||||||
};
|
};
|
||||||
@ -2228,17 +2228,17 @@ export interface CDPSessionChannel extends Channel {
|
|||||||
}
|
}
|
||||||
export type CDPSessionEventEvent = {
|
export type CDPSessionEventEvent = {
|
||||||
method: string,
|
method: string,
|
||||||
params?: SerializedValue,
|
params?: any,
|
||||||
};
|
};
|
||||||
export type CDPSessionSendParams = {
|
export type CDPSessionSendParams = {
|
||||||
method: string,
|
method: string,
|
||||||
params?: SerializedValue,
|
params?: any,
|
||||||
};
|
};
|
||||||
export type CDPSessionSendOptions = {
|
export type CDPSessionSendOptions = {
|
||||||
params?: SerializedValue,
|
params?: any,
|
||||||
};
|
};
|
||||||
export type CDPSessionSendResult = {
|
export type CDPSessionSendResult = {
|
||||||
result: SerializedValue,
|
result: any,
|
||||||
};
|
};
|
||||||
export type CDPSessionDetachParams = {};
|
export type CDPSessionDetachParams = {};
|
||||||
export type CDPSessionDetachOptions = {};
|
export type CDPSessionDetachOptions = {};
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import { BrowserContext } from './browserContext';
|
|||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
import { BrowserServer } from './browserServer';
|
import { BrowserServer } from './browserServer';
|
||||||
import { headersObjectToArray, envObjectToArray } from '../../converters';
|
import { headersObjectToArray, envObjectToArray } from '../../converters';
|
||||||
import { serializeArgument } from './jsHandle';
|
|
||||||
import { assert } from '../../helper';
|
import { assert } from '../../helper';
|
||||||
import { LaunchOptions, LaunchServerOptions, ConnectOptions, LaunchPersistentContextOptions } from './types';
|
import { LaunchOptions, LaunchServerOptions, ConnectOptions, LaunchPersistentContextOptions } from './types';
|
||||||
|
|
||||||
@ -53,7 +52,6 @@ export class BrowserType extends ChannelOwner<BrowserTypeChannel, BrowserTypeIni
|
|||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||||
env: options.env ? envObjectToArray(options.env) : undefined,
|
env: options.env ? envObjectToArray(options.env) : undefined,
|
||||||
firefoxUserPrefs: options.firefoxUserPrefs ? serializeArgument(options.firefoxUserPrefs).value : undefined,
|
|
||||||
};
|
};
|
||||||
const browser = Browser.from((await this._channel.launch(launchOptions)).browser);
|
const browser = Browser.from((await this._channel.launch(launchOptions)).browser);
|
||||||
browser._logger = logger;
|
browser._logger = logger;
|
||||||
@ -70,7 +68,6 @@ export class BrowserType extends ChannelOwner<BrowserTypeChannel, BrowserTypeIni
|
|||||||
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
ignoreDefaultArgs: Array.isArray(options.ignoreDefaultArgs) ? options.ignoreDefaultArgs : undefined,
|
||||||
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
ignoreAllDefaultArgs: !!options.ignoreDefaultArgs && !Array.isArray(options.ignoreDefaultArgs),
|
||||||
env: options.env ? envObjectToArray(options.env) : undefined,
|
env: options.env ? envObjectToArray(options.env) : undefined,
|
||||||
firefoxUserPrefs: options.firefoxUserPrefs ? serializeArgument(options.firefoxUserPrefs).value : undefined,
|
|
||||||
};
|
};
|
||||||
return BrowserServer.from((await this._channel.launchServer(launchServerOptions)).server);
|
return BrowserServer.from((await this._channel.launchServer(launchServerOptions)).server);
|
||||||
}, logger);
|
}, logger);
|
||||||
|
|||||||
@ -17,7 +17,6 @@
|
|||||||
import { CDPSessionChannel, CDPSessionInitializer } from '../channels';
|
import { CDPSessionChannel, CDPSessionInitializer } from '../channels';
|
||||||
import { ChannelOwner } from './channelOwner';
|
import { ChannelOwner } from './channelOwner';
|
||||||
import { Protocol } from '../../chromium/protocol';
|
import { Protocol } from '../../chromium/protocol';
|
||||||
import { parseResult, serializeArgument } from './jsHandle';
|
|
||||||
|
|
||||||
export class CDPSession extends ChannelOwner<CDPSessionChannel, CDPSessionInitializer> {
|
export class CDPSession extends ChannelOwner<CDPSessionChannel, CDPSessionInitializer> {
|
||||||
static from(cdpSession: CDPSessionChannel): CDPSession {
|
static from(cdpSession: CDPSessionChannel): CDPSession {
|
||||||
@ -34,8 +33,7 @@ export class CDPSession extends ChannelOwner<CDPSessionChannel, CDPSessionInitia
|
|||||||
super(parent, type, guid, initializer);
|
super(parent, type, guid, initializer);
|
||||||
|
|
||||||
this._channel.on('event', ({ method, params }) => {
|
this._channel.on('event', ({ method, params }) => {
|
||||||
const cdpParams = params ? parseResult(params) : undefined;
|
this.emit(method, params);
|
||||||
this.emit(method, cdpParams);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
this.on = super.on;
|
this.on = super.on;
|
||||||
@ -50,9 +48,8 @@ export class CDPSession extends ChannelOwner<CDPSessionChannel, CDPSessionInitia
|
|||||||
params?: Protocol.CommandParameters[T]
|
params?: Protocol.CommandParameters[T]
|
||||||
): Promise<Protocol.CommandReturnValues[T]> {
|
): Promise<Protocol.CommandReturnValues[T]> {
|
||||||
return this._wrapApiCall('cdpSession.send', async () => {
|
return this._wrapApiCall('cdpSession.send', async () => {
|
||||||
const protocolParams = params ? serializeArgument(params).value : undefined;
|
const result = await this._channel.send({ method, params });
|
||||||
const result = await this._channel.send({ method, params: protocolParams });
|
return result.result as Protocol.CommandReturnValues[T];
|
||||||
return parseResult(result.result) as Protocol.CommandReturnValues[T];
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -215,7 +215,7 @@ BrowserType:
|
|||||||
username: string?
|
username: string?
|
||||||
password: string?
|
password: string?
|
||||||
downloadsPath: string?
|
downloadsPath: string?
|
||||||
firefoxUserPrefs: SerializedValue?
|
firefoxUserPrefs: json?
|
||||||
chromiumSandbox: boolean?
|
chromiumSandbox: boolean?
|
||||||
slowMo: number?
|
slowMo: number?
|
||||||
returns:
|
returns:
|
||||||
@ -252,7 +252,7 @@ BrowserType:
|
|||||||
username: string?
|
username: string?
|
||||||
password: string?
|
password: string?
|
||||||
downloadsPath: string?
|
downloadsPath: string?
|
||||||
firefoxUserPrefs: SerializedValue?
|
firefoxUserPrefs: json?
|
||||||
chromiumSandbox: boolean?
|
chromiumSandbox: boolean?
|
||||||
port: number?
|
port: number?
|
||||||
returns:
|
returns:
|
||||||
@ -1849,9 +1849,9 @@ CDPSession:
|
|||||||
send:
|
send:
|
||||||
parameters:
|
parameters:
|
||||||
method: string
|
method: string
|
||||||
params: SerializedValue?
|
params: json?
|
||||||
returns:
|
returns:
|
||||||
result: SerializedValue
|
result: json
|
||||||
|
|
||||||
detach:
|
detach:
|
||||||
|
|
||||||
@ -1860,7 +1860,7 @@ CDPSession:
|
|||||||
event:
|
event:
|
||||||
parameters:
|
parameters:
|
||||||
method: string
|
method: string
|
||||||
params: SerializedValue?
|
params: json?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,6 @@ import { BrowserContextBase } from '../../browserContext';
|
|||||||
import { BrowserContextDispatcher } from './browserContextDispatcher';
|
import { BrowserContextDispatcher } from './browserContextDispatcher';
|
||||||
import { BrowserServerDispatcher } from './browserServerDispatcher';
|
import { BrowserServerDispatcher } from './browserServerDispatcher';
|
||||||
import { headersArrayToObject, envArrayToObject } from '../../converters';
|
import { headersArrayToObject, envArrayToObject } from '../../converters';
|
||||||
import { parseValue } from './jsHandleDispatcher';
|
|
||||||
|
|
||||||
export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeInitializer> implements BrowserTypeChannel {
|
export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeInitializer> implements BrowserTypeChannel {
|
||||||
constructor(scope: DispatcherScope, browserType: BrowserTypeBase) {
|
constructor(scope: DispatcherScope, browserType: BrowserTypeBase) {
|
||||||
@ -39,7 +38,6 @@ export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeIn
|
|||||||
...params,
|
...params,
|
||||||
ignoreDefaultArgs: params.ignoreAllDefaultArgs ? true : params.ignoreDefaultArgs,
|
ignoreDefaultArgs: params.ignoreAllDefaultArgs ? true : params.ignoreDefaultArgs,
|
||||||
env: params.env ? envArrayToObject(params.env) : undefined,
|
env: params.env ? envArrayToObject(params.env) : undefined,
|
||||||
firefoxUserPrefs: params.firefoxUserPrefs ? parseValue(params.firefoxUserPrefs) : undefined,
|
|
||||||
};
|
};
|
||||||
const browser = await this._object.launch(options);
|
const browser = await this._object.launch(options);
|
||||||
return { browser: new BrowserDispatcher(this._scope, browser as BrowserBase) };
|
return { browser: new BrowserDispatcher(this._scope, browser as BrowserBase) };
|
||||||
@ -61,7 +59,6 @@ export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeIn
|
|||||||
const options = {
|
const options = {
|
||||||
...params,
|
...params,
|
||||||
ignoreDefaultArgs: params.ignoreAllDefaultArgs ? true : params.ignoreDefaultArgs,
|
ignoreDefaultArgs: params.ignoreAllDefaultArgs ? true : params.ignoreDefaultArgs,
|
||||||
firefoxUserPrefs: params.firefoxUserPrefs ? parseValue(params.firefoxUserPrefs) : undefined,
|
|
||||||
env: params.env ? envArrayToObject(params.env) : undefined,
|
env: params.env ? envArrayToObject(params.env) : undefined,
|
||||||
};
|
};
|
||||||
return { server: new BrowserServerDispatcher(this._scope, await this._object.launchServer(options)) };
|
return { server: new BrowserServerDispatcher(this._scope, await this._object.launchServer(options)) };
|
||||||
|
|||||||
@ -15,23 +15,20 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { CRSession, CRSessionEvents } from '../../chromium/crConnection';
|
import { CRSession, CRSessionEvents } from '../../chromium/crConnection';
|
||||||
import { CDPSessionChannel, CDPSessionInitializer, SerializedValue } from '../channels';
|
import { CDPSessionChannel, CDPSessionInitializer } from '../channels';
|
||||||
import { Dispatcher, DispatcherScope } from './dispatcher';
|
import { Dispatcher, DispatcherScope } from './dispatcher';
|
||||||
import { serializeResult, parseValue } from './jsHandleDispatcher';
|
|
||||||
|
|
||||||
export class CDPSessionDispatcher extends Dispatcher<CRSession, CDPSessionInitializer> implements CDPSessionChannel {
|
export class CDPSessionDispatcher extends Dispatcher<CRSession, CDPSessionInitializer> implements CDPSessionChannel {
|
||||||
constructor(scope: DispatcherScope, crSession: CRSession) {
|
constructor(scope: DispatcherScope, crSession: CRSession) {
|
||||||
super(scope, crSession, 'CDPSession', {}, true);
|
super(scope, crSession, 'CDPSession', {}, true);
|
||||||
crSession._eventListener = (method, cdpParams) => {
|
crSession._eventListener = (method, params) => {
|
||||||
const params = cdpParams ? serializeResult(cdpParams) : undefined;
|
|
||||||
this._dispatchEvent('event', { method, params });
|
this._dispatchEvent('event', { method, params });
|
||||||
};
|
};
|
||||||
crSession.on(CRSessionEvents.Disconnected, () => this._dispose());
|
crSession.on(CRSessionEvents.Disconnected, () => this._dispose());
|
||||||
}
|
}
|
||||||
|
|
||||||
async send(params: { method: string, params?: SerializedValue }): Promise<{ result: SerializedValue }> {
|
async send(params: { method: string, params?: any }): Promise<{ result: any }> {
|
||||||
const cdpParams = params.params ? parseValue(params.params) : undefined;
|
return { result: await this._object.send(params.method as any, params.params) };
|
||||||
return { result: serializeResult(await this._object.send(params.method as any, cdpParams)) };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async detach(): Promise<void> {
|
async detach(): Promise<void> {
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
// This file is generated by generate_channels.js, do not edit manually.
|
// This file is generated by generate_channels.js, do not edit manually.
|
||||||
|
|
||||||
import { Validator, ValidationError, tOptional, tObject, tBoolean, tNumber, tString, tEnum, tArray, tBinary } from './validatorPrimitives';
|
import { Validator, ValidationError, tOptional, tObject, tBoolean, tNumber, tString, tAny, tEnum, tArray, tBinary } from './validatorPrimitives';
|
||||||
export { Validator, ValidationError } from './validatorPrimitives';
|
export { Validator, ValidationError } from './validatorPrimitives';
|
||||||
|
|
||||||
type Scheme = { [key: string]: Validator };
|
type Scheme = { [key: string]: Validator };
|
||||||
@ -127,7 +127,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
|
|||||||
password: tOptional(tString),
|
password: tOptional(tString),
|
||||||
})),
|
})),
|
||||||
downloadsPath: tOptional(tString),
|
downloadsPath: tOptional(tString),
|
||||||
firefoxUserPrefs: tOptional(tType('SerializedValue')),
|
firefoxUserPrefs: tOptional(tAny),
|
||||||
chromiumSandbox: tOptional(tBoolean),
|
chromiumSandbox: tOptional(tBoolean),
|
||||||
slowMo: tOptional(tNumber),
|
slowMo: tOptional(tNumber),
|
||||||
});
|
});
|
||||||
@ -153,7 +153,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
|
|||||||
password: tOptional(tString),
|
password: tOptional(tString),
|
||||||
})),
|
})),
|
||||||
downloadsPath: tOptional(tString),
|
downloadsPath: tOptional(tString),
|
||||||
firefoxUserPrefs: tOptional(tType('SerializedValue')),
|
firefoxUserPrefs: tOptional(tAny),
|
||||||
chromiumSandbox: tOptional(tBoolean),
|
chromiumSandbox: tOptional(tBoolean),
|
||||||
port: tOptional(tNumber),
|
port: tOptional(tNumber),
|
||||||
});
|
});
|
||||||
@ -837,7 +837,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
|
|||||||
});
|
});
|
||||||
scheme.CDPSessionSendParams = tObject({
|
scheme.CDPSessionSendParams = tObject({
|
||||||
method: tString,
|
method: tString,
|
||||||
params: tOptional(tType('SerializedValue')),
|
params: tOptional(tAny),
|
||||||
});
|
});
|
||||||
scheme.CDPSessionDetachParams = tOptional(tObject({}));
|
scheme.CDPSessionDetachParams = tOptional(tObject({}));
|
||||||
scheme.ElectronLaunchParams = tObject({
|
scheme.ElectronLaunchParams = tObject({
|
||||||
|
|||||||
@ -52,6 +52,9 @@ export const tUndefined: Validator = (arg: any, path: string) => {
|
|||||||
return arg;
|
return arg;
|
||||||
throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`);
|
throw new ValidationError(`${path}: expected undefined, got ${typeof arg}`);
|
||||||
};
|
};
|
||||||
|
export const tAny: Validator = (arg: any, path: string) => {
|
||||||
|
return arg;
|
||||||
|
};
|
||||||
export const tOptional = (v: Validator): Validator => {
|
export const tOptional = (v: Validator): Validator => {
|
||||||
return (arg: any, path: string) => {
|
return (arg: any, path: string) => {
|
||||||
if (Object.is(arg, undefined))
|
if (Object.is(arg, undefined))
|
||||||
|
|||||||
@ -36,6 +36,8 @@ function inlineType(type, indent, wrapEnums = false) {
|
|||||||
type = type.substring(0, type.length - 1);
|
type = type.substring(0, type.length - 1);
|
||||||
if (type === 'binary')
|
if (type === 'binary')
|
||||||
return { ts: 'Binary', scheme: 'tBinary', optional };
|
return { ts: 'Binary', scheme: 'tBinary', optional };
|
||||||
|
if (type === 'json')
|
||||||
|
return { ts: 'any', scheme: 'tAny', optional };
|
||||||
if (['string', 'boolean', 'number', 'undefined'].includes(type))
|
if (['string', 'boolean', 'number', 'undefined'].includes(type))
|
||||||
return { ts: type, scheme: `t${titleCase(type)}`, optional };
|
return { ts: type, scheme: `t${titleCase(type)}`, optional };
|
||||||
if (channels.has(type))
|
if (channels.has(type))
|
||||||
@ -137,7 +139,7 @@ const validator_ts = [
|
|||||||
|
|
||||||
// This file is generated by ${path.basename(__filename)}, do not edit manually.
|
// This file is generated by ${path.basename(__filename)}, do not edit manually.
|
||||||
|
|
||||||
import { Validator, ValidationError, tOptional, tObject, tBoolean, tNumber, tString, tEnum, tArray, tBinary } from './validatorPrimitives';
|
import { Validator, ValidationError, tOptional, tObject, tBoolean, tNumber, tString, tAny, tEnum, tArray, tBinary } from './validatorPrimitives';
|
||||||
export { Validator, ValidationError } from './validatorPrimitives';
|
export { Validator, ValidationError } from './validatorPrimitives';
|
||||||
|
|
||||||
type Scheme = { [key: string]: Validator };
|
type Scheme = { [key: string]: Validator };
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user