cherry-pick(#16691): fix(selectors): make them work in the browser reuse mode

This commit is contained in:
Pavel Feldman 2022-08-19 13:48:33 -07:00
parent c9e2a8b340
commit 962e41474e
3 changed files with 8 additions and 4 deletions

View file

@ -100,6 +100,8 @@ export abstract class BrowserContext extends SdkObject {
setSelectors(selectors: Selectors) { setSelectors(selectors: Selectors) {
this._selectors = selectors; this._selectors = selectors;
for (const page of this.pages())
page.selectors = selectors;
} }
selectors(): Selectors { selectors(): Selectors {

View file

@ -47,7 +47,7 @@ export class BrowserDispatcher extends Dispatcher<Browser, channels.BrowserChann
} }
async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> { async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> {
return newContextForReuse(this._object, this._scope, params, metadata); return newContextForReuse(this._object, this._scope, params, null, metadata);
} }
async close(): Promise<void> { async close(): Promise<void> {
@ -104,7 +104,7 @@ export class ConnectedBrowserDispatcher extends Dispatcher<Browser, channels.Bro
} }
async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> { async newContextForReuse(params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> {
return newContextForReuse(this._object, this._scope, params, metadata); return newContextForReuse(this._object, this._scope, params, this.selectors, metadata);
} }
async close(): Promise<void> { async close(): Promise<void> {
@ -141,7 +141,7 @@ export class ConnectedBrowserDispatcher extends Dispatcher<Browser, channels.Bro
} }
} }
async function newContextForReuse(browser: Browser, scope: DispatcherScope, params: channels.BrowserNewContextForReuseParams, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> { async function newContextForReuse(browser: Browser, scope: DispatcherScope, params: channels.BrowserNewContextForReuseParams, selectors: Selectors | null, metadata: CallMetadata): Promise<channels.BrowserNewContextForReuseResult> {
const { context, needsReset } = await browser.newContextForReuse(params, metadata); const { context, needsReset } = await browser.newContextForReuse(params, metadata);
if (needsReset) { if (needsReset) {
const oldContextDispatcher = existingDispatcher<BrowserContextDispatcher>(context); const oldContextDispatcher = existingDispatcher<BrowserContextDispatcher>(context);
@ -149,6 +149,8 @@ async function newContextForReuse(browser: Browser, scope: DispatcherScope, para
oldContextDispatcher._dispose(); oldContextDispatcher._dispose();
await context.resetForReuse(metadata, params); await context.resetForReuse(metadata, params);
} }
if (selectors)
context.setSelectors(selectors);
const contextDispatcher = new BrowserContextDispatcher(scope, context); const contextDispatcher = new BrowserContextDispatcher(scope, context);
return { context: contextDispatcher }; return { context: contextDispatcher };
} }

View file

@ -166,7 +166,7 @@ export class Page extends SdkObject {
_clientRequestInterceptor: network.RouteHandler | undefined; _clientRequestInterceptor: network.RouteHandler | undefined;
_serverRequestInterceptor: network.RouteHandler | undefined; _serverRequestInterceptor: network.RouteHandler | undefined;
_ownedContext: BrowserContext | undefined; _ownedContext: BrowserContext | undefined;
readonly selectors: Selectors; selectors: Selectors;
_pageIsError: Error | undefined; _pageIsError: Error | undefined;
_video: Artifact | null = null; _video: Artifact | null = null;
_opener: Page | undefined; _opener: Page | undefined;