@@ -203,29 +203,14 @@ export class BidiServer extends EventEmitter<BidiServerEvent> {
203203 parser ?: BidiCommandParameterParser ,
204204 logger ?: LoggerFn ,
205205 ) : Promise < BidiServer > {
206- // The default context is not exposed in Target.getBrowserContexts but can
207- // be observed via Target.getTargets. To determine the default browser
208- // context, we check which one is mentioned in Target.getTargets and not in
209- // Target.getBrowserContexts.
210- const [ { browserContextIds} , { targetInfos} ] = await Promise . all ( [
211- browserCdpClient . sendCommand ( 'Target.getBrowserContexts' ) ,
212- browserCdpClient . sendCommand ( 'Target.getTargets' ) ,
206+ const [ defaultUserContextId ] = await Promise . all ( [
207+ this . #getDefaultUserContextId( browserCdpClient ) ,
213208 // Required for `Browser.downloadWillBegin` events.
214209 browserCdpClient . sendCommand ( 'Browser.setDownloadBehavior' , {
215210 behavior : 'default' ,
216211 eventsEnabled : true ,
217212 } ) ,
218213 ] ) ;
219- let defaultUserContextId = 'default' ;
220- for ( const info of targetInfos ) {
221- if (
222- info . browserContextId &&
223- ! browserContextIds . includes ( info . browserContextId )
224- ) {
225- defaultUserContextId = info . browserContextId ;
226- break ;
227- }
228- }
229214
230215 const server = new BidiServer (
231216 bidiTransport ,
@@ -240,6 +225,40 @@ export class BidiServer extends EventEmitter<BidiServerEvent> {
240225 return server ;
241226 }
242227
228+ static async #getDefaultUserContextId(
229+ browserCdpClient : CdpClient ,
230+ ) : Promise < string > {
231+ // In chromium before `145.0.7578.0`, the default context is not exposed in
232+ // `Target.getBrowserContexts`, but can be observed via `Target.getTargets`.
233+ // If so, try to determine the default browser context by checking which one
234+ // is mentioned in `Target.getTargets` and not in
235+ // `Target.getBrowserContexts`.
236+ // TODO(after 2026-02-24): rely only on `defaultBrowserContextId` from
237+ // `Target.getBrowserContexts` after Chromium 145 reaches stable.
238+ const [ { defaultBrowserContextId, browserContextIds} , { targetInfos} ] =
239+ await Promise . all ( [
240+ browserCdpClient . sendCommand ( 'Target.getBrowserContexts' ) ,
241+ browserCdpClient . sendCommand ( 'Target.getTargets' ) ,
242+ ] ) ;
243+
244+ if ( defaultBrowserContextId ) {
245+ return defaultBrowserContextId ;
246+ }
247+
248+ for ( const info of targetInfos ) {
249+ if (
250+ info . browserContextId &&
251+ ! browserContextIds . includes ( info . browserContextId )
252+ ) {
253+ // The target belongs to a browser context that is not mentioned in
254+ // `Target.getBrowserContexts`. This is the default browser context.
255+ return info . browserContextId ;
256+ }
257+ }
258+ // The browser context is unknown.
259+ return 'default' ;
260+ }
261+
243262 /**
244263 * Sends BiDi message.
245264 */
0 commit comments