chrome-devtools-frontend 1.0.1660788 → 1.0.1662289

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 (177) hide show
  1. package/.agents/skills/evaluate-ai-css-completion/SKILL.md +143 -0
  2. package/.agents/skills/evaluate-ai-css-completion/scripts/evaluate.js +104 -0
  3. package/.agents/skills/migrate-chromium-test/SKILL.md +7 -2
  4. package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +7 -1
  5. package/docs/ui_engineering.md +75 -42
  6. package/eslint.config.mjs +7 -0
  7. package/extension-api/ExtensionAPI.d.ts +88 -0
  8. package/front_end/core/common/SettingRegistration.ts +0 -5
  9. package/front_end/core/host/InspectorFrontendHost.ts +1 -0
  10. package/front_end/core/host/InspectorFrontendHostStub.ts +2 -0
  11. package/front_end/core/platform/ArrayUtilities.ts +10 -0
  12. package/front_end/core/platform/StringUtilities.ts +20 -4
  13. package/front_end/core/sdk/CPUThrottlingManager.ts +2 -0
  14. package/front_end/core/sdk/DOMDebuggerModel.ts +2 -0
  15. package/front_end/core/sdk/DOMModel.ts +1 -0
  16. package/front_end/core/sdk/DebuggerModel.ts +4 -4
  17. package/front_end/core/sdk/EventBreakpointsModel.ts +2 -0
  18. package/front_end/core/sdk/FrameManager.ts +1 -0
  19. package/front_end/core/sdk/IsolateManager.ts +1 -0
  20. package/front_end/core/sdk/NetworkManager.ts +2 -0
  21. package/front_end/core/sdk/NetworkRequest.ts +1 -0
  22. package/front_end/core/sdk/PageResourceLoader.ts +2 -0
  23. package/front_end/core/sdk/SourceMap.ts +5 -5
  24. package/front_end/core/sdk/SourceMapManager.ts +3 -2
  25. package/front_end/core/sdk/TargetManager.ts +4 -0
  26. package/front_end/entrypoints/main/MainImpl.ts +2 -1
  27. package/front_end/foundation/README.md +86 -0
  28. package/front_end/generated/InspectorBackendCommands.ts +4 -5
  29. package/front_end/generated/protocol.ts +20 -38
  30. package/front_end/models/bindings/CompilerScriptMapping.ts +5 -5
  31. package/front_end/models/bindings/ContentProviderBasedProject.ts +2 -3
  32. package/front_end/models/bindings/DebuggerLanguagePlugins.ts +3 -3
  33. package/front_end/models/bindings/DefaultScriptMapping.ts +3 -3
  34. package/front_end/models/bindings/ResourceMapping.ts +3 -3
  35. package/front_end/models/bindings/ResourceScriptMapping.ts +2 -2
  36. package/front_end/models/bindings/SASSSourceMapping.ts +3 -3
  37. package/front_end/models/bindings/TempFile.ts +8 -3
  38. package/front_end/models/extensions/ExtensionAPI.ts +110 -46
  39. package/front_end/models/extensions/RecorderExtensionEndpoint.ts +7 -5
  40. package/front_end/models/formatter/ScriptFormatter.ts +8 -11
  41. package/front_end/models/heap_snapshot/HeapSnapshotProxy.ts +14 -5
  42. package/front_end/models/issues_manager/CheckFormsIssuesTrigger.ts +8 -9
  43. package/front_end/models/issues_manager/CookieIssue.ts +21 -9
  44. package/front_end/models/issues_manager/Issue.ts +3 -4
  45. package/front_end/models/issues_manager/IssueAggregator.ts +0 -9
  46. package/front_end/models/issues_manager/IssueResolver.ts +2 -2
  47. package/front_end/models/issues_manager/IssuesManager.ts +136 -137
  48. package/front_end/models/issues_manager/RelatedIssue.ts +10 -8
  49. package/front_end/models/issues_manager/issues_manager.ts +0 -2
  50. package/front_end/models/javascript_metadata/NativeFunctions.js +1 -1
  51. package/front_end/models/logs/RequestResolver.ts +2 -2
  52. package/front_end/models/source_map_scopes/FunctionCodeResolver.ts +12 -9
  53. package/front_end/models/trace/handlers/FramesHandler.ts +4 -7
  54. package/front_end/models/trace/handlers/ModelHandlers.ts +0 -1
  55. package/front_end/models/trace/handlers/RendererHandler.ts +2 -15
  56. package/front_end/models/trace/handlers/Threads.ts +4 -11
  57. package/front_end/models/trace/insights/DOMSize.ts +1 -1
  58. package/front_end/models/workspace_diff/WorkspaceDiff.ts +10 -4
  59. package/front_end/panels/ai_assistance/components/ChatMessage.ts +2 -1
  60. package/front_end/panels/application/ApplicationPanelSidebar.ts +0 -44
  61. package/front_end/panels/application/CookieItemsView.ts +1 -1
  62. package/front_end/panels/application/ServiceWorkersView.ts +494 -411
  63. package/front_end/panels/application/WebMCPView.ts +38 -43
  64. package/front_end/panels/application/application.ts +0 -6
  65. package/front_end/panels/application/components/AdsView.ts +201 -30
  66. package/front_end/panels/application/components/adsView.css +25 -0
  67. package/front_end/panels/application/components/components.ts +0 -2
  68. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +1 -1
  69. package/front_end/panels/application/preloading/components/RuleSetDetailsView.ts +2 -2
  70. package/front_end/panels/application/serviceWorkersView.css +40 -4
  71. package/front_end/panels/browser_debugger/XHRBreakpointsSidebarPane.ts +147 -123
  72. package/front_end/panels/common/ExtensionServer.ts +3 -3
  73. package/front_end/panels/console/ConsoleView.ts +3 -2
  74. package/front_end/panels/console/PromptBuilder.ts +2 -1
  75. package/front_end/panels/emulation/DeviceModeView.ts +164 -113
  76. package/front_end/panels/issues/AffectedResourcesView.ts +1 -1
  77. package/front_end/panels/issues/IssueView.ts +0 -2
  78. package/front_end/panels/issues/IssuesPane.ts +1 -8
  79. package/front_end/panels/js_timeline/js_timeline-meta.ts +3 -2
  80. package/front_end/panels/lighthouse/LighthouseProtocolService.ts +53 -12
  81. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorController.ts +3 -3
  82. package/front_end/panels/linear_memory_inspector/LinearMemoryInspectorPane.ts +5 -5
  83. package/front_end/panels/linear_memory_inspector/components/LinearMemoryHighlightChipList.ts +4 -4
  84. package/front_end/panels/linear_memory_inspector/components/LinearMemoryInspector.ts +2 -2
  85. package/front_end/panels/linear_memory_inspector/components/LinearMemoryNavigator.ts +6 -6
  86. package/front_end/panels/linear_memory_inspector/components/LinearMemoryValueInterpreter.ts +3 -3
  87. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplay.ts +8 -9
  88. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterDisplayUtils.ts +2 -2
  89. package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
  90. package/front_end/panels/linear_memory_inspector/linear_memory_inspector-meta.ts +2 -2
  91. package/front_end/panels/network/RequestPayloadView.ts +92 -52
  92. package/front_end/panels/network/RequestTimingView.ts +95 -127
  93. package/front_end/panels/network/components/ResponseHeaderSection.ts +5 -3
  94. package/front_end/panels/profiler/HeapSnapshotView.ts +3 -3
  95. package/front_end/panels/profiler/WritableProfileHeader.ts +2 -2
  96. package/front_end/panels/recorder/{components/ControlButton.ts → ControlButton.ts} +9 -10
  97. package/front_end/panels/recorder/{components/CreateRecordingView.ts → CreateRecordingView.ts} +48 -47
  98. package/front_end/panels/recorder/{components/ExtensionView.ts → ExtensionView.ts} +8 -8
  99. package/front_end/panels/recorder/RecorderController.ts +302 -127
  100. package/front_end/panels/recorder/RecorderPanel.ts +1 -1
  101. package/front_end/panels/recorder/{components/RecordingListView.ts → RecordingListView.ts} +19 -20
  102. package/front_end/panels/recorder/{components/RecordingView.ts → RecordingView.ts} +88 -88
  103. package/front_end/panels/recorder/{components/ReplaySection.ts → ReplaySection.ts} +11 -11
  104. package/front_end/panels/recorder/{components/SelectorPicker.ts → SelectorPicker.ts} +13 -13
  105. package/front_end/panels/recorder/{components/StepEditor.ts → StepEditor.ts} +15 -15
  106. package/front_end/panels/recorder/{components/StepView.ts → StepView.ts} +10 -10
  107. package/front_end/panels/recorder/{components/TimelineSection.ts → TimelineSection.ts} +2 -2
  108. package/front_end/panels/recorder/recorder.ts +23 -1
  109. package/front_end/panels/recorder/util/util.ts +113 -0
  110. package/front_end/panels/sources/SourcesView.ts +0 -17
  111. package/front_end/panels/sources/TabbedEditorContainer.ts +1 -1
  112. package/front_end/panels/sources/UISourceCodeFrame.ts +42 -0
  113. package/front_end/panels/sources/sources.ts +0 -2
  114. package/front_end/panels/timeline/CompatibilityTracksAppender.ts +0 -17
  115. package/front_end/panels/timeline/IsolateSelector.ts +10 -8
  116. package/front_end/panels/timeline/ThreadAppender.ts +0 -106
  117. package/front_end/panels/timeline/TimelinePanel.ts +18 -7
  118. package/front_end/panels/timeline/TimelineUIUtils.ts +144 -129
  119. package/front_end/panels/timeline/timeline-meta.ts +3 -2
  120. package/front_end/third_party/chromium/README.chromium +1 -1
  121. package/front_end/ui/components/report_view/ReportView.ts +11 -5
  122. package/front_end/ui/components/report_view/report.css +4 -1
  123. package/front_end/ui/legacy/TextPrompt.ts +49 -1
  124. package/front_end/ui/legacy/Treeoutline.ts +3 -0
  125. package/front_end/ui/legacy/UIUtils.ts +11 -1
  126. package/front_end/ui/legacy/Widget.ts +14 -15
  127. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +2 -2
  128. package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +11 -7
  129. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +2 -1
  130. package/front_end/ui/legacy/components/utils/JSPresentationUtils.ts +10 -1
  131. package/front_end/ui/legacy/textPrompt.css +10 -0
  132. package/front_end/ui/visual_logging/KnownContextValues.ts +1 -0
  133. package/package.json +1 -1
  134. package/front_end/models/issues_manager/AttributionReportingIssue.ts +0 -247
  135. package/front_end/models/issues_manager/descriptions/arInsecureContext.md +0 -7
  136. package/front_end/models/issues_manager/descriptions/arInvalidInfoHeader.md +0 -5
  137. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsSourceHeader.md +0 -5
  138. package/front_end/models/issues_manager/descriptions/arInvalidRegisterOsTriggerHeader.md +0 -5
  139. package/front_end/models/issues_manager/descriptions/arInvalidRegisterSourceHeader.md +0 -5
  140. package/front_end/models/issues_manager/descriptions/arInvalidRegisterTriggerHeader.md +0 -5
  141. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationUniqueScopeAlreadySet.md +0 -5
  142. package/front_end/models/issues_manager/descriptions/arNavigationRegistrationWithoutTransientUserActivation.md +0 -6
  143. package/front_end/models/issues_manager/descriptions/arNoRegisterOsSourceHeader.md +0 -5
  144. package/front_end/models/issues_manager/descriptions/arNoRegisterOsTriggerHeader.md +0 -5
  145. package/front_end/models/issues_manager/descriptions/arNoRegisterSourceHeader.md +0 -5
  146. package/front_end/models/issues_manager/descriptions/arNoRegisterTriggerHeader.md +0 -5
  147. package/front_end/models/issues_manager/descriptions/arNoWebOrOsSupport.md +0 -4
  148. package/front_end/models/issues_manager/descriptions/arOsSourceIgnored.md +0 -18
  149. package/front_end/models/issues_manager/descriptions/arOsTriggerIgnored.md +0 -19
  150. package/front_end/models/issues_manager/descriptions/arPermissionPolicyDisabled.md +0 -8
  151. package/front_end/models/issues_manager/descriptions/arSourceAndTriggerHeaders.md +0 -9
  152. package/front_end/models/issues_manager/descriptions/arSourceIgnored.md +0 -13
  153. package/front_end/models/issues_manager/descriptions/arTriggerIgnored.md +0 -12
  154. package/front_end/models/issues_manager/descriptions/arUntrustworthyReportingOrigin.md +0 -10
  155. package/front_end/models/issues_manager/descriptions/arWebAndOsHeaders.md +0 -11
  156. package/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +0 -183
  157. package/front_end/panels/application/InterestGroupStorageModel.ts +0 -81
  158. package/front_end/panels/application/InterestGroupStorageView.ts +0 -151
  159. package/front_end/panels/application/InterestGroupTreeElement.ts +0 -65
  160. package/front_end/panels/application/components/InterestGroupAccessGrid.ts +0 -135
  161. package/front_end/panels/application/components/interestGroupAccessGrid.css +0 -27
  162. package/front_end/panels/application/interestGroupStorageView.css +0 -9
  163. package/front_end/panels/issues/AttributionReportingIssueDetailsView.ts +0 -182
  164. package/front_end/panels/recorder/components/components.ts +0 -25
  165. package/front_end/panels/recorder/components/util.ts +0 -116
  166. package/front_end/panels/sources/InplaceFormatterEditorAction.ts +0 -149
  167. /package/front_end/panels/recorder/{components/controlButton.css → controlButton.css} +0 -0
  168. /package/front_end/panels/recorder/{components/createRecordingView.css → createRecordingView.css} +0 -0
  169. /package/front_end/panels/recorder/{components/extensionView.css → extensionView.css} +0 -0
  170. /package/front_end/panels/recorder/{components/recordingListView.css → recordingListView.css} +0 -0
  171. /package/front_end/panels/recorder/{components/recordingView.css → recordingView.css} +0 -0
  172. /package/front_end/panels/recorder/{components/replaySection.css → replaySection.css} +0 -0
  173. /package/front_end/panels/recorder/{components/selectorPicker.css → selectorPicker.css} +0 -0
  174. /package/front_end/panels/recorder/{components/startView.css → startView.css} +0 -0
  175. /package/front_end/panels/recorder/{components/stepEditor.css → stepEditor.css} +0 -0
  176. /package/front_end/panels/recorder/{components/stepView.css → stepView.css} +0 -0
  177. /package/front_end/panels/recorder/{components/timelineSection.css → timelineSection.css} +0 -0
@@ -345,9 +345,6 @@ export class SourcesView extends Common.ObjectWrapper.eventMixin<EventTypes, typ
345
345
  if (view instanceof UI.View.SimpleView) {
346
346
  void view.toolbarItems().then(items => {
347
347
  this.#scriptViewToolbar.removeToolbarItems();
348
- for (const action of getRegisteredEditorActions()) {
349
- this.#scriptViewToolbar.appendToolbarItem(action.getOrCreateButton(this));
350
- }
351
348
  if (Array.isArray(items)) {
352
349
  items.map(item => this.#scriptViewToolbar.appendToolbarItem(item));
353
350
  } else {
@@ -657,20 +654,6 @@ export interface EventTypes {
657
654
  [Events.EDITOR_SELECTED]: Workspace.UISourceCode.UISourceCode;
658
655
  }
659
656
 
660
- export interface EditorAction {
661
- getOrCreateButton(sourcesView: SourcesView): UI.Toolbar.ToolbarButton;
662
- }
663
-
664
- const registeredEditorActions: Array<() => EditorAction> = [];
665
-
666
- export function registerEditorAction(editorAction: () => EditorAction): void {
667
- registeredEditorActions.push(editorAction);
668
- }
669
-
670
- export function getRegisteredEditorActions(): EditorAction[] {
671
- return registeredEditorActions.map(editorAction => editorAction());
672
- }
673
-
674
657
  export class SwitchFileActionDelegate implements UI.ActionRegistration.ActionDelegate {
675
658
  private static nextFile(currentUISourceCode: Workspace.UISourceCode.UISourceCode): Workspace.UISourceCode.UISourceCode
676
659
  |null {
@@ -718,7 +718,7 @@ export interface EventTypes {
718
718
  const MAX_PREVIOUSLY_VIEWED_FILES_COUNT = 30;
719
719
  const MAX_SERIALIZABLE_URL_LENGTH = 4096;
720
720
 
721
- interface SerializedHistoryItem {
721
+ export interface SerializedHistoryItem {
722
722
  url: string;
723
723
  resourceTypeName: string;
724
724
  selectionRange?: TextUtils.TextRange.SerializedTextRange;
@@ -6,8 +6,10 @@
6
6
 
7
7
  import * as Common from '../../core/common/common.js';
8
8
  import * as Host from '../../core/host/host.js';
9
+ import * as i18n from '../../core/i18n/i18n.js';
9
10
  import * as FormatterActions from '../../entrypoints/formatter_worker/FormatterActions.js'; // eslint-disable-line @devtools/es-modules-import
10
11
  import * as AiCodeCompletion from '../../models/ai_code_completion/ai_code_completion.js';
12
+ import * as Formatter from '../../models/formatter/formatter.js';
11
13
  import * as IssuesManager from '../../models/issues_manager/issues_manager.js';
12
14
  import * as Persistence from '../../models/persistence/persistence.js';
13
15
  import * as TextUtils from '../../models/text_utils/text_utils.js';
@@ -30,6 +32,15 @@ import {ResourceOriginPlugin} from './ResourceOriginPlugin.js';
30
32
  import {SnippetsPlugin} from './SnippetsPlugin.js';
31
33
  import {SourcesPanel} from './SourcesPanel.js';
32
34
 
35
+ const UIStrings = {
36
+ /**
37
+ * @description Title of the format button
38
+ */
39
+ format: 'Format',
40
+ } as const;
41
+ const str_ = i18n.i18n.registerUIStrings('panels/sources/UISourceCodeFrame.ts', UIStrings);
42
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
43
+
33
44
  export class UISourceCodeFrame extends Common.ObjectWrapper
34
45
  .eventMixin<EventTypes, typeof SourceFrame.SourceFrame.SourceFrameImpl>(
35
46
  SourceFrame.SourceFrame.SourceFrameImpl) {
@@ -290,6 +301,24 @@ export class UISourceCodeFrame extends Common.ObjectWrapper
290
301
  this.maybeSetContent(this.#uiSourceCode.workingCopyContentData());
291
302
  }
292
303
 
304
+ async #formatSourceInPlace(): Promise<void> {
305
+ const contentDataOrError = await this.workingCopy();
306
+ if (TextUtils.ContentData.ContentData.isError(contentDataOrError)) {
307
+ return;
308
+ }
309
+ const content = TextUtils.ContentData.ContentData.textOr(contentDataOrError, '');
310
+ const {formattedContent, formattedMapping} = await Formatter.ScriptFormatter.format(
311
+ Common.Settings.Settings.instance(), this.#uiSourceCode.contentType(), this.contentType, content);
312
+ if (this.#uiSourceCode.workingCopy() === formattedContent) {
313
+ return;
314
+ }
315
+ const selection = this.textEditor.toLineColumn(this.textEditor.state.selection.main.head);
316
+ const [lineNumber, columnNumber] =
317
+ formattedMapping.originalToFormatted(selection.lineNumber, selection.columnNumber);
318
+ this.#uiSourceCode.setWorkingCopy(formattedContent);
319
+ this.revealPosition({lineNumber, columnNumber});
320
+ }
321
+
293
322
  private onWorkingCopyCommitted(): void {
294
323
  if (!this.#muteSourceCodeEvents) {
295
324
  this.maybeSetContent(this.uiSourceCode().workingCopyContentData());
@@ -433,6 +462,19 @@ export class UISourceCodeFrame extends Common.ObjectWrapper
433
462
 
434
463
  override async toolbarItems(): Promise<UI.Toolbar.ToolbarItem[]> {
435
464
  const leftToolbarItems = await super.toolbarItems();
465
+
466
+ const isEditable = Persistence.Persistence.PersistenceImpl.instance().hasEditableContent(this.#uiSourceCode);
467
+ const isJavaScript = Common.ResourceType.ResourceType.isJavaScriptMimeType(this.contentType);
468
+ const isInplaceFormattable = isEditable && isJavaScript;
469
+
470
+ if (isInplaceFormattable) {
471
+ const formatButton = new UI.Toolbar.ToolbarButton(i18nString(UIStrings.format), 'brackets');
472
+ formatButton.addEventListener(UI.Toolbar.ToolbarButton.Events.CLICK, () => {
473
+ void this.#formatSourceInPlace();
474
+ });
475
+ leftToolbarItems.unshift(formatButton);
476
+ }
477
+
436
478
  const rightToolbarItems = [];
437
479
  for (const plugin of this.plugins) {
438
480
  leftToolbarItems.push(...plugin.leftToolbarItems());
@@ -18,7 +18,6 @@ import * as EditingLocationHistoryManager from './EditingLocationHistoryManager.
18
18
  import * as FilePathScoreFunction from './FilePathScoreFunction.js';
19
19
  import * as FilteredUISourceCodeListProvider from './FilteredUISourceCodeListProvider.js';
20
20
  import * as GoToLineQuickOpen from './GoToLineQuickOpen.js';
21
- import * as InplaceFormatterEditorAction from './InplaceFormatterEditorAction.js';
22
21
  import * as NavigatorView from './NavigatorView.js';
23
22
  import * as OpenFileQuickOpen from './OpenFileQuickOpen.js';
24
23
  import * as OutlineQuickOpen from './OutlineQuickOpen.js';
@@ -54,7 +53,6 @@ export {
54
53
  FilePathScoreFunction,
55
54
  FilteredUISourceCodeListProvider,
56
55
  GoToLineQuickOpen,
57
- InplaceFormatterEditorAction,
58
56
  NavigatorView,
59
57
  OpenFileQuickOpen,
60
58
  OutlineQuickOpen,
@@ -168,7 +168,6 @@ export const enum VisualLoggingTrackName {
168
168
  THREAD_MAIN = 'thread.main',
169
169
  THREAD_FRAME = 'thread.frame',
170
170
  THREAD_WORKER = 'thread.worker',
171
- THREAD_AUCTION_WORKLET = 'thread.auction-worklet',
172
171
  THREAD_RASTERIZER = 'thread.rasterizer',
173
172
  THREAD_POOL = 'thread.pool',
174
173
  THREAD_OTHER = 'thread.other',
@@ -301,8 +300,6 @@ export class CompatibilityTracksAppender {
301
300
  }
302
301
  case Trace.Handlers.Threads.ThreadType.WORKER:
303
302
  return 3;
304
- case Trace.Handlers.Threads.ThreadType.AUCTION_WORKLET:
305
- return 3;
306
303
  case Trace.Handlers.Threads.ThreadType.RASTERIZER:
307
304
  return 4;
308
305
  case Trace.Handlers.Threads.ThreadType.THREAD_POOL:
@@ -328,20 +325,6 @@ export class CompatibilityTracksAppender {
328
325
  continue;
329
326
  }
330
327
 
331
- const matchingWorklet = this.#parsedTrace.data.AuctionWorklets.worklets.get(pid);
332
- if (matchingWorklet) {
333
- // Each AuctionWorklet has two key threads:
334
- // 1. the Utility Thread
335
- // 2. the V8 Helper Thread - either a bidder or seller. see buildNameForAuctionWorklet()
336
- // There are other threads in a worklet process, but we don't render them.
337
- const tids = [matchingWorklet.args.data.utilityThread.tid, matchingWorklet.args.data.v8HelperThread.tid];
338
- if (tids.includes(tid)) {
339
- this.#threadAppenders.push(new ThreadAppender(
340
- this, this.#parsedTrace, pid, tid, '', Trace.Handlers.Threads.ThreadType.AUCTION_WORKLET, entries, tree));
341
- }
342
- continue;
343
- }
344
-
345
328
  // The Common case… Add the main thread, or iframe, or thread pool, etc.
346
329
  this.#threadAppenders.push(new ThreadAppender(this, this.#parsedTrace, pid, tid, name, type, entries, tree));
347
330
  }
@@ -26,10 +26,14 @@ export class IsolateSelector extends UI.Toolbar.ToolbarItem implements SDK.Isola
26
26
  options?: Array<{index: number, isolate: SDK.IsolateManager.Isolate}>;
27
27
  items?: Menus.Menu.MenuItem[];
28
28
  readonly itemByIsolate = new Map<SDK.IsolateManager.Isolate, Menus.Menu.MenuItem>();
29
+ readonly #targetManager: SDK.TargetManager.TargetManager;
30
+ readonly #isolateManager: SDK.IsolateManager.IsolateManager;
29
31
 
30
- constructor() {
32
+ constructor(targetManager: SDK.TargetManager.TargetManager, isolateManager: SDK.IsolateManager.IsolateManager) {
31
33
  const menu = new Menus.SelectMenu.SelectMenu();
32
34
  super(menu);
35
+ this.#targetManager = targetManager;
36
+ this.#isolateManager = isolateManager;
33
37
 
34
38
  this.menu = menu;
35
39
  menu.buttonTitle = i18nString(UIStrings.selectJavascriptVmInstance);
@@ -38,18 +42,16 @@ export class IsolateSelector extends UI.Toolbar.ToolbarItem implements SDK.Isola
38
42
 
39
43
  menu.addEventListener('selectmenuselected', this.#onSelectMenuSelected.bind(this));
40
44
 
41
- SDK.IsolateManager.IsolateManager.instance().observeIsolates(this);
42
- SDK.TargetManager.TargetManager.instance().addEventListener(
43
- SDK.TargetManager.Events.NAME_CHANGED, this.targetChanged, this);
44
- SDK.TargetManager.TargetManager.instance().addEventListener(
45
- SDK.TargetManager.Events.INSPECTED_URL_CHANGED, this.targetChanged, this);
45
+ this.#isolateManager.observeIsolates(this);
46
+ this.#targetManager.addEventListener(SDK.TargetManager.Events.NAME_CHANGED, this.targetChanged, this);
47
+ this.#targetManager.addEventListener(SDK.TargetManager.Events.INSPECTED_URL_CHANGED, this.targetChanged, this);
46
48
  }
47
49
 
48
50
  #updateIsolateItem(isolate: SDK.IsolateManager.Isolate, itemForIsolate: Menus.Menu.MenuItem): void {
49
51
  const modelCountByName = new Map<string, number>();
50
52
  for (const model of isolate.models()) {
51
53
  const target = model.target();
52
- const name = SDK.TargetManager.TargetManager.instance().rootTarget() !== target ? target.name() : '';
54
+ const name = this.#targetManager.rootTarget() !== target ? target.name() : '';
53
55
  const parsedURL = new Common.ParsedURL.ParsedURL(target.inspectedURL());
54
56
  const domain = parsedURL.isValid ? parsedURL.domain() : '';
55
57
  const title =
@@ -117,7 +119,7 @@ export class IsolateSelector extends UI.Toolbar.ToolbarItem implements SDK.Isola
117
119
  if (!model) {
118
120
  return;
119
121
  }
120
- const isolate = SDK.IsolateManager.IsolateManager.instance().isolateByModel(model);
122
+ const isolate = this.#isolateManager.isolateByModel(model);
121
123
  if (isolate) {
122
124
  this.isolateChanged(isolate);
123
125
  }
@@ -87,48 +87,7 @@ const UIStrings = {
87
87
  * @example {2} PH1
88
88
  */
89
89
  threadPoolThreadS: 'Thread pool worker {PH1}',
90
- /**
91
- * @description Title of a bidder auction worklet with known URL in the timeline flame chart of the Performance panel
92
- * @example {https://google.com} PH1
93
- */
94
- bidderWorkletS: 'Bidder Worklet — {PH1}',
95
- /**
96
- * @description Title of a bidder auction worklet in the timeline flame chart of the Performance panel with an unknown URL
97
- */
98
- bidderWorklet: 'Bidder Worklet',
99
-
100
- /**
101
- * @description Title of a seller auction worklet in the timeline flame chart of the Performance panel with an unknown URL
102
- */
103
- sellerWorklet: 'Seller Worklet',
104
-
105
- /**
106
- * @description Title of an auction worklet in the timeline flame chart of the Performance panel with an unknown URL
107
- */
108
- unknownWorklet: 'Auction Worklet',
109
-
110
- /**
111
- * @description Title of control thread of a service process for an auction worklet in the timeline flame chart of the Performance panel with an unknown URL
112
- */
113
- workletService: 'Auction Worklet service',
114
-
115
- /**
116
- * @description Title of a seller auction worklet with known URL in the timeline flame chart of the Performance panel
117
- * @example {https://google.com} PH1
118
- */
119
- sellerWorkletS: 'Seller Worklet — {PH1}',
120
90
 
121
- /**
122
- * @description Title of an auction worklet with known URL in the timeline flame chart of the Performance panel
123
- * @example {https://google.com} PH1
124
- */
125
- unknownWorkletS: 'Auction Worklet — {PH1}',
126
-
127
- /**
128
- * @description Title of control thread of a service process for an auction worklet with known URL in the timeline flame chart of the Performance panel
129
- * @example {https://google.com} PH1
130
- */
131
- workletServiceS: 'Auction Worklet service — {PH1}',
132
91
  } as const;
133
92
 
134
93
  const str_ = i18n.i18n.registerUIStrings('panels/timeline/ThreadAppender.ts', UIStrings);
@@ -181,12 +140,6 @@ export class ThreadAppender implements TrackAppender {
181
140
  this.#threadDefaultName = threadName || i18nString(UIStrings.threadS, {PH1: threadId});
182
141
  this.isOnMainFrame = Boolean(this.#parsedTrace.data.Renderer?.processes.get(processId)?.isOnMainFrame);
183
142
  this.threadType = type;
184
- // AuctionWorklets are threads, so we re-use this appender rather than
185
- // duplicate it, but we change the name because we want to render these
186
- // lower down than other threads.
187
- if (this.#parsedTrace.data.AuctionWorklets.worklets.has(processId)) {
188
- this.appenderName = 'Thread_AuctionWorklet';
189
- }
190
143
  this.#url = this.#parsedTrace.data.Renderer?.processes.get(this.#processId)?.url || '';
191
144
  }
192
145
 
@@ -279,8 +232,6 @@ export class ThreadAppender implements TrackAppender {
279
232
  return VisualLoggingTrackName.THREAD_WORKER;
280
233
  case Trace.Handlers.Threads.ThreadType.RASTERIZER:
281
234
  return VisualLoggingTrackName.THREAD_RASTERIZER;
282
- case Trace.Handlers.Threads.ThreadType.AUCTION_WORKLET:
283
- return VisualLoggingTrackName.THREAD_AUCTION_WORKLET;
284
235
  case Trace.Handlers.Threads.ThreadType.OTHER:
285
236
  return VisualLoggingTrackName.THREAD_OTHER;
286
237
  case Trace.Handlers.Threads.ThreadType.CPU_PROFILE:
@@ -350,9 +301,6 @@ export class ThreadAppender implements TrackAppender {
350
301
  break;
351
302
  case Trace.Handlers.Threads.ThreadType.OTHER:
352
303
  break;
353
- case Trace.Handlers.Threads.ThreadType.AUCTION_WORKLET:
354
- threadTypeLabel = this.#buildNameForAuctionWorklet();
355
- break;
356
304
  default:
357
305
  return Platform.assertNever(this.threadType, `Unknown thread type: ${this.threadType}`);
358
306
  }
@@ -371,60 +319,6 @@ export class ThreadAppender implements TrackAppender {
371
319
  return this.#entries;
372
320
  }
373
321
 
374
- #buildNameForAuctionWorklet(): string {
375
- const workletMetadataEvent = this.#parsedTrace.data.AuctionWorklets.worklets.get(this.#processId);
376
- // We should always have this event - if we do not, we were instantiated with invalid data.
377
- if (!workletMetadataEvent) {
378
- return i18nString(UIStrings.unknownWorklet);
379
- }
380
-
381
- // Host could be empty - in which case we do not want to add it.
382
- const host = workletMetadataEvent.host ? `https://${workletMetadataEvent.host}` : '';
383
- const shouldAddHost = host.length > 0;
384
-
385
- // For each Auction Worklet in a page there are two threads we care about on the same process.
386
- // 1. The "Worklet Service" which is a generic helper service. This thread
387
- // is always named "auction_worklet.CrUtilityMain".
388
- //
389
- // 2. The "Seller/Bidder" service. This thread is always named
390
- // "AuctionV8HelperThread". The AuctionWorkets handler does the job of
391
- // figuring this out for us - the metadata event it provides for each
392
- // worklet process will have a `type` already set.
393
- //
394
- // Therefore, for this given thread, which we know is part of
395
- // an AuctionWorklet process, we need to figure out if this thread is the
396
- // generic service, or a seller/bidder worklet.
397
- //
398
- // Note that the worklet could also have the "unknown" type - this is not
399
- // expected but implemented to prevent trace event changes causing DevTools
400
- // to break with unknown worklet types.
401
- const isUtilityThread = workletMetadataEvent.args.data.utilityThread.tid === this.#threadId;
402
- const isBidderOrSeller = workletMetadataEvent.args.data.v8HelperThread.tid === this.#threadId;
403
-
404
- if (isUtilityThread) {
405
- return shouldAddHost ? i18nString(UIStrings.workletServiceS, {PH1: host}) : i18nString(UIStrings.workletService);
406
- }
407
-
408
- if (isBidderOrSeller) {
409
- switch (workletMetadataEvent.type) {
410
- case Trace.Types.Events.AuctionWorkletType.SELLER:
411
- return shouldAddHost ? i18nString(UIStrings.sellerWorkletS, {PH1: host}) :
412
- i18nString(UIStrings.sellerWorklet);
413
- case Trace.Types.Events.AuctionWorkletType.BIDDER:
414
- return shouldAddHost ? i18nString(UIStrings.bidderWorkletS, {PH1: host}) :
415
- i18nString(UIStrings.bidderWorklet);
416
- case Trace.Types.Events.AuctionWorkletType.UNKNOWN:
417
- return shouldAddHost ? i18nString(UIStrings.unknownWorkletS, {PH1: host}) :
418
- i18nString(UIStrings.unknownWorklet);
419
- default:
420
- Platform.assertNever(
421
- workletMetadataEvent.type, `Unexpected Auction Worklet Type ${workletMetadataEvent.type}`);
422
- }
423
- }
424
- // We should never reach here, but just in case!
425
- return shouldAddHost ? i18nString(UIStrings.unknownWorkletS, {PH1: host}) : i18nString(UIStrings.unknownWorklet);
426
- }
427
-
428
322
  #buildNameForWorker(): string {
429
323
  const url = this.#parsedTrace.data.Renderer?.processes.get(this.#processId)?.url || '';
430
324
  const workerId = this.#parsedTrace.data.Workers.workerIdByThread.get(this.#threadId);
@@ -453,10 +453,15 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
453
453
  #hiddenTracksInfoBarByParsedTrace = new WeakMap<Trace.TraceModel.ParsedTrace, UI.Infobar.Infobar|'DISMISSED'>();
454
454
 
455
455
  readonly #resourceLoader: SDK.PageResourceLoader.ResourceLoader;
456
+ readonly #targetManager: SDK.TargetManager.TargetManager;
457
+ readonly #isolateManager: SDK.IsolateManager.IsolateManager;
456
458
 
457
- constructor(resourceLoader: SDK.PageResourceLoader.ResourceLoader, traceModel?: Trace.TraceModel.Model) {
459
+ constructor(resourceLoader: SDK.PageResourceLoader.ResourceLoader, targetManager: SDK.TargetManager.TargetManager,
460
+ isolateManager: SDK.IsolateManager.IsolateManager, traceModel?: Trace.TraceModel.Model) {
458
461
  super('timeline');
459
462
  this.#resourceLoader = resourceLoader;
463
+ this.#targetManager = targetManager;
464
+ this.#isolateManager = isolateManager;
460
465
  this.registerRequiredCSS(timelinePanelStyles);
461
466
  const adornerContent = document.createElement('span');
462
467
  adornerContent.innerHTML = `<div style="
@@ -717,10 +722,13 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
717
722
  static instance(opts: {
718
723
  forceNew: true,
719
724
  resourceLoader: SDK.PageResourceLoader.ResourceLoader,
725
+ targetManager: SDK.TargetManager.TargetManager,
726
+ isolateManager: SDK.IsolateManager.IsolateManager,
720
727
  traceModel?: Trace.TraceModel.Model,
721
728
  }|undefined = undefined): TimelinePanel {
722
729
  if (opts) {
723
- timelinePanelInstance = new TimelinePanel(opts.resourceLoader, opts.traceModel);
730
+ timelinePanelInstance =
731
+ new TimelinePanel(opts.resourceLoader, opts.targetManager, opts.isolateManager, opts.traceModel);
724
732
  }
725
733
 
726
734
  if (!timelinePanelInstance) {
@@ -1149,7 +1157,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1149
1157
 
1150
1158
  // Isolate selector
1151
1159
  if (this.#isNode) {
1152
- const isolateSelector = new IsolateSelector();
1160
+ const isolateSelector = new IsolateSelector(this.#targetManager, this.#isolateManager);
1153
1161
  this.panelToolbar.appendSeparator();
1154
1162
  this.panelToolbar.appendToolbarItem(isolateSelector);
1155
1163
  }
@@ -2703,8 +2711,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2703
2711
  const {scriptId, scriptUrl, sourceUrl, sourceMapUrl, frame, cachedRawSourceMap} = params;
2704
2712
 
2705
2713
  if (cachedRawSourceMap) {
2706
- return new SDK.SourceMap.SourceMap(
2707
- sourceUrl, sourceMapUrl ?? '' as Platform.DevToolsPath.UrlString, cachedRawSourceMap);
2714
+ return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl ?? '' as Platform.DevToolsPath.UrlString,
2715
+ cachedRawSourceMap, Common.Console.Console.instance());
2708
2716
  }
2709
2717
 
2710
2718
  // For still-active frames, the source map is likely already fetched or at least in-flight.
@@ -2725,7 +2733,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2725
2733
  if (!isFreshRecording && metadata?.sourceMaps && !isDataUrl) {
2726
2734
  const cachedSourceMap = metadata.sourceMaps.find(m => m.sourceMapUrl === sourceMapUrl);
2727
2735
  if (cachedSourceMap) {
2728
- return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, cachedSourceMap.sourceMap);
2736
+ return new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, cachedSourceMap.sourceMap,
2737
+ Common.Console.Console.instance());
2729
2738
  }
2730
2739
  }
2731
2740
 
@@ -2755,7 +2764,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2755
2764
  };
2756
2765
  const payload = await SDK.SourceMapManager.tryLoadSourceMap(
2757
2766
  TimelinePanel.instance().#resourceLoader, sourceMapUrl, initiator);
2758
- return payload ? new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, payload) : null;
2767
+ return payload ?
2768
+ new SDK.SourceMap.SourceMap(sourceUrl, sourceMapUrl, payload, Common.Console.Console.instance()) :
2769
+ null;
2759
2770
  }
2760
2771
 
2761
2772
  const timeout = new Promise<null>(resolve => setTimeout(() => resolve(null), SOURCE_MAP_LOAD_TIMEOUT_MS));