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
@@ -517,8 +517,8 @@ export class TimelineUIUtils {
517
517
  return functionName;
518
518
  }
519
519
 
520
- static testContentMatching(
521
- traceEvent: Trace.Types.Events.Event, regExp: RegExp, handlerData?: Trace.Handlers.Types.HandlerData): boolean {
520
+ static testContentMatching(traceEvent: Trace.Types.Events.Event, regExp: RegExp,
521
+ handlerData?: Trace.Handlers.Types.HandlerData): boolean {
522
522
  const title = TimelineUIUtils.eventStyle(traceEvent).title;
523
523
  const tokens = [title];
524
524
 
@@ -641,9 +641,9 @@ export class TimelineUIUtils {
641
641
  return frame.scriptId !== '0' && !(frame.url?.startsWith('native '));
642
642
  }
643
643
 
644
- static async buildDetailsNodeForTraceEvent(
645
- event: Trace.Types.Events.Event, target: SDK.Target.Target|null, linkifier: LegacyComponents.Linkifier.Linkifier,
646
- isFreshOrEnhanced = false, parsedTrace: Trace.TraceModel.ParsedTrace): Promise<Node|null> {
644
+ static async buildDetailsNodeForTraceEvent(event: Trace.Types.Events.Event, target: SDK.Target.Target|null,
645
+ linkifier: LegacyComponents.Linkifier.Linkifier, isFreshOrEnhanced = false,
646
+ parsedTrace: Trace.TraceModel.ParsedTrace): Promise<Node|null> {
647
647
  let details: HTMLElement|HTMLSpanElement|(Element | null)|Text|null = null;
648
648
  let detailsText;
649
649
  // TODO(40287735): update this code with type-safe data checks.
@@ -768,15 +768,15 @@ export class TimelineUIUtils {
768
768
  omitOrigin,
769
769
  };
770
770
  if (isFreshOrEnhanced) {
771
- return linkifier.linkifyScriptLocation(
772
- target, scriptId, url as Platform.DevToolsPath.UrlString, lineNumber, options);
771
+ return linkifier.linkifyScriptLocation(target, scriptId, url as Platform.DevToolsPath.UrlString, lineNumber,
772
+ options);
773
773
  }
774
774
  return LegacyComponents.Linkifier.Linkifier.linkifyURL(url as Platform.DevToolsPath.UrlString, options);
775
775
  }
776
776
 
777
- static linkifyTopCallFrame(
778
- event: Trace.Types.Events.Event, target: SDK.Target.Target|null, linkifier: LegacyComponents.Linkifier.Linkifier,
779
- isFreshOrEnhanced = false, maxLength?: number): Element|null {
777
+ static linkifyTopCallFrame(event: Trace.Types.Events.Event, target: SDK.Target.Target|null,
778
+ linkifier: LegacyComponents.Linkifier.Linkifier, isFreshOrEnhanced = false,
779
+ maxLength?: number): Element|null {
780
780
  let frame = Trace.Helpers.Trace.getZeroIndexedStackTraceInEventPayload(event)?.[0];
781
781
  if (Trace.Types.Events.isProfileCall(event)) {
782
782
  frame = event.callFrame;
@@ -832,29 +832,28 @@ export class TimelineUIUtils {
832
832
  return div;
833
833
  }
834
834
 
835
- static buildConsumeCacheDetails(
836
- eventData: {
837
- consumedCacheSize?: number,
838
- cacheRejected?: boolean,
839
- cacheKind?: string,
840
- },
841
- contentHelper: TimelineDetailsContentHelper): void {
835
+ static buildConsumeCacheDetails(eventData: {
836
+ consumedCacheSize?: number,
837
+ cacheRejected?: boolean,
838
+ cacheKind?: string,
839
+ },
840
+ contentHelper: TimelineDetailsContentHelper): void {
842
841
  if (typeof eventData.consumedCacheSize === 'number') {
843
- contentHelper.appendTextRow(
844
- i18nString(UIStrings.compilationCacheStatus), i18nString(UIStrings.scriptLoadedFromCache));
845
- contentHelper.appendTextRow(
846
- i18nString(UIStrings.compilationCacheSize), i18n.ByteUtilities.bytesToString(eventData.consumedCacheSize));
842
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
843
+ i18nString(UIStrings.scriptLoadedFromCache));
844
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
845
+ i18n.ByteUtilities.bytesToString(eventData.consumedCacheSize));
847
846
  const cacheKind = eventData.cacheKind;
848
847
  if (cacheKind) {
849
848
  contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheKind), cacheKind);
850
849
  }
851
850
  } else if ('cacheRejected' in eventData && eventData['cacheRejected']) {
852
851
  // Version mismatch or similar.
853
- contentHelper.appendTextRow(
854
- i18nString(UIStrings.compilationCacheStatus), i18nString(UIStrings.failedToLoadScriptFromCache));
852
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
853
+ i18nString(UIStrings.failedToLoadScriptFromCache));
855
854
  } else {
856
- contentHelper.appendTextRow(
857
- i18nString(UIStrings.compilationCacheStatus), i18nString(UIStrings.scriptNotEligibleToBeLoadedFromCache));
855
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheStatus),
856
+ i18nString(UIStrings.scriptNotEligibleToBeLoadedFromCache));
858
857
  }
859
858
  }
860
859
 
@@ -970,8 +969,8 @@ export class TimelineUIUtils {
970
969
  event,
971
970
  parsedTrace,
972
971
  );
973
- contentHelper.appendTextRow(
974
- i18nString(UIStrings.timestamp), i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
972
+ contentHelper.appendTextRow(i18nString(UIStrings.timestamp),
973
+ i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
975
974
  }
976
975
 
977
976
  // Only show total time and self time for events with non-zero durations.
@@ -1006,16 +1005,16 @@ export class TimelineUIUtils {
1006
1005
  if (url) {
1007
1006
  contentHelper.appendElementRow(i18nString(UIStrings.url), LegacyComponents.Linkifier.Linkifier.linkifyURL(url));
1008
1007
  }
1009
- contentHelper.appendElementRow(
1010
- i18nString(UIStrings.details), TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
1008
+ contentHelper.appendElementRow(i18nString(UIStrings.details),
1009
+ TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
1011
1010
  }
1012
1011
 
1013
1012
  if (Trace.Types.Events.isV8Compile(event)) {
1014
1013
  url = event.args.data?.url as Platform.DevToolsPath.UrlString;
1015
1014
  if (url) {
1016
1015
  const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
1017
- contentHelper.appendLocationRow(
1018
- i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined, true);
1016
+ contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
1017
+ true);
1019
1018
  const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
1020
1019
  if (originWithEntity) {
1021
1020
  contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
@@ -1028,9 +1027,8 @@ export class TimelineUIUtils {
1028
1027
  }
1029
1028
 
1030
1029
  const isStreamed = Boolean(event.args.data?.streamed);
1031
- contentHelper.appendTextRow(
1032
- i18nString(UIStrings.streamed),
1033
- isStreamed + (isStreamed ? '' : `: ${event.args.data?.notStreamedReason || ''}`));
1030
+ contentHelper.appendTextRow(i18nString(UIStrings.streamed),
1031
+ isStreamed + (isStreamed ? '' : `: ${event.args.data?.notStreamedReason || ''}`));
1034
1032
  if (event.args.data) {
1035
1033
  TimelineUIUtils.buildConsumeCacheDetails(event.args.data, contentHelper);
1036
1034
  }
@@ -1070,8 +1068,7 @@ export class TimelineUIUtils {
1070
1068
  }
1071
1069
  }
1072
1070
 
1073
- const isFreshOrEnhanced =
1074
- Boolean(parsedTrace && Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace));
1071
+ const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
1075
1072
 
1076
1073
  switch (event.name) {
1077
1074
  case Trace.Types.Events.Name.GC:
@@ -1091,9 +1088,8 @@ export class TimelineUIUtils {
1091
1088
  }
1092
1089
  const callFrame = profileCall.callFrame;
1093
1090
  // Render the URL with its location content.
1094
- contentHelper.appendLocationRow(
1095
- i18nString(UIStrings.source), resolvedURL, callFrame.lineNumber || 0, callFrame.columnNumber, undefined,
1096
- true);
1091
+ contentHelper.appendLocationRow(i18nString(UIStrings.source), resolvedURL, callFrame.lineNumber || 0,
1092
+ callFrame.columnNumber, undefined, true);
1097
1093
  const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, profileCall);
1098
1094
  if (originWithEntity) {
1099
1095
  contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
@@ -1121,8 +1117,8 @@ export class TimelineUIUtils {
1121
1117
  contentHelper.appendTextRow(i18nString(UIStrings.timerId), unsafeEventData.timerId);
1122
1118
 
1123
1119
  if (event.name === Trace.Types.Events.Name.TIMER_INSTALL) {
1124
- contentHelper.appendTextRow(
1125
- i18nString(UIStrings.timeout), i18n.TimeUtilities.millisToString(unsafeEventData['timeout']));
1120
+ contentHelper.appendTextRow(i18nString(UIStrings.timeout),
1121
+ i18n.TimeUtilities.millisToString(unsafeEventData['timeout']));
1126
1122
  contentHelper.appendTextRow(i18nString(UIStrings.repeats), !unsafeEventData['singleShot']);
1127
1123
  }
1128
1124
  break;
@@ -1130,8 +1126,8 @@ export class TimelineUIUtils {
1130
1126
 
1131
1127
  case Trace.Types.Events.Name.SCHEDULE_POST_TASK_CALLBACK:
1132
1128
  case Trace.Types.Events.Name.RUN_POST_TASK_CALLBACK: {
1133
- contentHelper.appendTextRow(
1134
- i18nString(UIStrings.delay), i18n.TimeUtilities.millisToString(unsafeEventData['delay']));
1129
+ contentHelper.appendTextRow(i18nString(UIStrings.delay),
1130
+ i18n.TimeUtilities.millisToString(unsafeEventData['delay']));
1135
1131
  contentHelper.appendTextRow(i18nString(UIStrings.priority), unsafeEventData['priority']);
1136
1132
  break;
1137
1133
  }
@@ -1152,9 +1148,8 @@ export class TimelineUIUtils {
1152
1148
 
1153
1149
  case Trace.Types.Events.Name.CACHE_MODULE: {
1154
1150
  url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
1155
- contentHelper.appendTextRow(
1156
- i18nString(UIStrings.compilationCacheSize),
1157
- i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
1151
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
1152
+ i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
1158
1153
  break;
1159
1154
  }
1160
1155
 
@@ -1162,17 +1157,16 @@ export class TimelineUIUtils {
1162
1157
  url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
1163
1158
  if (url) {
1164
1159
  const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
1165
- contentHelper.appendLocationRow(
1166
- i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined, true);
1160
+ contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
1161
+ true);
1167
1162
  const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
1168
1163
  if (originWithEntity) {
1169
1164
  contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
1170
1165
  }
1171
1166
  entityAppended = true;
1172
1167
  }
1173
- contentHelper.appendTextRow(
1174
- i18nString(UIStrings.compilationCacheSize),
1175
- i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
1168
+ contentHelper.appendTextRow(i18nString(UIStrings.compilationCacheSize),
1169
+ i18n.ByteUtilities.bytesToString(unsafeEventData['producedCacheSize']));
1176
1170
  break;
1177
1171
  }
1178
1172
 
@@ -1180,8 +1174,8 @@ export class TimelineUIUtils {
1180
1174
  url = unsafeEventData && unsafeEventData['url'] as Platform.DevToolsPath.UrlString;
1181
1175
  if (url) {
1182
1176
  const {lineNumber, columnNumber} = Trace.Helpers.Trace.getZeroIndexedLineAndColumnForEvent(event);
1183
- contentHelper.appendLocationRow(
1184
- i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined, true);
1177
+ contentHelper.appendLocationRow(i18nString(UIStrings.script), url, lineNumber || 0, columnNumber, undefined,
1178
+ true);
1185
1179
  const originWithEntity = this.getOriginWithEntity(entityMapper, parsedTrace, event);
1186
1180
  if (originWithEntity) {
1187
1181
  contentHelper.appendElementRow(i18nString(UIStrings.origin), originWithEntity);
@@ -1232,8 +1226,8 @@ export class TimelineUIUtils {
1232
1226
  tabStop: true,
1233
1227
  showColumnNumber: false,
1234
1228
  };
1235
- contentHelper.appendElementRow(
1236
- i18nString(UIStrings.imageUrl), LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
1229
+ contentHelper.appendElementRow(i18nString(UIStrings.imageUrl),
1230
+ LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
1237
1231
  }
1238
1232
  break;
1239
1233
  }
@@ -1245,8 +1239,8 @@ export class TimelineUIUtils {
1245
1239
  tabStop: true,
1246
1240
  showColumnNumber: false,
1247
1241
  };
1248
- contentHelper.appendElementRow(
1249
- i18nString(UIStrings.stylesheetUrl), LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
1242
+ contentHelper.appendElementRow(i18nString(UIStrings.stylesheetUrl),
1243
+ LegacyComponents.Linkifier.Linkifier.linkifyURL(url, options));
1250
1244
  }
1251
1245
  break;
1252
1246
  }
@@ -1323,8 +1317,8 @@ export class TimelineUIUtils {
1323
1317
  // The failureReasons can be empty when Blink added a new failure reason that is
1324
1318
  // not supported by DevTools yet
1325
1319
  if (failureReasons.size === 0) {
1326
- contentHelper.appendElementRow(
1327
- i18nString(UIStrings.compositingFailed), i18nString(UIStrings.compositingFailedUnknownReason), true);
1320
+ contentHelper.appendElementRow(i18nString(UIStrings.compositingFailed),
1321
+ i18nString(UIStrings.compositingFailedUnknownReason), true);
1328
1322
  } else {
1329
1323
  for (const reason of failureReasons) {
1330
1324
  let str;
@@ -1413,9 +1407,8 @@ export class TimelineUIUtils {
1413
1407
 
1414
1408
  // @ts-expect-error Fall-through intended.
1415
1409
  case Trace.Types.Events.Name.FIRE_IDLE_CALLBACK: {
1416
- contentHelper.appendTextRow(
1417
- i18nString(UIStrings.allottedTime),
1418
- i18n.TimeUtilities.millisToString(unsafeEventData['allottedMilliseconds']));
1410
+ contentHelper.appendTextRow(i18nString(UIStrings.allottedTime),
1411
+ i18n.TimeUtilities.millisToString(unsafeEventData['allottedMilliseconds']));
1419
1412
  contentHelper.appendTextRow(i18nString(UIStrings.invokedByTimeout), unsafeEventData['timedOut']);
1420
1413
  }
1421
1414
 
@@ -1424,9 +1417,8 @@ export class TimelineUIUtils {
1424
1417
  contentHelper.appendTextRow(i18nString(UIStrings.callbackId), unsafeEventData['id']);
1425
1418
 
1426
1419
  if (Trace.Types.Events.isRequestIdleCallback(event)) {
1427
- contentHelper.appendTextRow(
1428
- i18nString(UIStrings.requestIdleCallbackTimeout),
1429
- i18n.TimeUtilities.preciseMillisToString(event.args.data.timeout));
1420
+ contentHelper.appendTextRow(i18nString(UIStrings.requestIdleCallbackTimeout),
1421
+ i18n.TimeUtilities.preciseMillisToString(event.args.data.timeout));
1430
1422
  }
1431
1423
  break;
1432
1424
  }
@@ -1453,12 +1445,12 @@ export class TimelineUIUtils {
1453
1445
  parsedTrace,
1454
1446
  );
1455
1447
 
1456
- contentHelper.appendTextRow(
1457
- i18nString(UIStrings.timestamp), i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
1448
+ contentHelper.appendTextRow(i18nString(UIStrings.timestamp),
1449
+ i18n.TimeUtilities.preciseMillisToString(adjustedEventTimeStamp, 1));
1458
1450
 
1459
1451
  if (Trace.Types.Events.isMarkerEvent(event)) {
1460
- contentHelper.appendElementRow(
1461
- i18nString(UIStrings.details), TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
1452
+ contentHelper.appendElementRow(i18nString(UIStrings.details),
1453
+ TimelineUIUtils.buildDetailsNodeForMarkerEvents(event));
1462
1454
  }
1463
1455
 
1464
1456
  break;
@@ -1582,15 +1574,14 @@ export class TimelineUIUtils {
1582
1574
  return highlightContainer;
1583
1575
  }
1584
1576
 
1585
- static stackTraceFromCallFrames(callFrames: Protocol.Runtime.CallFrame[]|Trace.Types.Events.CallFrame[]):
1586
- Protocol.Runtime.StackTrace {
1577
+ static stackTraceFromCallFrames(callFrames: Protocol.Runtime.CallFrame[]|
1578
+ Trace.Types.Events.CallFrame[]): Protocol.Runtime.StackTrace {
1587
1579
  return {callFrames} as Protocol.Runtime.StackTrace;
1588
1580
  }
1589
1581
 
1590
1582
  /** This renders a stack trace... and other cool stuff. */
1591
- static async generateCauses(
1592
- event: Trace.Types.Events.Event, contentHelper: TimelineDetailsContentHelper,
1593
- parsedTrace: Trace.TraceModel.ParsedTrace): Promise<void> {
1583
+ static async generateCauses(event: Trace.Types.Events.Event, contentHelper: TimelineDetailsContentHelper,
1584
+ parsedTrace: Trace.TraceModel.ParsedTrace): Promise<void> {
1594
1585
  const {startTime} = Trace.Helpers.Timing.eventTimingsMilliSeconds(event);
1595
1586
  let initiatorStackLabel = i18nString(UIStrings.initiatorStackTrace);
1596
1587
  await contentHelper.appendFunctionStackTraceSection(event, parsedTrace);
@@ -1622,8 +1613,9 @@ export class TimelineUIUtils {
1622
1613
  // and the time since the initiator (Pending For).
1623
1614
  const stackTrace = Trace.Helpers.Trace.getZeroIndexedStackTraceInEventPayload(initiator);
1624
1615
  if (stackTrace) {
1625
- const traceElement =
1626
- await contentHelper.createChildStackTraceElement(TimelineUIUtils.stackTraceFromCallFrames(stackTrace));
1616
+ const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
1617
+ const traceElement = await contentHelper.createChildStackTraceElement(
1618
+ TimelineUIUtils.stackTraceFromCallFrames(stackTrace), isFreshOrEnhanced);
1627
1619
  contentHelper.appendSectionWithBodyIfExists(initiatorStackLabel, {body: traceElement});
1628
1620
  }
1629
1621
 
@@ -1701,9 +1693,8 @@ export class TimelineUIUtils {
1701
1693
  return link;
1702
1694
  }
1703
1695
 
1704
- private static async generateInvalidationsList(
1705
- invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
1706
- contentHelper: TimelineDetailsContentHelper): Promise<void> {
1696
+ private static async generateInvalidationsList(invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
1697
+ contentHelper: TimelineDetailsContentHelper): Promise<void> {
1707
1698
  const {groupedByReason, backendNodeIds} = TimelineComponents.DetailsView.generateInvalidationsList(invalidations);
1708
1699
 
1709
1700
  let relatedNodesMap: Map<number, SDK.DOMModel.DOMNode|null>|null = null;
@@ -1718,9 +1709,10 @@ export class TimelineUIUtils {
1718
1709
  });
1719
1710
  }
1720
1711
 
1721
- private static generateInvalidationsForReason(
1722
- reason: string, invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
1723
- relatedNodesMap: Map<number, SDK.DOMModel.DOMNode|null>|null, contentHelper: TimelineDetailsContentHelper): void {
1712
+ private static generateInvalidationsForReason(reason: string,
1713
+ invalidations: Trace.Types.Events.InvalidationTrackingEvent[],
1714
+ relatedNodesMap: Map<number, SDK.DOMModel.DOMNode|null>|null,
1715
+ contentHelper: TimelineDetailsContentHelper): void {
1724
1716
  function createLinkForInvalidationNode(invalidation: Trace.Types.Events.InvalidationTrackingEvent):
1725
1717
  HTMLSpanElement {
1726
1718
  const node = (invalidation.args.data.nodeId && relatedNodesMap) ?
@@ -1759,10 +1751,9 @@ export class TimelineUIUtils {
1759
1751
 
1760
1752
  const niceNodeLink = createLinkForInvalidationNode(invalidation);
1761
1753
 
1762
- const text = scriptLink ?
1763
- uiI18n.getFormatLocalizedString(
1764
- str_, UIStrings.invalidationWithCallFrame, {PH1: niceNodeLink, PH2: scriptLink}) as HTMLElement :
1765
- niceNodeLink;
1754
+ const text = scriptLink ? uiI18n.getFormatLocalizedString(str_, UIStrings.invalidationWithCallFrame,
1755
+ {PH1: niceNodeLink, PH2: scriptLink}) as HTMLElement :
1756
+ niceNodeLink;
1766
1757
 
1767
1758
  // Sometimes we can get different Invalidation events which cause
1768
1759
  // the same text for the same element for the same reason to be
@@ -1780,9 +1771,8 @@ export class TimelineUIUtils {
1780
1771
  }
1781
1772
 
1782
1773
  /** Populates the passed object then returns true/false if it makes sense to show the pie chart */
1783
- private static aggregatedStatsForTraceEvent(
1784
- total: TimeRangeCategoryStats, parsedTrace: Trace.TraceModel.ParsedTrace,
1785
- event: Trace.Types.Events.Event): boolean {
1774
+ private static aggregatedStatsForTraceEvent(total: TimeRangeCategoryStats, parsedTrace: Trace.TraceModel.ParsedTrace,
1775
+ event: Trace.Types.Events.Event): boolean {
1786
1776
  const node = parsedTrace.data.Renderer.entryToNode.get(event);
1787
1777
  if (!node) {
1788
1778
  return false;
@@ -1831,9 +1821,8 @@ export class TimelineUIUtils {
1831
1821
  return true;
1832
1822
  }
1833
1823
 
1834
- static async buildPicturePreviewContent(
1835
- parsedTrace: Trace.TraceModel.ParsedTrace, event: Trace.Types.Events.Paint,
1836
- target: SDK.Target.Target): Promise<Element|null> {
1824
+ static async buildPicturePreviewContent(parsedTrace: Trace.TraceModel.ParsedTrace, event: Trace.Types.Events.Paint,
1825
+ target: SDK.Target.Target): Promise<Element|null> {
1837
1826
  const snapshotEvent = parsedTrace.data.LayerTree.paintsToSnapshots.get(event);
1838
1827
  if (!snapshotEvent) {
1839
1828
  return null;
@@ -1890,8 +1879,8 @@ export class TimelineUIUtils {
1890
1879
  const {startTime: eventStartTime} = Trace.Helpers.Timing.eventTimingsMilliSeconds(event);
1891
1880
 
1892
1881
  const startTime = i18n.TimeUtilities.millisToString(eventStartTime - zeroTime);
1893
- UI.Tooltip.Tooltip.install(
1894
- eventDivider, i18nString(UIStrings.sAtS, {PH1: TimelineUIUtils.eventTitle(event), PH2: startTime}));
1882
+ UI.Tooltip.Tooltip.install(eventDivider,
1883
+ i18nString(UIStrings.sAtS, {PH1: TimelineUIUtils.eventTitle(event), PH2: startTime}));
1895
1884
  const style = TimelineUIUtils.markerStyleForEvent(event);
1896
1885
  if (style.tall) {
1897
1886
  eventDivider.style.backgroundColor = style.color;
@@ -1909,9 +1898,8 @@ export class TimelineUIUtils {
1909
1898
  return Trace.Styles.getCategoryStyles();
1910
1899
  }
1911
1900
 
1912
- static generatePieChart(
1913
- aggregatedStats: TimeRangeCategoryStats, selfCategory?: Trace.Styles.TimelineCategory,
1914
- selfTime?: Trace.Types.Timing.Micro): Element {
1901
+ static generatePieChart(aggregatedStats: TimeRangeCategoryStats, selfCategory?: Trace.Styles.TimelineCategory,
1902
+ selfTime?: Trace.Types.Timing.Micro): Element {
1915
1903
  let total = 0;
1916
1904
  for (const categoryName in aggregatedStats) {
1917
1905
  total += aggregatedStats[categoryName];
@@ -1983,9 +1971,9 @@ export class TimelineUIUtils {
1983
1971
  return element;
1984
1972
  }
1985
1973
 
1986
- static generateDetailsContentForFrame(
1987
- frame: Trace.Types.Events.LegacyTimelineFrame, filmStrip: Trace.Extras.FilmStrip.Data|null,
1988
- filmStripFrame: Trace.Extras.FilmStrip.Frame|null): DocumentFragment {
1974
+ static generateDetailsContentForFrame(frame: Trace.Types.Events.LegacyTimelineFrame,
1975
+ filmStrip: Trace.Extras.FilmStrip.Data|null,
1976
+ filmStripFrame: Trace.Extras.FilmStrip.Frame|null): DocumentFragment {
1989
1977
  const contentHelper = new TimelineDetailsContentHelper(null, null);
1990
1978
  contentHelper.addSection(i18nString(UIStrings.frame));
1991
1979
 
@@ -2036,10 +2024,10 @@ export class TimelineUIUtils {
2036
2024
  const green = 'hsl(90,100%,40%)';
2037
2025
  const purple = 'hsl(256,100%,75%)';
2038
2026
  eventDispatchDesciptors = [
2039
- new EventDispatchTypeDescriptor(
2040
- 1, lightOrange, ['mousemove', 'mouseenter', 'mouseleave', 'mouseout', 'mouseover']),
2041
- new EventDispatchTypeDescriptor(
2042
- 1, lightOrange, ['pointerover', 'pointerout', 'pointerenter', 'pointerleave', 'pointermove']),
2027
+ new EventDispatchTypeDescriptor(1, lightOrange,
2028
+ ['mousemove', 'mouseenter', 'mouseleave', 'mouseout', 'mouseover']),
2029
+ new EventDispatchTypeDescriptor(1, lightOrange,
2030
+ ['pointerover', 'pointerout', 'pointerenter', 'pointerleave', 'pointermove']),
2043
2031
  new EventDispatchTypeDescriptor(2, green, ['wheel']),
2044
2032
  new EventDispatchTypeDescriptor(3, orange, ['click', 'mousedown', 'mouseup']),
2045
2033
  new EventDispatchTypeDescriptor(3, orange, ['touchstart', 'touchend', 'touchmove', 'touchcancel']),
@@ -2121,17 +2109,16 @@ export class TimelineUIUtils {
2121
2109
 
2122
2110
  static colorForId(id: string): string {
2123
2111
  if (!colorGenerator) {
2124
- colorGenerator = new Common.Color.Generator(
2125
- {
2126
- min: 30,
2127
- max: 330,
2128
- },
2129
- {
2130
- min: 50,
2131
- max: 80,
2132
- count: 3,
2133
- },
2134
- 85);
2112
+ colorGenerator = new Common.Color.Generator({
2113
+ min: 30,
2114
+ max: 330,
2115
+ },
2116
+ {
2117
+ min: 50,
2118
+ max: 80,
2119
+ count: 3,
2120
+ },
2121
+ 85);
2135
2122
  colorGenerator.setColorForID('', '#f2ecdc');
2136
2123
  }
2137
2124
  return colorGenerator.colorForID(id);
@@ -2143,9 +2130,8 @@ export class TimelineUIUtils {
2143
2130
  frame.url.slice(0, trimAt);
2144
2131
  }
2145
2132
 
2146
- static getOriginWithEntity(
2147
- entityMapper: Trace.EntityMapper.EntityMapper|null, parsedTrace: Trace.TraceModel.ParsedTrace,
2148
- event: Trace.Types.Events.Event): string|null {
2133
+ static getOriginWithEntity(entityMapper: Trace.EntityMapper.EntityMapper|null,
2134
+ parsedTrace: Trace.TraceModel.ParsedTrace, event: Trace.Types.Events.Event): string|null {
2149
2135
  const resolvedURL = SourceMapsResolver.SourceMapsResolver.resolvedURLForEntry(
2150
2136
  parsedTrace, event, Workspace.Workspace.WorkspaceImpl.instance());
2151
2137
  if (!resolvedURL) {
@@ -2182,6 +2168,26 @@ export class EventDispatchTypeDescriptor {
2182
2168
  }
2183
2169
  }
2184
2170
 
2171
+ /**
2172
+ * When loading a trace file (non-fresh recording), the scriptIds in the trace
2173
+ * are from the recorded page and are guaranteed to collide with scriptIds of
2174
+ * the currently active inspected page. We strip them from the stack trace
2175
+ * to force the stack trace rendering machinery to fall back to URL-based resolution
2176
+ * instead of incorrectly matching the active page's script IDs.
2177
+ */
2178
+ export function stripScriptIds(stackTrace: Protocol.Runtime.StackTrace): Protocol.Runtime.StackTrace {
2179
+ const callFrames = stackTrace.callFrames.map(frame => ({
2180
+ ...frame,
2181
+ scriptId: '' as Protocol.Runtime.ScriptId,
2182
+ }));
2183
+ const parent = stackTrace.parent ? stripScriptIds(stackTrace.parent) : undefined;
2184
+ return {
2185
+ ...stackTrace,
2186
+ callFrames,
2187
+ parent,
2188
+ };
2189
+ }
2190
+
2185
2191
  export class TimelineDetailsContentHelper {
2186
2192
  fragment: DocumentFragment;
2187
2193
  #linkifier: LegacyComponents.Linkifier.Linkifier|null;
@@ -2260,7 +2266,8 @@ export class TimelineDetailsContentHelper {
2260
2266
  if (!stackTraceForEvent) {
2261
2267
  return;
2262
2268
  }
2263
- const traceElement = await this.createChildStackTraceElement(stackTraceForEvent);
2269
+ const isFreshOrEnhanced = Tracing.FreshRecording.Tracker.instance().recordingIsFreshOrEnhanced(parsedTrace);
2270
+ const traceElement = await this.createChildStackTraceElement(stackTraceForEvent, isFreshOrEnhanced);
2264
2271
  this.appendSectionWithBodyIfExists(i18nString(UIStrings.functionStack), {body: traceElement});
2265
2272
  }
2266
2273
 
@@ -2293,8 +2300,8 @@ export class TimelineDetailsContentHelper {
2293
2300
  }
2294
2301
  }
2295
2302
 
2296
- appendLocationRow(
2297
- title: string, url: string, startLine: number, startColumn?: number, text?: string, omitOrigin?: boolean): void {
2303
+ appendLocationRow(title: string, url: string, startLine: number, startColumn?: number, text?: string,
2304
+ omitOrigin?: boolean): void {
2298
2305
  if (!this.#linkifier) {
2299
2306
  return;
2300
2307
  }
@@ -2306,8 +2313,8 @@ export class TimelineDetailsContentHelper {
2306
2313
  text,
2307
2314
  omitOrigin,
2308
2315
  };
2309
- const link = this.#linkifier.maybeLinkifyScriptLocation(
2310
- this.target, null, url as Platform.DevToolsPath.UrlString, startLine, options);
2316
+ const link = this.#linkifier.maybeLinkifyScriptLocation(this.target, null, url as Platform.DevToolsPath.UrlString,
2317
+ startLine, options);
2311
2318
  if (!link) {
2312
2319
  return;
2313
2320
  }
@@ -2324,8 +2331,8 @@ export class TimelineDetailsContentHelper {
2324
2331
  return;
2325
2332
  }
2326
2333
  locationContent.appendChild(link);
2327
- UI.UIUtils.createTextChild(
2328
- locationContent, Platform.StringUtilities.sprintf(' [%s…%s]', startLine + 1, (endLine || 0) + 1 || ''));
2334
+ UI.UIUtils.createTextChild(locationContent,
2335
+ Platform.StringUtilities.sprintf(' [%s…%s]', startLine + 1, (endLine || 0) + 1 || ''));
2329
2336
  this.appendElementRow(title, locationContent);
2330
2337
  }
2331
2338
 
@@ -2333,7 +2340,10 @@ export class TimelineDetailsContentHelper {
2333
2340
  * Creates a stack trace element for the given trace, but checks if it
2334
2341
  * contains any entries, and discards it if it's empty.
2335
2342
  */
2336
- async createChildStackTraceElement(runtimeStackTrace: Protocol.Runtime.StackTrace): Promise<HTMLElement|null> {
2343
+ async createChildStackTraceElement(
2344
+ runtimeStackTrace: Protocol.Runtime.StackTrace,
2345
+ isFreshOrEnhanced?: boolean,
2346
+ ): Promise<HTMLElement|null> {
2337
2347
  // Fallback to the main page/root target. Maybe the main page has a source map we need.
2338
2348
  // Worst case the stack is identity mapped.
2339
2349
  const targetManager = SDK.TargetManager.TargetManager.instance();
@@ -2342,9 +2352,14 @@ export class TimelineDetailsContentHelper {
2342
2352
  return null;
2343
2353
  }
2344
2354
 
2355
+ // If the trace is non-fresh and not enhanced, this means that any active
2356
+ // sourcemaps are not related to the trace, and therefore we do not want to
2357
+ // use them.
2358
+ const stackTraceToUse = isFreshOrEnhanced ? runtimeStackTrace : stripScriptIds(runtimeStackTrace);
2359
+
2345
2360
  const stackTrace =
2346
2361
  await Bindings.DebuggerWorkspaceBinding.DebuggerWorkspaceBinding.instance().createStackTraceFromProtocolRuntime(
2347
- runtimeStackTrace, target);
2362
+ stackTraceToUse, target);
2348
2363
  const callFrameContents = new LegacyComponents.JSPresentationUtils.StackTracePreviewContent();
2349
2364
  callFrameContents.options = {tabStops: true, showColumnNumber: true};
2350
2365
  callFrameContents.stackTrace = stackTrace;
@@ -2433,8 +2448,8 @@ export function isMarkerEvent(parsedTrace: Trace.TraceModel.ParsedTrace, event:
2433
2448
  return false;
2434
2449
  }
2435
2450
 
2436
- function getEventSelfTime(
2437
- event: Trace.Types.Events.Event, parsedTrace: Trace.TraceModel.ParsedTrace): Trace.Types.Timing.Micro {
2451
+ function getEventSelfTime(event: Trace.Types.Events.Event,
2452
+ parsedTrace: Trace.TraceModel.ParsedTrace): Trace.Types.Timing.Micro {
2438
2453
  const mapToUse = Trace.Types.Extensions.isSyntheticExtensionEntry(event) ?
2439
2454
  parsedTrace.data.ExtensionTraceData.entryToNode :
2440
2455
  parsedTrace.data.Renderer.entryToNode;
@@ -101,8 +101,9 @@ UI.ViewManager.registerViewExtension({
101
101
  order: 50,
102
102
  async loadView(universe) {
103
103
  const Timeline = await loadTimelineModule();
104
- const {pageResourceLoader: resourceLoader} = universe;
105
- return Timeline.TimelinePanel.TimelinePanel.instance({forceNew: true, resourceLoader});
104
+ const {pageResourceLoader: resourceLoader, targetManager, isolateManager} = universe;
105
+ return Timeline.TimelinePanel.TimelinePanel.instance(
106
+ {forceNew: true, resourceLoader, targetManager, isolateManager});
106
107
  },
107
108
  });
108
109
 
@@ -1,7 +1,7 @@
1
1
  Name: Dependencies sourced from the upstream `chromium` repository
2
2
  URL: Internal
3
3
  Version: N/A
4
- Revision: 3b182a93aa48827df1b3cec658c8b9de8d324d54
4
+ Revision: 27fac8d1924b08d4a6bb70e21df6482a1d430b2b
5
5
  Update Mechanism: Manual (https://crbug.com/428069060)
6
6
  License: BSD-3-Clause
7
7
  License File: LICENSE
@@ -55,13 +55,19 @@ export class Report extends HTMLElement {
55
55
  #render(): void {
56
56
  // Disabled until https://crbug.com/1079231 is fixed.
57
57
  // clang-format off
58
+ const hasToolbar = this.querySelector('[slot="toolbar"]') !== null;
58
59
  render(html`
59
60
  <style>${reportStyles}</style>
60
- ${this.#reportTitle ? html`<h1 class="report-title">
61
- ${this.#reportTitle}
62
- ${this.#reportUrl ? Components.Linkifier.Linkifier.linkifyURL(this.#reportUrl, {
63
- tabStop: true, jslogContext: 'source-location', className: 'report-url'}) : nothing}
64
- </h1>` : nothing}
61
+ ${(this.#reportTitle || hasToolbar) ? html`
62
+ <div class="report-header-wrapper">
63
+ ${this.#reportTitle ? html`<h1 class="report-title">
64
+ ${this.#reportTitle}
65
+ ${this.#reportUrl ? Components.Linkifier.Linkifier.linkifyURL(this.#reportUrl, {
66
+ tabStop: true, jslogContext: 'source-location', className: 'report-url'}) : nothing}
67
+ </h1>` : nothing}
68
+ <slot name="toolbar"></slot>
69
+ </div>
70
+ ` : nothing}
65
71
  <div class="content">
66
72
  <slot></slot>
67
73
  </div>
@@ -16,13 +16,16 @@
16
16
  margin: var(--sys-size-5) 0;
17
17
  }
18
18
 
19
+ .report-header-wrapper {
20
+ border-bottom: 1px solid var(--sys-color-divider);
21
+ }
22
+
19
23
  .report-title {
20
24
  padding: var(--sys-size-7) var(--sys-size-9);
21
25
  font: var(--sys-typescale-headline4);
22
26
  white-space: nowrap;
23
27
  overflow: hidden;
24
28
  text-overflow: ellipsis;
25
- border-bottom: 1px solid var(--sys-color-divider);
26
29
  color: var(--sys-color-on-surface);
27
30
  background-color: var(--sys-color-cdt-base-container);
28
31
  margin: 0;