@@ -191,8 +191,10 @@ export interface ViewInput {
191191 onFilterChanged : ( e : CustomEvent < string > ) => void ;
192192 onCommandChange : ( e : CustomEvent < string > ) => void ;
193193 onCommandSubmitted : ( e : CustomEvent < string > ) => void ;
194+ onTargetChange : ( e : Event ) => void ;
194195 showHideSidebarButton : UI . Toolbar . ToolbarButton ;
195- selector : UI . Toolbar . ToolbarComboBox ;
196+ targets : SDK . Target . Target [ ] ;
197+ selectedTargetId : string ;
196198}
197199
198200export interface ViewOutput { }
@@ -206,9 +208,8 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
206208 private readonly messageForId = new Map < number , Message > ( ) ;
207209 private readonly filterParser : TextUtils . TextUtils . FilterParser ;
208210 #filterKeys = [ 'method' , 'request' , 'response' , 'target' , 'session' ] ;
209- readonly selector : UI . Toolbar . ToolbarComboBox ;
210211 #commandAutocompleteSuggestionProvider = new CommandAutocompleteSuggestionProvider ( ) ;
211- #selectedTargetId? : string ;
212+ #selectedTargetId: string ;
212213 #command = '' ;
213214 #hideInputBar = false ;
214215 #showHideSidebarButton: UI . Toolbar . ToolbarButton ;
@@ -333,7 +334,17 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
333334 ${ input . commandSuggestions . map ( c => html `< option value =${ c } > </ option > ` ) }
334335 </ datalist >
335336 </ devtools-toolbar-input >
336- ${ input . selector . element }
337+ < select class ="target-selector "
338+ title =${ i18nString ( UIStrings . selectTarget ) }
339+ style =${ styleMap ( { display : input . hideInputBar ? 'none' : 'flex' } ) }
340+ jslog=${ VisualLogging . dropDown ( 'target-selector' ) . track ( { change : true } ) }
341+ @change=${ input . onTargetChange } >
342+ ${ input . targets . map ( target => html `
343+ < option jslog =${ VisualLogging . item ( 'target' ) . track ( { click : true } ) }
344+ value =${ target . id ( ) } ?selected=${ target . id ( ) === input . selectedTargetId } >
345+ ${ target . name ( ) } (${ target . inspectedURL ( ) } )
346+ </ option > ` ) }
347+ </ select >
337348 </ devtools-toolbar > ` ,
338349 target ,
339350 { host : input }
@@ -346,7 +357,6 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
346357 this . started = false ;
347358 this . startTime = 0 ;
348359 this . contentElement . classList . add ( 'protocol-monitor' ) ;
349- this . selector = this . #createTargetSelector( ) ;
350360
351361 this . #filterKeys = [ 'method' , 'request' , 'response' , 'type' , 'target' , 'session' ] ;
352362 this . filterParser = new TextUtils . TextUtils . FilterParser ( this . #filterKeys) ;
@@ -355,7 +365,6 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
355365 i18nString ( UIStrings . showCDPCommandEditor ) , i18nString ( UIStrings . hideCDPCommandEditor ) ,
356366 i18nString ( UIStrings . CDPCommandEditorShown ) , i18nString ( UIStrings . CDPCommandEditorHidden ) ,
357367 'protocol-monitor.toggle-command-editor' ) ;
358- const tabSelector = this . selector . element ;
359368
360369 const populateToolbarInput = ( ) : void => {
361370 const editorWidget = splitWidget . sidebarWidget ( ) ;
@@ -365,11 +374,7 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
365374 const commandJson = editorWidget . jsonEditor . getCommandJson ( ) ;
366375 const targetId = editorWidget . jsonEditor . targetId ;
367376 if ( targetId ) {
368- const selectedIndex = this . selector . options ( ) . findIndex ( option => option . value === targetId ) ;
369- if ( selectedIndex !== - 1 ) {
370- this . selector . setSelectedIndex ( selectedIndex ) ;
371- this . #selectedTargetId = targetId ;
372- }
377+ this . #selectedTargetId = targetId ;
373378 }
374379 if ( commandJson ) {
375380 this . #command = commandJson ;
@@ -381,18 +386,21 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
381386 if ( event . data === 'OnlyMain' ) {
382387 populateToolbarInput ( ) ;
383388 this . #hideInputBar = false ;
384- tabSelector ?. setAttribute ( 'style' , 'display:flex' ) ;
385389 } else {
386390 const { command, parameters} = parseCommandInput ( this . #command) ;
387391 this . dispatchEventToListeners (
388392 Events . COMMAND_CHANGE ,
389393 { command, parameters, targetId : this . #selectedTargetId} ) ;
390394 this . #hideInputBar = true ;
391- tabSelector ?. setAttribute ( 'style' , 'display:none' ) ;
392395 }
393396 this . requestUpdate ( ) ;
394397 } ) ) ;
398+ this . #selectedTargetId = 'main' ;
395399 this . performUpdate ( ) ;
400+ SDK . TargetManager . TargetManager . instance ( ) . addEventListener (
401+ SDK . TargetManager . Events . AVAILABLE_TARGETS_CHANGED , ( ) => {
402+ this . requestUpdate ( ) ;
403+ } ) ;
396404 }
397405
398406 override performUpdate ( ) : void {
@@ -439,8 +447,14 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
439447 this . #filter = e . detail ;
440448 this . requestUpdate ( ) ;
441449 } ,
450+ onTargetChange : ( e : Event ) => {
451+ if ( e . target instanceof HTMLSelectElement ) {
452+ this . #selectedTargetId = e . target . value ;
453+ }
454+ } ,
442455 showHideSidebarButton : this . #showHideSidebarButton,
443- selector : this . selector ,
456+ targets : SDK . TargetManager . TargetManager . instance ( ) . targets ( ) ,
457+ selectedTargetId : this . #selectedTargetId,
444458 } ;
445459 const viewOutput = { } ;
446460 this . #view( viewInput , viewOutput , this . contentElement ) ;
@@ -487,23 +501,6 @@ export class ProtocolMonitorDataGrid extends Common.ObjectWrapper.eventMixin<Eve
487501 } , { jslogContext : 'documentation' } ) ;
488502 }
489503
490- #createTargetSelector( ) : UI . Toolbar . ToolbarComboBox {
491- const selector = new UI . Toolbar . ToolbarComboBox ( ( ) => {
492- this . #selectedTargetId = selector . selectedOption ( ) ?. value ;
493- } , i18nString ( UIStrings . selectTarget ) , undefined , 'target-selector' ) ;
494- selector . element . classList . add ( 'target-selector' ) ;
495- const targetManager = SDK . TargetManager . TargetManager . instance ( ) ;
496- const syncTargets = ( ) : void => {
497- selector . removeOptions ( ) ;
498- for ( const target of targetManager . targets ( ) ) {
499- selector . createOption ( `${ target . name ( ) } (${ target . inspectedURL ( ) } )` , target . id ( ) , 'target' ) ;
500- }
501- } ;
502- targetManager . addEventListener ( SDK . TargetManager . Events . AVAILABLE_TARGETS_CHANGED , syncTargets ) ;
503- syncTargets ( ) ;
504- return selector ;
505- }
506-
507504 onCommandSend ( command : string , parameters : object , target ?: string ) : void {
508505 const test = ProtocolClient . InspectorBackend . test ;
509506 const targetManager = SDK . TargetManager . TargetManager . instance ( ) ;
0 commit comments