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); const target = this._targets.get(targetId);
assert(await target._initializedPromise, 'Failed to create target for page'); assert(await target._initializedPromise, 'Failed to create target for page');
const page = await target.page(); const page = await target.page();
const session = (page._delegate as CRPage)._client; const crPage = target._crPage;
const promises: Promise<any>[] = [ overrides._applyOverrides(page) ]; const session = crPage._client;
const promises: Promise<any>[] = [ overrides._applyOverrides(crPage) ];
if (options.bypassCSP) if (options.bypassCSP)
promises.push(session.send('Page.setBypassCSP', { enabled: true })); promises.push(session.send('Page.setBypassCSP', { enabled: true }));
if (options.ignoreHTTPSErrors) if (options.ignoreHTTPSErrors)
promises.push(session.send('Security.setIgnoreCertificateErrors', { ignore: true })); promises.push(session.send('Security.setIgnoreCertificateErrors', { ignore: true }));
if (options.viewport) if (options.viewport)
promises.push(page._delegate.setViewport(options.viewport)); promises.push(crPage.setViewport(options.viewport));
if (options.javaScriptEnabled === false) if (options.javaScriptEnabled === false)
promises.push(session.send('Emulation.setScriptExecutionDisabled', { value: true })); promises.push(session.send('Emulation.setScriptExecutionDisabled', { value: true }));
if (options.userAgent) if (options.userAgent)
(page._delegate as CRPage)._networkManager.setUserAgent(options.userAgent); crPage._networkManager.setUserAgent(options.userAgent);
if (options.mediaType || options.colorScheme) { if (options.mediaType || options.colorScheme) {
const features = options.colorScheme ? [{ name: 'prefers-color-scheme', value: options.colorScheme }] : []; const features = options.colorScheme ? [{ name: 'prefers-color-scheme', value: options.colorScheme }] : [];
promises.push(session.send('Emulation.setEmulatedMedia', { media: options.mediaType || '', features })); 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 { export class CRPage implements PageDelegate {
_client: CRSession; _client: CRSession;
private _page: ChromiumPage; private readonly _page: ChromiumPage;
readonly _networkManager: CRNetworkManager; readonly _networkManager: CRNetworkManager;
private _contextIdToContext = new Map<number, dom.FrameExecutionContext>(); private _contextIdToContext = new Map<number, dom.FrameExecutionContext>();
private _isolatedWorlds = new Set<string>(); private _isolatedWorlds = new Set<string>();

View File

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

View File

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