fix(bidi): correctly serialize kPlaywrightBinding (#35783)

This commit is contained in:
Yury Semikhatsky 2025-04-28 14:17:50 -07:00 committed by GitHub
parent 9b59a6aea6
commit d170bbbcb9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 7 deletions

View File

@ -20,7 +20,7 @@ import { BrowserContext, assertBrowserContextIsNotOwned, verifyGeolocation } fro
import * as network from '../network';
import { BidiConnection } from './bidiConnection';
import { bidiBytesValueToString } from './bidiNetworkManager';
import { addMainBinding, BidiPage, kPlaywrightBindingChannel } from './bidiPage';
import { addMainBindingSource, BidiPage, kPlaywrightBindingChannel } from './bidiPage';
import * as bidi from './third_party/bidiProtocol';
import type { RegisteredListener } from '../utils/eventsHelper';
@ -238,7 +238,6 @@ export class BidiBrowserContext extends BrowserContext {
// TODO: consider calling this only when bindings are added.
private async _installMainBinding() {
const functionDeclaration = addMainBinding.toString();
const args: bidi.Script.ChannelValue[] = [{
type: 'channel',
value: {
@ -247,7 +246,7 @@ export class BidiBrowserContext extends BrowserContext {
}
}];
await this._browser._browserSession.send('script.addPreloadScript', {
functionDeclaration,
functionDeclaration: addMainBindingSource,
arguments: args,
userContexts: [this._userContextId()],
});

View File

@ -328,7 +328,7 @@ export class BidiPage implements PageDelegate {
// For non-persistent context, the main binding is installed during context creation.
if (this._browserContext._browserContextId)
return;
const functionDeclaration = addMainBinding.toString();
const functionDeclaration = addMainBindingSource;
const args: bidi.Script.ChannelValue[] = [{
type: 'channel',
value: {
@ -572,9 +572,8 @@ export class BidiPage implements PageDelegate {
}
}
export function addMainBinding(callback: (arg: any) => void) {
(globalThis as any)[PageBinding.kPlaywrightBinding] = callback;
}
export const addMainBindingSource =
`function addMainBinding(callback) { globalThis['${PageBinding.kPlaywrightBinding}'] = callback; }`;
function toBidiExecutionContext(executionContext: dom.FrameExecutionContext): BidiExecutionContext {
return executionContext.delegate as BidiExecutionContext;