chrome-devtools-frontend 1.0.1668390 → 1.0.1669021

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/.agents/skills/devtools-ci/SKILL.md +65 -0
  2. package/.agents/skills/gerrit-cli/SKILL.md +59 -0
  3. package/.agents/skills/gerrit-cli/references/commands.md +93 -0
  4. package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
  5. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
  6. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
  7. package/docs/contributing/infrastructure.md +7 -1
  8. package/front_end/core/host/AidaClient.ts +66 -47
  9. package/front_end/core/host/GcaClient.ts +4 -6
  10. package/front_end/core/host/ResourceLoader.ts +4 -2
  11. package/front_end/core/root/Runtime.ts +0 -5
  12. package/front_end/core/sdk/ConsoleModel.ts +3 -2
  13. package/front_end/core/sdk/DebuggerModel.ts +14 -6
  14. package/front_end/core/sdk/SDKSettings.ts +19 -0
  15. package/front_end/core/sdk/sdk-meta.ts +0 -58
  16. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  17. package/front_end/generated/protocol.ts +11 -3
  18. package/front_end/models/ai_assistance/AiUtils.ts +67 -4
  19. package/front_end/models/ai_assistance/StorageItem.ts +26 -5
  20. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
  21. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
  22. package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
  23. package/front_end/models/trace/types/File.ts +1 -0
  24. package/front_end/models/workspace/UISourceCode.ts +0 -10
  25. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
  26. package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
  27. package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
  28. package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
  29. package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
  30. package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
  31. package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
  32. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +116 -79
  33. package/front_end/panels/application/ServiceWorkersView.ts +8 -8
  34. package/front_end/panels/application/application.ts +2 -0
  35. package/front_end/panels/application/components/AdsView.ts +10 -6
  36. package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
  37. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
  38. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +21 -23
  39. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
  40. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
  41. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
  42. package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
  43. package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
  44. package/front_end/panels/common/common.ts +1 -1
  45. package/front_end/panels/console/ConsoleInsightTeaser.ts +3 -6
  46. package/front_end/panels/console/ConsoleView.ts +6 -4
  47. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  48. package/front_end/panels/console/console-meta.ts +28 -0
  49. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  50. package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
  51. package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
  52. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
  53. package/front_end/panels/explain/explain-meta.ts +7 -49
  54. package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
  55. package/front_end/panels/network/NetworkLogView.ts +1 -0
  56. package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
  57. package/front_end/panels/network/ResourceChunkView.ts +72 -46
  58. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
  59. package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
  60. package/front_end/panels/network/originalResourceChunkView.css +49 -0
  61. package/front_end/panels/screencast/ScreencastView.ts +401 -260
  62. package/front_end/panels/screencast/screencastView.css +113 -100
  63. package/front_end/panels/sensors/LocationsSettingsTab.ts +106 -122
  64. package/front_end/panels/sensors/locationsSettingsTab.css +4 -4
  65. package/front_end/panels/settings/AISettingsTab.ts +17 -100
  66. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
  67. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  68. package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
  69. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
  70. package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
  71. package/front_end/panels/sources/BreakpointsView.ts +14 -14
  72. package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
  73. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  74. package/front_end/panels/sources/CoveragePlugin.ts +7 -7
  75. package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
  76. package/front_end/panels/sources/DebuggerPlugin.ts +29 -29
  77. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
  78. package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
  79. package/front_end/panels/sources/NavigatorView.ts +34 -27
  80. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  81. package/front_end/panels/sources/PersistenceActions.ts +9 -9
  82. package/front_end/panels/sources/ProfilePlugin.ts +1 -1
  83. package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
  84. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  85. package/front_end/panels/sources/SourcesNavigator.ts +20 -18
  86. package/front_end/panels/sources/SourcesPanel.ts +26 -25
  87. package/front_end/panels/sources/SourcesView.ts +5 -6
  88. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  89. package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
  90. package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
  91. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
  92. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  93. package/front_end/panels/sources/sources-meta.ts +109 -71
  94. package/front_end/panels/sources/sources.ts +0 -2
  95. package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
  96. package/front_end/panels/timeline/TimelineLoader.ts +72 -42
  97. package/front_end/panels/timeline/TimelinePanel.ts +29 -4
  98. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  99. package/front_end/third_party/chromium/README.chromium +1 -1
  100. package/front_end/third_party/puppeteer/README.chromium +2 -2
  101. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
  102. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
  103. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
  104. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  105. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
  106. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  107. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
  108. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  109. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
  110. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  111. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
  112. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
  113. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
  114. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
  115. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
  116. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
  117. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
  118. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
  119. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
  163. package/front_end/third_party/puppeteer/package/package.json +5 -5
  164. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
  165. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
  166. package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
  167. package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
  168. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
  169. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
  170. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
  171. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
  172. package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
  173. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
  174. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
  175. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  176. package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
  177. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
  178. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  179. package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
  180. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  181. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
  182. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
  183. package/front_end/ui/legacy/Dialog.ts +12 -2
  184. package/front_end/ui/legacy/TabbedPane.ts +7 -2
  185. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
  186. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
  187. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
  188. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
  189. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
  190. package/front_end/ui/visual_logging/KnownContextValues.ts +2 -0
  191. package/package.json +1 -1
  192. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
@@ -54,10 +54,6 @@ const UIStrings = {
54
54
  * @description A context menu item in the Messages View of the Network panel
55
55
  */
56
56
  copyMessage: 'Copy message',
57
- /**
58
- * @description Text to clear everything
59
- */
60
- clearAllL: 'Clear all',
61
57
  /**
62
58
  * @description Text for everything
63
59
  */
@@ -84,13 +80,14 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
84
80
  private readonly mainToolbar: UI.Toolbar.Toolbar;
85
81
  private readonly clearAllButton: UI.Toolbar.ToolbarButton;
86
82
  private readonly filterTypeCombobox: UI.Toolbar.ToolbarComboBox;
87
- protected filterType: string|null;
83
+ protected filterType: string|null = null;
88
84
  private readonly filterTextInput: UI.Toolbar.ToolbarInput;
89
- protected filterRegex: RegExp|null;
85
+ protected filterRegex: RegExp|null = null;
90
86
  private readonly frameEmptyWidget: UI.EmptyWidget.EmptyWidget;
91
87
  private currentSelectedNode?: DataGridItem|null;
92
88
  readonly request: SDK.NetworkRequest.NetworkRequest;
93
89
  private readonly messageFilterSetting: Common.Settings.Setting<string>;
90
+ private sidebarWidget: UI.Widget.Widget|null = null;
94
91
 
95
92
  abstract getRequestChunks(): Chunk[];
96
93
  abstract createGridItem(chunk: Chunk): DataGridItem;
@@ -114,7 +111,7 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
114
111
  displayName: dataGridDisplayName,
115
112
  columns,
116
113
  });
117
- this.dataGrid.setRowContextMenuCallback(onRowContextMenu.bind(this));
114
+ this.dataGrid.setRowContextMenuCallback((menu, node) => this.onRowContextMenu(menu, node));
118
115
  this.dataGrid.setEnableAutoScrollToBottom(true);
119
116
  this.dataGrid.setCellClass('resource-chunk-view-td');
120
117
  this.timeComparator =
@@ -138,21 +135,19 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
138
135
  this.mainToolbar.appendToolbarItem(this.clearAllButton);
139
136
 
140
137
  this.filterTypeCombobox =
141
- new UI.Toolbar.ToolbarComboBox(this.updateFilterSetting.bind(this), i18nString(UIStrings.filter));
138
+ new UI.Toolbar.ToolbarComboBox(this.onFilterTypeChanged.bind(this), i18nString(UIStrings.filter));
142
139
  for (const filterItem of FILTER_TYPES) {
143
140
  const option = this.filterTypeCombobox.createOption(filterItem.label(), filterItem.name);
144
141
  this.filterTypeCombobox.addOption(option);
145
142
  }
146
143
  this.mainToolbar.appendToolbarItem(this.filterTypeCombobox);
147
- this.filterType = null;
148
144
 
149
145
  this.filterTextInput = new UI.Toolbar.ToolbarFilter(filterUsingRegexHint, 0.4);
150
- this.filterTextInput.addEventListener(UI.Toolbar.ToolbarInput.Event.TEXT_CHANGED, this.updateFilterSetting, this);
146
+ this.filterTextInput.addEventListener(UI.Toolbar.ToolbarInput.Event.TEXT_CHANGED, this.onFilterTextChanged, this);
151
147
  const filter = this.messageFilterSetting.get();
152
148
  if (filter) {
153
149
  this.filterTextInput.setValue(filter);
154
150
  }
155
- this.filterRegex = null;
156
151
  this.mainToolbar.appendToolbarItem(this.filterTextInput);
157
152
 
158
153
  const mainContainer = new UI.Widget.VBox();
@@ -163,29 +158,31 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
163
158
 
164
159
  this.frameEmptyWidget = new UI.EmptyWidget.EmptyWidget(
165
160
  i18nString(UIStrings.noMessageSelected), i18nString(UIStrings.selectMessageToBrowseItsContent));
166
- this.splitWidget.setSidebarWidget(this.frameEmptyWidget);
161
+ this.sidebarWidget = this.frameEmptyWidget;
162
+ this.splitWidget.setSidebarWidget(this.sidebarWidget);
167
163
 
168
164
  if (filter) {
169
165
  this.applyFilter(filter);
170
166
  }
167
+ }
171
168
 
172
- function onRowContextMenu(
173
- this: ResourceChunkView<Chunk>, contextMenu: UI.ContextMenu.ContextMenu,
174
- genericNode: DataGrid.DataGrid.DataGridNode<unknown>): void {
175
- const node = (genericNode as DataGridItem);
176
- const binaryView = node.binaryView();
177
- if (binaryView) {
178
- binaryView.addCopyToContextMenu(contextMenu, i18nString(UIStrings.copyMessageD));
179
- } else {
180
- contextMenu.clipboardSection().appendItem(
181
- i18nString(UIStrings.copyMessage),
182
- Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText.bind(
183
- Host.InspectorFrontendHost.InspectorFrontendHostInstance, node.data.data),
184
- {jslogContext: 'copy'});
185
- }
186
- contextMenu.footerSection().appendItem(
187
- i18nString(UIStrings.clearAllL), this.clearChunks.bind(this), {jslogContext: 'clear-all'});
169
+ private onRowContextMenu(contextMenu: UI.ContextMenu.ContextMenu,
170
+ node: DataGrid.DataGrid.DataGridNode<unknown>): void {
171
+ const item = node as DataGridItem;
172
+ const binaryView = item.binaryView();
173
+ if (binaryView) {
174
+ binaryView.addCopyToContextMenu(contextMenu, i18nString(UIStrings.copyMessageD));
175
+ } else {
176
+ const dataVal = item.data.data;
177
+ const textToCopy = typeof dataVal === 'string' ? dataVal : item.dataText();
178
+ contextMenu.clipboardSection().appendItem(
179
+ i18nString(UIStrings.copyMessage),
180
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance.copyText.bind(
181
+ Host.InspectorFrontendHost.InspectorFrontendHostInstance, textToCopy),
182
+ {jslogContext: 'copy'});
188
183
  }
184
+ contextMenu.footerSection().appendItem(i18nString(UIStrings.clearAll), this.clearChunks.bind(this),
185
+ {jslogContext: 'clear-all'});
189
186
  }
190
187
 
191
188
  getColumns(): DataGrid.DataGrid.ColumnDescriptor[] {
@@ -212,17 +209,22 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
212
209
  private clearChunks(): void {
213
210
  // TODO(allada): actually remove frames from request.
214
211
  clearChunkOffsets.set(this.request, this.getRequestChunks().length);
215
- this.refresh();
212
+ this.performUpdate();
216
213
  }
217
214
 
218
- private updateFilterSetting(): void {
215
+ private onFilterTypeChanged(): void {
216
+ const val = (this.filterTypeCombobox.selectedOption() as HTMLOptionElement).value;
217
+ this.filterType = val === 'all' ? null : val;
218
+ this.performUpdate();
219
+ }
220
+
221
+ private onFilterTextChanged(): void {
219
222
  const text = this.filterTextInput.value();
220
223
  this.messageFilterSetting.set(text);
221
224
  this.applyFilter(text);
222
225
  }
223
226
 
224
227
  private applyFilter(text: string): void {
225
- const type = (this.filterTypeCombobox.selectedOption() as HTMLOptionElement).value;
226
228
  if (text) {
227
229
  try {
228
230
  this.filterRegex = new RegExp(text, 'i');
@@ -232,46 +234,69 @@ export abstract class ResourceChunkView<Chunk> extends UI.Widget.VBox {
232
234
  } else {
233
235
  this.filterRegex = null;
234
236
  }
235
- this.filterType = type === 'all' ? null : type;
236
- this.refresh();
237
+ this.performUpdate();
237
238
  }
238
239
 
239
240
  private async onChunkSelected(event: Common.EventTarget.EventTargetEvent<DataGrid.DataGrid.DataGridNode<unknown>>):
240
241
  Promise<void> {
241
242
  this.currentSelectedNode = (event.data as DataGridItem);
243
+ await this.updateSidebar();
244
+ }
245
+
246
+ private onChunkDeselected(): void {
247
+ this.currentSelectedNode = null;
248
+ void this.updateSidebar();
249
+ }
250
+
251
+ async updateSidebar(): Promise<void> {
252
+ if (!this.currentSelectedNode) {
253
+ this.sidebarWidget = null;
254
+ this.updateSidebarWidget();
255
+ return;
256
+ }
257
+
242
258
  const content = this.currentSelectedNode.dataText();
243
259
 
244
260
  const binaryView = this.currentSelectedNode.binaryView();
245
261
  if (binaryView) {
246
- this.splitWidget.setSidebarWidget(binaryView);
262
+ this.sidebarWidget = binaryView;
263
+ this.updateSidebarWidget();
247
264
  return;
248
265
  }
249
266
 
250
267
  const jsonView = await SourceFrame.JSONView.JSONView.createView(content);
251
268
  if (jsonView) {
252
- this.splitWidget.setSidebarWidget(jsonView);
269
+ this.sidebarWidget = jsonView;
270
+ this.updateSidebarWidget();
253
271
  return;
254
272
  }
255
273
 
256
- this.splitWidget.setSidebarWidget(new SourceFrame.ResourceSourceFrame.ResourceSourceFrame(
257
- TextUtils.StaticContentProvider.StaticContentProvider.fromString(
258
- this.request.url(), this.request.resourceType(), content),
259
- ''));
274
+ this.sidebarWidget = new SourceFrame.ResourceSourceFrame.ResourceSourceFrame(
275
+ TextUtils.StaticContentProvider.StaticContentProvider.fromString(this.request.url(),
276
+ this.request.resourceType(), content),
277
+ '');
278
+ this.updateSidebarWidget();
260
279
  }
261
280
 
262
- private onChunkDeselected(): void {
263
- this.currentSelectedNode = null;
264
- this.splitWidget.setSidebarWidget(this.frameEmptyWidget);
281
+ private updateSidebarWidget(): void {
282
+ const activeSidebar = this.sidebarWidget || this.frameEmptyWidget;
283
+ if (this.splitWidget.sidebarWidget() !== activeSidebar) {
284
+ this.splitWidget.setSidebarWidget(activeSidebar);
285
+ }
265
286
  }
266
287
 
267
- refresh(): void {
288
+ override performUpdate(): void {
268
289
  this.dataGrid.rootNode().removeChildren();
269
-
270
290
  let chunks = this.getRequestChunks();
271
291
  const offset = clearChunkOffsets.get(this.request) || 0;
272
- chunks = chunks.slice(offset);
273
- chunks = chunks.filter(this.chunkFilter.bind(this));
292
+ chunks = chunks.slice(offset).filter(this.chunkFilter.bind(this));
274
293
  chunks.forEach(chunk => this.dataGrid.insertChild(this.createGridItem(chunk)));
294
+
295
+ this.updateSidebarWidget();
296
+ }
297
+
298
+ refresh(): void {
299
+ this.performUpdate();
275
300
  }
276
301
 
277
302
  private sortItems(): void {
@@ -307,6 +332,7 @@ export abstract class DataGridItem extends DataGrid.SortableDataGrid.SortableDat
307
332
  abstract binaryView(): BinaryResourceView|null;
308
333
  abstract getTime(): number;
309
334
  abstract dataText(): string;
335
+ abstract readonly isTextFrame: boolean;
310
336
  }
311
337
 
312
338
  function resourceChunkNodeTimeComparator(a: DataGridItem, b: DataGridItem): number {
@@ -13,7 +13,7 @@ import * as UI from '../../ui/legacy/legacy.js';
13
13
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
14
14
 
15
15
  import {BinaryResourceView} from './BinaryResourceView.js';
16
- import {DataGridItem, ResourceChunkView} from './ResourceChunkView.js';
16
+ import {DataGridItem, OriginalResourceChunkView} from './OriginalResourceChunkView.js';
17
17
 
18
18
  const UIStrings = {
19
19
  /**
@@ -48,7 +48,7 @@ const UIStrings = {
48
48
  const str_ = i18n.i18n.registerUIStrings('panels/network/ResourceDirectSocketChunkView.ts', UIStrings);
49
49
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
50
50
 
51
- export class ResourceDirectSocketChunkView extends ResourceChunkView<SDK.NetworkRequest.DirectSocketChunk> {
51
+ export class ResourceDirectSocketChunkView extends OriginalResourceChunkView<SDK.NetworkRequest.DirectSocketChunk> {
52
52
  constructor(request: SDK.NetworkRequest.NetworkRequest) {
53
53
  super(
54
54
  request, 'network-direct-socket-chunk-filter', 'resource-direct-socket-chunk-split-view-state',
@@ -134,6 +134,7 @@ export class ResourceDirectSocketChunkView extends ResourceChunkView<SDK.Network
134
134
  class ResourceChunkNode extends DataGridItem {
135
135
  #binaryView: BinaryResourceView|null = null;
136
136
  readonly chunk: SDK.NetworkRequest.DirectSocketChunk;
137
+ override readonly isTextFrame = false;
137
138
 
138
139
  constructor(chunk: SDK.NetworkRequest.DirectSocketChunk, boundSocket: boolean) {
139
140
  const time = new Date(chunk.timestamp * 1000);
@@ -30,7 +30,7 @@ import * as UI from '../../ui/legacy/legacy.js';
30
30
  import * as VisualLogging from '../../ui/visual_logging/visual_logging.js';
31
31
 
32
32
  import {BinaryResourceView} from './BinaryResourceView.js';
33
- import {DataGridItem, ResourceChunkView} from './ResourceChunkView.js';
33
+ import {DataGridItem, OriginalResourceChunkView} from './OriginalResourceChunkView.js';
34
34
 
35
35
  const UIStrings = {
36
36
  /**
@@ -91,7 +91,7 @@ const str_ = i18n.i18n.registerUIStrings('panels/network/ResourceWebSocketFrameV
91
91
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
92
92
  const i18nLazyString = i18n.i18n.getLazilyComputedLocalizedString.bind(undefined, str_);
93
93
 
94
- export class ResourceWebSocketFrameView extends ResourceChunkView<SDK.NetworkRequest.WebSocketFrame> {
94
+ export class ResourceWebSocketFrameView extends OriginalResourceChunkView<SDK.NetworkRequest.WebSocketFrame> {
95
95
  constructor(request: SDK.NetworkRequest.NetworkRequest) {
96
96
  super(
97
97
  request, 'network-web-socket-message-filter', 'resource-web-socket-frame-split-view-state',
@@ -159,7 +159,7 @@ const opCodeDescriptions: Array<() => string> = (function(): Array<() => Common.
159
159
 
160
160
  class ResourceFrameNode extends DataGridItem {
161
161
  readonly frame: SDK.NetworkRequest.WebSocketFrame;
162
- private readonly isTextFrame: boolean;
162
+ override readonly isTextFrame: boolean;
163
163
  #dataText: string;
164
164
  #binaryView: BinaryResourceView|null;
165
165
 
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright 2014 The Chromium Authors
3
+ * Use of this source code is governed by a BSD-style license that can be
4
+ * found in the LICENSE file.
5
+ */
6
+
7
+ .resource-chunk-view {
8
+ user-select: text;
9
+ }
10
+
11
+ .resource-chunk-view .data-grid {
12
+ flex: auto;
13
+ border: none;
14
+
15
+ .resource-chunk-view-td {
16
+ border-bottom: 1px solid var(--sys-color-divider);
17
+ }
18
+
19
+ & tr {
20
+ &.resource-chunk-view-row-send td:first-child::before {
21
+ content: "\2B06";
22
+ color: var(--sys-color-tertiary);
23
+ padding-right: 4px;
24
+ }
25
+
26
+ &.resource-chunk-view-row-receive td:first-child::before {
27
+ content: "\2B07";
28
+ color: var(--sys-color-error);
29
+ padding-right: 4px;
30
+ }
31
+
32
+ &.resource-chunk-view-row-send {
33
+ background-color: color-mix(in srgb, var(--sys-color-tertiary-container), transparent 50%);
34
+ }
35
+
36
+ &.resource-chunk-view-row-error {
37
+ background-color: var(--sys-color-surface-error);
38
+ color: var(--sys-color-on-surface-error);
39
+ }
40
+ }
41
+ }
42
+
43
+ .resource-chunk-view .data-grid .data {
44
+ background-image: none;
45
+ }
46
+
47
+ .resource-chunk-view devtools-toolbar {
48
+ border-bottom: 1px solid var(--sys-color-divider);
49
+ }