chore: avoid downcast of delegate to <Browser>Page (#334)

This commit is contained in:
Yury Semikhatsky 2019-12-23 12:10:07 -08:00 committed by GitHub
parent 27ddb017e2
commit 845c0af42f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 21 additions and 20 deletions

View File

@ -82,18 +82,19 @@ export class CRBrowser extends browser.Browser {
const target = this._targets.get(targetId);
assert(await target._initializedPromise, 'Failed to create target for page');
const page = await target.page();
const session = (page._delegate as CRPage)._client;
const promises: Promise<any>[] = [ overrides._applyOverrides(page) ];
const crPage = target._crPage;
const session = crPage._client;
const promises: Promise<any>[] = [ overrides._applyOverrides(crPage) ];
if (options.bypassCSP)
promises.push(session.send('Page.setBypassCSP', { enabled: true }));
if (options.ignoreHTTPSErrors)
promises.push(session.send('Security.setIgnoreCertificateErrors', { ignore: true }));
if (options.viewport)
promises.push(page._delegate.setViewport(options.viewport));
promises.push(crPage.setViewport(options.viewport));
if (options.javaScriptEnabled === false)
promises.push(session.send('Emulation.setScriptExecutionDisabled', { value: true }));
if (options.userAgent)
(page._delegate as CRPage)._networkManager.setUserAgent(options.userAgent);
crPage._networkManager.setUserAgent(options.userAgent);
if (options.mediaType || options.colorScheme) {
const features = options.colorScheme ? [{ name: 'prefers-color-scheme', value: options.colorScheme }] : [];
promises.push(session.send('Emulation.setEmulatedMedia', { media: options.mediaType || '', features }));

View File

@ -44,7 +44,7 @@ const UTILITY_WORLD_NAME = '__playwright_utility_world__';
export class CRPage implements PageDelegate {
_client: CRSession;
private _page: ChromiumPage;
private readonly _page: ChromiumPage;
readonly _networkManager: CRNetworkManager;
private _contextIdToContext = new Map<number, dom.FrameExecutionContext>();
private _isolatedWorlds = new Set<string>();

View File

@ -29,14 +29,14 @@ const targetSymbol = Symbol('target');
export class CRTarget {
private _targetInfo: Protocol.Target.TargetInfo;
private _browser: CRBrowser;
private _browserContext: BrowserContext;
_targetId: string;
private readonly _browser: CRBrowser;
private readonly _browserContext: BrowserContext;
readonly _targetId: string;
private _sessionFactory: () => Promise<CRSession>;
private _pagePromise: Promise<Page> | null = null;
private _crPage: CRPage | null = null;
_crPage: CRPage | null = null;
private _workerPromise: Promise<CRWorker> | null = null;
_initializedPromise: Promise<boolean>;
readonly _initializedPromise: Promise<boolean>;
_initializedCallback: (value?: unknown) => void;
_isInitialized: boolean;

View File

@ -47,8 +47,8 @@ export class CROverrides {
await (page._delegate as CRPage)._client.send('Emulation.setGeolocationOverride', this._geolocation);
}
async _applyOverrides(page: Page): Promise<void> {
async _applyOverrides(page: CRPage): Promise<void> {
if (this._geolocation)
await (page._delegate as CRPage)._client.send('Emulation.setGeolocationOverride', this._geolocation);
await page._client.send('Emulation.setGeolocationOverride', this._geolocation);
}
}

View File

@ -156,7 +156,7 @@ export class FFBrowser extends browser.Browser {
});
const target = this._targets.get(targetId);
const page = await target.page();
const session = (page._delegate as FFPage)._session;
const session = target._ffPage._session;
const promises: Promise<any>[] = [];
if (options.viewport)
promises.push(page._delegate.setViewport(options.viewport));
@ -222,14 +222,14 @@ export class FFBrowser extends browser.Browser {
export class Target {
_pagePromise?: Promise<Page>;
private _ffPage: FFPage | null = null;
private _browser: FFBrowser;
_context: BrowserContext;
private _connection: FFConnection;
private _targetId: string;
private _type: 'page' | 'browser';
_ffPage: FFPage | null = null;
private readonly _browser: FFBrowser;
private readonly _context: BrowserContext;
private readonly _connection: FFConnection;
private readonly _targetId: string;
private readonly _type: 'page' | 'browser';
_url: string;
private _openerId: string;
private readonly _openerId: string;
constructor(connection: any, browser: FFBrowser, context: BrowserContext, targetId: string, type: 'page' | 'browser', url: string, openerId: string | undefined) {
this._browser = browser;