Skip to content

Commit b890569

Browse files
authored
feat(rpc): move leftover extraHTTPHeaders to HeadersArray (#2980)
1 parent 439e048 commit b890569

File tree

5 files changed

+53
-13
lines changed

5 files changed

+53
-13
lines changed

src/rpc/channels.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,25 @@ import { EventEmitter } from 'events';
1818
import * as types from '../types';
1919

2020
export type Binary = string;
21+
export type BrowserContextOptions = {
22+
viewport?: types.Size | null,
23+
ignoreHTTPSErrors?: boolean,
24+
javaScriptEnabled?: boolean,
25+
bypassCSP?: boolean,
26+
userAgent?: string,
27+
locale?: string,
28+
timezoneId?: string,
29+
geolocation?: types.Geolocation,
30+
permissions?: string[],
31+
extraHTTPHeaders?: types.HeadersArray,
32+
offline?: boolean,
33+
httpCredentials?: types.Credentials,
34+
deviceScaleFactor?: number,
35+
isMobile?: boolean,
36+
hasTouch?: boolean,
37+
colorScheme?: types.ColorScheme,
38+
acceptDownloads?: boolean,
39+
};
2140

2241
export interface Channel extends EventEmitter {
2342
}
@@ -41,11 +60,12 @@ export interface SelectorsChannel extends Channel {
4160
export type SelectorsInitializer = {};
4261

4362

63+
export type LaunchPersistentContextOptions = { userDataDir: string } & types.LaunchOptions & BrowserContextOptions;
4464
export interface BrowserTypeChannel extends Channel {
4565
connect(params: types.ConnectOptions): Promise<{ browser: BrowserChannel }>;
4666
launch(params: types.LaunchOptions): Promise<{ browser: BrowserChannel }>;
4767
launchServer(params: types.LaunchServerOptions): Promise<{ server: BrowserServerChannel }>;
48-
launchPersistentContext(params: { userDataDir: string } & types.LaunchOptions & types.BrowserContextOptions): Promise<{ context: BrowserContextChannel }>;
68+
launchPersistentContext(params: LaunchPersistentContextOptions): Promise<{ context: BrowserContextChannel }>;
4969
}
5070
export type BrowserTypeInitializer = {
5171
executablePath: string,
@@ -69,7 +89,7 @@ export interface BrowserChannel extends Channel {
6989
on(event: 'close', callback: () => void): this;
7090

7191
close(): Promise<void>;
72-
newContext(params: types.BrowserContextOptions): Promise<{ context: BrowserContextChannel }>;
92+
newContext(params: BrowserContextOptions): Promise<{ context: BrowserContextChannel }>;
7393

7494
crNewBrowserCDPSession(): Promise<{ session: CDPSessionChannel }>;
7595
crStartTracing(params: { page?: PageChannel, path?: string, screenshots?: boolean, categories?: string[] }): Promise<void>;

src/rpc/client/browser.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@
1515
*/
1616

1717
import * as types from '../../types';
18-
import { BrowserChannel, BrowserInitializer } from '../channels';
18+
import { BrowserChannel, BrowserInitializer, BrowserContextOptions } from '../channels';
1919
import { BrowserContext } from './browserContext';
2020
import { Page } from './page';
2121
import { ChannelOwner } from './channelOwner';
2222
import { Events } from '../../events';
2323
import { LoggerSink } from '../../loggerSink';
2424
import { BrowserType } from './browserType';
25+
import { headersObjectToArray } from '../serializers';
2526

2627
export class Browser extends ChannelOwner<BrowserChannel, BrowserInitializer> {
2728
readonly _contexts = new Set<BrowserContext>();
@@ -53,7 +54,11 @@ export class Browser extends ChannelOwner<BrowserChannel, BrowserInitializer> {
5354
async newContext(options: types.BrowserContextOptions & { logger?: LoggerSink } = {}): Promise<BrowserContext> {
5455
const logger = options.logger;
5556
options = { ...options, logger: undefined };
56-
const context = BrowserContext.from((await this._channel.newContext(options)).context);
57+
const contextOptions: BrowserContextOptions = {
58+
...options,
59+
extraHTTPHeaders: options.extraHTTPHeaders ? headersObjectToArray(options.extraHTTPHeaders) : undefined,
60+
};
61+
const context = BrowserContext.from((await this._channel.newContext(contextOptions)).context);
5762
this._contexts.add(context);
5863
context._logger = logger || this._logger;
5964
return context;

src/rpc/client/browserType.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
*/
1616

1717
import * as types from '../../types';
18-
import { BrowserTypeChannel, BrowserTypeInitializer } from '../channels';
18+
import { BrowserTypeChannel, BrowserTypeInitializer, LaunchPersistentContextOptions } from '../channels';
1919
import { Browser } from './browser';
2020
import { BrowserContext } from './browserContext';
2121
import { ChannelOwner } from './channelOwner';
2222
import { BrowserServer } from './browserServer';
2323
import { LoggerSink } from '../../loggerSink';
24+
import { headersObjectToArray } from '../serializers';
2425

2526
export class BrowserType extends ChannelOwner<BrowserTypeChannel, BrowserTypeInitializer> {
2627

@@ -62,7 +63,12 @@ export class BrowserType extends ChannelOwner<BrowserTypeChannel, BrowserTypeIni
6263
const logger = options.logger;
6364
options = { ...options, logger: undefined };
6465
return this._wrapApiCall('browserType.launchPersistentContext', async () => {
65-
const result = await this._channel.launchPersistentContext({ userDataDir, ...options });
66+
const persistentOptions: LaunchPersistentContextOptions = {
67+
...options,
68+
extraHTTPHeaders: options.extraHTTPHeaders ? headersObjectToArray(options.extraHTTPHeaders) : undefined,
69+
userDataDir,
70+
};
71+
const result = await this._channel.launchPersistentContext(persistentOptions);
6672
const context = BrowserContext.from(result.context);
6773
context._logger = logger;
6874
return context;

src/rpc/server/browserDispatcher.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717
import { Browser, BrowserBase } from '../../browser';
1818
import { BrowserContextBase } from '../../browserContext';
1919
import { Events } from '../../events';
20-
import * as types from '../../types';
21-
import { BrowserChannel, BrowserContextChannel, BrowserInitializer, CDPSessionChannel, Binary } from '../channels';
20+
import { BrowserChannel, BrowserContextChannel, BrowserInitializer, CDPSessionChannel, Binary, BrowserContextOptions } from '../channels';
2221
import { BrowserContextDispatcher } from './browserContextDispatcher';
2322
import { CDPSessionDispatcher } from './cdpSessionDispatcher';
2423
import { Dispatcher, DispatcherScope } from './dispatcher';
2524
import { CRBrowser } from '../../chromium/crBrowser';
2625
import { PageDispatcher } from './pageDispatcher';
26+
import { headersArrayToObject } from '../serializers';
2727

2828
export class BrowserDispatcher extends Dispatcher<Browser, BrowserInitializer> implements BrowserChannel {
2929
constructor(scope: DispatcherScope, browser: BrowserBase) {
@@ -34,8 +34,12 @@ export class BrowserDispatcher extends Dispatcher<Browser, BrowserInitializer> i
3434
});
3535
}
3636

37-
async newContext(params: types.BrowserContextOptions): Promise<{ context: BrowserContextChannel }> {
38-
return { context: new BrowserContextDispatcher(this._scope, await this._object.newContext(params) as BrowserContextBase) };
37+
async newContext(params: BrowserContextOptions): Promise<{ context: BrowserContextChannel }> {
38+
const options = {
39+
...params,
40+
extraHTTPHeaders: params.extraHTTPHeaders ? headersArrayToObject(params.extraHTTPHeaders) : undefined,
41+
};
42+
return { context: new BrowserContextDispatcher(this._scope, await this._object.newContext(options) as BrowserContextBase) };
3943
}
4044

4145
async close(): Promise<void> {

src/rpc/server/browserTypeDispatcher.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ import { BrowserBase } from '../../browser';
1818
import { BrowserTypeBase, BrowserType } from '../../server/browserType';
1919
import * as types from '../../types';
2020
import { BrowserDispatcher } from './browserDispatcher';
21-
import { BrowserChannel, BrowserTypeChannel, BrowserContextChannel, BrowserTypeInitializer, BrowserServerChannel } from '../channels';
21+
import { BrowserChannel, BrowserTypeChannel, BrowserContextChannel, BrowserTypeInitializer, BrowserServerChannel, LaunchPersistentContextOptions } from '../channels';
2222
import { Dispatcher, DispatcherScope } from './dispatcher';
2323
import { BrowserContextBase } from '../../browserContext';
2424
import { BrowserContextDispatcher } from './browserContextDispatcher';
2525
import { BrowserServerDispatcher } from './browserServerDispatcher';
26+
import { headersArrayToObject } from '../serializers';
2627

2728
export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeInitializer> implements BrowserTypeChannel {
2829
constructor(scope: DispatcherScope, browserType: BrowserTypeBase) {
@@ -37,8 +38,12 @@ export class BrowserTypeDispatcher extends Dispatcher<BrowserType, BrowserTypeIn
3738
return { browser: new BrowserDispatcher(this._scope, browser as BrowserBase) };
3839
}
3940

40-
async launchPersistentContext(params: { userDataDir: string } & types.LaunchOptions & types.BrowserContextOptions): Promise<{ context: BrowserContextChannel }> {
41-
const browserContext = await this._object.launchPersistentContext(params.userDataDir, params);
41+
async launchPersistentContext(params: LaunchPersistentContextOptions): Promise<{ context: BrowserContextChannel }> {
42+
const options = {
43+
...params,
44+
extraHTTPHeaders: params.extraHTTPHeaders ? headersArrayToObject(params.extraHTTPHeaders) : undefined,
45+
};
46+
const browserContext = await this._object.launchPersistentContext(params.userDataDir, options);
4247
return { context: new BrowserContextDispatcher(this._scope, browserContext as BrowserContextBase) };
4348
}
4449

0 commit comments

Comments
 (0)