chrome-devtools-frontend 1.0.1515446 → 1.0.1515988

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 (215) hide show
  1. package/docs/contributing/infrastructure.md +131 -82
  2. package/front_end/Tests.js +3 -29
  3. package/front_end/core/common/Progress.ts +73 -55
  4. package/front_end/core/host/UserMetrics.ts +0 -1
  5. package/front_end/core/protocol_client/InspectorBackend.ts +2 -0
  6. package/front_end/core/root/Runtime.ts +0 -1
  7. package/front_end/core/sdk/CSSMatchedStyles.ts +12 -10
  8. package/front_end/core/sdk/CSSModel.ts +1 -31
  9. package/front_end/core/sdk/CSSPropertyParserMatchers.ts +27 -7
  10. package/front_end/core/sdk/DebuggerModel.ts +1 -31
  11. package/front_end/core/sdk/EnhancedTracesParser.ts +81 -50
  12. package/front_end/core/sdk/NetworkManager.ts +1 -31
  13. package/front_end/core/sdk/NetworkRequest.ts +1 -31
  14. package/front_end/core/sdk/RehydratingConnection.snapshot.txt +1003 -0
  15. package/front_end/core/sdk/RehydratingConnection.ts +13 -18
  16. package/front_end/core/sdk/RehydratingObject.ts +8 -31
  17. package/front_end/core/sdk/RemoteObject.ts +1 -31
  18. package/front_end/core/sdk/ResourceTreeModel.ts +1 -31
  19. package/front_end/core/sdk/RuntimeModel.ts +1 -31
  20. package/front_end/core/sdk/ServiceWorkerManager.ts +1 -31
  21. package/front_end/core/sdk/SourceMap.ts +1 -31
  22. package/front_end/core/sdk/TraceObject.ts +8 -3
  23. package/front_end/entrypoints/main/MainImpl.ts +0 -2
  24. package/front_end/entrypoints/main/main-meta.ts +2 -2
  25. package/front_end/generated/InspectorBackendCommands.js +4 -4
  26. package/front_end/generated/SupportedCSSProperties.js +12 -0
  27. package/front_end/generated/protocol.ts +10 -1
  28. package/front_end/models/ai_assistance/AiHistoryStorage.ts +1 -3
  29. package/front_end/models/ai_assistance/ConversationHandler.ts +4 -6
  30. package/front_end/models/ai_assistance/agents/AiAgent.ts +4 -1
  31. package/front_end/models/ai_assistance/agents/PerformanceAgent.ts +107 -72
  32. package/front_end/models/ai_assistance/agents/PerformanceAnnotationsAgent.ts +2 -2
  33. package/front_end/models/ai_assistance/agents/StylingAgent.ts +2 -2
  34. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +178 -85
  35. package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.ts +308 -218
  36. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.snapshot.txt +161 -97
  37. package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +78 -58
  38. package/front_end/models/ai_assistance/data_formatters/UnitFormatters.ts +10 -1
  39. package/front_end/models/ai_assistance/performance/AIContext.ts +19 -21
  40. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +123 -55
  41. package/front_end/models/bindings/ContentProviderBasedProject.ts +6 -4
  42. package/front_end/models/breakpoints/BreakpointManager.ts +3 -3
  43. package/front_end/models/har/Writer.ts +11 -11
  44. package/front_end/models/javascript_metadata/NativeFunctions.js +7 -7
  45. package/front_end/models/persistence/FileSystemWorkspaceBinding.ts +3 -3
  46. package/front_end/models/persistence/IsolatedFileSystem.ts +4 -4
  47. package/front_end/models/persistence/IsolatedFileSystemManager.ts +7 -7
  48. package/front_end/models/persistence/PersistenceImpl.ts +8 -8
  49. package/front_end/models/persistence/PlatformFileSystem.ts +1 -1
  50. package/front_end/models/text_utils/TextUtils.ts +26 -0
  51. package/front_end/models/trace/ModelImpl.ts +2 -16
  52. package/front_end/models/trace/Processor.ts +14 -8
  53. package/front_end/models/trace/handlers/AuctionWorkletsHandler.ts +4 -4
  54. package/front_end/models/trace/handlers/FramesHandler.ts +2 -2
  55. package/front_end/models/trace/handlers/LayoutShiftsHandler.ts +7 -10
  56. package/front_end/models/trace/handlers/MetaHandler.ts +11 -9
  57. package/front_end/models/trace/handlers/ScreenshotsHandler.ts +1 -1
  58. package/front_end/models/trace/handlers/ScriptsHandler.ts +5 -5
  59. package/front_end/models/trace/handlers/UserInteractionsHandler.ts +2 -14
  60. package/front_end/models/trace/handlers/UserTimingsHandler.ts +3 -4
  61. package/front_end/models/trace/insights/CLSCulprits.ts +1 -1
  62. package/front_end/models/trace/insights/DocumentLatency.ts +8 -7
  63. package/front_end/models/trace/insights/DuplicatedJavaScript.ts +1 -1
  64. package/front_end/models/trace/insights/INPBreakdown.ts +1 -1
  65. package/front_end/models/trace/insights/ImageDelivery.ts +1 -1
  66. package/front_end/models/trace/insights/LCPBreakdown.ts +1 -1
  67. package/front_end/models/trace/insights/LCPDiscovery.ts +1 -1
  68. package/front_end/models/trace/insights/ModernHTTP.ts +1 -1
  69. package/front_end/models/trace/insights/NetworkDependencyTree.ts +1 -1
  70. package/front_end/models/trace/insights/RenderBlocking.ts +1 -1
  71. package/front_end/models/trace/insights/types.ts +2 -0
  72. package/front_end/models/trace/types/Configuration.ts +12 -0
  73. package/front_end/models/trace/types/TraceEvents.ts +41 -64
  74. package/front_end/models/trace_source_maps_resolver/trace_source_maps_resolver.ts +1 -1
  75. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +21 -99
  76. package/front_end/panels/application/ServiceWorkersView.ts +0 -1
  77. package/front_end/panels/application/components/BackForwardCacheStrings.ts +8 -2
  78. package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -3
  79. package/front_end/panels/common/BadgeNotification.ts +10 -8
  80. package/front_end/panels/common/GdpSignUpDialog.ts +30 -14
  81. package/front_end/panels/common/gdpSignUpDialog.css +4 -0
  82. package/front_end/panels/console/ConsoleView.ts +23 -28
  83. package/front_end/panels/console/ConsoleViewport.ts +2 -2
  84. package/front_end/panels/console/consoleView.css +11 -1
  85. package/front_end/panels/coverage/CoverageView.ts +2 -2
  86. package/front_end/panels/elements/ElementsTreeOutline.ts +2 -2
  87. package/front_end/panels/elements/StyleEditorWidget.ts +8 -19
  88. package/front_end/panels/elements/StylePropertyTreeElement.ts +39 -25
  89. package/front_end/panels/elements/StylesSidebarPane.ts +2 -2
  90. package/front_end/panels/elements/stylePropertiesTreeOutline.css +4 -3
  91. package/front_end/panels/layer_viewer/Layers3DView.ts +2 -2
  92. package/front_end/panels/layers/LayerTreeModel.ts +3 -3
  93. package/front_end/panels/mobile_throttling/ThrottlingSettingsTab.ts +4 -4
  94. package/front_end/panels/network/NetworkLogView.ts +1 -1
  95. package/front_end/panels/network/NetworkLogViewColumns.ts +3 -3
  96. package/front_end/panels/network/NetworkSearchScope.ts +6 -6
  97. package/front_end/panels/search/SearchView.ts +220 -159
  98. package/front_end/panels/settings/components/SyncSection.ts +64 -10
  99. package/front_end/panels/settings/components/syncSection.css +6 -0
  100. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +1 -4
  101. package/front_end/panels/sources/SourcesSearchScope.ts +4 -4
  102. package/front_end/panels/sources/TabbedEditorContainer.ts +5 -5
  103. package/front_end/panels/timeline/TimelineFlameChartDataProvider.ts +10 -5
  104. package/front_end/panels/timeline/TimelineFlameChartView.ts +18 -15
  105. package/front_end/panels/timeline/TimelinePanel.ts +41 -22
  106. package/front_end/panels/timeline/TracingLayerTree.ts +4 -5
  107. package/front_end/panels/timeline/components/ExportTraceOptions.ts +37 -22
  108. package/front_end/panels/timeline/components/insights/BaseInsightComponent.ts +17 -7
  109. package/front_end/panels/webauthn/WebauthnPane.ts +1 -1
  110. package/front_end/third_party/axe-core/README.chromium +1 -0
  111. package/front_end/third_party/chromium/README.chromium +1 -1
  112. package/front_end/third_party/codemirror/README.chromium +1 -0
  113. package/front_end/third_party/codemirror.next/README.chromium +1 -0
  114. package/front_end/third_party/csp_evaluator/README.chromium +1 -0
  115. package/front_end/third_party/diff/README.chromium +1 -0
  116. package/front_end/third_party/i18n/README.chromium +1 -0
  117. package/front_end/third_party/intl-messageformat/README.chromium +1 -0
  118. package/front_end/third_party/json5/README.chromium +1 -0
  119. package/front_end/third_party/legacy-javascript/README.chromium +1 -0
  120. package/front_end/third_party/lighthouse/README.chromium +1 -0
  121. package/front_end/third_party/lit/README.chromium +1 -0
  122. package/front_end/third_party/marked/README.chromium +1 -0
  123. package/front_end/third_party/puppeteer/README.chromium +2 -2
  124. package/front_end/third_party/puppeteer/package/README.md +6 -3
  125. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Browser.d.ts +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts +11 -1
  127. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.d.ts.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js +2 -2
  129. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/api/Page.js.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts +5 -1
  131. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.d.ts.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js +30 -8
  133. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/Page.js.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  135. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js +1 -3
  136. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  137. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/bidi/core/Realm.d.ts +2 -2
  138. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts +1 -1
  139. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js +8 -2
  141. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/NetworkManager.js.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts +5 -1
  143. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.d.ts.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js +8 -2
  145. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/cdp/Page.js.map +1 -1
  146. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.d.ts +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/generated/version.js +1 -1
  148. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/injected/injected.d.ts +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  150. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js +5 -0
  151. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserLauncher.js.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/util/Mutex.d.ts +2 -2
  153. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +12 -2
  154. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +22 -8
  155. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Browser.d.ts +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts +11 -1
  157. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.d.ts.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js +2 -2
  159. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/api/Page.js.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts +5 -1
  161. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.d.ts.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js +30 -8
  163. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/Page.js.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.d.ts.map +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js +1 -3
  166. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/bidi/core/BrowsingContext.js.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts +1 -1
  168. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js +8 -2
  170. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/NetworkManager.js.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts +5 -1
  172. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.d.ts.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js +8 -2
  174. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/cdp/Page.js.map +1 -1
  175. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.d.ts +1 -1
  176. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/generated/version.js +1 -1
  177. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js +5 -0
  179. package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserLauncher.js.map +1 -1
  180. package/front_end/third_party/puppeteer/package/lib/types.d.ts +12 -2
  181. package/front_end/third_party/puppeteer/package/package.json +4 -4
  182. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +1 -1
  183. package/front_end/third_party/puppeteer/package/src/api/Page.ts +13 -2
  184. package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +50 -8
  185. package/front_end/third_party/puppeteer/package/src/bidi/core/BrowsingContext.ts +0 -1
  186. package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +8 -1
  187. package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +21 -5
  188. package/front_end/third_party/puppeteer/package/src/generated/version.ts +1 -1
  189. package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +12 -0
  190. package/front_end/third_party/puppeteer-replay/README.chromium +1 -0
  191. package/front_end/third_party/third-party-web/README.chromium +1 -0
  192. package/front_end/third_party/vscode.web-custom-data/README.chromium +1 -0
  193. package/front_end/third_party/wasmparser/README.chromium +1 -0
  194. package/front_end/third_party/web-vitals/README.chromium +1 -0
  195. package/front_end/ui/components/text_editor/config.ts +66 -16
  196. package/front_end/ui/components/tooltips/Tooltip.ts +17 -1
  197. package/front_end/ui/legacy/ContextMenu.ts +2 -2
  198. package/front_end/ui/legacy/GlassPane.ts +7 -3
  199. package/front_end/ui/legacy/ProgressIndicator.ts +33 -21
  200. package/front_end/ui/legacy/TabbedPane.ts +2 -2
  201. package/front_end/ui/legacy/Treeoutline.ts +10 -5
  202. package/front_end/ui/legacy/UIUtils.ts +42 -10
  203. package/front_end/ui/legacy/components/color_picker/Spectrum.ts +14 -14
  204. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +6 -6
  205. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +4 -2
  206. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +3 -29
  207. package/front_end/ui/legacy/components/source_frame/SourceFrame.ts +14 -14
  208. package/front_end/ui/visual_logging/Debugging.ts +24 -12
  209. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  210. package/inspector_overlay/highlight_common.ts +1 -27
  211. package/inspector_overlay/highlight_grid_common.ts +1 -27
  212. package/inspector_overlay/tool_highlight.ts +1 -27
  213. package/inspector_overlay/tool_persistent.ts +1 -27
  214. package/inspector_overlay/tool_source_order.ts +1 -27
  215. package/package.json +3 -3
@@ -77,20 +77,56 @@ const UIStrings = {
77
77
  * @description Label for Sign-Up button for the Google Developer Program profiles.
78
78
  */
79
79
  signUp: 'Sign up',
80
+ /**
81
+ * @description Link text for opening the Google Developer Program profile page.
82
+ */
83
+ viewProfile: 'View profile',
84
+ /**
85
+ * @description Text for tooltip shown on hovering over "Relevant Data" in the disclaimer text for AI code completion.
86
+ */
87
+ tooltipDisclaimerText:
88
+ 'When you qualify for a badge, the badge’s identifier and the type of activity you did to earn it are sent to Google',
80
89
  /**
81
90
  * @description Text for the data notice right after the settings checkbox.
82
91
  */
83
- relevantDataDisclaimer: '(Relevant data is sent to Google)',
92
+ relevantData: 'Relevant data',
84
93
  /**
85
- * @description Link text for opening the Google Developer Program profile page.
94
+ * @description Text for the data notice right after the settings checkbox.
95
+ * @example {Relevant data} PH1
86
96
  */
87
- viewProfile: 'View profile',
97
+ dataDisclaimer: '({PH1} is sent to Google)',
88
98
  } as const;
89
99
  const str_ = i18n.i18n.registerUIStrings('panels/settings/components/SyncSection.ts', UIStrings);
90
100
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
91
101
 
92
102
  const {html, Directives: {ref, createRef}} = Lit;
93
103
 
104
+ let cachedTooltipElement: HTMLElement|undefined;
105
+
106
+ function renderDataDisclaimer(): HTMLElement {
107
+ if (cachedTooltipElement) {
108
+ return cachedTooltipElement;
109
+ }
110
+
111
+ const relevantDataTooltipTemplate = html`
112
+ <span
113
+ tabIndex="0"
114
+ class="link"
115
+ aria-details="gdp-profile-tooltip"
116
+ aria-describedby="gdp-profile-tooltip"
117
+ >${i18nString(UIStrings.relevantData)}</span>
118
+ <devtools-tooltip id="gdp-profile-tooltip" variant=${'rich'}>
119
+ <div class="tooltip-content" tabindex="0">${i18nString(UIStrings.tooltipDisclaimerText)}</div>
120
+ </devtools-tooltip>`;
121
+
122
+ const container = document.createElement('span');
123
+ Lit.render(relevantDataTooltipTemplate, container);
124
+ cachedTooltipElement = i18n.i18n.getFormatLocalizedString(str_, UIStrings.dataDisclaimer, {
125
+ PH1: container,
126
+ });
127
+ return cachedTooltipElement;
128
+ }
129
+
94
130
  function getGdpSubscriptionText(profile: Host.GdpClient.Profile): Platform.UIString.LocalizedString {
95
131
  if (!profile.activeSubscription ||
96
132
  profile.activeSubscription.subscriptionStatus !== Host.GdpClient.SubscriptionStatus.ENABLED) {
@@ -124,14 +160,19 @@ export class SyncSection extends HTMLElement {
124
160
  #syncSetting?: Common.Settings.Setting<boolean>;
125
161
  #receiveBadgesSetting?: Common.Settings.Setting<boolean>;
126
162
  #receiveBadgesSettingContainerRef = createRef<HTMLElement>();
163
+ #isEligibleToCreateGdpProfile = false;
127
164
  #gdpProfile?: Host.GdpClient.Profile;
128
165
 
129
166
  set data(data: SyncSectionData) {
130
167
  this.#syncInfo = data.syncInfo;
131
168
  this.#syncSetting = data.syncSetting;
132
169
  this.#receiveBadgesSetting = data.receiveBadgesSetting;
133
- void this.#updateGdpProfile();
134
170
  void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
171
+
172
+ // Trigger fetching GDP profile if the user is signed in.
173
+ if (data.syncInfo.accountEmail) {
174
+ void this.#fetchGdpDetails();
175
+ }
135
176
  }
136
177
 
137
178
  async highlightReceiveBadgesSetting(): Promise<void> {
@@ -161,15 +202,22 @@ export class SyncSection extends HTMLElement {
161
202
  ${renderGdpSectionIfNeeded({
162
203
  receiveBadgesSetting: this.#receiveBadgesSetting,
163
204
  receiveBadgesSettingContainerRef: this.#receiveBadgesSettingContainerRef,
164
- gdpProfile: this.#gdpProfile
205
+ gdpProfile: this.#gdpProfile,
206
+ isEligibleToCreateProfile: this.#isEligibleToCreateGdpProfile,
207
+ onSignUpSuccess: this.#fetchGdpDetails.bind(this),
165
208
  })}
166
209
  </fieldset>
167
210
  `, this.#shadow, {host: this});
168
211
  // clang-format on
169
212
  }
170
213
 
171
- async #updateGdpProfile(): Promise<void> {
214
+ async #fetchGdpDetails(): Promise<void> {
215
+ if (!Root.Runtime.hostConfig.devToolsGdpProfiles?.enabled) {
216
+ return;
217
+ }
218
+
172
219
  this.#gdpProfile = await Host.GdpClient.GdpClient.instance().getProfile() ?? undefined;
220
+ this.#isEligibleToCreateGdpProfile = await Host.GdpClient.GdpClient.instance().isEligibleToCreateProfile();
173
221
  void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#render);
174
222
  }
175
223
  }
@@ -247,20 +295,24 @@ function renderGdpSectionIfNeeded({
247
295
  receiveBadgesSetting,
248
296
  receiveBadgesSettingContainerRef,
249
297
  gdpProfile,
298
+ isEligibleToCreateProfile,
299
+ onSignUpSuccess,
250
300
  }: {
251
301
  receiveBadgesSettingContainerRef: Lit.Directives.Ref<HTMLElement>,
302
+ onSignUpSuccess: () => void,
252
303
  receiveBadgesSetting?: Common.Settings.Setting<boolean>,
253
304
  gdpProfile?: Host.GdpClient.Profile,
305
+ isEligibleToCreateProfile?: boolean,
254
306
  }): Lit.LitTemplate {
255
307
  // clang-format off
256
- if (!Root.Runtime.hostConfig.devToolsGdpProfiles?.enabled) {
308
+ if (!Root.Runtime.hostConfig.devToolsGdpProfiles?.enabled || (!gdpProfile && !isEligibleToCreateProfile)) {
257
309
  return Lit.nothing;
258
310
  }
259
311
 
260
312
  function renderBrand(): Lit.LitTemplate {
261
313
  return html`
262
314
  <div class="gdp-profile-header">
263
- <div class="gdp-logo" role="img" aria-label="Google Developer Program"></div>
315
+ <div class="gdp-logo" role="img" tabindex="0" aria-label="Google Developer Program"></div>
264
316
  </div>
265
317
  `;
266
318
  }
@@ -289,14 +341,16 @@ function renderGdpSectionIfNeeded({
289
341
  Badges.UserBadges.instance().recordAction(Badges.BadgeAction.RECEIVE_BADGES_SETTING_ENABLED);
290
342
  });
291
343
  }}></setting-checkbox>
292
- <span>${i18nString(UIStrings.relevantDataDisclaimer)}</span>
344
+ ${renderDataDisclaimer()}
293
345
  </div>` : Lit.nothing}
294
346
  </div>
295
347
  ` : html`
296
348
  <div class="gdp-profile-sign-up-content">
297
349
  ${renderBrand()}
298
350
  <devtools-button
299
- @click=${() => PanelCommon.GdpSignUpDialog.show()}
351
+ @click=${() => PanelCommon.GdpSignUpDialog.show({
352
+ onSuccess: onSignUpSuccess
353
+ })}
300
354
  .jslogContext=${'gdp.sign-up-dialog-open'}
301
355
  .variant=${Buttons.Button.Variant.OUTLINED}>
302
356
  ${i18nString(UIStrings.signUp)}
@@ -114,5 +114,11 @@ fieldset {
114
114
  align-items: center;
115
115
  gap: var(--sys-size-2);
116
116
  }
117
+
118
+ & .tooltip-content {
119
+ max-width: 278px;
120
+ padding: var(--sys-size-2) var(--sys-size-3);
121
+ font: var(--sys-typescale-body5-regular);
122
+ }
117
123
  }
118
124
  }
@@ -87,10 +87,7 @@ export class AiCodeCompletionPlugin extends Plugin {
87
87
  override editorExtension(): CodeMirror.Extension {
88
88
  return [
89
89
  CodeMirror.EditorView.updateListener.of(update => this.#editorUpdate(update)), this.#teaserCompartment.of([]),
90
- // conservativeCompletion is required so that the completion suggestions in the traditional
91
- // autocomplete menu are only activated after the first keyDown/keyUp events.
92
- TextEditor.Config.conservativeCompletion, TextEditor.Config.aiAutoCompleteSuggestion,
93
- CodeMirror.Prec.highest(CodeMirror.keymap.of(this.#editorKeymap()))
90
+ TextEditor.Config.aiAutoCompleteSuggestion, CodeMirror.Prec.highest(CodeMirror.keymap.of(this.#editorKeymap()))
94
91
  ];
95
92
  }
96
93
 
@@ -184,12 +184,12 @@ export class SourcesSearchScope implements Search.SearchScope.SearchScope {
184
184
 
185
185
  const files = this.searchResultCandidates;
186
186
  if (!files.length) {
187
- progress.done();
187
+ progress.done = true;
188
188
  callback();
189
189
  return;
190
190
  }
191
191
 
192
- progress.setTotalWork(files.length);
192
+ progress.totalWork = files.length;
193
193
 
194
194
  let fileIndex = 0;
195
195
  const maxFileContentRequests = 20;
@@ -213,7 +213,7 @@ export class SourcesSearchScope implements Search.SearchScope.SearchScope {
213
213
  function scheduleSearchInNextFileOrFinish(this: SourcesSearchScope): void {
214
214
  if (fileIndex >= files.length) {
215
215
  if (!callbacksLeft) {
216
- progress.done();
216
+ progress.done = true;
217
217
  callback();
218
218
  return;
219
219
  }
@@ -228,7 +228,7 @@ export class SourcesSearchScope implements Search.SearchScope.SearchScope {
228
228
  function contentLoaded(
229
229
  this: SourcesSearchScope, uiSourceCode: Workspace.UISourceCode.UISourceCode,
230
230
  content: TextUtils.Text.Text): void {
231
- progress.incrementWorked(1);
231
+ ++progress.worked;
232
232
  let matches: TextUtils.ContentProvider.SearchMatch[] = [];
233
233
  const searchConfig = (this.searchConfig as Workspace.SearchConfig.SearchConfig);
234
234
  const queries = searchConfig.queries();
@@ -196,7 +196,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
196
196
  frame?.currentUISourceCode() === uiSourceCode) {
197
197
  Common.EventTarget.fireEvent('source-file-loaded', uiSourceCode.displayName(true));
198
198
  } else {
199
- this.innerShowFile(uiSourceCode, true);
199
+ this.#showFile(uiSourceCode, true);
200
200
  }
201
201
  }
202
202
 
@@ -279,7 +279,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
279
279
  }
280
280
  }
281
281
 
282
- private innerShowFile(uiSourceCode: Workspace.UISourceCode.UISourceCode, userGesture?: boolean): void {
282
+ #showFile(uiSourceCode: Workspace.UISourceCode.UISourceCode, userGesture?: boolean): void {
283
283
  if (this.reentrantShow) {
284
284
  return;
285
285
  }
@@ -430,7 +430,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
430
430
 
431
431
  // Select tab if this file was the last to be shown.
432
432
  if (!index) {
433
- this.innerShowFile(uiSourceCode, false);
433
+ this.#showFile(uiSourceCode, false);
434
434
  return;
435
435
  }
436
436
 
@@ -441,7 +441,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
441
441
  const currentProjectIsSnippets = Snippets.ScriptSnippetFileSystem.isSnippetsUISourceCode(this.#currentFile);
442
442
  const addedProjectIsSnippets = Snippets.ScriptSnippetFileSystem.isSnippetsUISourceCode(uiSourceCode);
443
443
  if (this.history.index(historyItemKey(this.#currentFile)) && currentProjectIsSnippets && !addedProjectIsSnippets) {
444
- this.innerShowFile(uiSourceCode, false);
444
+ this.#showFile(uiSourceCode, false);
445
445
  }
446
446
  }
447
447
 
@@ -578,7 +578,7 @@ export class TabbedEditorContainer extends Common.ObjectWrapper.ObjectWrapper<Ev
578
578
 
579
579
  const uiSourceCode = this.files.get(tabId);
580
580
  if (uiSourceCode) {
581
- this.innerShowFile(uiSourceCode, isUserGesture);
581
+ this.#showFile(uiSourceCode, isUserGesture);
582
582
  }
583
583
  }
584
584
 
@@ -248,12 +248,17 @@ export class TimelineFlameChartDataProvider extends Common.ObjectWrapper.ObjectW
248
248
 
249
249
  const contextMenu = new UI.ContextMenu.ContextMenu(mouseEvent);
250
250
  if (perfAIEntryPointEnabled && this.parsedTrace) {
251
- const aiCallTree = AIAssistance.AICallTree.fromEvent(entry, this.parsedTrace);
252
- if (aiCallTree) {
251
+ const callTree = AIAssistance.AICallTree.fromEvent(entry, this.parsedTrace);
252
+ if (callTree) {
253
+ let focus = UI.Context.Context.instance().flavor(AIAssistance.AgentFocus);
254
+ if (focus) {
255
+ focus = focus.withCallTree(callTree);
256
+ } else {
257
+ focus = AIAssistance.AgentFocus.fromCallTree(callTree);
258
+ }
259
+ UI.Context.Context.instance().setFlavor(AIAssistance.AgentFocus, focus);
260
+
253
261
  const action = UI.ActionRegistry.ActionRegistry.instance().getAction(PERF_AI_ACTION_ID);
254
- // The other side of setFlavor is handleTraceEntryNodeFlavorChange() in FreestylerPanel
255
- const context = AIAssistance.AgentFocus.fromCallTree(aiCallTree);
256
- UI.Context.Context.instance().setFlavor(AIAssistance.AgentFocus, context);
257
262
 
258
263
  if (Root.Runtime.hostConfig.devToolsAiSubmenuPrompts?.enabled) {
259
264
  function appendSubmenuPromptAction(
@@ -1510,22 +1510,25 @@ export class TimelineFlameChartView extends Common.ObjectWrapper.eventMixin<Even
1510
1510
  // supports (currently, only main thread events), then set the context's
1511
1511
  // "flavor" to be the AI Call Tree of the active event.
1512
1512
  // This is listened to by the AI Assistance panel to update its state.
1513
- // Note that we do not change the Context back to `null` if the user picks
1514
- // an invalid event - we don't want to reset it back as it may be they are
1515
- // clicking around in order to understand something.
1516
1513
  // We also do this in a rAF to not block the UI updating to show the selected event first.
1517
- if (selectionIsEvent(selection) && this.#parsedTrace) {
1518
- requestAnimationFrame(() => {
1519
- if (!this.#parsedTrace) {
1520
- return;
1521
- }
1522
- const aiCallTree = AIAssistance.AICallTree.fromEvent(selection.event, this.#parsedTrace);
1523
- if (aiCallTree) {
1524
- const context = AIAssistance.AgentFocus.fromCallTree(aiCallTree);
1525
- UI.Context.Context.instance().setFlavor(AIAssistance.AgentFocus, context);
1526
- }
1527
- });
1528
- }
1514
+ requestAnimationFrame(() => {
1515
+ if (!this.#parsedTrace) {
1516
+ return;
1517
+ }
1518
+
1519
+ const callTree =
1520
+ selectionIsEvent(selection) ? AIAssistance.AICallTree.fromEvent(selection.event, this.#parsedTrace) : null;
1521
+ let focus = UI.Context.Context.instance().flavor(AIAssistance.AgentFocus);
1522
+ if (focus) {
1523
+ focus = focus.withCallTree(callTree);
1524
+ } else if (callTree) {
1525
+ focus = AIAssistance.AgentFocus.fromCallTree(callTree);
1526
+ } else {
1527
+ focus = null;
1528
+ }
1529
+
1530
+ UI.Context.Context.instance().setFlavor(AIAssistance.AgentFocus, focus);
1531
+ });
1529
1532
  }
1530
1533
 
1531
1534
  // Only opens the details view of a selection. This is used for Timing Markers. Timing markers replace
@@ -940,9 +940,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
940
940
  throw new Error('could not create performance agent focus');
941
941
  }
942
942
 
943
- const agent = conversationHandler.createAgent(AiAssistanceModel.ConversationType.PERFORMANCE_FULL);
943
+ const agent = conversationHandler.createAgent(AiAssistanceModel.ConversationType.PERFORMANCE);
944
944
  const conversation = new AiAssistanceModel.Conversation(
945
- AiAssistanceModel.ConversationType.PERFORMANCE_FULL,
945
+ AiAssistanceModel.ConversationType.PERFORMANCE,
946
946
  [],
947
947
  agent.id,
948
948
  /* isReadOnly */ true,
@@ -950,6 +950,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
950
950
  );
951
951
 
952
952
  const selected = new AiAssistanceModel.PerformanceTraceContext(focus);
953
+ selected.external = true;
953
954
 
954
955
  this.#externalAIConversationData = {
955
956
  conversationHandler,
@@ -1373,18 +1374,17 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1373
1374
  void contextMenu.show();
1374
1375
  }
1375
1376
 
1376
- /**
1377
- * Saves a trace file to disk.
1378
- * Pass `config.savingEnhancedTrace === true` to include source maps in the resulting metadata.
1379
- * Pass `config.addModifications === true` to include user modifications to the trace file, which includes:
1380
- * 1. Annotations
1381
- * 2. Filtering / collapsing of the flame chart.
1382
- * 3. Visual track configuration (re-ordering or hiding tracks).
1383
- */
1384
1377
  async saveToFile(config: {
1385
1378
  includeScriptContent: boolean,
1386
1379
  includeSourceMaps: boolean,
1380
+ /**
1381
+ * Includes many things:
1382
+ * 1. annotations
1383
+ * 2. filtering / collapsing of the flame chart
1384
+ * 3. visual track configuration (re-ordering or hiding tracks)
1385
+ **/
1387
1386
  addModifications: boolean,
1387
+ shouldCompress: boolean,
1388
1388
  }): Promise<void> {
1389
1389
  if (this.state !== State.IDLE) {
1390
1390
  return;
@@ -1407,7 +1407,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1407
1407
  }
1408
1408
 
1409
1409
  const traceEvents = parsedTrace.traceEvents.map(event => {
1410
- if (Trace.Types.Events.isAnyScriptCatchupEvent(event) && event.name !== 'StubScriptCatchup') {
1410
+ if (Trace.Types.Events.isAnyScriptSourceEvent(event) && event.name !== 'StubScriptCatchup') {
1411
1411
  const mappedScript = scriptByIdMap.get(`${event.args.data.isolate}.${event.args.data.scriptId}`);
1412
1412
 
1413
1413
  // If the checkbox to include script content is not checked or if it comes from and
@@ -1425,7 +1425,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1425
1425
  args: {
1426
1426
  data: {isolate: event.args.data.isolate, scriptId: event.args.data.scriptId},
1427
1427
  },
1428
- } as Trace.Types.Events.V8SourceRundownSourcesStubScriptCatchupEvent;
1428
+ } as Trace.Types.Events.RundownScriptStub;
1429
1429
  }
1430
1430
  }
1431
1431
 
@@ -1447,7 +1447,8 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1447
1447
  await this.innerSaveToFile(traceEvents, metadata, {
1448
1448
  includeScriptContent: config.includeScriptContent,
1449
1449
  includeSourceMaps: config.includeSourceMaps,
1450
- addModifications: config.addModifications
1450
+ addModifications: config.addModifications,
1451
+ shouldCompress: config.shouldCompress,
1451
1452
  });
1452
1453
  } catch (e) {
1453
1454
  // We expect the error to be an Error class, but this deals with any weird case where it's not.
@@ -1467,6 +1468,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1467
1468
  includeScriptContent: boolean,
1468
1469
  includeSourceMaps: boolean,
1469
1470
  addModifications: boolean,
1471
+ shouldCompress: boolean,
1470
1472
  }): Promise<void> {
1471
1473
  // Base the filename on the trace's time of recording
1472
1474
  const isoDate =
@@ -1501,8 +1503,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1501
1503
 
1502
1504
  let blob = new Blob(blobParts, {type: 'application/json'});
1503
1505
 
1504
- // TODO: Enable by default and connect with upcoming SaveDialog
1505
- if (Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.TIMELINE_SAVE_AS_GZ)) {
1506
+ if (config.shouldCompress) {
1506
1507
  fileName = `${fileName}.gz` as Platform.DevToolsPath.RawPathString;
1507
1508
  const gzStream = Common.Gzip.compressStream(blob.stream());
1508
1509
  blob = await new Response(gzStream, {
@@ -1537,6 +1538,18 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
1537
1538
  }
1538
1539
  }
1539
1540
 
1541
+ async handleSaveToFileAction(): Promise<void> {
1542
+ const exportTraceOptionsElement =
1543
+ this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions;
1544
+ const state = exportTraceOptionsElement.state;
1545
+ await this.saveToFile({
1546
+ includeScriptContent: state.includeScriptContent,
1547
+ includeSourceMaps: state.includeSourceMaps,
1548
+ addModifications: state.includeAnnotations,
1549
+ shouldCompress: state.shouldCompress,
1550
+ });
1551
+ }
1552
+
1540
1553
  #filterMetadataSourceMaps(metadata: Trace.Types.File.MetaData): Trace.Types.File.MetadataSourceMap[]|undefined {
1541
1554
  if (!metadata.sourceMaps) {
1542
1555
  return undefined;
@@ -2125,8 +2138,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2125
2138
 
2126
2139
  const exclusiveFilter = this.#exclusiveFilterPerTrace.get(traceIndex) ?? null;
2127
2140
  this.#applyActiveFilters(parsedTrace.data.Meta.traceIsGeneric, exclusiveFilter);
2128
- (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2129
- .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2141
+ (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions).updateContentVisibility({
2142
+ annotationsExist: currentManager ? currentManager.getAnnotations()?.length > 0 : false
2143
+ });
2130
2144
 
2131
2145
  // Add ModificationsManager listeners for annotations change to update the
2132
2146
  // Annotation Overlays.
@@ -2226,6 +2240,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2226
2240
  Host.UserMetrics.TimelineNavigationSetting.MODERN_AT_SESSION_FIRST_TRACE);
2227
2241
  }
2228
2242
  }
2243
+
2244
+ UI.Context.Context.instance().setFlavor(
2245
+ AiAssistanceModel.AgentFocus, AiAssistanceModel.AgentFocus.full(parsedTrace));
2229
2246
  }
2230
2247
 
2231
2248
  #onAnnotationModifiedEvent(e: Event): void {
@@ -2258,8 +2275,9 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2258
2275
  const annotations = currentManager?.getAnnotations() ?? [];
2259
2276
  const annotationEntryToColorMap = this.buildColorsAnnotationsMap(annotations);
2260
2277
  this.#sideBar.setAnnotations(annotations, annotationEntryToColorMap);
2261
- (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions)
2262
- .updateContentVisibility(currentManager ? currentManager.getAnnotations()?.length > 0 : false);
2278
+ (this.saveButton.element as TimelineComponents.ExportTraceOptions.ExportTraceOptions).updateContentVisibility({
2279
+ annotationsExist: currentManager ? currentManager.getAnnotations()?.length > 0 : false
2280
+ });
2263
2281
  }
2264
2282
 
2265
2283
  /**
@@ -2650,7 +2668,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2650
2668
  }
2651
2669
 
2652
2670
  #createSourceMapResolver(isFreshRecording: boolean, metadata: Trace.Types.File.MetaData|null):
2653
- Trace.TraceModel.ParseConfig['resolveSourceMap'] {
2671
+ Trace.Types.Configuration.ParseOptions['resolveSourceMap'] {
2654
2672
  const debuggerModelForFrameId = new Map<string, SDK.DebuggerModel.DebuggerModel>();
2655
2673
  for (const target of SDK.TargetManager.TargetManager.instance().targets()) {
2656
2674
  const debuggerModel = target.model(SDK.DebuggerModel.DebuggerModel);
@@ -2742,6 +2760,7 @@ export class TimelinePanel extends Common.ObjectWrapper.eventMixin<EventTypes, t
2742
2760
  metadata: metadata ?? undefined,
2743
2761
  isFreshRecording,
2744
2762
  resolveSourceMap: this.#createSourceMapResolver(isFreshRecording, metadata),
2763
+ isCPUProfile: metadata?.dataOrigin === Trace.Types.File.DataOrigin.CPU_PROFILE,
2745
2764
  };
2746
2765
 
2747
2766
  if (window.location.href.includes('devtools/bundled') || window.location.search.includes('debugFrontend')) {
@@ -3112,7 +3131,7 @@ ${responseTextForPassedInsights}`;
3112
3131
  Promise<AsyncGenerator<AiAssistanceModel.ExternalRequestResponse, AiAssistanceModel.ExternalRequestResponse>> {
3113
3132
  const data = TimelinePanel.instance().getOrCreateExternalAIConversationData();
3114
3133
  return await data.conversationHandler.handleExternalRequest({
3115
- conversationType: AiAssistanceModel.ConversationType.PERFORMANCE_FULL,
3134
+ conversationType: AiAssistanceModel.ConversationType.PERFORMANCE,
3116
3135
  prompt,
3117
3136
  data,
3118
3137
  });
@@ -3196,7 +3215,7 @@ export class ActionDelegate implements UI.ActionRegistration.ActionDelegate {
3196
3215
  panel.recordReload();
3197
3216
  return true;
3198
3217
  case 'timeline.save-to-file':
3199
- void panel.saveToFile({includeScriptContent: false, includeSourceMaps: false, addModifications: false});
3218
+ void panel.handleSaveToFileAction();
3200
3219
  return true;
3201
3220
  case 'timeline.load-from-file':
3202
3221
  panel.selectFileToLoad();
@@ -38,10 +38,10 @@ export class TracingLayerTree extends SDK.LayerTreeBase.LayerTreeBase {
38
38
  this.layersById = new Map();
39
39
  this.setContentRoot(null);
40
40
  if (root) {
41
- const convertedLayers = this.innerSetLayers(oldLayersById, root);
41
+ const convertedLayers = this.#setLayers(oldLayersById, root);
42
42
  this.setRoot(convertedLayers);
43
43
  } else if (layers) {
44
- const processedLayers = layers.map(this.innerSetLayers.bind(this, oldLayersById));
44
+ const processedLayers = layers.map(this.#setLayers.bind(this, oldLayersById));
45
45
  const contentRoot = this.contentRoot();
46
46
  if (!contentRoot) {
47
47
  throw new Error('Content root is not set.');
@@ -86,8 +86,7 @@ export class TracingLayerTree extends SDK.LayerTreeBase.LayerTreeBase {
86
86
  }
87
87
  }
88
88
 
89
- private innerSetLayers(oldLayersById: Map<string|number, SDK.LayerTreeBase.Layer>, payload: TracingLayerPayload):
90
- TracingLayer {
89
+ #setLayers(oldLayersById: Map<string|number, SDK.LayerTreeBase.Layer>, payload: TracingLayerPayload): TracingLayer {
91
90
  let layer = (oldLayersById.get(payload.layer_id) as TracingLayer | null);
92
91
  if (layer) {
93
92
  layer.reset(payload);
@@ -102,7 +101,7 @@ export class TracingLayerTree extends SDK.LayerTreeBase.LayerTreeBase {
102
101
  this.setContentRoot(layer);
103
102
  }
104
103
  for (let i = 0; payload.children && i < payload.children.length; ++i) {
105
- layer.addChild(this.innerSetLayers(oldLayersById, payload.children[i]));
104
+ layer.addChild(this.#setLayers(oldLayersById, payload.children[i]));
106
105
  }
107
106
  return layer;
108
107
  }