@@ -509,7 +509,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
509509 this . panelToolbar . wrappable = true ;
510510 this . panelRightToolbar = timelineToolbarContainer . createChild ( 'devtools-toolbar' ) ;
511511 this . panelRightToolbar . role = 'presentation' ;
512- if ( ! isNode ) {
512+ if ( ! isNode && this . hasPrimaryTarget ( ) ) {
513513 this . createSettingsPane ( ) ;
514514 this . updateShowSettingsToolbarButton ( ) ;
515515 }
@@ -1032,15 +1032,30 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
10321032 }
10331033 }
10341034
1035+ /**
1036+ * Returns false if this was loaded in a standalone context such that recording is
1037+ * not possible, like an enhanced trace (which opens a new devtools window) or
1038+ * trace.cafe.
1039+ */
1040+ private hasPrimaryTarget ( ) : boolean {
1041+ return Boolean ( SDK . TargetManager . TargetManager . instance ( ) . primaryPageTarget ( ) ?. sessionId ) ;
1042+ }
1043+
10351044 private populateToolbar ( ) : void {
1036- // Record
1037- this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( this . toggleRecordAction ) ) ;
1038- this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( this . recordReloadAction ) ) ;
1045+ const hasPrimaryTarget = this . hasPrimaryTarget ( ) ;
1046+
1047+ if ( hasPrimaryTarget || isNode ) {
1048+ this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( this . toggleRecordAction ) ) ;
1049+ }
1050+ if ( hasPrimaryTarget ) {
1051+ this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( this . recordReloadAction ) ) ;
1052+ }
1053+
10391054 this . clearButton = new UI . Toolbar . ToolbarButton ( i18nString ( UIStrings . clear ) , 'clear' , undefined , 'timeline.clear' ) ;
10401055 this . clearButton . addEventListener ( UI . Toolbar . ToolbarButton . Events . CLICK , ( ) => this . onClearButton ( ) ) ;
10411056 this . panelToolbar . appendToolbarItem ( this . clearButton ) ;
10421057
1043- // Load / SaveCLICK
1058+ // Load / Save
10441059 this . loadButton =
10451060 new UI . Toolbar . ToolbarButton ( i18nString ( UIStrings . loadProfile ) , 'import' , undefined , 'timeline.load-from-file' ) ;
10461061 this . loadButton . addEventListener ( UI . Toolbar . ToolbarButton . Events . CLICK , ( ) => {
@@ -1077,22 +1092,23 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
10771092 this . panelToolbar . appendToolbarItem ( this . loadButton ) ;
10781093 this . panelToolbar . appendToolbarItem ( this . saveButton ) ;
10791094
1080- // History
1081- this . panelToolbar . appendSeparator ( ) ;
1082-
1083- if ( ! isNode ) {
1084- this . homeButton = new UI . Toolbar . ToolbarButton (
1085- i18nString ( UIStrings . backToLiveMetrics ) , 'home' , undefined , 'timeline.back-to-live-metrics' ) ;
1086- this . homeButton . addEventListener ( UI . Toolbar . ToolbarButton . Events . CLICK , ( ) => {
1087- this . #changeView( { mode : 'LANDING_PAGE' } ) ;
1088- this . #historyManager. navigateToLandingPage ( ) ;
1089- } ) ;
1090- this . panelToolbar . appendToolbarItem ( this . homeButton ) ;
1095+ if ( hasPrimaryTarget ) {
10911096 this . panelToolbar . appendSeparator ( ) ;
1097+
1098+ if ( ! isNode ) {
1099+ this . homeButton = new UI . Toolbar . ToolbarButton (
1100+ i18nString ( UIStrings . backToLiveMetrics ) , 'home' , undefined , 'timeline.back-to-live-metrics' ) ;
1101+ this . homeButton . addEventListener ( UI . Toolbar . ToolbarButton . Events . CLICK , ( ) => {
1102+ this . #changeView( { mode : 'LANDING_PAGE' } ) ;
1103+ this . #historyManager. navigateToLandingPage ( ) ;
1104+ } ) ;
1105+ this . panelToolbar . appendToolbarItem ( this . homeButton ) ;
1106+ this . panelToolbar . appendSeparator ( ) ;
1107+ }
10921108 }
10931109
1110+ // TODO(crbug.com/337909145): need to hide "Live metrics" option if !canRecord.
10941111 this . panelToolbar . appendToolbarItem ( this . #historyManager. button ( ) ) ;
1095- this . panelToolbar . appendSeparator ( ) ;
10961112
10971113 // View
10981114 this . panelToolbar . appendSeparator ( ) ;
@@ -1104,10 +1120,12 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
11041120
11051121 this . showMemoryToolbarCheckbox =
11061122 this . createSettingCheckbox ( this . showMemorySetting , i18nString ( UIStrings . showMemoryTimeline ) ) ;
1107- this . panelToolbar . appendToolbarItem ( this . showMemoryToolbarCheckbox ) ;
11081123
1109- // GC
1110- this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( 'components.collect-garbage' ) ) ;
1124+ if ( hasPrimaryTarget ) {
1125+ // GC
1126+ this . panelToolbar . appendToolbarItem ( this . showMemoryToolbarCheckbox ) ;
1127+ this . panelToolbar . appendToolbarItem ( UI . Toolbar . Toolbar . createActionButton ( 'components.collect-garbage' ) ) ;
1128+ }
11111129
11121130 // Ignore list setting
11131131 this . panelToolbar . appendSeparator ( ) ;
@@ -1129,7 +1147,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
11291147 }
11301148
11311149 // Settings
1132- if ( ! isNode ) {
1150+ if ( ! isNode && hasPrimaryTarget ) {
11331151 this . panelRightToolbar . appendSeparator ( ) ;
11341152 this . panelRightToolbar . appendToolbarItem ( this . showSettingsPaneButton ) ;
11351153 }
@@ -1608,7 +1626,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
16081626 }
16091627
16101628 private updateSettingsPaneVisibility ( ) : void {
1611- if ( isNode ) {
1629+ if ( isNode || ! this . hasPrimaryTarget ( ) ) {
16121630 return ;
16131631 }
16141632 if ( this . showSettingsPaneSetting . get ( ) ) {
@@ -1882,20 +1900,26 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
18821900 }
18831901
18841902 private updateTimelineControls ( ) : void {
1903+ if ( this . #viewMode. mode === 'VIEWING_TRACE' ) {
1904+ this . #addSidebarIconToToolbar( ) ;
1905+ }
1906+
1907+ this . saveButton . setEnabled ( this . state === State . IDLE && this . #hasActiveTrace( ) ) ;
1908+ this . #historyManager. setEnabled ( this . state === State . IDLE ) ;
1909+ this . clearButton . setEnabled ( this . state === State . IDLE ) ;
1910+ this . dropTarget . setEnabled ( this . state === State . IDLE ) ;
1911+ this . loadButton . setEnabled ( this . state === State . IDLE ) ;
18851912 this . toggleRecordAction . setToggled ( this . state === State . RECORDING ) ;
18861913 this . toggleRecordAction . setEnabled ( this . state === State . RECORDING || this . state === State . IDLE ) ;
1914+
1915+ if ( ! this . hasPrimaryTarget ( ) ) {
1916+ return ;
1917+ }
1918+
18871919 this . recordReloadAction . setEnabled ( isNode ? false : this . state === State . IDLE ) ;
1888- this . #historyManager. setEnabled ( this . state === State . IDLE ) ;
1889- this . clearButton . setEnabled ( this . state === State . IDLE ) ;
18901920 this . panelToolbar . setEnabled ( this . state !== State . LOADING ) ;
18911921 this . panelRightToolbar . setEnabled ( this . state !== State . LOADING ) ;
1892- this . dropTarget . setEnabled ( this . state === State . IDLE ) ;
1893- this . loadButton . setEnabled ( this . state === State . IDLE ) ;
1894- this . saveButton . setEnabled ( this . state === State . IDLE && this . #hasActiveTrace( ) ) ;
18951922 this . homeButton ?. setEnabled ( this . state === State . IDLE && this . #hasActiveTrace( ) ) ;
1896- if ( this . #viewMode. mode === 'VIEWING_TRACE' ) {
1897- this . #addSidebarIconToToolbar( ) ;
1898- }
18991923 }
19001924
19011925 async toggleRecording ( ) : Promise < void > {
0 commit comments